在前面提到的神经网络语言模型中,词向量只是一个副产品,并不是核心任务(它主要训练了一个用来度量语言流畅程度的模型,其中词向量是它中间产品),而且神经网络模型中的矩阵运算操作会极大的降低模型的训练效率。
所以如果目标只是学习词向量的话,可以没必要采用语言模型的方式,而可以直接从分布式假说的角度来设计模型和目标函数,c&w模型就是直接以学习和优化词向量为最终任务的。
如图,是一个简单的前馈神经网络,目的是计算n元组的得分,并从得分区分文本是来自真实的训练文本还是随机生成的文本。真实的训练文本中的n元组 ( w i , C ) (w_i,C) (wi,C)为正样本,随机生成的文本 ( w i ′ , C ) (w^{\\'}_i,C) (wi′,C)为负样本。
首先,对于 s ( w i , C ) s(w_i,C) s(wi,C),将 w i − C . . . w i − 1 w i w i + 1 . . . w i + C w_{i-C}...w_{i-1}w_iw_{i+1}...w_{i+C} wi−C...wi−1wiwi+1...wi+C中的每一个词从词向量矩阵L中获取对应的词向量,并进行拼接作为第一层 h 0 h_0 h0 h 0 h_0 h0经过一层隐藏层的学习,得到 h 1 = f ( W 0 h 0 + b 0 ) h_1=f(W_0h_0+b_0) h1=f(W0h0+b0),其中f(·)是非线形激活函数 h 1 h_1 h1再经过线形变换,得到n元组 ( w i , C ) (w_i,C) (wi,C)的得分: s ( w i , C ) = W 1 h 1 + b 1 s(w_i,C)=W_1h_1+b_1 s(wi,C)=W1h1+b1在词向量优化的过程中,c&W模型希望每一个正样本应该比对应的负样本打分高1分: s ( w i , C ) > s ( w i ′ , C ) + 1 s(w_i,C)>s(w'_i,C)+1 s(wi,C)>s(wi′,C)+1对于整个训练语料,模型需要遍历所有的n元组,并对目标函数进行最小化优化: ∑ ( w i , C ) ∈ D ∑ w i ′ ∈ V m a x ( 0 , 1 + s ( w i ′ , C ) − s ( w i , C ) ) \sum_{(w_i,C)\in{D}}\sum_{w'_i\in{V}}max(0, 1+s(w'_i,C)-s(w_i,C)) ∑(wi,C)∈D∑wi′∈Vmax(0,1+s(wi′,C)−s(wi,C))