word2vec之Negative Sampling理解

时间:2022-11-21 06:21:12

word2vec之Negative Sampling理解

本文章将介绍基于Negative Sampling的CBOW和Skip-Gram模型。与Hierarchical Softmax相比,Negative Sampling不需要构建复杂的Huffman树,以及进行多次二分类,而是利用简单的随机负采样,能大幅度提高性能。因而可以说Negative Sampling是Hierarchical Softmax的一种改进。

1 CBOW模型

在cbow模型中,已知的是上下文 c o n t e x t ( w ) ,需要去预测词语 w 。所以可以换种说法,对于特定的 c o n t e x t ( w ) ,词语 w 是其正样本,其他词语就是其负样本。但是负样本那么多,我们如何高效的去选择负样本,这就牵涉到Negative Sampling算法。首先,我们假设已经采样到一个负样本集合 N E G ( w ) ϕ 。对于一个 w ~ ,定义一个标签:
ι ( w ~ ) = 1 w ~ = w
ι ( w ~ ) = 0 w ~ w
所以类似逻辑回归,我们定义了一个如下的公式:
p ( u | c o n t e x t ( w ) ) ) = δ ( x w T θ u ) ι ( w ~ ) = 1
p ( u | c o n t e x t ( w ) ) ) = 1 δ ( x w T θ u ) ι ( w ~ ) = 0
将其写成一个正式为:

p ( u | c o n t e x t ( w ) ) ) = δ ( x w T θ u ) ι w ( u ) ( 1 δ ( x w T θ u ) ) 1 ι w ( u )

假设词语之间相互独立,我们希望最大化的是:
g ( w ) = u ϵ w N E G w p ( u | c o n t e x t ( w ) ) = u ϵ w N E G w δ ( x w T θ u ) ι w ( u ) ( 1 δ ( x w T θ u ) ) 1 ι w ( u )

对于一个给定的语料库 C ,假设其中各词语相互独立,所以整体函数为:
G = w ϵ C g ( w )

为了求得 g ( w ) 的最大值,我们对上式进行最大似然估计:
ι = l o g ( G ) = l o g ( w ϵ C g ( w ) )

= w ϵ C l o g ( g ( w ) )

= w ϵ C l o g ( u ϵ w N E G w p ( u | c o n t e x t ( w ) ) )

= w ϵ C u ϵ w N E G w l o g ( p ( u | c o n t e x t ( w ) ) )

= w ϵ C u ϵ w N E G w l o g ( δ ( x w T θ u ) ι w ( u ) ( 1 δ ( x w T θ u ) ) 1 ι w ( u ) ) )

= w ϵ C u ϵ w N E G w ι w ( u ) l o g ( δ ( x w T θ u ) ) + ( 1 ι w ( u ) ) l o g ( 1 δ ( x w T θ u ) )

= w ϵ C l o g ( δ ( x w T θ u ) ) + u ϵ N E G ( w ) l o g ( 1 δ ( x w T θ u ) )

= w ϵ C l o g ( δ ( x w T θ w ) ) + u ϵ N E G ( w ) l o g ( δ ( x w T θ u )

为了求导方便,我们将后面的部分记为:

L ( w , u ) = ι w ( u ) l o g ( δ ( x w T θ u ) ) + ( 1 ι w ( u ) ) l o g ( 1 δ ( x w T θ u ) )

接下来利用梯度下降算法对其进行优化:
α L ( w , u ) α θ u = α ι w ( u ) l o g ( δ ( x w T θ u ) ) + ( 1 ι w ( u ) ) l o g ( 1 δ ( x w T θ u ) ) α θ u

= [ L ( w , u ) δ ( x w T θ u ) ] x w T

所以 θ u 的更新方程为:
θ u + = η [ L ( w , u ) δ ( x w T θ u ) ] x w T

由于 θ u x w T 相对称,所以对 x w T 求导得
α L ( w , u ) α x w T = [ L ( w , u ) δ ( x w T θ u ) ] θ u

所以 x w T 的更新增量为:
e = η u ϵ w N E G w [ L ( w , u ) δ ( x w T θ u ) ] θ u

由于 x w T c o n t e x t ( w ) 中各词的词向量之和,所以可以将该增量平均到 c o n t e x t ( w ) 各词中,即:
v ( u ) + = e ,其中 u ϵ c o n t e x t ( w )

2、Skip-Gram模型

本小节介绍基于Negative Sampling的Skip-Gram模型。和基于Hierarchical Softmax模型的Skip-Gram模型相类似,我们可以将目标方程定义为:

G = w ϵ C u ϵ c o n t e x t ( w ) g ( u )
,其中 g ( u ) 和CBOW模型中定义相似
g ( w ) = u ϵ w N E G w p ( u | w ) = u ϵ w N E G w δ ( x w T θ u ) ι w ( u ) ( 1 δ ( x w T θ u ) ) 1 ι w ( u )

于是我们对 G ,去对数似然函数:
ι = l o g ( G ) = l o g ( w ϵ C u ϵ c o n t e x t ( w ) u ϵ w N E G w p ( u | w ) )

= w ϵ C u ϵ c o n t e x t ( w ) u ϵ w N E G w l o g ( p ( u | w ) )

= w ϵ C u ϵ c o n t e x t ( w ) u ϵ w N E G w l o g ( δ ( x w T θ u ) ι w ( u ) ( 1 δ ( x w T θ u ) ) 1 ι w ( u ) )

= w ϵ C u ϵ c o n t e x t ( w ) u ϵ w N E G w ι w ( u ) l o g ( δ ( x w T θ u ) + ( 1 ι w ( u ) ) l o g ( 1 δ ( x w T θ u ) )

具体的推导过程和CBOW相类似,就不一一推导了。

3、Negative Sampling

由上面两节可知,采样的好坏则直接决定了最后模型的性能,那么对于一个词语 w ,如何快速有效的生成 N E G ( w ) 呢?
词典 D 中的词在语料 C 中,出现的次数有高有低,对于采样有个通用的准则:高频的词语,被选择为负样本的概率应该较高,低频词语被选择为负样本的概率较低。这其实就是一个带权重采样问题,相关的算法比较多。下面借助一篇博客中的介绍解释一种带权重采样的问题。
word2vec之Negative Sampling理解
那么word2vec怎么去实现这个带权采样问题了?
l 0 = 0 l k = j = 1 k l e n ( w j ) , k = 1 , 2 , 3... , N 。这里 w j 表示词典 D 中第 j 个词。则以 ( l j ) j = 0 N 会在长度 [ 0 , 1 ] 中划分N个非等分区间。记: I i = ( l i 1 , l i ] i = 1 , 2 , 3... N 为其N个非等分区间。进一步引入区间 [ 0 , 1 ] 上的一个等分区间,部分节点记为 ( m j ) j = 0 M ,其中 M N
word2vec之Negative Sampling理解
有了这个刻度表后,我们可以进行一个建立一个映射关系:

T a b l e ( i ) = w j

有了这个映射后,采用就非常简单了。首先我们在[1,M-1]中随机选取一个整数 r ,然后通过映射 T a b l e ( r ) ,就可以获取一个样本 w 。那么,如果碰巧选到自己怎么办?直接跳过就行了。

需要注意的是,word2vec中 l e n ( w ) 的计算,有稍许不同,其对频率 c o u n t ( w ) 作了 α 次幂。在算法中 α 选择为3/4,所以 l e n ( w ) 的计算公式变为了:

l e n ( w ) = c o u n t ( w ) 3 4 u ε D c o u n t ( u ) 3 4

M 则选择为 10 8