Markov 체인을 사용하여 텍스트 생성기 구축
이 기사에서는 인기 있는 기계 학습 프로젝트인 텍스트 생성기를 소개합니다. 텍스트 생성기를 구축하는 방법과 더 빠른 예측 모델을 달성하기 위해 Markov 체인을 구현하는 방법을 배우게 됩니다.
텍스트 생성기 소개
텍스트 생성은 다양한 산업, 특히 모바일, 앱 및 데이터 과학에서 널리 사용됩니다. 언론에서도 글쓰기 과정을 돕기 위해 텍스트 생성을 사용합니다.
일상생활에서 우리는 텍스트 완성, 검색 제안, 스마트 작성, 챗봇 등을 모두 접하게 됩니다.
이 기사에서는 Markov 체인을 사용하여 텍스트 생성기를 구축합니다. 이는 체인의 이전 문자를 가져와서 시퀀스의 다음 문자를 생성하는 문자 기반 모델입니다.
샘플 단어를 사용하여 프로그램을 훈련함으로써 텍스트 생성기는 일반적인 문자 순서 패턴을 학습합니다. 그런 다음 텍스트 생성기는 이러한 패턴을 불완전한 단어인 입력에 적용하고 단어를 완성할 확률이 가장 높은 문자를 출력합니다.
텍스트 생성은 이전에 관찰한 언어 패턴을 기반으로 다음 문자를 예측하고 생성하는 자연어 처리의 한 분야입니다.
머신러닝 이전에 NLP는 영어의 모든 단어가 포함된 테이블을 생성하고 전달된 문자열을 기존 단어와 일치시키는 방식으로 텍스트 생성을 수행했습니다. 이 접근 방식에는 두 가지 문제가 있습니다.
- 수천 개의 단어를 검색하는 것은 매우 느릴 것입니다.
- 생성기는 이전에 본 단어만 완성할 수 있습니다.
머신러닝과 딥러닝의 등장으로 NLP를 사용하면 실행 시간을 대폭 줄이고 일반성을 높일 수 있습니다. 생성기가 이전에 접하지 못한 단어를 완성할 수 있기 때문입니다. 원하는 경우 NLP를 확장하여 단어, 구문 또는 문장을 예측할 수 있습니다.
이 프로젝트에서는 Markov 체인만 사용하여 수행할 것입니다. Markov 프로세스는 서면 언어 및 복잡한 분포의 샘플 시뮬레이션과 관련된 많은 자연어 처리 프로젝트의 기초입니다.
Markov 프로세스는 매우 강력하여 샘플 문서만으로도 실제처럼 보이는 텍스트를 생성하는 데 사용할 수 있습니다.
마르코프 체인이란 무엇인가요?
마르코프 체인은 각 이벤트의 확률이 이전 이벤트의 상태에 따라 달라지는 일련의 이벤트를 모델링하는 확률론적 프로세스입니다. 모델에는 유한한 상태 집합이 있으며 한 상태에서 다른 상태로 이동할 조건부 확률은 고정되어 있습니다.
각 전환의 확률은 이벤트의 전체 기록이 아닌 모델의 이전 상태에만 의존합니다.
예를 들어 날씨를 예측하기 위해 Markov 체인 모델을 구축한다고 가정해 보겠습니다.
이 모델에는 맑은 날씨와 비가 내리는 두 가지 상태가 있습니다. 오늘 날씨가 맑다면 내일도 날씨가 맑을 확률이 더 높습니다(70%). 비가 내리는 경우에도 마찬가지입니다. 이미 비가 내린 경우에는 계속해서 비가 내릴 가능성이 높습니다.
하지만 날씨가 상태를 바꿀 가능성(30%)이 있으므로 이를 Markov 체인 모델에도 포함합니다.
Markov 체인은 텍스트 생성기에 완벽한 모델입니다. 모델이 이전 문자만 사용하여 다음 문자를 예측하기 때문입니다. Markov 체인을 사용하면 정확하고 메모리가 적으며(이전 상태 1개만 저장) 실행 속도가 빠르다는 장점이 있습니다.
텍스트 생성 구현
여기에서는 6단계로 텍스트 생성기를 완성합니다.
- 조회 테이블 생성: 단어 빈도를 기록하는 테이블 만들기
- 빈도를 확률로 변환: 결과를 사용 가능한 형식으로 변환
- 로드 데이터 세트: 훈련 세트 로드 및 활용
- 마르코프 체인 구축: 확률을 사용하여 각 단어 및 문자에 대한 체인 생성
- 데이터 샘플링: 말뭉치의 다양한 부분을 샘플링하는 함수 생성
- 텍스트 생성: 모델 테스트
1. 조회 테이블 생성
먼저 훈련 코퍼스에서 각 캐릭터 상태의 발생을 기록하는 테이블을 생성합니다. 훈련 코퍼스의 마지막 'K' 문자와 'K+1' 문자를 저장하고 조회 테이블에 저장합니다.
예를 들어, 훈련 코퍼스에 "그 남자는, 그들, 그때, the, the"가 포함되어 있다고 상상해 보세요. 그런 다음 단어 발생 횟수는 다음과 같습니다.
- "the" — 3
- "then" — 1
- "they" — 1
- "man" — 1
다음은 조회 결과입니다. 테이블:
위의 예에서는 K = 3을 사용합니다. 이는 한 번에 3개의 문자가 고려되고 다음 문자(K+1)가 출력 문자로 사용된다는 의미입니다. 위 조회 테이블에서 단어(X)를 문자로 처리하고 첫 번째 the 뒤에 단어가 없으므로 출력 문자(Y)를 단일 공백(" ")으로 처리합니다. 또한 이 시퀀스가 데이터 세트에 나타나는 횟수(이 경우 3회)도 계산됩니다.
이런 방식으로 말뭉치의 각 단어에 대한 데이터가 생성됩니다. 즉, 가능한 모든 X 및 Y 쌍이 생성됩니다.
코드에서 조회 테이블을 생성하는 방법은 다음과 같습니다.
def generateTable(data,k=4): T = {} for i in range(len(data)-k): X = data[i:i+k] Y = data[i+k] #print("X %s and Y %s "%(X,Y)) if T.get(X) is None: T[X] = {} T[X][Y] = 1 else: if T[X].get(Y) is None: T[X][Y] = 1 else: T[X][Y] += 1 return T T = generateTable("hello hello helli") print(T) #{'llo ': {'h': 2}, 'ello': {' ': 2}, 'o he': {'l': 2}, 'lo h': {'e': 2}, 'hell': {'i': 1, 'o': 2}, ' hel': {'l': 2}}
코드에 대한 간단한 설명:
3행에서는 X와 해당 Y 및 빈도 값을 저장하는 사전이 생성됩니다. 9~17행에서는 X와 Y의 발생을 확인합니다. 조회 사전에 이미 X와 Y 쌍이 있는 경우 1씩 늘리면 됩니다.
2. 빈도를 확률로 변환
이 테이블과 발생 횟수가 있으면 주어진 x 발생 후에 Y가 발생할 확률을 얻을 수 있습니다. 공식은 다음과 같습니다.
예를 들어 X = the, Y = n인 경우 공식은 다음과 같습니다.
= 2/8= 0.125= 12.5%
일 때 Y = n의 빈도는 다음과 같습니다. 이 공식을 적용하여 조회 테이블을 마르코프 체인 사용 가능한 확률로 변환합니다:
def convertFreqIntoProb(T): for kx in T.keys(): s = float(sum(T[kx].values())) for k in T[kx].keys(): T[kx][k] = T[kx][k]/s return T T = convertFreqIntoProb(T) print(T) #{'llo ': {'h': 1.0}, 'ello': {' ': 1.0}, 'o he': {'l': 1.0}, 'lo h': {'e': 1.0}, 'hell': {'i': 0.3333333333333333, 'o': 0.6666666666666666}, ' hel': {'l': 1.0}}
간단한 설명:
특정 키의 빈도 값을 합산한 다음 이 키의 각 빈도 값을 이 추가된 값으로 나누어 다음을 얻습니다. 개연성.
3. 데이터 세트 로드
다음에는 실제 훈련 코퍼스가 로드됩니다. 원하는 긴 텍스트(.txt) 문서를 사용할 수 있습니다.
단순화를 위해 모델을 가르치기에 충분한 어휘를 제공하기 위해 정치적 연설을 사용하겠습니다.
text_path = "train_corpus.txt" def load_text(filename): with open(filename,encoding='utf8') as f: return f.read().lower() text = load_text(text_path) print('Loaded the dataset.')
이 데이터 세트는 예시 프로젝트에 충분한 이벤트를 제공하여 합리적으로 정확한 예측을 할 수 있습니다. 모든 기계 학습과 마찬가지로 더 큰 훈련 코퍼스가 더 정확한 예측을 생성합니다.
4. 마르코프 체인 구축
마르코프 체인을 구축하고 확률을 각 문자와 연관시켜 보겠습니다. 여기에서는 1단계와 2단계에서 생성된 generateTable() 및 ConvertFreqIntoProb() 함수를 사용하여 Markov 모델을 구축합니다.
def MarkovChain(text,k=4): T = generateTable(text,k) T = convertFreqIntoProb(T) return T model = MarkovChain(text)
1번째 줄은 Markov 모델을 생성하는 방법을 생성합니다. 이 방법은 텍스트 코퍼스와 K 값을 허용합니다. K 값은 Markov 모델이 K 문자를 고려하고 다음 문자를 예측하도록 지시하는 값입니다. 2행에서는 이전 섹션에서 생성한 generateTable() 메서드에 텍스트 코퍼스와 K를 제공하여 조회 테이블을 생성합니다. 3행에서는 이전 강의에서 생성한 ConvertFreqIntoProb() 메서드를 사용하여 빈도를 확률 값으로 변환합니다.
5. 텍스트 샘플링
완료되지 않은 단어(ctx), 4단계의 마르코프 체인 모델(model), 단어의 기본을 구성하는 데 사용된 문자 수(k)를 사용하는 샘플링 함수를 만듭니다.
이 함수를 사용하여 전달된 컨텍스트를 샘플링하고 다음 가능한 문자를 반환하고 그것이 올바른 문자일 확률을 결정합니다.
import numpy as np def sample_next(ctx,model,k): ctx = ctx[-k:] if model.get(ctx) is None: return " " possible_Chars = list(model[ctx].keys()) possible_values = list(model[ctx].values()) print(possible_Chars) print(possible_values) return np.random.choice(possible_Chars,p=possible_values) sample_next("commo",model,4) #['n'] #[1.0]
코드 설명:
sample_next 함수는 ctx, model 및 k 값의 세 가지 매개변수를 허용합니다.
ctx는 새로운 텍스트를 생성하는 데 사용되는 텍스트입니다. 그러나 여기서는 ctx의 마지막 K 문자만 모델에서 시퀀스의 다음 문자를 예측하는 데 사용됩니다. 예를 들어, 공통 K = 4를 전달하고 모델이 다음 문자를 생성하는 데 사용하는 텍스트는 ommo입니다. 왜냐하면 Markov 모델은 이전 기록만 사용하기 때문입니다.
9행과 10행에는 가능한 문자와 그 확률 값이 인쇄됩니다. 이러한 문자는 우리 모델에도 존재하기 때문입니다. 다음 예측 문자는 확률 1.0으로 n이 됩니다. commo라는 단어는 다음 문자를 생성한 후에 더 일반적일 가능성이 높기 때문입니다.
라인 12에서는 위에서 논의한 확률 값을 기반으로 문자를 반환합니다.
6. 텍스트 생성
마지막으로 위의 모든 기능을 결합하여 일부 텍스트를 생성합니다.
def generateText(starting_sent,k=4,maxLen=1000): sentence = starting_sent ctx = starting_sent[-k:] for ix in range(maxLen): next_prediction = sample_next(ctx,model,k) sentence += next_prediction ctx = sentence[-k:] return sentence print("Function Created Successfully!") text = generateText("dear",k=4,maxLen=2000) print(text)
결과는 다음과 같습니다.
dear country brought new consciousness. i heartily great service of their lives, our country, many of tricoloring a color flag on their lives independence today.my devoted to be oppression of independence.these day the obc common many country, millions of oppression of massacrifice of indian whom everest. my dear country is not in the sevents went was demanding and nights by plowing in the message of the country is crossed, oppressed, women, to overcrowding for years of the south, it is like the ashok chakra of constitutional states crossed, deprived, oppressions of freedom, i bow my heart to proud of our country.my dear country, millions under to be a hundred years of the south, it is going their heroes.
위 함수는 생성된 텍스트의 시작 단어, K 값, 필수 텍스트의 최대 문자 길이 등 세 가지 매개 변수를 허용합니다. 코드를 실행하면 "dear"로 시작하는 2000자 텍스트가 생성됩니다.
이 연설은 그다지 의미가 없을 수도 있지만 단어는 완전하며 종종 단어의 친숙한 패턴을 모방합니다.
다음에 배울 내용
이것은 간단한 텍스트 생성 프로젝트입니다. 이 프로젝트는 딥 러닝 여정을 계속할 때 사용할 수 있는 자연어 처리 및 Markov 체인이 실제로 어떻게 작동하는지에 대한 이해를 제공합니다.
이 기사는 Markov 체인이 수행한 실험 프로젝트를 소개하기 위한 것입니다. 실제 응용 프로그램에서는 아무런 역할을 하지 않기 때문입니다. 더 나은 텍스트 생성 효과를 얻으려면 GPT-3와 같은 도구를 배우십시오.
위 내용은 Markov 체인을 사용하여 텍스트 생성기 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











