@evilking
2018-05-01T00:51:48.000000Z
字数 9205
阅读 3374
NLP
上图给出了 CBOW 模型的网络结构,它包括三层: 输入层、投影层和输出层.下面以样本 为例对这三层做说明.
输入层: 包含 中 个词的词向量 . 这里 m 表示词向量的长度.
投影层: 将输入层的 个向量做求和累加,即
输出层: 输出层对应一棵二叉树,它是以语料中出现过的词当叶子结点,以各词在语料中出现的词频当权重构造出来的 Huffman树.在这颗 Huffman树中,叶子结点共 个,分别对应词典 中的词,非叶子结点 个.
总结一下,对比神经概率语言模型的网络图和CBOW模型的结构图,可知道:
(从输入层到投影层的操作)前者是通过拼接,后者通过累加求和.
(隐藏层)前者有隐藏层,后者无隐藏层.
(输出层)前者是线性结构,后者是树形结构.
在介绍神经概率语言模型时我们可知,模型的大部分计算集中在神经网络的隐藏层和输出层之间的矩阵向量运算,以及输出层上的 softmax 归一化运算.
而从上面的对比中可见,CBOW 模型对这些复杂度高的地方有针对性的进行了改变,首先去掉了隐藏层,其次输出层改用了 Huffman树,从而为利用 Hierarchical softmax 技术奠定了基础.
为下面讨论方便,我们先引入若干相关记号.考虑 Huffman 树种的某个叶子结点,假设它对应词典 中的词 ,记
:从根结点出发到达 对应叶子结点的路径
:路径 中包含结点的个数
:路径 中的 个结点,其中 表示根结点,表示词 对应的结点
:词 的 Huffman编码,它由 位编码构成, 表示路径 中第 j 个结点对应的编码(根结点不对应编码)
:路径 中非叶子结点对应的向量, 表示路径 中第 j 个非叶子结点对应的向量
下面以一个简单的例子来进一步说明一下:
句子为“我喜欢观看巴西足球世界杯”,分词后为“我 喜欢 观看 巴西 足球 世界杯”,假设根据语料库,分别统计分词后的各个词的频率,构建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 模型中采用随机梯度上升法更新各参数的伪代码:
skip-gram 模型与 cbow 模型的推导过程大同小异,所以推导过程中的记号保持含义一致.
同 CBOW 模型的网络结构一样,这里给出三层结构的说明:
输入层:只含当前样本的中心词 的词向量
投影层:这是个恒等投影,把 投影到 .因此,这个投影层其实是多余的;这里之所以保留投影层主要是方便和 CBOW模型的网络结构做对比
输出层:和 CBOW 模型一样,输出层也是一棵 Huffman树
对于 Skip-gram 模型,已知的是当前词 ,需要对其上下文 中的词进行预测,则可将 Skip-gram 模型中的条件概率函数 定义为:
将上式依次代回,可得对数似然函数的具体表达式为:
首先考虑 关于 的梯度计算(与 CBOW模型 对应部分的推导完全类似 ).
但是,word2vec源码中,并不是等 中的所有词都处理完后才刷新 ,而是每处理完 中的一个词 ,就及时刷新一次 ,具体为:
同样,需要注意的是,循环体内的步 8 和 步 9 不能交换次序,即 要等贡献到 后才更新.