1. 词嵌入(word2vec)

相关背景知识,参见 Word2Vec-知其然知其所以然 博客的学习笔记。

自然语言是一套用来表达含义的复杂系统,其中,词是表义的基本单元。

顾名思义,词向量是用来表示词的向量,也可视作词的特征向量或表征。

将词映射为实数域向量的技术称作词嵌入(word embedding)。

近年来,词嵌入已逐渐成为自然语言处理的基础知识。



1.1 one-hot vs word2vec

假设词典中不同词的数量(词典大小)为词嵌入维度越高越好吗 词嵌入表示_中心词,每个词可以和从0到词嵌入维度越高越好吗 词嵌入表示_中心词_02的连续整数一一对应。这些与词对应的整数称作词的索引。

假设一个词的索引为词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_03,为了得到该词的one-hot向量表示,需要创建一个全0的长为词嵌入维度越高越好吗 词嵌入表示_中心词的向量,并将其第词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_03位设成1。由此,每个词可以表示为一个长度为词嵌入维度越高越好吗 词嵌入表示_中心词的向量,从而直接被神经网络使用。

虽然one-hot词向量构造起来很容易,但通常情况并不是一个好选择。主要的原因是:
one-hot词向量无法准确表达不同词之间的相似度。

以经常使用的余弦相似度为例。对于向量词嵌入维度越高越好吗 词嵌入表示_中心词_07,它们的余弦相似度是它们之间夹角的余弦值:

词嵌入维度越高越好吗 词嵌入表示_词向量_08

由于任何两个不同词的one-hot向量的余弦相似度都为0,因此,多个不同词之间的相似度难以通过one-hot向量准确地体现出来。



word2vec工具的提出正是为了解决该问题。它将每个词表示成一个定长的向量,并使得这些向量能较好地表达不同词之间的相似和类比关系。

word2vec工具包含了两个模型,即跳字模型(skip-gram)和连续词袋模型(continuous bag of words,CBOW)。




1.2 skip-gram

1.2.1 基本概念

跳字模型假设基于某个词来生成它在文本序列周围的词。

假设文本序列为:“the”“man”“loves”“his”“son”。以“loves”作为中心词,设背景窗口大小为2。



词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_09


如上图所示,跳字模型所关心的是,给定中心词“loves”,生成与它距离不超过2个词的背景词“the”“man”“his”“son”的条件概率,即:

词嵌入维度越高越好吗 词嵌入表示_条件概率_10

假设给定中心词的情况下,背景词的生成是相互独立的。那么,上式可以改写为:

词嵌入维度越高越好吗 词嵌入表示_条件概率_11



在跳字模型中,每个词被表示为两个词嵌入维度越高越好吗 词嵌入表示_条件概率_12维向量,用来计算条件概率。

假设这个词在词典中索引为词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_03,当它为中心词时向量表示为词嵌入维度越高越好吗 词嵌入表示_词向量_14,而为背景词时向量表示为词嵌入维度越高越好吗 词嵌入表示_中心词_15
设中心词词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_16在词典中索引为词嵌入维度越高越好吗 词嵌入表示_词向量_17,背景词词嵌入维度越高越好吗 词嵌入表示_中心词_18在词典中索引为词嵌入维度越高越好吗 词嵌入表示_中心词_19,给定中心词生成背景词的条件概率可以通过对向量内积做softmax运算得到:

词嵌入维度越高越好吗 词嵌入表示_词向量_20

其中,词典索引集词嵌入维度越高越好吗 词嵌入表示_词向量_21



假设给定一个长度为词嵌入维度越高越好吗 词嵌入表示_中心词_22的文本序列,设时间步词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_23的词为词嵌入维度越高越好吗 词嵌入表示_词向量_24。假设给定中心词的情况下背景词的生成相互独立。
当背景窗口大小为词嵌入维度越高越好吗 词嵌入表示_条件概率_25时,跳字模型的似然函数,即为给定任一中心词生成所有背景词的概率:

词嵌入维度越高越好吗 词嵌入表示_条件概率_26

