这篇论文便是word2vec的原论文,是入门NLP的必读论文之一。1986年Hinton提出了 Distributed Representation 这个概念,2003年 Bengio提出的NNLM首次使用了词向量,而这篇论文提出了两种新的模型结构对以前学习词向量的方式进行改进。
Previous Work
在这篇论文之前,已经有了一些 Distributed Representation 的工作,比如 Bengio 在03年提出的 NNLM(Neural Net Language Model)模型,以及作者之前的工作 RNNLM(Recurrent Neural Net Language Model) 。它们作为神经网络语言模型,同时还能学习词向量,但它们作为早期学习词向量的模型,还是存在一些问题的,比如训练时间长、学习出的词向量效果一般等。
可以简单计算下 NNLM 和 RNNLM模型的计算复杂度。
NNLM模型输入层将词映射成向量,相当于一个 1×V1 \times V1×V 的 one-hot向量乘以一个 V×DV \times DV×D 的向量得到一个 1×D1 \times D1×D 的向量,而假设输入前 N 个词,输出N个词向量拼接在一起的 1×ND1 \times ND1×ND 向量,这一步的计算复杂度为 N×DN \times DN×D;隐藏层是一个以tanh为激活函数的全连接层,此时将前面的向量映射为 1×H1 \times H1×H 的向量,此时的计算复杂度为 N×D×HN \times D \times HN×D×H;输出层是一个全连接层,后面接一个softmax函数来生成概率分布,此时是将隐层向量映射成 1×V1 \times V1×V 的向量,此时的计算复杂度为 H×VH \times VH×V,这样总的计算复杂度为:
Q=N×D+N×D×H+H×VQ = N \times D + N \times D \times H + H \times V Q=N×D+N×D×H+H×V
再来看 RNNLM的计算复杂度。RNNML模型没有 projection层,只有输入、隐层和输出层。隐藏层将当前的词向量和前一时间步的状态向量映射为隐层向量,这里的词向量维度和隐层向量的维度相等,此时的计算复杂度为 H×H+D×HH \times H + D \times HH×H+D×H;输出层为一个全连接层,后面接一个softmax函数来生成概率分布,此时的计算复杂度为 H×VH \times VH×V,这样总的计算复杂度为:
Q=H×H+H×VQ = H \times H + H \times V Q=H×H+H×V
这里不难看出,两个模型的计算复杂度都以输出层主导,而采用softmax函数来计算全量word的概率,这里使得计算效率非常低,因为通常 VVV 都很大。那么一个优化输出层softmax计算的方式是 Hierarchical Softmax,这个技巧最早在 Bengio 05年的工作 [2] 中提出,它的思路是将softmax分解成多个sigmoid,并通过构建出一棵二叉树,下一个word的概率只需沿着二叉树根节点至叶子结点的路径来计算,将 ∣V∣|V|∣V∣ 的复杂度降为了 log?∣V∣\log{|V|}log∣V∣。
采用 Hierarchical Softmax 来优化输出层的计算,可以将上面两个模型输出层的计算复杂度降为 H×log?VH \times \log{V}H×logV。此时再看计算复杂度,中间项的计算便成了模型训练时的瓶颈,即隐层的计算过于复杂,那就需要对模型的结构进行优化。出于这个目的,作者提出了两个简化的模型结构。
New Log-linear Models
其实,在此之前,作者就提出了一些工作来优化模型,它们的思路概括看来都是先用一个 simple network 来学习词向量,再用一个 complex network 基于这些学习得到的词向量。这里,作者设计了两个最简单的模型结构,即两个 log-linear models(将语言模型的建立看成一个多分类问题,相当于线性分类器加上softmax,中间是没有非线性变换的),skip-gram 和 cbow 模型。
前面的语言模型基本思想是,句子中下一个词的出现和前面的词是有关系的,所有可以使用前面的词预测下一个词。而 Word2vec中的模型基本思想是,句子中相近的词之间是有联系的,比如今天后面经常出现上午、下午和晚上。所以word2vec的基本思想就是用词来预测词,skip-gram使用中心词预测周围词,cbow使用周围词预测中心词。
Continuous Bag-of-Words Model(CBOW)
这个模型有点类似于NNLM模型,但它没有隐藏层,输入为one-hot形式的待预测中心词的周围词,将其映射为周围词词向量,并求 sum/avg,得到一个 1×D1 \times D1×D 的向量,再乘以中心词词向量矩阵,经过softmax计算,得到一个 1×V1 \times V1×V 的向量,其对应 V 个词的概率。这里模型计算的条件概率即为 p(wi∣wi?2,wi?1,wi+1,wi+2)p(w_i|w_{i-2},w_{i-1},w_{i+1},w_{i+2})p(wi?∣wi?2?,wi?1?,wi+1?,wi+2?),可以注意到,周围词的顺序并不会影响概率的计算。具体的模型计算过程见下图:
有上面的计算过程,可以简单计算CBOW的计算复杂度,即 Q=N×D+D×VQ = N \times D + D \times VQ=N×D+D×V,如果采用Hierarchical Softmax 则可以降低为 Q=N×D+D×log?2(V)Q = N \times D + D \times \log_2{(V)}Q=N×D+D×log2?(V),较之前面模型的计算复杂度,得到了很大的优化。
这里注意到,在模型的运算中有两个矩阵 WWW 和 W′W'W′,前面的矩阵称为周围词词向量(论文中称为"input" vector representation),用于将 one-hot形式的周围词映射为周围词词向量,而后者矩阵称为中心词词向量(论文中称为 “output” vector representation),其中每个中心词向量都与周围词向量求平均得到的向量做内积,得到每个中心词的概率。从另外一个角度看,做内积得到的是两个向量的相似度,而根据word2vec的思想是相近的词是有联系的,优化目标是为某个中心词的概率尽可能大,就是两个向量的相似度尽可能大,那么意味着模型需要(能够)学习出中心词与周围词一种联系(相似),这样中心词向量和周围词向量则都是有效的。通常,对于 WWW 和 W′W'W′,会取前者或者两者的平均。
CBOW的损失函数定义如下:
J(θ)=1T∑T∑logP(c∣o)=1T∑exp{uoTvc}∑j=1Texp{uoTuj}J(\theta) = \frac{1}{T} \sum_{T}{\sum{logP(c|o)}} = \frac{1}{T} \sum{\frac{exp\{u_o^Tv_c\}}{\sum_{j=1}^T{exp\{u_o^Tu_j\}}}} J(θ)=T1?T∑?∑logP(c∣o)=T1?∑∑j=1T?exp{
uoT?uj?}exp{
uoT?vc?}?
其中 uou_ouo? 是周围词词向量的 sum/avg,vcv_cvc?, vjv_jvj? 是中心词向量。
Continuous Skip-gram Model
skip-gram 和 cbow结构上差不多,但是它是基于中心词,去预测窗口内的周围词。就如上图的模型结构,skip-gram需要去计算四个概率,分别是 p(wi?1∣wi)p(w_{i-1}|w_i)p(wi?1?∣wi?), p(wi?2∣wi)p(w_{i-2}|w_i)p(wi?2?∣wi?), p(wi+1∣wi)p(w_{i +1}|w_i)p(wi+1?∣wi?), p(wi+2∣wi)p(w_{i+2}|w_i)p(wi+2?∣wi?)。而其中一个周围词概率的计算流程如下:
根据上面流程可以计算 skip-gram的计算复杂度,即 Q=C×(D+D×log?2(V))Q = C \times (D + D \times \log_2{(V)})Q=C×(D+D×log2?(V)),其中 CCC 为预测周围词的范围。此时可以看出,计算复杂度得到一定程度的优化。和cbow一样,模型中存在两个矩阵 WWW 和 W′W'W′,但前者在skip-gram中为中心词词向量,而后者为周围词词向量。
另外,skip-gram模型的损失函数如下:
J(θ)=1T∑t=1T∑?m≤j≤m,j≠0log?p(wt+j∣wt)J(\theta) = \frac{1}{T} \sum_{t=1}^T{\sum_{-m \leq j \leq m,j \neq 0}{\log{p(w_{t+j}|w_t)}}} J(θ)=T1?t=1∑T??m≤j≤m,j??=0∑?logp(wt+j?∣wt?)
其中概率的计算为 p(o∣c)=exp(uoTvc)∑w=1Vexp(uwTvc)p(o|c)=\frac{exp(u_o^Tv_c)}{\sum_{w=1}^V{exp(u_w^Tv_c)}}p(o∣c)=∑w=1V?exp(uwT?vc?)exp(uoT?vc?)?,vcv_cvc? 是中心词向量,uou_ouo?, uwu_wuw? 是窗口内上下文词向量。
总结
其实总的看来,word2vec的工作并没有太多创新性的东西,模型结构采用极简的方式,在训练技巧上 Hierarchical Softmax 和负采样也是前人工作的改进,而 word2vec 之所以成功,是因为它的这种设计模式在大语料下训练的速度非常快,从而能得到效果更好的词向量。也正如论文中,作者提到:
While this is what makes neural networks so attractive, we decided to explore simpler model that might not be able to represent the data as precisely as neural networks, but can possibly trained on much more data efficiently.
word2vec的成功,也印证了一句江湖话:天下武功,唯快不破。
参考文献
[1] Bengio Y, Ducharme R, Vincent P, et al. A neural probabilistic language model[J]. Journal of machine learning research, 2003, 3(Feb): 1137-1155.
[2] Morin F, Bengio Y. Hierarchical probabilistic neural network language model[C]//Aistats. 2005, 5: 246-252.