Word2Vec

作者: Jarkata | 来源:发表于2021-03-01 19:37 被阅读0次

    自然语言处理问题中,一般以词作为基本单元,例如我们想要分析 "我去过华盛顿州" 这句话的情感,一般的做法是先将这句话进行分词,变成去过华盛顿州,由于神经网络无法处理词,所以我们需要将这些词通过某些办法映射成词向量。词向量是用来表示词的向量,也可被认为是词的特征向量。把词映射为实数域向量的技术也叫词嵌入(word embedding)

    为何不采用 one-hot 向量

    one-hot词向量过于稀疏,无法表达不同词之间的相似度。任意一对词的one-hot向量的余弦相似度都是0。



    1.word2vec

    2013 年,Google 团队发表了 word2vec 工具。word2vec 工具主要包含两个模型:跳字模型(skip-gram)连续词模型(continuous bag of words,简称 CBOW),以及两种高效训练的方法:负采样(negative sampling)和层序 softmax(hierarchical softmax)。值得一提的是,word2vec 词向量可以较好地表达不同词之间的相似度和类比关系。

    1.1跳字模型(skipgram)

    在跳字模型中,我们用一个词来预测它在文本序列周围的词。例如,给定文本序列the","man","hit","his","son"。设背景窗口大小为 2, 跳字模型所关心的是,给定 "hit",生成它邻近词 "the","man"."his","son" 的概率(在这个例子中,"hit" 叫中心词,"the","man","his","son" 叫背景词),即


    假设在给定中心词的情况下,背景词的生成是相互独立的,那么根据乘法原理,上式可以改写成

    跳字模型需要最大化给定任一中心词生成背景词的概率


    上式得最大似然估计与最小化以下损失函数等价:

    我们可以用 v代表中心词的词向量, u代表背景词的词向量。换言之,对于词典中一个索引为i 的词,它本身有两个向量 v_i(输入向量表达,也就是最终的词向量)和u_i(输出向量表达)进行表示,在计算的过程中,根据其所处的角色不同,选择不同的词向量。词典中所有词的这两种向量正是跳字模型所需要学习的参数。为了将模型参数植入损失函数,我们需要使用模型参数表达损失函数中的中心词生成背景词的概率。假设中心词的概率是相互独立的。给定中心词w_c在词典中的索引为c,背景词 w_o在词典中的索引为o,损失函数中中心词生成背景词的概率可以使用 softmax 函数进行定义:

    当序列长度T较大时,我们通常随机采样一个较小的子序列来计算损失函数并使用 SGD 优化该损失函数。通过求导,我们可以计算出上式生成概率的对数关于中心词向量v_c的梯度为:


    通过上面计算得到梯度后,我们可以使用随机梯度下降来不断迭代模型参数v_c。其他模型参数u_0的迭代方式同理可得。最终,对于词典中任一索引为i的词,我们均得到该词作为中心词和背景词的两组词向量v_iu_i

    1.2连续词典模型(CBOW)

    CBOW对小型数据比较合适,而Skip-Gram在大型语料中表现更好
    连续词袋模型与跳字模型类似,与跳字模型最大的不同是,连续词袋模型是用一个中心词在文本序列周围的词来预测中心词。简单的说就是,跳字模型用中心词预测周围的词;连续词袋模型用周围的词预测中心词。
    例如,给定文本"the","man","hit","his","son",连续词袋模型所关心的是,邻近词 "the","man","his","son" 一起生成中心词 "hit" 的概率
    连续词袋模型需要最大化由背景词生成任一中心词的概率:


    上式的最大似然估计与最小化以下损失函数等价

    这里可以用vu分别代表背景词和中心词的向量(注意符号和跳字模型不同)。给定中心词 w_c在词典中的索引为c,背景词 w_{o_1},...,w_{o_2m}在词典中的索引为 ,损失函数中的背景词生成中心词的概率可以使用 softmax 函数定义为

    同样,当序列长度T较大时,我们通常随机采样一个较小的子序列来计算损失函数,并使用随机梯度下降优化该损失函数,通过微分,我们可以计算出上式生成概率的对数关于任一背景词向量 v_{o_i}(i=1,...,2m)的梯度为:

    而上式与下式等价:

    注解:看到这里,就引出了word2vec的核心方法,其实就是认为每个词相互独立,用连乘来估计最大似然函数,求解目标函数就是最大化似然函数。上面公式涉及到一个中心词向量v,以及背景词向量u,因此呢很有趣的是,可以用一个input-hidden-output的三层神经网络来建模上面的skip-model。


    • 输入的表示:输入层中每个词由独热编码方式表示,即所有词均表示成一个N维向量,其中N为词汇表中单词的总数。在向量中,每个词都将与之对应的维度置为1,其余维度的值均为0。
    • 网络中传播的前向过程:输出层向量的值可以通过隐含层向量(K维),以及连接隐藏层和输出层之间的KxN维权重矩阵计算得到。输出层也是一个N维向量,每维与词汇表中的一个单词相对应。最后对输出层向量应用Softmax激活函数,可以计算每一个单词的生成概率。



    skip gram和 cbow的区别

    在skip-gram里面,每个词在作为中心词的时候,实际上是 1个学生 VS K个老师,K个老师(周围词)都会对学生(中心词)进行“专业”的训练,这样学生(中心词)的“能力”(向量结果)相对就会扎实(准确)一些,但是这样肯定会使用更长的时间;

    cbow是 1个老师 VS K个学生,K个学生(周围词)都会从老师(中心词)那里学习知识,但是老师(中心词)是一视同仁的,教给大家的一样的知识。至于你学到了多少,还要看下一轮(假如还在窗口内),或者以后的某一轮,你还有机会加入老师的课堂当中(再次出现作为周围词),跟着大家一起学习,然后进步一点。因此相对skip-gram,你的业务能力肯定没有人家强,但是对于整个训练营(训练过程)来说,这样肯定效率高,速度更快。

    所以,这两者的取舍,要看你自己的需求是什么了。

    cbow 与 skip-gram的比较 - 卡门的文章 - 知乎
    https://zhuanlan.zhihu.com/p/37477611

    2近似训练法

    可以看到,无论是跳字模型还是连续词袋模型,每一步梯度计算的开销与词典 |V|的大小呈正相关。显然,当词典较大时,这种训练方法的计算开销会很大。所以使用上述训练方法在实际中是由难度的。我们可以使用近似的方法来计算这些梯度,从而减小计算开销。常用的近似训练法包括负采样层序 softmax

    2.1 负采样

    以跳字模型为例讨论负采样。词典|V|的大小之所以会在目标函数中出现,是因为中心词 w_c生成背景词 w_o的概率 P(w_o|w_c)使用了 softmax,而 softmax 考虑到了背景词可能是词典中任一词,并体现在了 softmax 的分母上

    不妨换个角度,假设中心词w_c生成背景词w_o由以下两个互相独立的联合事件组成来近似

    我们可以用\sigma(x)=\frac{1}{1+exp(-x)}函数来表达中心词w_c和背景词w_o同时出现在训练数据窗口的概率:


    那么,中心词w_c生成背景词w_0的对数概率可以近似为:

    假设噪声词 w_k在词典中的索引为i_k,上式可改写为

    因此,有关中心词 w_c生成背景词 w_o的损失函数是

    现在,训练中每一步的梯度计算开销不再与词典大小相关,而与 K线性相关。当 K取较小的常数时,负采样的每一步梯度计算开销也较小。噪音词的采样概率:噪音词的词频的3/4次方。

    同理,也可以对连续词袋模型进行负采样。
    有关背景词w^{(t-m)},...,w^{(t-1)},w^{(t+1)},...,w^{(t+m)}
    生成中心词w_c的损失函数为:


    在负采样中可以近似为:
    -log\frac{1}{1+\exp[-\boldsymbol{u}_c^T(\boldsymbol{v}_{o_1}+...+\boldsymbol{v}_{o_{2m}})/(2m)]}-\sum_{k=1,w_k\sim P(w)}^Klog\frac{1}{1+\exp[\boldsymbol{u}_{i_k}^T(\boldsymbol{v}_{o_1}+...+\boldsymbol{v}_{o_{2m}})/(2m)]}

    2.2 层序softmax

    层序 softmax 利用了二叉树。树的每个叶子节点代表着词典 |V|中的每个词。每个词 w_i对应的词向量为v_i 。我们以下图为例,来描述层序 softmax 的工作机制



    上面公式可能比较抽象,下面举个具体的例子,计算 w_i生成 w_3的概率,由于在二叉树中由根到 w_3的路径需要向左、向右、再向左地遍历,所以得到

    每次迭代的计算开销由O(|V|)降为二叉树的高度O(log|V|)

    最后一个问题:层序softmax的二叉树是如何建立的?

    二叉Huffman树,权重为语料库中word出现的频率。

    参考

    相关文章

      网友评论

          本文标题:Word2Vec

          本文链接:https://www.haomeiwen.com/subject/kylnfltx.html