这篇论文的作者 Mikolov 基于他前面的工作——skip-gram model学习 word embedding,提出了几个提高词向量性能和训练速度的技巧,以及如何学习短语的表示。
这篇论文的主要贡献为:
- 利用 subsampling 加速训练和提高词向量的质量;
- 对 Noise Contrastive Estimation(NCE)做了一些简化,提出了 Negative sampling 来优化模型训练速度;
- 尝试学习短语的表示。
The Skip-gram Model
Mikolov 之前的工作 skip-gram [1] 简单看来,就是给定一个中心词去预测周围词,训练的过程就是学习词向量的过程。模型的目标函数是:
1 T ∑ t = 1 T ∑ − c ≤ j ≤ c , j ≠ 0 log p ( w t + j ∣ w t ) \frac{1}{T} \sum_{t=1}^T{\sum_{-c \leq j \leq c, j \neq 0}{\log{p(w_{t+j}|w_t)}}} T1t=1∑T−c≤j≤c,j=0∑logp(wt+j∣wt)
其中 c c c 为上下文词的范围。c 越大,需要的训练样本更大,训练的时间更久,但模型的效果会更好。 p ( w t + j ∣ w t ) p(w_{t+j}|w_t) p(wt+j∣wt) 的计算则是通过 softmax函数做概率的归一化:
p ( w O ∣ w I ) = exp ( v w O ′ T v w I ) ∑ w = 1 W exp ( v w ′ T v w I ) p(w_O|w_I) = \frac{\exp(v_{w_O}'^Tv_{w_{I}})}{\sum_{w=1}^W\exp(v_w'^Tv_{w_I})} p(wO∣wI)=∑w=1Wexp(vw′TvwI)exp(vwO′TvwI)
其中, v w v_w vw 和 v w ′ v_w' vw′ 分别为单词 w w w的中心词词向量和周围词词向量(论文中称 “input” and “output” vector representations), W W W 为词表的大小。采用 softmax 函数,在 inference的时候需要计算词表中每个词的概率,在一些W非常大的任务下,无疑计算量是很大的。另外,将上式预测一个词 w O w_O wO的概率,代入到 cross-entropy loss中,可得(这里只是简化下,只计算一个词的loss)
J θ = − log exp ( v w O ′ T v w I ) ∑ w = 1 W exp ( v w ′ T v w I ) J_{\theta} = - \log{ \frac{\exp(v_{w_O}'^Tv_{w_{I}})}{\sum_{w=1}^W\exp(v_w'^Tv_{w_I})}} Jθ=−log∑w=1Wexp(vw′TvwI)exp(vwO′TvwI)
通过化简,可以得到:
J θ = − v w O ′ T v w I + log ∑ w = 1 W exp ( v w ′ T v w I ) J_{\theta} = -v_{w_O}'^Tv_{w_I} + \log{\sum_{w=1}^W\exp(v_w'^Tv_{w_I})} Jθ=−vwO′Tvw