워드 임베딩 중 유명한 알고리즘이다.
같은 문장에서 나타난 인접한 단어들 간의 의미가 비슷할 것이라는 가정을 사용한다.
e.g
cat 주변 단어들의 확률분포를 예측한다.
주어진 학습 데이터: "I study math."
-> Tokenizing
-> 단어들을 모아 사전 구축
-> 사전 사이즈 만큼의 one-hot vector로 표현
-> sliding window로 한 단어를 중심으로 앞뒤로 나타난 단어 각각과 입출력 단어쌍 구성(window size: 3이면 [(I,study),(study,I),(study,math)...])
-> 위의 단어쌍을 갖고 예측 task를 수행하는 fully layer
아래는 (study,math)를 가지고 진행된 알고리즘의 이미지이다.
(study[0,1,0], math[0,0,1])
https://ronxin.github.io/wevi/ 를 이용하여 시각적으로 볼 수 있다.
Word2Vec 결과 아래처럼 벡터 연산으로 표현이 가능하다.
vec[queen] – vec[king] = vec[woman] – vec[man]
이외의 다양한 task에서도 사용된다.
또 다른 워드 임베딩 방법이다.
Word2Vec과의 가장 큰 차이점은 데이터의 입출력 단어쌍에 대해서 하나의 window 내에서 얼마나 동시에 자주 나오는지를 사전에 미리 계산하고
입출력 워드 임베딩 벡터의 내적과 logP가 서로 가까워 지도록 loss function을 만든다는 것이다
장점 :
고차원의 feature를 저차원으로 embedding 하는 것은 아직까지도 많이 쓰이는 기법입니다. 이 때나온 word2vec을 시작으로 다양한 기법들이 나왔는데요.
최근에는 facebook에서 공개한 data2vec이 이 모든 방법을 집대성한 느낌입니다. 한 번 보시면 좋을 것 같아요.
https://ai.facebook.com/research/data2vec-a-general-framework-for-self-supervised-learning-in-speech-vision-and-language/