本文介绍两种更新一点的词向量,它们分别是 2014 年由 Stanford 团队发表的 Glove 和 2017 年由 Facebook 团队发表的 fastText
1.Glove
Glove 使用了词与词之间的共现(co-occurrence)信息。定义为共现词频矩阵,其中元素表示词出现在词的环境(context)的次数。
这里的“环境”有多种定义。
1.1 共现概率比值
Glove 论文里展示了以下一组词对的共现概率与比值
由此可见,共现概率比值能比较直观地表达词之间的关系。Glove试图用有关词向量的函数来表达共现概率比值。
1.2 用词向量表达共现概率比值
Glove 的核心在于使用词向量表达共现概率比值。而任意一个这样的比值需要三个词、和的词向量。对于共现概率,我们称词和词分别为中心词和背景词。我们用和分别表示中心词和背景词的词向量。
我们可以用有关词向量的函数来表达共现概率比值:
需要注意的是,函数可能涉及的并不唯一。首先,我们用向量之差来表达共现概率的比值,并将上式改写成
由于共现概率比值是一个标量,我们可以使用向量之间的内积把函数的自变量进一步改写
由于任意一对词共现的对称性,我们希望以下两个性质可以同时被满足:
为了满足以上两个性质,一方面我们令
并得到。以上两式右边联立
上式两边取对数可得
另一方面,我们可以把上式中的替换成两个偏移项之和,得到
将索引和互换,我们可以验证对称性的两个性质可以同时被上式满足
因此,对于任意一对词和,用它们的词向量表达共现概率比值最终可以被简化为表达他们共现词频的对数:
1.3 损失函数
上式中的共现词频是直接在训练数据上统计得到的,为了学习词向量和相应的偏移项,我们希望上式中的左边与右边越接近越好,给定词典大小 和权重函数 ,我们定义损失函数为
Glove使用一个词的中心词向量与背景词向量之和作为该词的最终词向量
关于 Glove 的一些公式推导,其实并不严谨,它只是提出了一些设计思路,为了满足那两个条件,共现词频应该设计成什么样。所以如果某一步推导看不懂也很正常,忽略过去就行了,只要知道最终的损失函数的性质就行
2 fastText
fastText 在使用负采样的 skip-gram 模型基础上,将每个中心词视为子词(subword)的集合,并学习子词的词向量
把使用负采样的skip-gram模型的损失函数
直接替换为
我们可以看到,原中心词向量被替换成了中心词的子词向量的和。与整词学习(word2vec 和 Glove)不同,词典以外的新词的词向量可以使用 fastText 中相应的子词向量之和
fastText 对于一些特定语言较重要,例如阿拉伯语、德语和俄语。例如,德语中有很多复合词,例如乒乓球(英文 table tennis)在德语中叫 "Tischtennis"。fastText 可以通过子词表达两个词的相关性,例如 "Tischtennis" 和 "Tennis"
如果遇到一个新词,对于 fastText 来说,它可以从训练集中找出这个新词的所有子词向量,然后做个求和,就能算出这个新词的词向量了
网友评论