系列文章:
- 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识
- 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型
- 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型
本篇是介绍基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型。
CBOW 模型
基本结构
CBOW 模型是在已知当前词 w t w_t wt的上下文 w t − 2 , w t − 1 , w t + 1 , w t + 2 w_{t-2},w_{t-1},w_{t+1},w_{t+2} wt−2,wt−1,wt+1,wt+2的前提下预测当前词 w t w_t wt。后面我们用 c o m t e x t ( w ) comtext(w) comtext(w)来表示词w的上下文中的词,通常,我们取词 w 前后 2c 个单词来组成 c o m t e x t ( w ) comtext(w) comtext(w)。下图给出了 CBOW 模型的网络结构:
它包括三层:输入层,投影层,输出层。
(1)输入层:包含 c o m t e x t ( w ) comtext(w) comtext(w)中的 2 c 2c 2c个词向量 v ( c o n t e x t ( w ) 1 ) , v ( c o n t e x t ( w ) 2 ) , … , v ( c o n t e x t ( w ) 2 c ) ∈ R m \mathbf v(context(w)_1),\mathbf v(context(w)_2),\ldots,\mathbf v(context(w)_{2c}) \in \mathbf R^m v(context(w)1),v(context(w)2),…,v(context(w)2c)∈Rm ,每个词向量的长度是 m m m。
(2)投影层:将输入层的 2 c 2c 2c个词向量累加求和,即 x w = ∑ i = 1 2 c v ( c o n t e x t ( w ) i ) \mathbf x_w = \sum_{i=1}^{2c}\mathbf v(context(w)_i) xw=∑i=12cv(context(w)i) 。
(3)输出层:输出层是用哈夫曼算法以各词在语料中出现的次数作为权值生成的一颗二叉树,其叶子结点是语料库中的所有词,叶子个数N=|D|,分别对应词典D中的词。
神经网络语言模型(NNLM)中大部分计算集中在隐藏层和输出层之间的矩阵向量运算,以及输出层上的softmax归一化运算,CBOW模型对此进行了改进。与传统的神经网络语言模型相比:
- NNLM则是简单的将输入的向量进行拼接,而CBOW 模型将上下文的词累加求和作为输入。
- NNLM是线性结构,而CBOW 是树形结构。
- NNLM具有隐藏层,而CBOW没有隐藏层。
目标函数
假设对于给定的文本,“我”、“喜欢”、“观看”、“巴西”、“足球”、“世界杯”这六个词出现的次数分别为15, 8, 6, 5,3, 1。于是可以用这些语料构建霍夫曼树,并将其作为CBOW模型的输出层。如下图所示:
注意:与常规的霍夫曼树不同,左子树用1编码,右子树用0编码。
接下来,我们用 p w p^w pw 表示从根结点出发到达 w w w对应叶子结点的路径, l w l^w lw 表示这个路径中包含结点的个数, p l w p_{l}^w plw 表示路径 p w p^w pw中的第 l l l个结点, d j w d_j^w djw 表示路径 p w p^w pw中第 j j j个结点对应的编码(0或1), θ j w \theta^w_j θjw 表示路径 p w p^w pw中第 j j j个非叶子结点对应向量。
我们的目标是利用输入向量 X w X_w Xw 和霍夫曼树来定义函数 p ( w ∣ c o n t e x t ( w ) ) p(w|context(w)) p(w∣context(w))。
以图中的词 w = " 足 球 " w="足球" w="足球"为例,从霍夫曼树的根结点出发到“足球”,中间经历了4个分支,每一次分支,都可以看成进行了一次二分类。那么从二分类的角度来看,对于每个非叶子结点,就需要为其左右孩子指定类别。我们规定:编码为1的结点定义为负类,编码为0的结点定义为正类。也就是说,将一个结点进行二分类,分到左边是负类,分到右边是正类。所以有:
L a b e l ( p i w ) = 1 − d i w , i = 1 , 2 , … , l w Label(p_i^w) = 1- d_i^w, \quad i=1,2,\ldots,l^w Label(piw)=1−diw,i=1,2,…,lw
我们用逻辑斯蒂回归进行二分类,一个结点被分为正类的概率是:
σ ( x w T θ ) = 1 1 + e − x w T θ \sigma(\mathbf x_w^T\theta) = \frac{1}{1+e^{-\mathbf x_w^T\theta}} σ(xwTθ)=1+e−xwTθ1
被分成负类的概率为:
1 − σ ( x w T θ ) 1-\sigma(\mathbf x_w^T\theta) 1−σ(xwTθ)
这里的 θ \theta θ就是非叶子节点对应的向量,是个待定参数。
所以,从霍夫曼树的根结点出发到“足球”,中间经历了4个二分类,每个分类的结果如下:
第一次: p ( d 2 w ∣ x w , θ 1 w ) = 1 − σ ( x w T θ 1 w ) p(d_2^w|\mathbf x_w,\theta_1^w) = 1- \sigma(\mathbf x_w^T\theta_1^w) p(d2w∣xw,θ1w)=1−σ(xwTθ1w)
第二次: p ( d 3 w ∣ x w , θ 2 w ) = σ ( x w T θ 2 w ) p(d_3^w|\mathbf x_w,\theta_2^w) = \sigma(\mathbf x_w^T\theta_2^w) p(d3w∣xw,θ2w)=σ(xwTθ2w)
第三次: p ( d 4 w ∣ x w , θ 3 w ) = σ ( x w T θ 3 w ) p(d_4^w|\mathbf x_w,\theta_3^w) = \sigma(\mathbf x_w^T\theta_3^w) p(d4w∣xw,θ3w)=σ(xwTθ3w)
第四次: p ( d 5 w ∣ x w , θ 4 w ) = 1 − σ ( x w T θ 4 w ) p(d_5^w|\mathbf x_w,\theta_4^w) = 1- \sigma(\mathbf x_w^T\theta_4^w) p(d5w∣xw,θ4w)=1−σ(xwTθ4w)
这四个概率的乘积就是 p ( 足 球 ∣ c o n t e x t ( 足 球 ) ) p(足球|context(足球)) p(足球∣context(足球)),即:
p ( 足 球 ∣ c o n t e x t ( 足 球 ) ) = ∏ j = 2 5 p ( d j w ∣ x w , θ j − 1 w ) p(足球|context(足球)) = \prod_{j=2}^5 p(d_j^w|\mathbf x_w,\theta_{j-1}^w) p(足球∣context(足球))=