Word Embedding总结

作者: 是neinei啊 | 来源:发表于2018-05-09 11:27 被阅读32次

    Word Embedding总结

    1. 前言

    word representation有两种方式

    • 传统方法Knowledge-based representation

    • 词的离散表示corpus-based representation

    • 词的分布式表达word embedding

    1.1 Knowledge-based representation

    • 简介

    Knowledge-based representation根据语言学家们制定的 WordNet ,其中包含了字与字之间的关联。来对文字进行表示。

    • 调用方法

    from nltk.corpus import wordnet

    • 局限性

      • 文字会不断地发展

      • 主观性较强,不同的人之间有不同的理解

      • 工作量比较大

      • 字与字之间的相似性很难定义

    1.2 Corpus-based representation

    1.2.1 Atomic symbols: one-hot representation

    • 定义

      One-Hot编码,又称为一位有效编码,独热编码,将所有需计算的文字组成一个向量,给出一个文字,它在向量中的位置标为1,其余都为0。

    • 限制

      无法捕捉两个word之间的关系,也就是没有办法捕捉语义信息

      例如:car和motorcycle,无论怎样计算相似度都为0。

    • 期望:用另一种方式捕捉真正有关字义的部分。

    • 方法:当car与motorcycle以及它们相邻的单词(neighbor)存在某些关系时,可以认为这两个单词之间具有相关性。即Neighbors,如何确定neighbor的范围呢?

      • 方式1,full document 。full document可以认为在同一篇文章中出现过,文章中的文字之间可以根据文章确定一个相关的主题。

      • 方式2,windows 。windows限定在某个窗口内,可以是几句话或者几个单词之内范围,这种方式可以获得词性等信息。

    1.2.2 High-dimensional sparse word vector

    • 思想

      基于neighbour,设置Co-occurrence Matrix共现矩阵

    • 限制

      • 随着文章字数增加矩阵的大小也会迅速增加;

      • 计算量会迅速增加。之前one-hot形式,由于只有一列存在非0数字,所以维度即使再大,计算量也不会增加太多。而现在则不同,每列都有可能有数个非0数字;

      • 大部分的有效信息,集中在少数区域。没有有效地“散开”,所以robustness会比较差

      • 当增加一个word的时候整个矩阵都要更新

    • 期望

      找到一个低维向量

    1.2.3 Low-dimensional sparse word vector

    • 思想

      降维dimension reduction,例如通过SVD等,从k维降为r维


    • 限制

      • 计算量比较大

      • 新增文字后,需要重建矩阵并重新计算矩阵和降维

    • 期望

      • 直接学习出低维向量,而不是从资料中学习到高维矩阵再进行降维

    1.2.4 Word Embedding

    • 思想

    directly learn low-dimensional word vectors

    • 两种方法

      • word2vec (Mikolov et al. 2013)

        • skip-gram

        • CBOW

      • Glove (Pennington et al., 2014)

    • 优点

      • 任意两个词语之间的相似性很容易计算

      • 可以使用在任何NLP监督任务上作为input,vector包含了语义信息

      • 可以利用NN通过训练更新word representation(word embedding不是固定的,可以根据task微调)

    2. Word2Vec

    CBOW和Skip-Gram是著名的词嵌入工具word2vec中包含的两种模型,与标准语言模型不同,在上下文
    ​可以同时取左右两边的​n个字,而标准语言模型中认为,当前词语​仅仅依赖于前文​

    2.1 Skip-Gram Model

    • 目标

      给定一个单词

      ​,预测出词汇表中每个词在其上下文中的概率。也就是给定一个word,推算出其周围的word的能力。


    其中,
    ​是target word,
    ​是指定窗口大小C ​范围内的其他 word。 例如上图中,​
    其实就代表
    ​ ,窗口大小 C​ 为m ​ 。​
    ​,共​2m个。

    在指定的 word 条件下,指定窗口内其他 word 发生的概率计算公式如下:



    根据最大似然估计,应该使得上面的概率结果最大。对上面公式进行取 ​ 后添加负号,得到损失函数的表示公式,目标使损失函数最小。

    其中,

    ​数值越大,越相关,对于同一个word当他是target word的时候和他是context word时表示不一样。模型图如下:
    • 模型结构

    模型的结构很简单,如上图,是一个只有一个隐藏层的神经网络。由于要得到输入的每个word 出现的概率,所以输入层与输出层神经元数需一致。下图中,输入 ​ x和输出层s​数量为10000,隐藏层 h 神经元数为300。

    如果对隐藏层权重​ W转换思想,(注意转换的仅仅是我们的思想,实际上没有对隐藏层做任何改变)。 上面的例子中,输入的 ​x 是10000行,后面的隐藏层共300个神经元,所以W ​ 是 10000×300 的矩阵。 实际​


    计算的过程,思想其实是像下图左中的样子,W​ 每一列与
    ​ 对应相乘后再相加。如何将想法转换成下图右中的模式呢?请看接下来的例子。

    由于​x是one-hot转换后的,所以在指定的word上是1,其余都是0。这样的话,经过计算后,实际的结果中是把 ​W 相应的一行数据给完整保留下来了,其余的都乘以0后都没了,具体见下图。所以,也可以从行的角度看 W​。

    综上所述,​h 的计算结果,其实也就是从 ​W中抽取出来相乘不为0的一行当成结果,可以用向量​

    表示。


    上面说了隐藏层 ​h,接下来分析输出层s​ 。从 h​ 到​ s之间的系数为W' ​ 。 上面说道​ s输出层共10000个神经元,每个神经元的计算方法如下:


    得到 ​ s_j后,还需要做最后的转换才是最终输出的结果。转换公式如下,这也是一般多分类 softmax 的计算方法。


    下图就上对上面所讲的,从隐藏层到最后输出概率的一个总结。​ h与W' ​的计算结果,经过公式转换得到最后每个 word 的概率。



    如果把计算过程放在整体上看,如下图。


    • 损失函数和梯度下降前文有讲到,给定一个target word,Loss Function是:

      使用梯度下降的方法对损失函数进行优化。从右向左,首先看W'​ 这边。


    整理后得到如下公式。


    然后是​ W这边,


    整理后得到。把公式进行简化,简化之后得到下图中红色部分的公式。


    其中​ j是 输入X ​ 中 words总数量。从上面的公式中可以看出来,计算量和j ​相关。当 ​j 比较大的时候,计算量会非常大。

    为了解决计算的问题,有两种常用的方法:层次化softmax(hierarchical softmax )负采样(negative sampling) 。常用的是后者。

    • 层次化softmax

    • 负采样

      抽样是更为常用的减少计算量的方法。可以有效的减少计算量,而且表现效果并不会下降太多。因为是随机选取,每个被选取到的概率相同。不停的迭代后,可以有效地得到结果。


    一些不常出现的word有时有着一定作用,但在随机抽样中,却很难被抽到。所以有时就需要增加低频词汇出现的概率


    下面这个方法是一个比较好的经验。将每个word出现概率加上3/4 ​的指数。比如“is”出现的概率为0.9,那么进行​次方处理后变成了0.92 ,涨了一点。但是看下面的“bombastic”出现概率原来是0.01,处理后变成了0.032,概率涨了3倍多。可以看出,小概率经过处理后增加的比大概率的要高得多。通过这种方法,可以有效地处理小概率时间很难被抽到的问题。

    2.2 Word2Vec Variants


    Word2Vec 还有一些其他的方式,比如CBOW、LM 。具体方法请看下图,其实LM是最早被提出来的,而Skip-gram是不断完善后的样子,所以现在Skip-gram应用是最广泛的。CBOW和Skip-gram正好相反,Skip-gram是给定一个word,预测窗口内其他words,而CBOW是给定窗口内其他words的概率,预测指定word。

    2.3 方法比较

    这里主要是count-based和Direct-prediction之间的比较,之前并没有把所有的方法都讲到。 首先说一下,count-based,顾名思义,这个主要是通过统计学的方法进行计算,这种计算是比较快的。但是得到的结果也只是 “words之间是否同时出现”、“word出现频率” 等信息,无法得到word之间更复杂的关系。 Direct-prediction是通过神经网络方法去自动的估计结果。可以考虑到word之间语义相关的更复杂的关系。但是,并没有应用上统计学的信息,在统计信息上面有所欠缺。

    • Glove方法既利用了统计的资讯,还利用了神经网络,在一些数据量比较小的任务上表现很好。

    3.Glove

    co-occurrence probability,意思是一个word ​

    出现时,另一个word ​
    也出现的概率。公式如下,其中 ​X表示出现的次数。 image 现在假设
    ​ 与 ​ 都与 word ​ x有关系,可以计算出
    ​ ,将这两个结果相除
    ​ ,就得到了ratio。通过下面的例子可以看出,这个公式结果具有一些明显的规律。当
    含义比较接近时,他们的ratio就接近1。当含义不接近时,ratio就会较大或较小。 所以想要了解两个word ​

    ​ 之间的关系,可以通过它们共有的另一个word
    ​,经过计算得到ratio值,从而判断 ​ w_i与w_j ​ 之间的关联。 image F 其实就表示​ w_i 与 ​ w_j 之间的差异关系,所以也可以表示为
    ​ 。 将它们转化成向量表示
    ​。

    如果 w_i​ 与 w_j ​ 比较接近,则结果趋向于1,否则会偏大或者偏小,正好可以通过exp ​的公式可以进行转换。


    两边取 ​log 后,进行整理。把​

    当成一个常数项,整理进公式。同样也给 w_j ​添加一个常数项。

    整理后的损失函数中还添加了

    ​ ,就相当与把统计相关的数据也添加进来进行优化。在比较小的数据集中,也有较好的表现效果。

    Word Vector Evaluation

    上面讲了word vector构建的方法,接下来说一下word vector的评估方法。

    Intrinsic Evaluation 内在

    Word Analogies 类比

    首先是单词类比,给定两个相关的words “A”和“B”,例如“man”“woman”。是否能推测出“king”对应的是“queen”? 或者给出“king”与其复数“kings”,是否能推测出“queen”对应的“queens”。 下面是评估公式,找出可以取得最大值的word xx ,就是最有可能对应的结果。

    类比可以分成语义上的和语法上的。

    首先语义上的, 这种方法存在一些问题: \1. 同一个word在不同句子中可能有不同的意思; \2. 随着时间的改变,word含义有可能会改变。

    在语法上,主要是同一个单词的不同形式转换。

    Word Correlation 关联

    主要是由人标记出来的关系得分,这种方法其实也存在一些模糊不清的可能。

    Extrinsic Evaluation 外在

    Subsequent Task

    之前的评估是直接对word进行的,Extrinsic 是指不直接进行评估,而是通过后面的task看看结果,从而对其进行判断。 这样做有一些优点,首先,可以将两个看似不相干但实际有关联的word联系起来,比如地区名称。还有可以得到words合并后的信息,比如在情感分析方面的应用。

    Softmax & Cross-Entropy

    Softmax

    之前有简单讲过使用softmax进行转换,这里又详细讲解了softmax的定义。 权重​ ​W_y与 x 相乘后得到 f_y​ ,经过exp ​ 转换成 exp(f_y)​。所有的 ​y 都经过这种转换后求和,最后将每个exp(f_y) ​ 除以总和得到最终的结果。 softmax的损失函数整理后会得到如下两项,第一项为 -f_i​ ,第二项为
    ​。 真实结果是f_i​ ,当预测结果f_j ​ 不正确时,f_i​ 此时会小于 第二项。我们的目的是使得
    最小,所以会不断地优化,直到找出结果正确时的参数。

    Cross-Entropy 交叉熵

    交叉熵用来定义目标与预测结果的概率分布的差异。其中​p 就是one-hot-encode表示的target word,而 ​ q 是预测的概率分布。如果 H(p,q)​ 结果越大,说明两者差异越大;反之,结果越小,说明差异越小。 使用KL-divergence 将公式进行转换。 下面讲解了,实际上这两种loss本质上是一样的。

    总结

    代码参考:

    https://github.com/tensorflow/tensorflow/tree/r0.11/tensorflow/models/embedding

    相关文章

      网友评论

      • 安德鲁罗文中尉:您好,看了您的文章以后非常收益。请问您参考的PPT是哪里的资料?
        是neinei啊:@冯煜博 不好意思才看到,是课上自己的pre啦

      本文标题:Word Embedding总结

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