기계 학습 및 데이터 과학 분야에서 모델 해석 가능성은 항상 연구자와 실무자의 초점이었습니다. 딥러닝, 앙상블 방법 등 복잡한 모델이 널리 적용되면서 모델의 의사결정 과정을 이해하는 것이 특히 중요해졌습니다. explainable AI|XAI는 모델의 투명성을 높여 머신러닝 모델에 대한 신뢰와 확신을 구축하는 데 도움이 됩니다. 모델 투명성을 향상시키는 것은 여러 복잡한 모델의 광범위한 사용은 물론 모델을 설명하는 데 사용되는 의사 결정 프로세스와 같은 방법을 통해 달성할 수 있습니다. 이러한 방법에는 기능 중요도 분석, 모델 예측 간격 추정, 로컬 해석 가능성 알고리즘 등이 포함됩니다. 특성 중요도 분석은 모델이 입력 특성에 미치는 영향 정도를 평가하여 모델의 의사결정 과정을 설명할 수 있습니다. 모델 예측 구간 추정

일반인의 관점에서 보면 기계 학습 모델은 입력 데이터를 예측된 출력에 매핑하는 수학적 함수입니다. 보다 구체적으로, 기계 학습 모델은 예측 출력과 실제 레이블 사이의 오류를 최소화하기 위해 훈련 데이터로부터 학습하여 모델 매개변수를 조정하는 수학적 함수입니다. 기계 학습에는 로지스틱 회귀 모델, 의사결정 트리 모델, 지원 벡터 머신 모델 등 다양한 모델이 있습니다. 각 모델에는 적용 가능한 데이터 유형과 문제 유형이 있습니다. 동시에, 서로 다른 모델 간에는 많은 공통점이 있거나 모델 발전을 위한 숨겨진 경로가 있습니다. 연결주의 퍼셉트론을 예로 들면, 퍼셉트론의 은닉층 수를 늘려 심층 신경망으로 변환할 수 있습니다. 퍼셉트론에 커널 함수를 추가하면 SVM으로 변환할 수 있다. 이 하나

