728x90
반응형
word2vec의 개념을 문장이나 문서 전체로 확장시켜 활용한다. 기존 단어들에 근거해서 다음 단어를 예측함으로써 단어 벡터들을 학습한다는 착안을 문장이나 문단, 문서 벡터의 학습으로 확장할 수 있다.
doc2vec은 점진적 학습이 가능하다. 훈련을 마친 모형에 새로운 문서들을 입력해서 새로운 문서 벡터들을 생성한다. 추론 단계에서 알고리즘은 동결된 단어벡터 행렬과 해당 가중치들로 새 문서 벡터들을 계산해서 문서 행렬에 추가한다.
문서 벡터 훈련
genism 패키지에있는 doc2vec을 위한 함수들을 이용해 문서 벡터 생성
사용할 cpu 코어 수
import multiprocessing
num_cores = multiprocessing.cpu_count()
genism의 doc2vec과 말뭉치 문서 벡터 불러오기
from gensim.models.doc2vec import TaggedDocument,Doc2Vec
from gensim.utils import simple_preprocess
문자열을 하나씩 처리할 수 있게 할당
corpus = ['This is the first document ...',
'another document ...']
genism의 TaggedDocument는 문서에 그 문서의 분류명이나 키워드 같은 메타 정보를 담은 문자열 또는 정수값을 부여 할 수 있다.
training_corpus = []
for i, text in enumerate(corpus):
tagged_doc = TaggedDocument(simple_preprocess(text),[i])
training_corpus.append(tagged_doc)
문맥 구간 크기가 10이고 단어 벡터와 문서벡터의 차원 수가 100인 doc2vec 생성(word2vec(300)과 차이가 있다.)
min_count는 모형에 포함할 문서의 최소 빈도
model = Doc2Vec(size=100,min_count=2,workers=num_cores,iter=10)
build_vocab을 통해 어휘 compile 후 train 진행
model.build_vocab(training_corpus)
model.train(training_corpus,total_examples=model.corpus_count,epochs=model.iter)
모형 벡터에 대한 훈련 후 새로운 문서에 대한 문서 벡터를 추론 infer_vector() 메소드 호출
model.infer_vector(simple_preprocess('This is a completely unseen document'),steps=10)
반응형
'Natural Language Processing' 카테고리의 다른 글
버키팅(bucketing)을 이용한 학습 복잡도 해결 (0) | 2021.03.28 |
---|---|
[CNN] 합성곱 신경망 (feat. Learning Word Vectors for Sentiment Analysis) (0) | 2021.03.13 |
[Word2vec] 단어 관계 시각화 (0) | 2021.03.08 |
Word2vec Vs GloVe (0) | 2021.03.08 |
BERT (Deep Bidirectional Transformers for Language Understanding) (0) | 2021.03.03 |