nlp

词向量(1)

word2vec

Posted by WJY on December 24, 2018

词向量word2vec

词向量是什么?词向量又称词嵌入,就是把词映射成向量形式。要想让计算机处理自然语言,首先把词转换成向量形式,词向量是自然语言处理(nlp)的基础。

one-hot介绍

假设词典中不同词的数量(词典大小)为N,每个词可以和从0到N−1的连续整数一一对应。这些与词对应的整数叫作词的索引。 假设一个词的索引为i,为了得到该词的one-hot向量表示,我们创建一个全0的长为N的向量,并将其第i位设成1。这样一来,每个词就表示成了一个长度为N的向量,可以直接被神经网络使用。

虽然one-hot词向量构造起来很容易,但通常并不是一个好选择。一个主要的原因是,one-hot词向量无法准确表达不同词之间的相似度,如我们常常使用的余弦相似度。对于向量,它们的余弦相似度是它们之间夹角的余弦值

word2vec工具解决了上面问题,它可以反应词与词的相似度,如man-woman = king - queen。word2vec工具有2个模型skip-gram和CBOW、2个高效训练方法负采样和层次softmax

skip-gram

这个模型是中心词预测背景词(上下文)。举个例子,假设序列是“ the man loves his son”,以“loves”作为中心词,设背景窗口大小为2。如图所示,skip-gram所解决的是,给定中心词“loves”,生成与它距离不超过2个词的背景词“the”、“man”、“his”、“son”的条件概率,即假设背景词相互独立,等价于下面式子

给定中心词生成背景词的条件概率可以通过对向量内积做softmax运算而得到:

其中词典索引集$\mathcal{V} = {0, 1, …, \mathcal{V} -1}$。假设给定一个长度为T的文本序列,设时间步t的词为w(t)。假设给定中心词的情况下背景词的生成相互独立,当背景窗口大小为m时,skip-gram的似然函数即给定任一中心词生成所有背景词的概率 :$\prod_{t=1}^{T} \prod_{-m \leq j \leq m,\ j \neq 0} P(w^{(t+j)} \mid w^{(t)})$

训练skip-gram

训练中我们使用最大化似然函数来学习模型参数,即最大似然估计:

等价于:

其中

注意:计算量和词典大小相关,计算开销比较大。

它的计算需要词典中所有词以$w_c$为中心词的条件概率。有关其他词向量的梯度同理可得。

训练结束后,对于词典中的任一索引为$i$的词,我们均得到该词作为中心词和背景词的两组词向量$\boldsymbol{v}_i$和$\boldsymbol{u}_i$。在自然语言处理应用中,一般使用skip-gram的中心词向量作为词的表征向量。

CBOW

这个模型是上下文(背景词)预测中心词。举个例子,假设序列是“ the man loves his son”,以“loves”作为中心词,设背景窗口大小为2。如图所示,CBOW所解决的是,给定背景词“the”“man”“his”“son”生成中心词“loves”的条件概率,也就是

因为连续词袋模型的背景词有多个,我们将这些背景词向量取平均,然后使用和跳字模型一样的方法来计算条件概率。设$\boldsymbol{v_i}\in\mathbb{R}^d$和$\boldsymbol{u_i}\in\mathbb{R}^d$分别表示词典中索引为$i$的词作为背景词和中心词的向量(注意符号的含义与跳字模型中的相反)。设中心词$w_c$在词典中索引为$c$,背景词$w_{o_1}, \ldots, w_{o_{2m}}$在词典中索引为$o_1, \ldots, o_{2m}$,那么给定背景词生成中心词的条件概率

给定一个长度为$T$的文本序列,设时间步$t$的词为$w^{(t)}$,背景窗口大小为$m$。连续词袋模型的似然函数是由背景词生成任一中心词的概率

训练CBOW

和skip-gram一样,

等价

其中

求微分

有关其他词向量的梯度同理可得。同跳字模型不一样的一点在于,我们一般使用连续词袋模型的背景词向量作为词的表征向量。

两种模型小结

  • word2vec包含跳字模型和连续词袋模型。跳字模型假设基于中心词来生成背景词。连续词袋模型假设基于背景词来生成中心词。
  • 当词典很大时候,由上面的推导公式可以看见计算开销会很大,为了提高训练方法,我们使用负采样和层次softmax方法

负采样

以skip-gram模型为例:模型的计算开销原因是中心词生成背景词使用了softmax,而softmax考虑了背景词可能是词典的任意一个。负采样思想:选择一个正类样本,k个噪音词。即正类样本:中心词$w_{c}$和背景词$w_{o}$ 同时出现在训练数据窗口;噪音词:中心词$w_{c}$和背景词$w_{o}$ 不同时出现在训练数据窗口,噪音词按照噪音词分布$p(w)$随机生成。

给定中心词$w_c$的一个背景窗口,我们把背景词$w_o$出现在该背景窗口看作一个事件,并将该事件的概率计算为

其中的$\sigma$函数与sigmoid激活函数的定义相同:

负采样条件概率被近似表示为:

设文本序列中时间步$t​$的词$w^{(t)}​$在词典中的索引为$i_t​$,噪声词$w_k​$在词典中的索引为$h_k​$。有关以上条件概率的对数损失为

现在,训练中每一步的梯度计算开销不再与词典大小相关,而与$K$线性相关。当$K$取较小的常数时,负采样在每一步的梯度计算开销较小。

层次softmax

层序softmax是另一种近似训练法。它使用了二叉树这一数据结构,树的每个叶结点代表词典$\mathcal{V}$中的每个词。

假设$L(w)$为从二叉树的根结点到词$w$的叶结点的路径(包括根结点和叶结点)上的结点数。设$n(w,j)$为该路径上第$j$个结点,并设该结点的背景词向量为$\boldsymbol{u}_{n(w,j)}$。,$L(w_3) = 4$。层序softmax将跳字模型中的条件概率近似表示为

其中$\sigma$函数与sigmoid激活函数的定义相同,$\text{leftChild}(n)$是结点$n$的左子结点:如果判断$x$为真,$[![x]!] = 1$;反之$[![x]!] = -1$。 让我们计算给定词$w_c$生成词$w_3$的条件概率。我们需要将$w_c$的词向量$\boldsymbol{v}_c$和根结点到$w_3$路径上的非叶结点向量一一求内积。由于在二叉树中由根结点到叶结点$w_3$的路径上需要向左、向右再向左地遍历,我们得到:

由于$\sigma(x)+\sigma(-x) = 1$,给定中心词$w_c$生成词典$\mathcal{V}$中任一词的条件概率之和为1这一条件也将满足:

此外,由于$L(w_o)-1$的数量级为$O(log_2 \mathcal{V})$,当词典$\mathcal{V}$很大时,层序softmax在训练中每一步的梯度计算开销相较未使用近似训练时大幅降低。

两种训练方法小结

  • 负采样通过考虑同时含有正类样本和负类样本的相互独立事件来构造损失函数。其训练中每一步的梯度计算开销与采样的噪声词的个数线性相关。
  • 层序softmax使用了二叉树,并根据根结点到叶结点的路径来构造损失函数。其训练中每一步的梯度计算开销与词典大小的对数相关。