[关闭]
@evilking 2018-04-30T16:51:48.000000Z 字数 9205 阅读 3250

NLP

Word2Vec之 基于Hierarchical Softmax的模型

基于 Hierarchical Softmax 的模型

CBOW 模型

网络结构

CBOW网络结构图

上图给出了 CBOW 模型的网络结构,它包括三层: 输入层、投影层和输出层.下面以样本 为例对这三层做说明.

总结一下,对比神经概率语言模型的网络图和CBOW模型的结构图,可知道:

在介绍神经概率语言模型时我们可知,模型的大部分计算集中在神经网络的隐藏层和输出层之间的矩阵向量运算,以及输出层上的 softmax 归一化运算.

而从上面的对比中可见,CBOW 模型对这些复杂度高的地方有针对性的进行了改变,首先去掉了隐藏层,其次输出层改用了 Huffman树,从而为利用 Hierarchical softmax 技术奠定了基础.


梯度计算

为下面讨论方便,我们先引入若干相关记号.考虑 Huffman 树种的某个叶子结点,假设它对应词典 中的词 ,记

下面以一个简单的例子来进一步说明一下:

句子为“我喜欢观看巴西足球世界杯”,分词后为“我 喜欢 观看 巴西 足球 世界杯”,假设根据语料库,分别统计分词后的各个词的频率,构建Huffman树如下图所示:

huffman树实例

考虑词 = "足球"的情形,图中由 44 条红色边串起来的 5 个结点就构成路径 ,其长度 . 为路径 上的 5 个结点,其中 对应根结点. 分别为 ,即"足球"的 Huffman编码为 1001.此外 分别表示路径 上 4 个非叶子结点对应的向量.


那么在 CBOW 模型的网络结构下,如何定义条件概率函数 呢?更具体地说,就是如何利用向量 以及 Huffman 树来定义函数 呢?

考虑上面的"足球"的例子,从根节点出发到达"足球"这个叶子结点,中间共经历了 4 次分支(每条红色的边对应一次分支),而每一次分支都可视为进行一次二分类.

既然是从二分类的角度来考虑问题,那么对于每一个非叶子结点,就需要为其左右孩子结点指定一个类别,即哪个是正类(标签为 1),哪个是负类(标签为 0).碰巧,除根结点以外,树中每个结点都对应了一个取值为 0 或 1 的 Huffman编码.因此一种最自然的做法就是将 Huffman编码为 1 的结点定义为正类,而将编码为 0 的结点定义为负类.当然,这只是一个约定,你也可以调过来,0 表示正类,1 表示负类.为了与word2vec中的定义保存一致,我们统一约定为:一个结点进行分类时,分到左边就是负类,编码为 1,分到右边就是正类,编码为 0.

逻辑回归中我们知道,一个结点被分为正类的概率是

被分为负类的概率当然就等于

注意,上式中有个 的向量,它是待定参数,显然在这里非叶子结点对应的那些向量 就可以扮演参数 的角色

对于词典 中的任意词 ,Huffman 树中一定存在一条从根结点到词 对应结点的路径 (且这条路径是唯一的).路径 上存在 个分支,将每个分支看做一次二分类,每一次分类就产生一个概率,将这些概率乘起来,就是我们所需要的 .

那么条件概率 的一般公式可写为:

其中:

或者写成整体表达式:

将上式代入到对数似然函数中,便可得到:


为了下面讨论方便,我们假定:

到这里我们已经推导出对数似然函数 ,这就是 CBOW 模型的目标函数,下面考虑如何最大化目标函数,word2vec 里面采用的是 随机梯度上升法,而梯度类算法的关键是给出相应的梯度计算公式,因此接下来重点讨论梯度的计算.


随机梯度上升法的做法是:每取一个样本 ,就对目标函数中的所有(相关)参数做一次刷新.

从目标函数的公式可以看出,核心的是 函数,只需要对这个函数进行最大化就可以实现对目标函数最大化了;该函数中的参数包括向量 .为此,先给出函数 关于这些向量的梯度.

首先考虑 关于 的梯度计算:


于是, 的更新公式可写为:
其中 表示学习率.


然后考虑 关于 的梯度,同样按类似于上面的步骤,可求得


这里有个问题,我们的最终目的是要求词典 中每个词的词向量,而这里的 表示的是 中各词词向量的累加.那么如何利用 来对 进行更新呢?word2vec 中的做法很简单,直接取
即把 贡献到 中每一个词的词向量上,这点就很好理解了,既然 本身就是 中各词词向量的累加,求完梯度后当然要将其反向传播到每个分量上去.


下面以样本 为例,给出 CBOW 模型中采用随机梯度上升法更新各参数的伪代码:











Skip-gram 模型

skip-gram 模型与 cbow 模型的推导过程大同小异,所以推导过程中的记号保持含义一致.

网络结构

Skip-gram网络结构图

同 CBOW 模型的网络结构一样,这里给出三层结构的说明:

  1. 输入层:只含当前样本的中心词 的词向量

  2. 投影层:这是个恒等投影,把 投影到 .因此,这个投影层其实是多余的;这里之所以保留投影层主要是方便和 CBOW模型的网络结构做对比

  3. 输出层:和 CBOW 模型一样,输出层也是一棵 Huffman树


梯度计算

对于 Skip-gram 模型,已知的是当前词 ,需要对其上下文 中的词进行预测,则可将 Skip-gram 模型中的条件概率函数 定义为:

其中, 可按照 Hierarchical Softmax 思想,类似的写为:
其中

将上式依次代回,可得对数似然函数的具体表达式为:


同样,为下面梯度推导方便起见,将三重求和符号下花括号里的内容简记为 ,即

至此,已经推导出对数似然函数的表达式,这就是 Skip-gram 模型的目标函数.接下来同样利用 随机梯度上升法 对其进行优化.


首先考虑 关于 的梯度计算(与 CBOW模型 对应部分的推导完全类似 ).


于是, 的更新公式可写为:

接下来考虑 关于 的梯度.同样利用 的对称性,有
于是, 的更新公式可写为:

下面以样本 为例,给出 Skip-gram 模型中采用随机梯度上升法更新参数的伪代码:

但是,word2vec源码中,并不是等 中的所有词都处理完后才刷新 ,而是每处理完 中的一个词 ,就及时刷新一次 ,具体为:

同样,需要注意的是,循环体内的步 8 和 步 9 不能交换次序,即 要等贡献到 后才更新.

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注