word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读

目录

  • 前言
  • Continuous Bag-of-Word Model
    • One-word context
      • Update equation for W'
      • Update equation for W
    • Multi-word context
  • Skip-Gram Model
  • Optimizing Computational Efficiency
    • 前向传播
    • 后向传播
    • Hierarchical Softmax
    • Negative Sampling
    • 分析
  • Rreference

前言

最近读了word2vec Parameter Learning Explained,觉得它是一篇很好的讲解word2vec的论文。

Continuous Bag-of-Word Model


  • One-word context

    连续词袋模型的思想是用上下文预测中心词,先推导只有一个中心词的情况,然后可以很容易的推广到多个中心词的情况以及Skip-Gram
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第1张图片
    大致逻辑是:第一层神经元代表的是上下文对应的onehot向量,经过矩阵W的线性变换得到隐层表示h,然后经过W 的线性变换,再经过softmax得到输出y,即一个条件概率分布。然后计算y与真实标签的损失L,通过梯度下降更新参数。输入x是一个Vx1的onehot向量,W 是一个VxN 的矩阵,它的每个行向量代表输入词的词向量,W 是一个NxV 的矩阵,它的每个列向量可以看作输出词的词向量。
    x = [ 0 ⋮ 1 ⋮ 0 ] , W = [ w 1 T ⋮ w N T ] , W ′ = [ ∣ ⋯ ∣ w 1 ′ ⋯ w N ′ ∣ ⋯ ∣ ] x = \left[ \begin{matrix} 0 \\ \vdots \\ 1 \\ \vdots \\ 0 \end{matrix} \right], W = \left[ \begin{matrix} w_{1}^T \\ \vdots \\ w_{N}^T \end{matrix} \right], W^\prime = \left[ \begin{matrix} | & \cdots & | \\ w^\prime_{1} & \cdots & w^\prime_{N}\\ | & \cdots & | \end{matrix} \right] x=010,W=w1TwNT,W=w1wN
    接下来是详细推导

    首先计算隐层的表示:
    在这里插入图片描述
    因为x是一个onehot向量因此h实际上就是W的第k个行向量。W可以看作一个词典,每个行向量代表一个词,矩阵运算实际上就是拿出x代表的向量。W的行向量实际上就是我们要训练的词向量。

    接下来:
    在这里插入图片描述
    这一步实际上是为了得到一个中间变量u,它是用来计算最后的条件分布y。如 (2) 式,u的第j位是W 的第j个列向量和h的点积,可以看作输入词wI 和输出词wj 之间相似度的一个得分。

    然后是最后的概率分布:
    在这里插入图片描述
    这里计算的是输入词是wI 时输出词(中心词)是wj 的概率。

    (2) 中的式子带入 (3) 得到:
    在这里插入图片描述


  • Update equation for W

    训练目标是最大化 (4) 真实输出词(中心词)的条件概率,也就是
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第2张图片

    这里
    在这里插入图片描述
    是损失函数,j* 是真实输出词的序号。

    Euj 做偏微分
    在这里插入图片描述
    j=j*tj = 1,否则0ej 可以看作是wj 的预测误差。当j=j*ej<0,否则ej>0

    接下来计算 Ew,ij 的偏导
    在这里插入图片描述
    有了 Ew,ij 的偏导,我们就可以使用梯度下降更新w,ij
    在这里插入图片描述
    这里 η代表更新的步长,是一个超参。
    也可以写成向量的形式
    在这里插入图片描述
    这里vwj 代表W 的第j 个列向量。我们知道h实际上就是输入词的词向量,vwj 我们可以看作是代表输出词的向量。当ej>0 时,代表向量vwj 远离向量h,否则代表向量vwj 靠近向量h。如下图:
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第3张图片


  • Update equation for W

    现在推导W的更新公式,先求Ehi 的偏导数
    在这里插入图片描述
    这里可以用上面得到的结果,EHi 是一个向量,它是W 的列向量关于ej 的加权和 (j = 1,2,…,N)
    E H = ∑ j = 1 N e j v w j ′ EH = \sum_{j = 1}^{N} e_{j}v^ \prime_{wj} EH=j=1Nejvwj

    由(1)可知
    在这里插入图片描述
    现在可以求EW的每个元素wki 的偏导数了
    在这里插入图片描述

    由此可以得到EW的导数
    在这里插入图片描述
    结果是一个VxN的矩阵,由于x是一个onehot向量,因此只有一个行向量是非0的,也就是输入词对应的向量,因此,W只需更新一个行向量
    在这里插入图片描述
    由于EH可看作输出向量对误差的加权和,因此若一个输出向量对应的误差比较大,那它对vwI 的影响也比较大。


  • Multi-word context

    模型图解
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第4张图片
    以上是只有一个输入词的情况,一般的CBOW会有多个输入词(多个上下文词),我们改变的只是把h替换成多个输入词对应向量的平均和
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190912102546572.png#pic_center

    E也同理,只是改变了h,其它直接套用 (7)
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第5张图片

    W 的更新公式还是没变
    在这里插入图片描述
    W的更新公式则变成更新C 个输入向量
    在这里插入图片描述


