참고: 이 코드는 Python 3.6.1( Gensim 2.3.0)
Gensim을 사용한 word2vec Python 구현 및 적용
원본 논문: Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). 벡터 공간에서 단어 표현을 효율적으로 추정합니다. arXiv 사전 인쇄 arXiv:1301.3781.
import re import numpy as np from gensim.models import Word2Vec from nltk.corpus import gutenberg from multiprocessing import Pool from scipy import spatial
sentences = list(gutenberg.sents('shakespeare-hamlet.txt')) # import the corpus and convert into a list print('Type of corpus: ', type(sentences)) print('Length of corpus: ', len(sentences))
말뭉치 유형: 'list' 클래스
말뭉치 길이: 3106
print(sentences[0]) # title, author, and year print(sentences[1]) print(sentences[10])
['[', 'The', 'Tragedie', 'of', 'Hamlet', 'by', 'William', 'Shakespeare', '1599', ']']
['액투스', '프리머스', '.']
['프랜', '.']
데이터 전처리
for i in range(len(sentences)): sentences[i] = [word.lower() for word in sentences[i] if re.match('^[a-zA-Z] ', word)] print(sentences[0]) # title, author, and year print(sentences[1]) print(sentences[10])
['the', 'tragedie', 'of', 'hamlet', 'by', 'william', 'shakespeare']
['액투스', '프리머스']
['프랜']
model = Word2Vec(sentences = sentences, size = 100, sg = 1, window = 3, min_count = 1, iter = 10, workers = Pool()._processes) model.init_sims(replace = True)
model.save('word2vec_model') model = Word2Vec.load('word2vec_model')
model.most_similar('hamlet')
[('horatio', 0.9978846311569214),
('퀸', 0.9971947073936462),
('레이어테스', 0.9971820116043091),
('왕', 0.9968599081039429),
('어머니', 0.9966716170310974),
('어디', 0.9966292381286621),
('디어', 0.9965540170669556),
('오필리아', 0.9964221715927124),
('매우', 0.9963752627372742),
('오', 0.9963476657867432)]
v1 = model['king'] v2 = model['queen'] # define a function that computes cosine similarity between two words def cosine_similarity(v1, v2): return 1 - spatial.distance.cosine(v1, v2) cosine_similarity(v1, v2)
0.99437165260314941
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3