word2vec
들어가며¶Minsuk Heo 허민석 유튜브 채널의 [딥러닝 자연어처리] Word2Vec 동영상을 살펴보면 워드2벡(word2vec)의 기본개념을 잡을 수 있다.
from IPython.display import HTML
HTML('<iframe width="300" height="180" src="https://www.youtube.com/embed/sY4YyacSsLc" frameborder="0" allowfullscreen></iframe>')
구글 뉴스 문서(Google News documents)가 가장 유명해서 Mikolov 기학습된 모형을 받아 이를 활용한다. 다운로드 받는 사전학습 모형을 .load_word2vec_format()
메쏘드로 불러읽어들인다. 구글 뉴스 모형은 크기가 1.5GB로 단어가 3백만로 200차원으로 되어 있어 이를 32비트 컴퓨터에서는 열수가 없고 충분한 메모리가 확보되어야 가능하다.
1.5GB 학습된 모형을 불러올 경우 메모리가 적은 컴퓨터의 경우 문제가 될 수 있어 limit=300000
인자를 넣어 다소 정확도는 희생하더라도 빠른 후속 작업이 되도록 설정을 변경시킨다.
from gensim.models.keyedvectors import KeyedVectors
w2vec = KeyedVectors.load_word2vec_format(\
'./model/GoogleNews-vectors-negative300.bin.gz', binary=True, limit=900000)
word2vec
유명한 사례¶word2vec
의 유명한 사례로 많이 회자되는 king
- man
+ woman
연산을 하게 되면 어떤 결과가 나오는지 직접 데이터를 넣어 확인해보자. 정답은 queen
이 나와야 한다.
w2vec.most_similar(positive=['king', 'woman'], negative=['man'], topn=3)
두 단어간의 유사도는 w2vec
객체의 .similarity()
메쏘드를 사용해서 계산해도 된다. 혹은 아래와 같이 numpy
를 사용해서 계산해도 된다.
w2vec.similarity('korea', 'japan')
두 단어간 유사도를 계산하는 방식은 다음 수식에 따라 korea
, japna
을 넣어주면 유사도를 구할 수 있다.
\begin{equation*} cos(\pmb x, \pmb y) = \frac {\pmb x \cdot \pmb y}{||\pmb x|| \cdot ||\pmb y||} \end{equation*}
import numpy
cosine_similarity = numpy.dot(w2vec['korea'], w2vec['japan'])\
/(numpy.linalg.norm(w2vec['korea']) * \
numpy.linalg.norm(w2vec['japan']))
cosine_similarity
chef
와 유사한 단어 5개를 뽑아보자. chef
는 우리가 친숙한 요리관련 요리사를 지칭할 수도 있지만, DevOps에서 소프트웨어를 지칭할 수도 있다. negative
를 사용하게 되면 food
관련 내용을 제외하고 관련 유사성이 높은 단어를 추출하는 것도 가능하다.
w2vec.most_similar(positive=['chef'], topn=5)
w2vec.most_similar(positive=['chef', 'software'], negative=['food'], topn=5)
word2vec
경쟁자들¶구글에서 Tomas Mikolov
와 동료들이 word2vec을 만들어 논문도 내고 훈련된 모형도 공개하는 동안 스탠포드대학 Jeffrey Pennington
은 역전파(backpropagation)을 학습 알고리즘으로 사용하는 word2vec
의 단점을 극복할 수 있는 GloVe(Global Vectors)를 출시하였다. SVD를 근간으로 하고 있으 역전파 알고리즘과 비교하여 성능이 대폭 향상되었다.
페이스북도 fastText
를 내놓으면서 인접 단어 대신 n-문자
를 예측하는 것으로 바꿔 오탈자에 강건하면서, 영어뿐만 아니라 294개 언어로 학습된 모형을 내놓았다.
따라서, 공부는 word2vec
, 특정 영역에 활용될 word2vec
모형개발에는 GloVe
를 다국어에는 fastText
가 각자 장점을 내세우면서 가축을 벌이고 있다.
fastText
¶fastText 웹사이트 Download → Word vectors for 157 languages에서 학습된 모형을 불러와서 특정 한글에 대해 유사 단어를 확인하는 것이 가능하다. 크기가 4.2GB라고 나옵니다.
from gensim.models.fasttext import FastText
#fb_fastText = FastText.load_fasttext_format(model_file="")
#fb_fastText.most_similar('soccer')
word2vec
혹은 doc2vec
을 사용하여 상품/서비스/문서 추천시스템을 구축하는 것도 가능하다.