本学习笔记参考解惑者学院Ryan机器学习课程及《word2vec中的数学原理

1 背景知识

Word2vec是用来将词转换为向量的工具(word -> vector),而词向量与语言模型有着密切的关系,接下来我们将介绍语言模型方面的知识:

1.1 统计语言模型

语言模型通俗的将就是判断一句话是不是正常人说出来的。统计语言模型是所有NLP的基础,被广泛应用与语音识别、机器翻译、分词、词性标注和信息检索等任务。传统的统计语言模型是表示语言基本单位(一般为句子)的概率分布函数,这个概率分布也是该语言的生成模型。通俗的讲,如果一句话没有在语料库中出现,可以模拟句子的生成的方式,生成句子在语料库中的概率。一般语言模型可以使用各个词语条件概率的形式表示:

其中,Context为w_i的上下文表示。根据Context的表示差异,统计语言模型又可以分为不同的类别,其中最具代表性的有n-gram语言模型及n-pos语言模型:

  1. n-gram语言模型

该语言模型只看当前词的前n-1个词对当前词的影响。所有该模型的优势为:(1)该模型包含了前n-1个词所能提供的全部信息,这些词对当前词的出现具有很强的约束能;(2)只看前n-1个词而非所有词,所以使得模型的效率较高。该模型也有很多缺陷:(1)n-gram语言模型无法建模更远的关系,语料的不足使得无法训练更高阶的语言模型(通常n=2或3);(2)该模型无法建模出词与词之间的相似度,比如“白色汽车”和“白色轿车”;(3)训练语料中有些n元组没有出现过,其对应的条件概率为0,导致计算一整句话的概率为0!(可以通过平滑法回退法解决)

  1. n-pos 语言模型

前面提到的n-gram模型表示 词的出现依赖于前n-1个词;而n-pos模型认为 词的出现应该依赖于前n-1个词的语法功能,相当于对词提前做了词义或语法上的聚类。

       总的来说,该类语言模型的目标函数,可以利用最大似然表示:

C表示语料,语料指的是所有的文本内容,包含重复词(而词典D不包含重复词)。

1.2 神经网络语言模型NNLM

词向量的表示方式:

  • One-hot representation:对应位置数字取1,其他位置全为0
  • Distributed representation:通过训练将每一个词都映射为一个K维的浮点数向量

 

NNLM是Bengio用三层神经网络来构建的语言模型,同时也是一个n-gram模型,如左图(简化结构如右图)

NNLM原理描述:将目标词(一个词)上下文的关联词分别映射为一个K维的向量C(XX),然后通过拼接(或求和平均)的方式得到NN的输入层,然后经过线性变换进入隐层,隐层通过非线性变换得到输出层的输入,最后通过Softmax函数得到最后输出!

       因为有直连边G(X)的存在,输出层的输入可以描述为:直连边的存在虽然不能提升模型的效果,但是可以少一半的迭代次数!

       其目标函数可以表示成:

为什么训练输出的X向量,能表示词与词之间的距离:对于一个神经网络来说,相似的输入应该得到相似的输出,同理对于NNLM来说,相近的上下文(输入)应该要得到相近的概率分布,反馈获得相近的向量表示(输出)。

2 word2vec原理篇

有了前面的准备,本节正式介绍word2vec中用到的两个重要的模型-CBOW模型(Continuous Bag-of-Words Model)和Skip-gram模型(Continuous Skip-gram Model)。

由图可见,两个模型都包含三层:输入层、投影层和输出层。前者是在已知当前词w(t)的上下文w(t-2)、w(t-1)、w(t+1)、w(t+1)的前提下预测当前词w(t);而后者恰恰相反,是在已知当前词w(t)的前提下,预测其上下文的词。

2.1 CBOW模型

CBOW是一种与前向NNLM类似的模型,不同点在于CBOW去掉了最耗时的非线性隐层、并且所有词共享隐层。由第一张图我们可以知道,CBOW模型和Skip-gram模型均有两套框架,本节将分别介绍两套框架下的CBOW模型:

2.1.1 基于层次SoftMax的模型

 

比较CBOW模型与NNLM的不同:

  • (从输入层到投影层的操作)CBOW-拼接;NNLM-求和累加
  • (隐藏层)CBOW-无耗时的非线性隐藏层; NNLM-非线性隐藏层
  • (输出层)CBOW-树形结构; NNLM-线性结构

