Distributed Representations of Words and Phrases and their Compositionality
3 minute read

Motivation

이전에 제안되었던 continuous Skip-gram 모델의 학습 속도와 학습되는 임베딩 벡터의 성능을 높일 수 있는 방법을 소개하고 있다.

Method

Skip-gram 모델의 계산 복잡도는 $Q = C \times (D+D \times V)$ 이다 ($C$ : context 의 window size, $D$ : embedding dimension, $V$ : vocab size). 여기서 가장 부담이 큰 부분은 마지막에 단어를 예측하는 softmax layer 이다. 보통 embedding 을 학습할 때 vocabulary 의 크기($V$)가 굉장히 큰데, 단어별로 확률값을 계산할 때마다 $V$ 개의 항에 대한 덧셈이 분모에 들어가기 때문이다. 따라서 기존의 softmax 계산을 대체할 수 있는 방법이 요구되는데, 그 중 하나가 hierarchical softmax 이다. Hierarchical softmax 를 사용하면 $V$ 에 해당되었던 계산량을 $\log_2{(V)}$ 로 줄일 수 있다.

Negative Sampling

본 논문에서는 hierarchical softmax 를 대체할 방법으로 Negative Sampling 을 소개하고 있다. Negative sampling 은 NCE (Noise Contrastive Estimation) 으로부터 파생된 방법으로, NCE 에 비해 식이 간단하다. NCE 의 아이디어는 실제 데이터를 noise 와 잘 구분할 수 있는 모델이 좋은 모델이라는 것이다. 이와 유사하게 negative sampling 은 실제 데이터에 있었던 word pair 와 가짜 word pair 을 구분하는 방향으로 학습을 한다. 주어진 (중심단어, 주변단어) 쌍 $(w, c)$ 가 실제 데이터라고 판별할 확률은 $P(D=1|w, c)$ , 가짜 데이터라고 할 확률은 $P(D=0|w, c)$ 로 표현할 수 있다. 그리고 $P(D=1|w, c)$ 는 시그모이드 함수를 이용해 다음과 같이 나타낼 수 있다.

이를 활용한 전체 목적식은 다음과 같다.

여기서 $\tilde{D}$ , 가짜 코퍼스는 샘플링을 통해 쉽게 만들 수 있다. 위의 식은 likelihood 를 maximize 하는 MLE $\theta$ 를 구하는 식이기 때문에 - 부호를 붙여 negative log likelihood 를 최소화하는 목적식을 만들 수 있다. 이렇게 negative sampling 의 아이디어를 적용한 skip-gram 의 objective function 이 다음과 같다. 이 목적식을 최소화하는 방향으로 학습을 진행하면 보다시피 전체 vocabulary 에 대해 softmax 확률값을 구할 필요가 없다.

그렇다면 k 개의 negative sample 는 어떻게 만들 것인가? 본 논문에서는 $\tilde{u}_k$ 을 샘플링할 분포의 여러 후보 (e.g. uniform, unigram probability 등) 를 비교한 결과 $P_n(w)$ 를 $U(w)^{3/4} / Z$ 로 설정한 것이 가장 성능이 좋았다고 한다. 이때 $U(w)$ 는 unigram 확률이고, $Z$ 는 확률값의 합을 1로 normalize 해주는 효과가 있다. 이 분포를 사용하면 $3/4$ 승을 해주면서 작은 확률값을 가졌던 단어들이 좀 더 높은 확률로 뽑히게 된다. 원래 확률값이 높았던 단어들보다 낮았던 단어들의 확률 증가폭이 크기 때문이다.

Subsampling of Frequent Words

“a”, “the”, “in” 같은 단어들은 corpus 내에서 굉장히 빈번하게 등장하지만 좋은 임베딩 벡터를 학습하는데에 다른 단어들에 비해 크게 도움이 되지는 않는다. (e.g. “France”“the” 와 등장할 때보다 “Paris” 와 등장했을 때 벡터에 더 유의미한 정보를 학습할 수 있다.) 뿐만 아니라 이러한 단어들의 벡터값은 아무리 학습이 많이 시켜도 값이 크게 변하지도 않는다.

단어 빈도에서 나타나는 불균형을 해소하기 위한 방법으로 본 논문에서는 subsampling 을 소개하고 있다. Training set 에 있는 단어 $w_i$ 를 $P(w_i)$의 확률로 버리는 것이다. $P(w_i)$ 는 다음의 식으로 계산한다.

이를 사용하면 단어 빈도의 rank 는 바뀌지 않으면서도 빈도간 불균형 문제를 효과적으로 해결할 수 있다. 본 논문에서는 위의 식을 heuristic 하게 찾았음에도 불구하고 실험 결과 학습 속도도 빨라지고, 흔치 않은 단어 벡터의 정확도도 높일 수 있었다고 한다.

Learning Phrases

본 연구에서 또 주목할만한 점은 단일 단어뿐 아니라 phrase 도 vocabulary 에 추가해 모델을 확장시켰다는 점이다. 추가할 어구는 다음의 식으로 점수를 계산해 일정 threshold 를 넘으면 추가하도록 하였다.

기존의 semantic, syntactic analogy task 로 phrase 가 잘 학습되었는지 평가하기는 어려우니 새로운 analogical reasoning task 를 구축하였다.

phrase-sg

Results

본 논문에서는

Recent Posts

Why are Sequence-to-Sequence Models So Dull?
Variational Autoregressive Decoder for Neural Response Generation
Content Preserving Text Generation with Attribute Controls
Matching Networks for One Shot Learning
Pointer Networks