다만 위 그림에서 보여지는 것처럼, one hot encoding의 경우, 유클리드 거리(euclidean distance) 혹은 코사인 유사도(cosine similarity) 어느 것을 사용해도 벡터 간의 거리가 동일하다. 단지 encoding으로는 단어 간의 유사 관계를 알 수 없는 것이다. 따라서 유사도를 알기 위해서는 embedding이 필요하다.
Embedding은 저차원 벡터로 유사도를 갖게 하는 것이다(원문: embedding is dense vector with similarity). 위의 예시를 보면, one hot encoding을 통해 4개의 단어 각각에 4차원의 벡터가 부여되었는데, embedding에서는 이를 2차원의 벡터로 축소시킨다. 그리고 이 벡터들은 man과 king이 가깝고 woman과 queen이 가까운 것처럼, 단어 간의 유사 관계를 나타낼 수 있다.
Word2Vec이 바로 이런 embedding의 대표적 예시이다. 그리고 word2vec에서 어떤 단어의 유사도는 문장 내에서 가까운 위치에 있는 다른 단어, 즉 ‘이웃’ 단어로 측정한다(원문: Similarity comes from neighbor words).
다음은 Word2Vec의 Skip-Gram(중심단어로 주변단어 예측) 방식에서, window size(좌우 주변의 몇 개 단어까지 이웃으로 볼 것인가)를 2로 설정한 경우의 예시이다.
(My favorite food is chicken에서 food의 이웃 단어는 My, favorite, is, chicken)
각 단어 당 주변의 2개 단어를 이웃으로 가지고 있는 걸 확인할 수 있다.