이 글에서는 학습 곡선을 통해 머신러닝 모델에서 과적합과 과소적합을 효과적으로 식별하는 방법을 소개합니다. 과소적합 및 과적합 1. 과적합 모델이 데이터에 대해 과도하게 훈련되어 데이터에서 노이즈를 학습하는 경우 모델이 과적합이라고 합니다. 과적합된 모델은 모든 예를 너무 완벽하게 학습하므로 보이지 않거나 새로운 예를 잘못 분류합니다. 과대적합 모델의 경우 완벽/거의 완벽에 가까운 훈련 세트 점수와 형편없는 검증 세트/테스트 점수를 얻게 됩니다. 약간 수정됨: "과적합의 원인: 복잡한 모델을 사용하여 간단한 문제를 해결하고 데이터에서 노이즈를 추출합니다. 훈련 세트로 사용되는 작은 데이터 세트는 모든 데이터를 올바르게 표현하지 못할 수 있기 때문입니다."

1950년대에는 인공지능(AI)이 탄생했다. 그때 연구자들은 기계가 사고와 같은 인간과 유사한 작업을 수행할 수 있다는 것을 발견했습니다. 이후 1960년대에 미국 국방부는 인공 지능에 자금을 지원하고 추가 개발을 위해 실험실을 설립했습니다. 연구자들은 우주 탐사, 극한 환경에서의 생존 등 다양한 분야에서 인공지능의 응용 분야를 찾고 있습니다. 우주탐험은 지구를 넘어 우주 전체를 포괄하는 우주에 대한 연구이다. 우주는 지구와 조건이 다르기 때문에 극한 환경으로 분류됩니다. 우주에서 생존하려면 많은 요소를 고려해야 하며 예방 조치를 취해야 합니다. 과학자와 연구자들은 우주를 탐험하고 모든 것의 현재 상태를 이해하는 것이 우주가 어떻게 작동하는지 이해하고 잠재적인 환경 위기에 대비하는 데 도움이 될 수 있다고 믿습니다.