Skip-Gram Model


Skip-GramCBOW正好相反,用一个中心词去预测c个上下文词
在这里插入图片描述
这里vTwI 代表中心词对应向量。

输出的概率也变成了中心词是WI 时上下文词为 Wc,j 的条件概率
在这里插入图片描述
这里计算每个条件概率时使用的中间变量 uc,j 是同一个向量的 c个备份
在这里插入图片描述

word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第6张图片
不要被上图所误导,认为最终会输出c 个不同结果,其实每个向量都相同,即输入一个中心词时的条件概率分布p(y|wI) ,是一个 V维向量,若上下文对应的索引为c1,c2,…,cM,则向量y 对应的分量就是上下文词对应的条件概率。只是为了便于理解因此复制了c份。

现在,可以计算损失函数了
word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第7张图片
损失函数为c 个条件概率的负对数似然之和,可以看作c 个条件概率与c个onehot 标签的交叉熵。

Euc,j 求偏导数
在这里插入图片描述
ec,j 代表每个输出词的误差

为了方便,引入一个V维向量EI ,它的每个分量是c 个误差之和。
在这里插入图片描述
现在计算损失对wij 的偏导数
在这里插入图片描述
得到wij 的更新公式
在这里插入图片描述
可以写成向量的形式
在这里插入图片描述
同理参照 (12)(13)(14) ,可得到vwI 的更新公式
在这里插入图片描述
这里EH是输出词对应损失的加权和
在这里插入图片描述


Optimizing Computational Efficiency


