Published in
4 min readMay 22, 2018
[MultiThreaded] Stop Using word2vec 리뷰
word2vec은 단어 유사성를 측정하기 위해 또는 단어를 벡터로 변환시키기 위해 많은 사람들이 사용하는 라이브러리다. CHRIS MOODY는 word2vec에 대해서 잘 모르면 사용하지 말라고 주의를 주며, 친절히 설명해준다.
The recipe
이미 데이터 전처리를 끝냈다는 전제하에 설명한다.
- Unigram Probability : 단어1과 단어2는 독립적으로 얼마나 자주 볼 수 있는가? ( unigram_counts의 합으로 배열을 나눠서 확률을 구함 )
- Skipgram Probability : 단어 1을 단어 2 주변에서 얼마나 자주 볼 수 있는가? ( 단어 1과 단어 2 사이에 몇 단어를 건너 뛰어 보기 때문에 skipgram이다. )
- Normalized Skipgram Probability (또는 PMI) : skipgram 의 확률을 두 단어의 unigram으로 나눕니다. 1.0보다 크면 해당 skikgram은 두 입력 단어의 unigram 확률보다 자주 발생하며 두 입력 단어를 “연관”이라고합니다. 비율이 클수록 관련성도 높아집니다. 1.0보다 작은 비율의 경우 “더 관련이 없습니다”.
- PMI Matrix : 행과 열이 만나는 지점을 PMI로 나타냅니다.
- SVD : 차원 축소 기법입니다. 두 개의 더 작은 행렬을 갖는 단어 벡터들의 세트로 압축합니다.
- Searching : SVD로 단어 벡터를 얻어서 가장 가까운 단어를 검색할 수 있습니다. 예를 들어 ‘consolas’라는 단어의 벡터를 얻어서 다른 단어들과의 유사성을 구하고 그 중 가장 높은 것을 뽑아낼 수 있습니다.
# In psuedocode:
# Get the row vector corresponding to the word 'consolas'
vector_consolas = U['consolas']
# Get how similar it is to all other words
similarities = dot(U, vector_consolas)
# Sort by similarity, and pick the most similar
most_similar = tokens[argmax(similarities)]
most_similar