其中,小于1和大于词嵌入维度越高越好吗 词嵌入表示_中心词_22的时间步可以忽略。



1.2.2 模型训练

跳字模型的参数是每个词所对应的中心词向量和背景词向量。

训练中通过最大化似然函数来学习模型参数,即最大似然估计。这等价于最小化以下损失函数:

词嵌入维度越高越好吗 词嵌入表示_中心词_28



若使用随机梯度下降,那么,每一次迭代将先随机采样一个较短的子序列来计算有关该子序列的损失,然后计算梯度来更新模型参数。

梯度计算的关键是,条件概率的对数有关中心词向量和背景词向量的梯度。

根据定义,并结合对数运算的性质,首先有:

词嵌入维度越高越好吗 词嵌入表示_条件概率_29

通过微分,可得上式中词嵌入维度越高越好吗 词嵌入表示_中心词_30的梯度:

词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_31

其中,该梯度的计算需要词典中所有词以词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_16为中心词的条件概率。
有关其他词向量的梯度同理可得。



训练结束后,对于词典中的任一索引为词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_03的词,均得到该词作为中心词和背景词的两组词向量词嵌入维度越高越好吗 词嵌入表示_中心词_34词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_35

在自然语言处理应用中,一般使用跳字模型的中心词向量作为词的表征向量。




1.3 CBOW

1.3.1 基本概念

与跳字模型最大的不同在于,连续词袋模型假设基于某中心词在文本序列前后的背景词来生成该中心词。

在同样的文本序列“the”“man”“loves”“his”“son”中,以“loves”作为中心词,且背景窗口大小为2时,如下图所示:



词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_36


连续词袋模型关心的是,给定背景词“the”“man”“his”“son”生成中心词“loves”的条件概率,即:

词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_37



由于连续词袋模型的背景词存在多个,需要将这些背景词向量取平均,然后使用和跳字模型相同的方法来计算条件概率。

词嵌入维度越高越好吗 词嵌入表示_条件概率_38词嵌入维度越高越好吗 词嵌入表示_中心词_39分别表示词典中索引为词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_03的词作为背景词和中心词的向量(注:符号含义与跳字模型中相反)。
设中心词词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_16在词典中索引为词嵌入维度越高越好吗 词嵌入表示_词向量_17,背景词词嵌入维度越高越好吗 词嵌入表示_中心词_43在词典中索引为词嵌入维度越高越好吗 词嵌入表示_中心词_44。那么,有给定背景词生成中心词的条件概率:

词嵌入维度越高越好吗 词嵌入表示_中心词_45



为了简化符号,记 词嵌入维度越高越好吗 词嵌入表示_中心词_46,且词嵌入维度越高越好吗 词嵌入表示_词向量_47
那么,上式可以简写为:

词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_48

给定一个长度为词嵌入维度越高越好吗 词嵌入表示_中心词_22的文本序列,设时间步词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_23的词为词嵌入维度越高越好吗 词嵌入表示_词向量_24,背景窗口大小为词嵌入维度越高越好吗 词嵌入表示_条件概率_25
连续词袋模型的似然函数是由背景词生成任一中心词的概率:

词嵌入维度越高越好吗 词嵌入表示_词嵌入维度越高越好吗_53



1.3.2 模型训练

训练连续词袋模型同训练跳字模型基本一致。

连续词袋模型的最大似然估计等价于最小化损失函数:

词嵌入维度越高越好吗 词嵌入表示_词向量_54

根据定义,并结合对数运算的性质,首先有:

词嵌入维度越高越好吗 词嵌入表示_中心词_55

通过微分,可以计算出上式中条件概率的对数有关任一背景词向量 词嵌入维度越高越好吗 词嵌入表示_条件概率_56词嵌入维度越高越好吗 词嵌入表示_条件概率_57)的梯度:

词嵌入维度越高越好吗 词嵌入表示_中心词_58

有关其他词向量的梯度同理可得。

同跳字模型不同的一点在于,一般使用连续词袋模型的背景词向量作为词的表征向量。




参考

《动手学深度学习》(TF2.0版)