Word2vec负采样

下文中的模型都是以Skip-gram模型为主。
 
一、论文发展
word2vec中的负采样(NEG)最初由 Mikolov在论文《Distributed Representations of Words and Phrases and their Compositionality》中首次提出来,是Noise-Contrastive Estimation(简写NCE,噪声对比估计)的简化版本。在论文中针对Skip-gram模型直接提出负采样的优化目标函数为:
其中Pn(w)是目标词不是w的上下文的几率分布。
论文中没有给出证实,到了2014年,Yoav Goldberg在论文《word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method》里对上述目标函数给出了推导。
 
二、原始的skip-gram模型的目标函数
若是没有采用负采样的话,那么skip-gram模型的目标函数为:
其中p(c|w)表示的是当前词预测到的目标上下文的几率最大,C(w)是目标词w的全部上下文集合。
相应地能够简化为
式中D是语料中全部单词和上下文的集合。
若是咱们采用softmax函数的话,那么咱们能够获得对应每一个上下文的几率大小为:
其中Vc和Vw能够当作是对应词c和词w的词向量。关于如何获得这个式子能够参考后面,那么将该式子代入上式并取log能够获得:
对上述目标函数求最大化,可让类似的词具备类似的向量值。
 
三、采用负采样的目标函数
可是对上述目标函数进行优化,第二项须要对词典里的全部词进行优化,因此计算量比较大。若是换个角度考虑,若是咱们将正常的上下问组合当作是1,不正常的上下文组合当作是0,那么问题转换为二分类问题,那么咱们目标就是最大化下面的目标函数。
将输出层的softmax函数改成sigmoid函数,那么
一样代入上式能够获得
可是这个目标函数存在问题,若是Vc=Vw,而且VcxVw足够大的话,就能取到最大值,这样全部词向量都是同样的,获得的词向量没有意义。因此考虑负采样,即引入负样本,那么
那么获得
则与Mikolov提出的式子是一致的。
 
四、如何推导获得目标函数

 

五、举例
以“今天|天气|很是|不错|啊”举例,假设上下文只有一个词,选择目标词是“天气”,那么出现的状况有:
今天|天气,很是|天气,不错|天气,啊|天气
因为咱们假设上下文只有一个词,那么在这些状况中只有【今天|天气,很是|天气】是正确的样本。
当咱们采用【今天|天气】这个样本时,咱们但愿输入【天气】,会输出标签【今天】,其余几率都是0。
 
对于原始的skip-gram模型来讲,这对应是一个4分类问题,当输入【今天|天气】时,那么咱们可能出现的几率是P(今天|天气)、P(很是|天气)、P(不错|天气)和P(啊|天气),咱们的目标就是让P(今天|天气)这个几率最大,可是咱们得同时计算其余三类的几率,并在利用反向传播进行优化的时候须要对全部词向量都进行更新。这样计算量很大,好比咱们这里就要更新5*100=500个参数(假设词向量维度是100维的)。
 
可是若是采用负采样,当输入【今天|天气】时,咱们从【很是|不错|啊】中选出1个进行优化,好比【不错|天气】,即咱们只需计算P(D=1|天气,今天)和P(D=0|天气,不错),而且在更新的时候只更新【不错】、【天气】和【今天】的词向量,这样只需更新300个参数,计算量大大减小了。
 
六、参考资料
[1]word2vec Parameter Learning Explained
[2]word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method
[3]Note on Word Representation
[4]Distributed Representations of Words and Phrases and their Compositionality