c语言bow函数,探秘Word2Vec(四)-CBOW模型

之前说了那么多,现在我们正式开始接触word2vec中涉及到的两个模型,CBOW模型(Continuous Bag-Of-Words Model)和Skip-gram模型(Continuous Skip-gram Model)。CBOW是已知当前词的上下文,来预测当前词,而Skip-gram则相反,是在已知当前词的情况下,预测其上下文。二者的模型结构如下图所示:

对于上面提到的两个模型,word2vec分别给出了两套框架,分别基于Hierarchical Softmax 和 Negative Sampling来进行设计,接下来,我们会分别对这两种CBOW模型进行讲解。

1、基于Hierarchical Softmax的CBOW模型

1.1 模型说明

之前我们提到过,基于神经网络的语言模型的目标函数通常取为如下的对数似然函数:

其中的关键是条件概率p(w|Context(w))的构造。基于Hierarchical Softmax的CBOW模型优化的目标函数也形如上面的样子。

首先,我们来看一下CBOW的网络结构,它包括三层,分别为输入层,投影层和输出层,假设Context(w)是由词w的前后各c个词组成,下面的图对这三层做了相应的说明:

对比之前提到过的神经概率语言模型,CBOW主要在以下三点上与之区别:

1)从输入层到投影层的操作上,神经概率模型通过拼接的方式,而CBOW采用累加的方式

2)从有无隐藏层来看,神经概率模型有隐藏层,而CBOW没有隐藏层

3)从输出层来看,神经概率模型的输出层是线性结构,而CBOW是树形结构

所以,针对神经概率模型大规模的矩阵运算和softmax归一运算,CBOW对其作出了优化,首先去掉了隐藏层,同时输出层改用Huffman树,从而为利用Hierarchical Softmax技术奠定了基础。

1.2 梯度计算

Hierarchical Softmax技术是word2vec中用于提高性能的一项关键技术,为描述方便起见,在具体介绍这个技术之前,先引入若干相关记号,考虑Huffman树中的某个叶子结点,假设它对应词典D中的词w,记:

引入了这么多符号,我们举一个例子来说明上面这些符号,考虑我们在第一讲中提到了巴西世界杯的例子,它构造的Huffman树如下图所示:

针对足球这个词,我们可以得到如下的结果:

好了,定义了一大堆符号,我们接下来该考虑如何定义条件概率p(w|Context(w))呢?

还是考虑上面的巴西世界杯的例子,从根结点到足球这一叶子结点的过程中,我们经历了四次分支,每次分支相当于做了一次二分类。既然是从二分类的角度来考虑问题,那么对于每一个非叶子结点,就需要为其左右孩子结点指定一个类别,即哪个是正类(标签为1),哪个是负类(标签为0)。碰巧,除根结点外,树中每个结点都对应了一个取值为0或1的Huffman编码。因此在word2vec中,将编码为0的结点定义为负累,编码为0的点定义为正类,即约定:

换句话说,将一个结点进行分类时,分到左边就是负类,分到右边就是正类。根据我们前面介绍的逻辑回归的知识,一个结点被分为正类的概率是:

而分到负类的概率就是:

注意到,上式中有个叫Θ的向量,它是待定参数,显然,这里非叶子结点对应的那些向量就Θwi可以扮演Θ的角色,所以对于从根结点出发到足球这个叶子结点所经历的4次二分类,将每次分类结果的概率写出来就是(这里仍然需要提醒一下大家,分到右侧认为是正类,分到左侧被认为是负类):

所以我们要求p(足球|Context(足球)),它跟上面这四个概率的关系就是:

通过对足球这个例子的讲解,Hierarchical Softmax的基本思想就已经介绍完了,总结一下,对于词典D的任意词w,Huffman 树中必定存在一条从根结点到该词的路径,路径长度为l,则路径上存在l-1个分支,将每一个分支作为二分类,每一次分类产生一个概率,将所有的概率相乘,就得到所需的p(w|Context(w))。

条件概率p(w|Context(w))的一般公式可以写作:

其中:

写成整体表达式就是:

所以,基于Hierarchical Softmax的CBOW模型的似然函数就是:

接下来,我们就需要最大化上面的似然函数,word2vec里面采用的是随机梯度上升法(求最小值用梯度下降法,求最大值用梯度上升法)。为了简化求梯度的过程,我们将上式中双重括号里面的部分记为L(w,j):

这样做是完全可以的,因为每个j是不相关的,同时随机梯度上升法的做法是每取一个样本就对所有参数进行一次更新。该函数中包含的参数主要有:

该模型的参数更新形式为:

中间设计的推导过程如下:

可以看到,利用sigmoid函数求导的性质,很容易得到上面的结果。

至此,基于Hierarchical Softmax的CBOW模型就介绍完啦,最后给出该模型的伪代码:

2、基于Negative Sampling的CBOW模型

可以看到,基于Hierarchical Softmax的CBOW模型采用了复杂的Huffman树,为了简化这一过程,又提出了基于Negative Sampling的CBOW模型,利用随机负彩样,大幅提升了计算性能。不过,其基本的计算思想仍是一样的。

在CBOW模型中,已知词w的上下文Context(w),需要预测w,因此对于给定的Context(w)来说,词w就是一个正样本,其他词就是一个负样本了。关于负样本的选取,我们将在最后一节中进行介绍。假定现在已经选好了一个关于w的负样本字节NEG(w),且对于D中的每一个词,定义:

即正样本的标签是1,负样本的标签是0。

所以,对于一个给定的(Context(w),w),我们希望最大化:

其中:

写成整体表达式即为:

由于只有一个正样本,所以g(w)又可以写为:

下面是对上式的一个解释:

为计算方便,我们可以对G取对数,则最终的目标函数为:

大家对上面的式子是不是很熟悉,其实跟之前基于Hierarchical Softmax的CBOW模型是一样的,我们同样取两重加和中间的部分,并通过随机梯度上升的方法对参数进行更新,这里详细的推导过程就不推导了,这里直接给出参数更新的结果:

则基于Negative Sampling的CBOW模型的伪代码如下图所示:

你可能感兴趣的:(c语言bow函数)