🐳 라이브러리임포트
from gensim.models import Word2Vec
from konlpy.tag import Komoran
import time
🐳 네이버 영화 리뷰 읽어오는 함수
def read_review_data(filename):
with open(filename, encoding='UTF-8') as f:
data = [line.split('\\t') for line in f.read().splitlines()]
data = data[1:]
return data
🐳 측정 시작
start = time.time()
print('1) 말뭉치 데이터 읽기 시작')
review_data = read_review_data('ratings.txt')
print('ratings counts ', len(review_data)) # 리뷰 데이터 전체 개수 확인
print('1) 말뭉치 데이터 읽기 완료', time.time()-start)
print('2) 형태소에서 명사만 추출 시작')
komoran = Komoran()
docs = [komoran.nouns(sentence[1]) for sentence in review_data]
print('2) 형태소에서 명사만 추출 완료', time.time()-start)
print('3) word2vec 모델 학습 시작')
# sentences = 모델 학습에 필요한 데이터, vector_size=단어 임베딩 차원
# window = 주변 단어 윈도우 크기, sg=0 CBOW, 1 skip-gram
model = Word2Vec(sentences=docs, vector_size=200, window=4, sg=1) # 비슷한 200개만 추출
print('3) word2vec 모델 학습 완료', time.time()-start)
print('4) 학습된 모델 저장 시작')
model.save('nvmc.mode;')
print('4) 학습된 모델 저장 완료', time.time()-start)
from gensim.models import Word2Vec
# 모델 로딩
model = Word2Vec.load('nvmc.model')
print('corpus_total_words ', model.corpus_total_words)
# 사랑이라는 단어로 생성된 단어 임베딩 벡터 -> 200개
print('사랑 : ', model.wv['사랑'])
# 단어 유사도 계산 -> 벡터 공간에서 가장 가까운 거리에 있는 단어를 반환
print('일요일 = 월요일\\t', model.wv.similarity(w1='일요일', w2='월요일'))
print('안성기 = 배우\\t', model.wv.similarity(w1='안성기', w2='배우'))
print('대기업 = 삼성\\t', model.wv.similarity(w1='대기업', w2='삼성'))
print('히어로 = 삼성\\t', model.wv.similarity(w1='히어로', w2='삼성'))
# 가장 유사한 단어 추출
print(model.wv.most_similar('안성기', topn=10))
print(model.wv.most_similar('시리즈', topn=10))