NNLM的大部分计算集中在隐藏层和输出层之间的矩阵向量运算、输出层上的SoftMax归一化运算,CBOW模型对这些计算复杂度高的地方进行了改变:去掉了隐藏层、输出层改用Huffman树。

  • 目标函数的表示

考虑Huffman树中的某个叶子结点,假设它对应词典D中的词w:

       以图11中词w=”足球”为例。从根结点出发到达“足球”这个叶子结点,中间共经历了4次分支(每条红线对应1个分支),而每一次分支都可以视为进行了一次二分类

       既然是从二分类的角度来考虑问题,那么对于每一个非叶子结点,就需要为其左右孩子结点指定一个类别,在word2vec源码中为左孩子赋1值表示负类,为右孩子赋0值表示正类。故我们做符号约定:

故,对于从根结点出发到达“足球”这个叶子结点所经历的4次二分类,将每次分类结果的概率写出来就是:

但是,我们要求的是,它跟上面的4个概率值有什么关系呢?关系是:

 

       条件概率的一般公式可写成:

其中

或者写成整体表达式:

故,基于层次SoftMax框架的CBOW模型的目标函数(对数似然)可以表示为

  • 梯度的表示

Word2vec中采用的优化方法是随机梯度上升法。随机梯度上升算法的做法是:每次取一个样本(context(w), w),对目标函数中的所有(相关)参数做一次更新,该目标函数中需要更新的参数有两个,因此我们需要求解这两个参数的梯度。

接下来为了推导方便起见,我们将目标函数做简化-将{}中的内容记为,则:


故,梯度的计算如下

故,参数的更新如下:

参数更新的说明:

的由来?

有CBOW的图示可知,,故根据链式法则有:

故,有了上面参数的更新公式。

 

2.1.2 基于Negative sampling的CBOW模型

       Negative sampling(NEG)可以视为对层次SoftMax的一种代替,它不再使用(复杂的)Huffman树,而是利用(相对简单的)随机负采样,其目的也是用来提高训练速度并改善所得词向量的质量。

   

Word2vec采用带权采样法:词典D中的词在语料C中出现的次数有高有底,对于那些高频词,被选为负样本的概率就应该比较大,而低频词出现的概率应该比较小。Word2vec源码中使用下面的公式设置每个词的权重:

在CBOW模型中,已知词w的上下文Context(w),需要预测w,因此,对于给定的上下文Context(w),词w就是一个正样本,其他的词就是负样本。负样本太多了,因此我们一般通过上述方法选取适量的负样本

  • 目标函数的表示

假定现在已经选好了一个关于Context(w)的负样本子集,且对,定义

表示词的标签,即正样本标签为1,负样本的标签为0。故基于Negative sampling的CBOW模型,词w的目标函数可以写成

最大化L(w)直观的解释就是,最大正样本的概率同时降低负样本的概率!

故,最终目标函数为

  • 梯度的表示

Word2vec采用梯度上升法取目标函数进行优化。为了下面梯度推导方便起见,接下来为了推导方便起见,我们将目标函数做简化-将{}中的内容记为,则:

故,梯度的计算如下:

    

参数更新同层次SoftMax模型。

2.2 skip-gram模型

Skip-gram模型与CBOW模型的推导过程大同小异,这里不打算介绍,本节我们只是介绍一下skip-gram模型的特点。基于层次SoftMax的skip-gram模型的网络结构如下:

对于层次SoftMax的skip-gram模型,已知的是当前词w,需要对其上下文Context(w)中的词进行预测,故,其目标函数为:

对于Negative sampling的skip-gram模型,其目标函数:

3 word2vec作者对参数选取的建议

  • Skip-gram更慢一些,但是对低频词效果更好;对应的CBOW模型则速度要快一些
  • 层次SoftMax模型对低频词效果更好;对应的negative sampling对高频词效果更好,向量维度较低时效果更好
  • 词向量的维度,一般越高越好,但并不总是这样
  • 窗口大小的选择:skip-gram一般10左右,CBOW模型一般5左右
  • 高频词negative sampling:对大数据集合可以同时提高精度和速度