C++의 기계 학습 알고리즘이 직면하는 일반적인 과제에는 메모리 관리, 멀티스레딩, 성능 최적화 및 유지 관리 가능성이 포함됩니다. 솔루션에는 스마트 포인터, 최신 스레딩 라이브러리, SIMD 지침 및 타사 라이브러리 사용은 물론 코딩 스타일 지침 준수 및 자동화 도구 사용이 포함됩니다. 실제 사례에서는 Eigen 라이브러리를 사용하여 선형 회귀 알고리즘을 구현하고 메모리를 효과적으로 관리하며 고성능 행렬 연산을 사용하는 방법을 보여줍니다.

번역기 | 검토자: Li Rui | Chonglou 인공 지능(AI) 및 기계 학습(ML) 모델은 오늘날 점점 더 복잡해지고 있으며 이러한 모델에서 생성되는 출력은 이해관계자에게 설명할 수 없는 블랙박스입니다. XAI(Explainable AI)는 이해관계자가 이러한 모델의 작동 방식을 이해할 수 있도록 하고, 이러한 모델이 실제로 의사 결정을 내리는 방식을 이해하도록 하며, AI 시스템의 투명성, 이 문제를 해결하기 위한 신뢰 및 책임을 보장함으로써 이 문제를 해결하는 것을 목표로 합니다. 이 기사에서는 기본 원리를 설명하기 위해 다양한 설명 가능한 인공 지능(XAI) 기술을 살펴봅니다. 설명 가능한 AI가 중요한 몇 가지 이유 신뢰와 투명성: AI 시스템이 널리 수용되고 신뢰되려면 사용자가 의사 결정 방법을 이해해야 합니다.

