Word2vec | Skip-gram
06 Nov 2019 | word2vec
- Skip-gram prediction
- Architecture of Skip-gram
- Model Training
- sampling train dataset
- Tricks
- Reference
Skip-gram prediction
Skip-gram은 center word를 기준으로 양 옆에 있는 단어(output context words)를 예측할 때 최적의 확률 값을 갖도록 학습하는 모델이다. 따라서 우선 하나의 center word를 두고 양 옆에 있는 몇 개의 단어를 예측할 것인지 window size를 정한다. Window size가 $m$이라면 center word를 이용해 예측하는 주변 단어의 개수는 $2m$개가 되는 것이다.

Architecture of Skip-gram

Illustrated by the author
위 그림을 보면 Skip-gram모델은 입력 층 - 가중치행렬$W$ - hidden layer - 가중치 행렬 $W’$ – 출력 층으로 이루어져 있다.
- Parameter
그림(1)에서 $W$의 차원과 $W’$의 차원은 서로 전치된 차원이라는 것을 확인할 수 있는데 $W$는 center word vector에 대응하는 행렬이고, $W’$는 output context word vector와 대응하는 행렬로 $W$와 $W’$는 모양만 전치된 형태일 뿐 다른 행렬이다. 그림을 보면 input layer의 차원은 $1 \times V$($V$= 임베딩하려는 단어의 수)이고 hidden layer 노드 수($N$)는, 곧 embedding 차원 수로, 사용자가 임의로 설정이 가능하다. input layer의 차원과 hidden layer의 각 노드가 1:1대응이 되야 하기 때문에 그들 가운데에 위치한 $W$의 차원은 $V \times N$이 된다.
- skip-gram model works
이제 모델의 전체적인 구조가 진행되는 과정을 수식으로 살펴보겠다.
1. 우선 Center word를 one-hot-vector로 만든다. (문서 $d$에 사용된 embedding하려는 단어들을 모두 추출하여 one-hot-encoding한다.)
\begin{matrix}
x\in\mathbb{R}^{|V|}
\end{matrix}
2. Embedding matrix $W$와 이전에 one-hot-encoding한 center word를 곱하여 embedded word vector를 구한다.
\begin{matrix}
v_c=\mathbf{W}x\in\mathbb{R}^n
\end{matrix}
이 작업은 embedding matrix W에서 해당 단어에 해당하는 행(column)을 look up해 오는 것이라 말할 수 있다.