目前已经推导过CBOWSkip-Gram,现在来从前向传播和和后向传播来分析它们的计算复杂度。

  • 前向传播

    在前向传播时,W涉及到的计算实质上是索引查询操作,计算复杂度为O(1),而到了W 则需要计算矩阵和向量的乘法,再计算一次softmax ,计算复杂度为NxV
  • 后向传播

    每个模型实质上只是在学两个矩阵 WW ,学习 W 的代价是比较大的,由更新公式我们可以知道,每次迭代 W 只需更新一个(Skip-Gram)或者多个行向量(CBOW),但是W 必须更新全部参数(V个列向量)。因此,当要优化时,很自然的要拿W’ 开刀,也就是想办法减少每次迭代 W 需要更新的参数量。

  • Hierarchical Softmax

    层次softmax是高效计算softmax的一个方式,它使用一棵霍夫曼树,树的叶节点代表词,对每个叶子节点来说,只有唯一的一条路径。层次softmax用这条路径来计算叶节点代表的词的概率。
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第8张图片
    在层次softmax中,没有V个代表了输出词的向量,取而代之的是每个内节点都有一个可学习的向量vn(w,j)。这里n(w,j) 代表从根到词w的路径上的第j 个节点。由二叉树的性质可知共有V-1 个内部节点。而一个词是输出词的概率变成
    在这里插入图片描述
    这里 L(w) 代表根节点到 w路径的长度, ch(n) 代表节点n 的左子节点,vn(w,j) 是节点上的向量,h 是隐层的表示,在Skip-Gram中是中间词对应的向量,在CBOW 中是上下文词对应向量的平均。vn(w,j)h 的点积传入一个Sigmoid 函数中得到一个概率。|x| 是一个如下定义的函数
    在这里插入图片描述
    我们把输出词的概率定义成从根节点走到叶节点的一个概率,因此,需要知道到从一个节点出发需要走右子节点还是左子节点。于是定义从节点n 出发走向左子节点的概率为
    在这里插入图片描述
    因此,走向右子节点的概率为
    在这里插入图片描述
    这里用到了Sigmoid 函数的性质

    以上图为例,输出词是w2 的概率为:
    在这里插入图片描述
    对应路径为n(w,1)->n(w,2)->n(w,3)->w3

    显然,所有路径概率之和为1
    在这里插入图片描述
    现在我们推导内部节点对应向量的更新公式,先假设只有一个上下文词的情况,很容易可以推广到CBOWSkip-Gram。为了方便,定义如下符号
    在这里插入图片描述

    vj 表示通往w 路径上的第j个节点上的向量
    在这里插入图片描述
    对一个训练样例来说,损失函数如下
    在这里插入图片描述
    先对Sigmoid 内的标量求导
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第9张图片
    这里tj 是一个指示函数,当在路径上第j 个节点出发要走向左子节点时为1 ,否则为0。这个导数值可以看作是该节点的误差,Sigmoid 函数值代表了了在该节点往左走的概率,tj 代表真实的概率。接下来可以求损失对n(w,j) 对应向量的偏导
    在这里插入图片描述
    因此可以得到内节点向量的更新公式
    在这里插入图片描述
    可以知道只需更新L(w)-1 个向量。当模型用的是一颗完全二叉树时,路径长度为logV 远小于V

    接下来就是求W的更新公式(从输入到隐层的参数),首先求Eh 的偏导
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第10张图片
    可以将结果整理成和之前的推导相同的形式,这里EH 代表路径上每个节点上的向量和节点上误差的加权和。之后的推导可分别参考上面CBOWSkip-gram 的结果。


  • Negative Sampling

    负采样的思想比层次softmax更加直接,他保留了模型原本的结构,改变的是在更新W 的时候只更新一部分向量。首先真正的输出词一定要被更新,剩下要做的就是在其他词中采样一些词作为负类别。
    在这里插入图片描述
    可以看到,负采样直接改变了损失函数,损失E 只与输出词vwo 和被采样到作为负类的词有关。

    换汤不换药,考虑只有一个上下文词,首先求E 对标量 vwjh 的偏导
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第11张图片
    然后求对vwj 的偏导
    在这里插入图片描述
    可以得到vwj 的更新公式
    在这里插入图片描述
    同样的,为了求W 的更新公式,先求Eh 的偏导
    word2vec Parameter Learning Explained论文笔记:CBOW,Skip-Gram,层次softmax与负采样解读_第12张图片
    得到的结果是输出词以及负类词对应向量对误差的加权和,之后的推导也是参照上面CBOWSkip-gram 的结果。

  • 分析

    层次softmax实际上是把输出词概率转换成一条根到叶节点的路径的概率,对于一个输出词只有一个概率,而不是一个有V 个概率的分布,但是由于所有路径的总概率和为1 因此增加这个正确路径的概率会隐式地抑制其他路径的概率。而负采样则比较暴力,直接改变损失函数,只更新输出词对应的向量和被采样到的负类。这两种方法都既加快了正向传播的速度(和损失相关的参数变少了),也加快了反向传播更新参数的速度。

Rreference


Xin Rong.word2vec Parameter Learning Explained arXiv:1411.2738
Goldberg, Y. and Levy, O. (2014). word2vec explained: deriving mikolov et al.’s negativesampling word-embedding method. arXiv:1402.3722 [cs, stat]. arXiv: 1402.3722.
Mikolov, T., Chen, K., Corrado, G., and Dean, J. (2013a). Efficient estimation of word
representations in vector space. arXiv preprint arXiv:1301.3781.
Mikolov, T., Sutskever, I., Chen, K., Corrado, G. S., and Dean, J. (2013b). Distributed
representations of words and phrases and their compositionality. In Advances in Neural
Information Processing Systems, pages 3111{3119.
Mnih, A. and Hinton, G. E. (2009). A scalable hierarchical distributed language model.
In Koller, D., Schuurmans, D., Bengio, Y., and Bottou, L., editors, Advances in Neural
Information Processing Systems 21, pages 1081{1088. Curran Associates, Inc.
Morin, F. and Bengio, Y. (2005). Hierarchical probabilistic neural network language model.
In AISTATS, volume 5, pages 246{252. Citeseer.

你可能感兴趣的:(自然语言处理,word2vec,层次softmax,负采样)