MetaFAIR는 대규모 기계 학습을 수행할 때 생성되는 데이터 편향을 최적화하기 위한 새로운 연구 프레임워크를 제공하기 위해 Harvard와 협력했습니다. 대규모 언어 모델을 훈련하는 데는 수개월이 걸리고 수백 또는 수천 개의 GPU를 사용하는 것으로 알려져 있습니다. LLaMA270B 모델을 예로 들면, 훈련에는 총 1,720,320 GPU 시간이 필요합니다. 대규모 모델을 교육하면 이러한 워크로드의 규모와 복잡성으로 인해 고유한 체계적 문제가 발생합니다. 최근 많은 기관에서 SOTA 생성 AI 모델을 훈련할 때 훈련 프로세스의 불안정성을 보고했습니다. 이는 일반적으로 손실 급증의 형태로 나타납니다. 예를 들어 Google의 PaLM 모델은 훈련 과정에서 최대 20번의 손실 급증을 경험했습니다. 수치 편향은 이러한 훈련 부정확성의 근본 원인입니다.

머신 러닝은 명시적으로 프로그래밍하지 않고도 컴퓨터가 데이터로부터 학습하고 능력을 향상시킬 수 있는 능력을 제공하는 인공 지능의 중요한 분야입니다. 머신러닝은 이미지 인식, 자연어 처리, 추천 시스템, 사기 탐지 등 다양한 분야에서 폭넓게 활용되며 우리의 삶의 방식을 변화시키고 있습니다. 기계 학습 분야에는 다양한 방법과 이론이 있으며, 그 중 가장 영향력 있는 5가지 방법을 "기계 학습의 5개 학교"라고 합니다. 5개 주요 학파는 상징학파, 연결주의 학파, 진화학파, 베이지안 학파, 유추학파이다. 1. 상징주의라고도 알려진 상징주의는 논리적 추론과 지식 표현을 위해 상징을 사용하는 것을 강조합니다. 이 사고 학교는 학습이 기존을 통한 역연역 과정이라고 믿습니다.