3. Embedded vector를 context matrix $W’$와 곱해서 score vector를 구한다.
\begin{matrix}
z=\mathbf{W}^{\prime}v_c
\end{matrix}
4. Score vector를 확률 값으로 만든다.
\begin{matrix}
\hat{y}=\text{softmax}(z)
\end{matrix}
5. $\hat{y}$(예측 값(확률 값)과 각 위치의 $y$(정답 값)를 cross-entropy(loss-function) $H$를 사용하여 loss를 줄여가며 학습한다.
\begin{matrix}
J=\sum^{2m}_ {i}H(\hat{y},y_{i})
\end{matrix}
Model Training
이제 모델의 학습이 진행되는 과정에 대해 설명하겠다. 해당 모델 학습의 목표는 다음 식을 최대화하는 것이다:
\begin{matrix}
L(\theta)=logP(+|{ c }_ { P },{ o }_ { p })+\sum_{i=1}^klogP(-|{ c }_ { n_i },{ o }_ { n_i })
\end{matrix}
위 식은 한 iteration마다 모델 파라미터($\theta$)가 업데이트되는데 이때 한 쌍의 positive sample ($c_P$, $o_p$ : 실제 같이 쓰이는 단어쌍들의 집합)과 $k$쌍의 negative sample($c_{n_i}$, $o_{n_i}$ : 코퍼스 전체에서 랜덤 추출한 함께 사용되지 않은 단어 쌍)이 학습된다는 것을 표현한 log-likelihood function이다.
위 수식에서 $P(+|c_P, o_p)$는 positive sample에서 center word($c$)가 output context word($o$)와 함께 쓰일 확률이다. 이 확률은 다음과 같이 정의될 수 있다:
\begin{matrix}
P(+|c_P,o_p)=\frac{ 1 }{ 1+exp({ -u }_ { c }{ v }_ { o }) }
\end{matrix}
해당 모델의 목표는 예측된 positive sample인 center word와 context word쌍이 positive일 확률이 높이는 것이기 때문에 위 식의 결과를 최대화하는 방향으로 학습이 진행돼야 한다. 해당 수식에서 $u_c$는 $W$의 column vector, 그리고 $v_o$는 $W’$의 row vector이다. 이 수식을 최대화하기 위해서는 분모인 $1+exp(-u _cv_o)$값을 줄여야 한다. 따라서 두 벡터($u_c$ 와 $v_o$)의 내적 값을 키워야 하는데 해당 벡터의 내적은 곧 cosine similarity라 할 수 있으므로 해당 값이 커지면 positive sample에서 두 벡터간의 유사도가 높아지는 것과 같다.
$L(\theta)$를 구하는 식에서 $P(-| c_{n_i},o_{n_i})$는 negative sample인 $c_n$ 와 $o_n$가 negative sample일 확률이다. 따라서 negative sample을 negative sample이라고 얼마나 잘 맞췄는지에 대한 확률이기에 이 값 또한 최대화해야 한다. 해당 확률은 다음과 같이 정의될 수 있다:
\begin{matrix}
P(-|c_n,o_n)=1- P(+|c_n,o_n)=\frac{ exp(-u_c v_o ) }{ 1+exp(-u_c v_o ) }
\end{matrix}
위 식을 최대화 하기 위해서는 우변의 분자지수는 키우고 분모지수는 줄여야 한다. 따라서 $u_c$ 와$v_o$의 내적 값을 줄여야 하는데 위에서 언급했 듯이 벡터의 내적은 cosine similarity와 비례하므로 두 벡터의 내적 값이 줄어들면 두 벡터의 유사도 또한 낮아진다.
지금까지 log-likelihood function($L(\theta)$)을 최대화하는 학습 과정에 대해 살펴보았다. 요약하여 말하자면, log-likelihood function을 최대화함으로써 positive sample 단어쌍의 유사도는 높이고 negative sample 단어쌍의 유사도는 낮추는 방향으로 학습이 진행된다. 결론적으로 Skip-gram은 center word와 주변 단어 쌍이 positive sample에 속하는지 negative sample에 속하는지 이진분류(binary classification)하는 과정에서 학습되는 것이고 이 과정을 통해 도출된 word embedding vector는 유사성에 관한 정보를 지니게 되는 것이다.
sampling train dataset

Illustrated by the author
위 그림은 “Das Jahr ist irgendwie so schnell vergangen.”이라는 문장에서 window size(한번에 학습할 단어의 개수)가 2일 경우 문장의 시작부터 끝까지 window가 옮겨 다니며 학습이 진행되는 것을 표현한 그림이다. 우선 문장의 시작인 ‘Das’부터 시작하여 이를 center word로 설정한 후, 해당 단어를 기준으로 ‘Jahr’ 와 ‘ist’가 각각 (Das, Jahr), (Das, ist)와 같이 각각 따로 학습된다. 이 부분이 skip-gram과 CBOW의 차이점 중 하나이자 skip-gram이 CBOW보다 성능이 높은 이유 중 하나이다. CBOW는 ‘Jahr’와 ‘ist’가 한번에 학습되어 하나의 center word당 한번의 학습이 이루어지는 반면, skip-gram의 경우 하나의 center word마다 설정한 window size만큼 학습이 진행되기 때문에 계속 업데이트 되며 학습이 진행된다. 즉 이전에 학습한 것에 대한 개선이 이루어지기 때문에 CBOW보다 Skip-gram의 성능이 더 좋다.
Tricks
이제 Skip-gram의 성능 향상을 위해 사용된 세가지 기법에 대해 소개하겠다.
- Negative sampling
Word2vec모델은 출력층으로부터 나온 score vector를 softmax에 통과시켜 확률 값으로 만든 후 이를 각 위치의 정답 값과 비교하며 역전파(backpropagation)하는 구조를 지닌다. 해당 과정에서 softmax regression적용을 위해 center word와 문서 내의 다른 모든 단어들을 모두 내적한 후 다시 $exp$를 취하게 되는데 이때 계산량이 매우 커지게 된다. 즉, 정답 context word가 나올 확률은 올리고 나머지 단어들이 나올 확률은 낮추며 학습을 하는데 데이터가 매우 큰 경우 이 확률들을 모두 계산할 때 계산량이 매우 커지게 된다. 따라서 softmax를 적용할 때 전체 단어를 대상으로 확률 값을 구하지 않고 일부 단어만 뽑아서 계산을 하는 negative sampling기법을 사용하여 계산량을 줄였다.
해당 기법을 적용하기 위해서는 positive sample과 negative sample이 필요하다. Positive sample은 이전에 설명한 바와 같이 코퍼스 전체를 설정한 window size만큼 고려하여 슬라이딩 하며 학습 데이터를 만든다. 즉, center word 앞뒤로 설정한 window size만큼 보면서 전체 코퍼스를 훑는다는 것이다. 다음은 window size를 2로 설정하여 positive sample을 만든 것이다:

c (center word)
o (output context words)
커피
카페
커피
에서
커피
와
커피
빵
아래는 Negative sample인데, Negative sample은 코퍼스 전체에서 랜덤 추출한 center word와 함께 등장하지 않은 단어의 데이터 쌍이다:
c (center word)
o (output context words)
커피
뭐
커피
컴퓨터
커피
종이
커피
자동차
이렇게 positive sample과 negative sample을 생성한 후, 각 sample들을 합쳐 전체 단어처럼 사용하여 softmax 확률을 구한다. 이렇게 학습하면 1개의 positive sample과 $k$개의 negative sample만 계산하면 되기 때문에 매 step마다 전체 단어를 모두 계산해야 하는 방법 보다 계산 량이 훨씬 줄어든다. 위 예시에서는 $k$를 2로 설정한 것인데, 이 경우 모델은 한 스텝에서 1개의 positive sample(커피-카페)와 2개의 negative sample(커피-자동차, 커피-사람), 총 3개만 학습하면 된다. Negative sampling 확률은 아래와 같다.($f(w_i)$는 해당 단어가 코퍼스에 등장한 비율(해당 단어 빈도/전체 단어 수)이다.)
\begin{matrix}
P({ w }_ { i })=\frac { { f({ w }_ { i }) }^{ { 3 }/{ 4 } } }{ \sum _ { j=0 }^{ n }{ { f({ w }_ { j }) }^{ { 3 }/{ 4 } } } }
\end{matrix}
- Subsampling frequent words
Subsampling 기법은 위에서 설명한 negative sampling기법과 비슷해 보일 수 있으나 다른 기법이다. 이 기법 또한 계산량을 줄이기 위해 사용되는 방법인데, negative sampling과는 달리 등장 빈도가 높은 단어들에 대한 학습량을 줄여 계산량을 감소시킨 기법이다. 모든 단어 쌍에 대해 Training set을 만들지 않고 자주 등장하는 단어를 무작위로 training set에서 제외시켜 계산량을 줄였다. 즉, 고빈도의 단어에 대한 학습량만 줄이고 등장 빈도가 낮은 단어는 제외 시키지 않고 모두 학습한다 이 수식은 subsampling 확률이다.
\begin{matrix}
{ P }_ { subsampling }({ w }_ { i })=1-\sqrt { \frac { t }{ f({ w }_ { i }) } }
\end{matrix}
- Hierarchical softmax

Illustrated by the author
Hierarchical softmax도 계산량 줄이기 위해 사용하는 기법인데, 일반 softmax보다 계산량을 줄이는 기법 중 하나이다. Softmax를 모두 계산하지 않고 tree구조로 hierarchical하게 softmax를 계산하는 것이다.
Word2Vec은 python의 gensim패키지에 구현되어 있다. 이전 연구들의 문제점을 많이 개선한Word2Vec에도 몇 가지 문제점이 존재한다. 우선 단어 집합 내에 적게 등장한 단어(infrequent words)에 대한 embedding 정확도가 높지 않고 모르는 단어(out of vocabulary/OOV)에 대해서는 embedding vector가 없으므로 유사도 계산이 불가능하다는 문제점이 존재한다. 따라서 Word2Vec의 이러한 단점을 보완하기 위해 후속 연구로 Sentence2Vec과 Paragraph2Vec이 연구되었다.
Word2Vec 시각화 : https://ronxin.github.io/wevi/, https://projector.tensorflow.org/
Word2Vec 예시 : http://word2vec.kr/search/
Reference
Francois Chaubard, Michael Fang, Guillaume Genthial, Rohit Mundra, Richard Socher.”CS224n: Natural Language Processing with Deep Learning: Part1,”(winter 2017)
Lee,Gichang.Sentence embeddings using korean corpora.seoul:acornpub,2019
Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean.”Efficient Estimation of Word Representations in Vector Space,”(2013)
Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, Jeffrey Dean.”Distributed Representations of Words and Phrases and their Compositionality,”(2013)
- Skip-gram prediction
- Architecture of Skip-gram
- Model Training
- sampling train dataset
- Tricks
- Reference
Skip-gram prediction
Skip-gram은 center word를 기준으로 양 옆에 있는 단어(output context words)를 예측할 때 최적의 확률 값을 갖도록 학습하는 모델이다. 따라서 우선 하나의 center word를 두고 양 옆에 있는 몇 개의 단어를 예측할 것인지 window size를 정한다. Window size가 $m$이라면 center word를 이용해 예측하는 주변 단어의 개수는 $2m$개가 되는 것이다.

Architecture of Skip-gram

위 그림을 보면 Skip-gram모델은 입력 층 - 가중치행렬$W$ - hidden layer - 가중치 행렬 $W’$ – 출력 층으로 이루어져 있다.
- Parameter
그림(1)에서 $W$의 차원과 $W’$의 차원은 서로 전치된 차원이라는 것을 확인할 수 있는데 $W$는 center word vector에 대응하는 행렬이고, $W’$는 output context word vector와 대응하는 행렬로 $W$와 $W’$는 모양만 전치된 형태일 뿐 다른 행렬이다. 그림을 보면 input layer의 차원은 $1 \times V$($V$= 임베딩하려는 단어의 수)이고 hidden layer 노드 수($N$)는, 곧 embedding 차원 수로, 사용자가 임의로 설정이 가능하다. input layer의 차원과 hidden layer의 각 노드가 1:1대응이 되야 하기 때문에 그들 가운데에 위치한 $W$의 차원은 $V \times N$이 된다.
- skip-gram model works
이제 모델의 전체적인 구조가 진행되는 과정을 수식으로 살펴보겠다.
1. 우선 Center word를 one-hot-vector로 만든다. (문서 $d$에 사용된 embedding하려는 단어들을 모두 추출하여 one-hot-encoding한다.)
\begin{matrix} x\in\mathbb{R}^{|V|} \end{matrix}
2. Embedding matrix $W$와 이전에 one-hot-encoding한 center word를 곱하여 embedded word vector를 구한다.
\begin{matrix} v_c=\mathbf{W}x\in\mathbb{R}^n \end{matrix}
이 작업은 embedding matrix W에서 해당 단어에 해당하는 행(column)을 look up해 오는 것이라 말할 수 있다.

3. Embedded vector를 context matrix $W’$와 곱해서 score vector를 구한다.
\begin{matrix} z=\mathbf{W}^{\prime}v_c \end{matrix}
4. Score vector를 확률 값으로 만든다.
\begin{matrix} \hat{y}=\text{softmax}(z) \end{matrix}
5. $\hat{y}$(예측 값(확률 값)과 각 위치의 $y$(정답 값)를 cross-entropy(loss-function) $H$를 사용하여 loss를 줄여가며 학습한다.
\begin{matrix} J=\sum^{2m}_ {i}H(\hat{y},y_{i}) \end{matrix}
Model Training
이제 모델의 학습이 진행되는 과정에 대해 설명하겠다. 해당 모델 학습의 목표는 다음 식을 최대화하는 것이다:
\begin{matrix} L(\theta)=logP(+|{ c }_ { P },{ o }_ { p })+\sum_{i=1}^klogP(-|{ c }_ { n_i },{ o }_ { n_i }) \end{matrix}
위 식은 한 iteration마다 모델 파라미터($\theta$)가 업데이트되는데 이때 한 쌍의 positive sample ($c_P$, $o_p$ : 실제 같이 쓰이는 단어쌍들의 집합)과 $k$쌍의 negative sample($c_{n_i}$, $o_{n_i}$ : 코퍼스 전체에서 랜덤 추출한 함께 사용되지 않은 단어 쌍)이 학습된다는 것을 표현한 log-likelihood function이다.
위 수식에서 $P(+|c_P, o_p)$는 positive sample에서 center word($c$)가 output context word($o$)와 함께 쓰일 확률이다. 이 확률은 다음과 같이 정의될 수 있다:
\begin{matrix} P(+|c_P,o_p)=\frac{ 1 }{ 1+exp({ -u }_ { c }{ v }_ { o }) } \end{matrix}
해당 모델의 목표는 예측된 positive sample인 center word와 context word쌍이 positive일 확률이 높이는 것이기 때문에 위 식의 결과를 최대화하는 방향으로 학습이 진행돼야 한다. 해당 수식에서 $u_c$는 $W$의 column vector, 그리고 $v_o$는 $W’$의 row vector이다. 이 수식을 최대화하기 위해서는 분모인 $1+exp(-u _cv_o)$값을 줄여야 한다. 따라서 두 벡터($u_c$ 와 $v_o$)의 내적 값을 키워야 하는데 해당 벡터의 내적은 곧 cosine similarity라 할 수 있으므로 해당 값이 커지면 positive sample에서 두 벡터간의 유사도가 높아지는 것과 같다.
$L(\theta)$를 구하는 식에서 $P(-| c_{n_i},o_{n_i})$는 negative sample인 $c_n$ 와 $o_n$가 negative sample일 확률이다. 따라서 negative sample을 negative sample이라고 얼마나 잘 맞췄는지에 대한 확률이기에 이 값 또한 최대화해야 한다. 해당 확률은 다음과 같이 정의될 수 있다:
\begin{matrix} P(-|c_n,o_n)=1- P(+|c_n,o_n)=\frac{ exp(-u_c v_o ) }{ 1+exp(-u_c v_o ) } \end{matrix}
위 식을 최대화 하기 위해서는 우변의 분자지수는 키우고 분모지수는 줄여야 한다. 따라서 $u_c$ 와$v_o$의 내적 값을 줄여야 하는데 위에서 언급했 듯이 벡터의 내적은 cosine similarity와 비례하므로 두 벡터의 내적 값이 줄어들면 두 벡터의 유사도 또한 낮아진다.
지금까지 log-likelihood function($L(\theta)$)을 최대화하는 학습 과정에 대해 살펴보았다. 요약하여 말하자면, log-likelihood function을 최대화함으로써 positive sample 단어쌍의 유사도는 높이고 negative sample 단어쌍의 유사도는 낮추는 방향으로 학습이 진행된다. 결론적으로 Skip-gram은 center word와 주변 단어 쌍이 positive sample에 속하는지 negative sample에 속하는지 이진분류(binary classification)하는 과정에서 학습되는 것이고 이 과정을 통해 도출된 word embedding vector는 유사성에 관한 정보를 지니게 되는 것이다.
sampling train dataset

위 그림은 “Das Jahr ist irgendwie so schnell vergangen.”이라는 문장에서 window size(한번에 학습할 단어의 개수)가 2일 경우 문장의 시작부터 끝까지 window가 옮겨 다니며 학습이 진행되는 것을 표현한 그림이다. 우선 문장의 시작인 ‘Das’부터 시작하여 이를 center word로 설정한 후, 해당 단어를 기준으로 ‘Jahr’ 와 ‘ist’가 각각 (Das, Jahr), (Das, ist)와 같이 각각 따로 학습된다. 이 부분이 skip-gram과 CBOW의 차이점 중 하나이자 skip-gram이 CBOW보다 성능이 높은 이유 중 하나이다. CBOW는 ‘Jahr’와 ‘ist’가 한번에 학습되어 하나의 center word당 한번의 학습이 이루어지는 반면, skip-gram의 경우 하나의 center word마다 설정한 window size만큼 학습이 진행되기 때문에 계속 업데이트 되며 학습이 진행된다. 즉 이전에 학습한 것에 대한 개선이 이루어지기 때문에 CBOW보다 Skip-gram의 성능이 더 좋다.
Tricks
이제 Skip-gram의 성능 향상을 위해 사용된 세가지 기법에 대해 소개하겠다.
- Negative sampling
Word2vec모델은 출력층으로부터 나온 score vector를 softmax에 통과시켜 확률 값으로 만든 후 이를 각 위치의 정답 값과 비교하며 역전파(backpropagation)하는 구조를 지닌다. 해당 과정에서 softmax regression적용을 위해 center word와 문서 내의 다른 모든 단어들을 모두 내적한 후 다시 $exp$를 취하게 되는데 이때 계산량이 매우 커지게 된다. 즉, 정답 context word가 나올 확률은 올리고 나머지 단어들이 나올 확률은 낮추며 학습을 하는데 데이터가 매우 큰 경우 이 확률들을 모두 계산할 때 계산량이 매우 커지게 된다. 따라서 softmax를 적용할 때 전체 단어를 대상으로 확률 값을 구하지 않고 일부 단어만 뽑아서 계산을 하는 negative sampling기법을 사용하여 계산량을 줄였다.
해당 기법을 적용하기 위해서는 positive sample과 negative sample이 필요하다. Positive sample은 이전에 설명한 바와 같이 코퍼스 전체를 설정한 window size만큼 고려하여 슬라이딩 하며 학습 데이터를 만든다. 즉, center word 앞뒤로 설정한 window size만큼 보면서 전체 코퍼스를 훑는다는 것이다. 다음은 window size를 2로 설정하여 positive sample을 만든 것이다:

c (center word) | o (output context words) |
---|---|
커피 | 카페 |
커피 | 에서 |
커피 | 와 |
커피 | 빵 |
아래는 Negative sample인데, Negative sample은 코퍼스 전체에서 랜덤 추출한 center word와 함께 등장하지 않은 단어의 데이터 쌍이다:
c (center word) | o (output context words) |
---|---|
커피 | 뭐 |
커피 | 컴퓨터 |
커피 | 종이 |
커피 | 자동차 |
이렇게 positive sample과 negative sample을 생성한 후, 각 sample들을 합쳐 전체 단어처럼 사용하여 softmax 확률을 구한다. 이렇게 학습하면 1개의 positive sample과 $k$개의 negative sample만 계산하면 되기 때문에 매 step마다 전체 단어를 모두 계산해야 하는 방법 보다 계산 량이 훨씬 줄어든다. 위 예시에서는 $k$를 2로 설정한 것인데, 이 경우 모델은 한 스텝에서 1개의 positive sample(커피-카페)와 2개의 negative sample(커피-자동차, 커피-사람), 총 3개만 학습하면 된다. Negative sampling 확률은 아래와 같다.($f(w_i)$는 해당 단어가 코퍼스에 등장한 비율(해당 단어 빈도/전체 단어 수)이다.)
\begin{matrix} P({ w }_ { i })=\frac { { f({ w }_ { i }) }^{ { 3 }/{ 4 } } }{ \sum _ { j=0 }^{ n }{ { f({ w }_ { j }) }^{ { 3 }/{ 4 } } } } \end{matrix}
- Subsampling frequent words
Subsampling 기법은 위에서 설명한 negative sampling기법과 비슷해 보일 수 있으나 다른 기법이다. 이 기법 또한 계산량을 줄이기 위해 사용되는 방법인데, negative sampling과는 달리 등장 빈도가 높은 단어들에 대한 학습량을 줄여 계산량을 감소시킨 기법이다. 모든 단어 쌍에 대해 Training set을 만들지 않고 자주 등장하는 단어를 무작위로 training set에서 제외시켜 계산량을 줄였다. 즉, 고빈도의 단어에 대한 학습량만 줄이고 등장 빈도가 낮은 단어는 제외 시키지 않고 모두 학습한다 이 수식은 subsampling 확률이다.
\begin{matrix} { P }_ { subsampling }({ w }_ { i })=1-\sqrt { \frac { t }{ f({ w }_ { i }) } } \end{matrix}
- Hierarchical softmax

Hierarchical softmax도 계산량 줄이기 위해 사용하는 기법인데, 일반 softmax보다 계산량을 줄이는 기법 중 하나이다. Softmax를 모두 계산하지 않고 tree구조로 hierarchical하게 softmax를 계산하는 것이다.
Word2Vec은 python의 gensim패키지에 구현되어 있다. 이전 연구들의 문제점을 많이 개선한Word2Vec에도 몇 가지 문제점이 존재한다. 우선 단어 집합 내에 적게 등장한 단어(infrequent words)에 대한 embedding 정확도가 높지 않고 모르는 단어(out of vocabulary/OOV)에 대해서는 embedding vector가 없으므로 유사도 계산이 불가능하다는 문제점이 존재한다. 따라서 Word2Vec의 이러한 단점을 보완하기 위해 후속 연구로 Sentence2Vec과 Paragraph2Vec이 연구되었다.
Word2Vec 시각화 : https://ronxin.github.io/wevi/, https://projector.tensorflow.org/
Word2Vec 예시 : http://word2vec.kr/search/
Reference
Francois Chaubard, Michael Fang, Guillaume Genthial, Rohit Mundra, Richard Socher.”CS224n: Natural Language Processing with Deep Learning: Part1,”(winter 2017)
Lee,Gichang.Sentence embeddings using korean corpora.seoul:acornpub,2019
Tomas Mikolov, Kai Chen, Greg Corrado, Jeffrey Dean.”Efficient Estimation of Word Representations in Vector Space,”(2013)
Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, Jeffrey Dean.”Distributed Representations of Words and Phrases and their Compositionality,”(2013)