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 |