【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型

NLP笔记之word2vec算法(1)--Skip-gram算法原理+数学推导 word2vec中提出了两种模型来进行word embedding,分别是Skip-gram 和 CBOW(continuous bag of words),这两种模型的概念在Word2vec之前就已经提出来了。 下面先对两种模型做个简要的介绍: Skip-gram : 给定中心词,预测窗口内的上下文的词 CBOW : 给定窗口内的上下文的词, 预测中心词 可以看出两种模型属于相反的一个关系,下面分别对两种模型进行相应的介绍。 阅读详情


系列文章:

  1. 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识
  2. 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型
  3. 【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=12c​v(context(w)i​) 。

(3)输出层:输出层是用哈夫曼算法以各词在语料中出现的次数作为权值生成的一颗二叉树,其叶子结点是语料库中的所有词,叶子个数N=|D|,分别对应词典D中的词。

神经网络语言模型(NNLM)中大部分计算集中在隐藏层和输出层之间的矩阵向量运算,以及输出层上的softmax归一化运算,CBOW模型对此进行了改进。与传统的神经网络语言模型相比:

  1. NNLM则是简单的将输入的向量进行拼接,而CBOW 模型将上下文的词累加求和作为输入。
  2. NNLM是线性结构,而CBOW 是树形结构。
  3. 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(足球))=j=2∏5​p(djw​∣xw​,θj−1w​)
总结:对于词典D中的任意词w, 霍夫曼树中必存在一条从根结点到词w对应结点的路径 p w p^w pw (且这条路径是唯一的)。路径 p w p^w pw上存在 l w − 1 l^w -1 lw−1个分支,将每个分支看做一次二分类,每一次分类就产生一个概率, 将这些概率乘起来,就是所需的 p ( w ∣ C o n t e x t ( w ) ) p(w|Context(w)) p(w∣Context(w))。

所以条件概率的定义如下:
p ( w ∣ c o n t e x t ( w ) ) = ∏ j = 2 l w p ( d j w ∣ x w , θ j − 1 w ) p(w|context(w)) = \prod_{j=2}^{l^w} p(d_j^w|\mathbf x_w,\theta_{j-1}^w) p(w∣context(w))=j=2∏lw​p(djw​∣xw​,θj−1w​)
其中:
p ( d j w ∣ x w , θ j − 1 w ) = { σ ( x w T θ j − 1 w ) d j w = 0 1 − σ ( x w T θ j − 1 w ) d j w = 1 p(d_j^w|\mathbf x_w,\theta_{j-1}^w) = \begin{cases} \sigma(\mathbf x_w^T\theta_{j-1}^w) \qquad d_j^w=0 \\ 1-\sigma(\mathbf x_w^T\theta_{j-1}^w) \quad d_j^w=1 \end{cases} p(djw​∣xw​,θj−1w​)={σ(xwT​θj−1w​)djw​=01−σ(xwT​θj−1w​)djw​=1​
于是整体表达式如下:
p ( d j w ∣ x w , θ j − 1 w ) = [ σ ( x w T θ j − 1 w ) ] 1 − d j w ⋅ [ 1 − σ ( x w T θ j − 1 w ) ] d j w p(d_j^w|\mathbf x_w,\theta_{j-1}^w) = [\sigma(\mathbf x_w^T\theta_{j-1}^w)]^{1-d_j^w}\cdot[1-\sigma(\mathbf x_w^T\theta_{j-1}^w)]^{d_j^w} p(djw​∣xw​,θj−1w​)=[σ(xwT​θj−1w​)]1−djw​⋅[1−σ(xwT​θj−1w​)]djw​
所以我们的优化目标是:
L = ∑ w ∈ C l o g ∏ j = 2 l w { [ σ ( x w T θ j − 1 w ) ] 1 − d j w ⋅ [ 1 − σ ( x w T θ j − 1 w ) ] d j w } = ∑ w ∈ C ∑ j = 2 l w { ( 1 − d j w ) log ⁡ [ σ ( x w T θ j − 1 w ) ] + d j w log ⁡ [ 1 − σ ( x w T θ j − 1 w ) ] } = ∑ w ∈ C ∑ j = 2 l w L ( w , j ) \begin{aligned} \mathcal L &= \sum_{w \in C} log\prod_{j=2}^{l^w}\{ [\sigma(\mathbf x_w^T\theta_{j-1}^w)]^{1-d_j^w}\cdot[1-\sigma(\mathbf x_w^T\theta_{j-1}^w)]^{d_j^w}\} \\ &= \sum_{w \in C} \sum_{j=2}^{l^w}\{ ({1-d_j^w})\log[\sigma(\mathbf x_w^T\theta_{j-1}^w)]+d_j^w\log[1-\sigma(\mathbf x_w^T\theta_{j-1}^w)]\} \\ &= \sum_{w \in C} \sum_{j=2}^{l^w} \mathcal L(w,j) \end{aligned} L​=w∈C∑​logj=2∏lw​{[σ(xwT​θj−1w​)]1−djw​⋅[1−σ(xwT​θj−1w​)]djw​}=w∈C∑​j=2∑lw​{(1−djw​)log[σ(xwT​θj−1w​)]+djw​log[1−σ(xwT​θj−1w​)]}=w∈C∑​j=2∑lw​L(w,j)​
其中: L ( w , j ) = ( 1 − d j w ) log ⁡ [ σ ( x w T θ j − 1 w ) ] + d j w log ⁡ [ 1 − σ ( x w T θ j − 1 w ) ] \mathcal L(w,j) = ({1-d_j^w})\log[\sigma(\mathbf x_w^T\theta_{j-1}^w)]+d_j^w\log[1-\sigma(\mathbf x_w^T\theta_{j-1}^w)] L(w,j)=(1−djw​)log[σ(xwT​θj−1w​)]+djw​log[1−σ(xwT​θj−1w​)]

这就是CBOW的目标函数。

梯度计算

采用随机梯度上升法将这个函数最大化。

注:随机梯度上升法:随机取一个样本 ( c o n t e x t ( w ) , w ) (context(w),w) (context(w),w),对目标函数中的所有的参数行一次更新。

(1)更新 θ j − 1 w \theta_{j-1}^w θj−1w​

因为:
∂ L ( w , j ) ∂ θ j − 1 w = ∂ { ( 1 − d j w ) log ⁡ [ σ ( x w T θ j − 1 w ) ] + d j w log ⁡ [ 1 − σ ( x w T θ j − 1 w ) ] } ∂ θ j − 1 w = ( 1 − d j w ) [ 1 − σ ( x w T θ j − 1 w ) ] x w − d j w σ ( x w T θ j − 1 w ) x w = { ( 1 − d j w ) [ 1 − σ ( x w T θ j − 1 w ) ] − d j w σ ( x w T θ j − 1 w ) } x w = [ 1 − d j w − σ ( x w T θ j − 1 w ) ] x w \begin{aligned} \frac{\partial \mathcal L(w,j)}{\partial \theta_{j-1}^w} &= \frac{\partial \{ ({1-d_j^w})\log[\sigma(\mathbf x_w^T\theta_{j-1}^w)]+d_j^w\log[1-\sigma(\mathbf x_w^T\theta_{j-1}^w)]\} }{\partial \theta_{j-1}^w} \\ &= ({1-d_j^w})[1-\sigma(\mathbf x_w^T\theta_{j-1}^w)]\mathbf x_w - d_j^w\sigma(\mathbf x_w^T\theta_{j-1}^w) \mathbf x_w \\ &=\{(1-d_j^w)[1-\sigma(\mathbf x_w^T\theta_{j-1}^w)] - d_j^w\sigma(\mathbf x_w^T\theta_{j-1}^w) \}\mathbf x_w \\ & = [1-d_j^w-\sigma(\mathbf x_w^T\theta_{j-1}^w)]\mathbf x_w \end{aligned} ∂θj−1w​∂L(w,j)​​=∂θj−1w​∂{(1−djw​)log[σ(xwT​θj−1w​)]+djw​log[1−σ(xwT​θj−1w​)]}​=(1−djw​)[1−σ(xwT​θj−1w​)]xw​−djw​σ(xwT​θj−1w​)xw​={(1−djw​)[1−σ(xwT​θj−1w​)]−djw​σ(xwT​θj−1w​)}xw​=[1−djw​−σ(xwT​θj−1w​)]xw​​
所以 θ j − 1 w \theta_{j-1}^w θj−1w​更新公式为:
θ j − 1 w : = θ j − 1 w + η [ 1 − d j w − σ ( x w T θ j − 1 w ) ] x w \theta_{j-1}^w:=\theta_{j-1}^w + \eta [1-d_j^w-\sigma(\mathbf x_w^T\theta_{j-1}^w)]\mathbf x_w θj−1w​:=θj−1w​+η[1−djw​−σ(xwT​θj−1w​)]xw​
其中 η \eta η为学习率。

(2)更新 x w \mathbf x_w xw​

因为 L ( w , j ) \mathcal L(w,j) L(w,j) 关于变量 x w \mathbf x_w xw​和 θ j − 1 w \theta_{j-1}^w θj−1w​是对称的。所以:
∂ L ( w , j ) ∂ x w = [ 1 − d j w − σ ( x w T θ j − 1 w ) ] θ j − 1 w \begin{aligned} \frac{\partial \mathcal L(w,j)}{\partial \mathbf x_w} = [1-d_j^w-\sigma(\mathbf x_w^T\theta_{j-1}^w)]\theta_{j-1}^w \end{aligned} ∂xw​∂L(w,j)​=[1−djw​−σ(xwT​θj−1w​)]θj−1w​​
这里存在一个问题:我们的最终目的是要求词典D中每个词的词向量,而这里的 x w \mathbf x_w xw​ 表示的是 c o n t e x t ( w ) context(w) context(w)中各词词向量的累加。那么,如何利用 ∂ L ( w , j ) ∂ x w \frac{\partial \mathcal L(w,j)}{\partial \mathbf x_w} ∂xw​∂L(w,j)​来对 v ( w ) , w ∈ D \mathbf v(w),w \in D v(w),w∈D 进行更新呢? word2vec中的做法很简单, 直接取
v ( w ) : = v ( w ) + η ∑ j = 2 l w ∂ L ( w , j ) ∂ x w , w ∈ c o n t e x t ( w ) \mathbf v(w) := \mathbf v(w) + \eta \sum_{j=2}^{l^w} \frac{\partial \mathcal L(w,j)}{\partial \mathbf x_w},\quad w \in context(w) v(w):=v(w)+ηj=2∑lw​∂xw​∂L(w,j)​,w∈context(w)
注:既然 x w \mathbf x_w xw​ 本身就是 c o n t e x t ( w ) context(w) context(w)中各个词向量的累加,求完梯度后也应该将其贡献到每个分量上。

下面是CBOW模型中采用的随机梯度上升法伪代码:

在这里插入图片描述

Skip-gram 模型

基本结构

Skip-gram 模型的结构也是三层,下面以样本 ( w , c o n t e x t ( w ) ) (w,context(w)) (w,context(w))为例说明。如下图所示:

在这里插入图片描述

(1)输入层:只包含当前样本中心词 w w w词向量 v ( w ) ∈ R m \mathbf v(w) \in \mathbf R^m v(w)∈Rm ,每个词向量的长度是 m m m。

(2)投影层:恒等投影,即和输入层一样,保留是为了与CBOW对比。

(3)输出层:与CBOW类似。

对于Skip-gram模型,已知的是当前词 w w w,需要对其上下文 c o n t e x t ( w ) context(w) context(w)中的词进行预测,所以:
p ( c o n t e x t ( w ) ∣ w ) = ∏ u ∈ c o n t e x t ( w ) p ( u ∣ w ) p(context(w)|w) = \prod_{u \in context(w)} p(u|w) p(context(w)∣w)=u∈context(w)∏​p(u∣w)
类似于CBOW,所以:
p ( u ∣ w ) = ∏ j = 2 l u p ( d j u ∣ v ( w ) , θ j − 1 u ) p(u|w) = \prod_{j=2}^{l^u}p(d_j^u|\mathbf v(w),\theta_{j-1}^u) p(u∣w)=j=2∏lu​p(dju​∣v(w),θj−1u​)
其中:
p ( d j u ∣ v ( w ) , θ j − 1 u ) = [ σ ( v ( w ) T θ j − 1 u ) ] 1 − d j u ⋅ [ 1 − σ ( v ( w ) T θ j − 1 u ) ] d j u p(d_j^u|\mathbf v(w),\theta_{j-1}^u) = [\sigma(\mathbf v(w)^T\theta_{j-1}^u)]^{1-d_j^u}\cdot[1-\sigma(\mathbf v(w)^T\theta_{j-1}^u)]^{d_j^u} p(dju​∣v(w),θj−1u​)=[σ(v(w)Tθj−1u​)]1−dju​⋅[1−σ(v(w)Tθj−1u​)]dju​
所以我们的优化目标是:
L = ∑ w ∈ C log ⁡ ∏ u ∈ c o n t e x t ( w ) ∏ j = 2 l u { [ σ ( v ( w ) T θ j − 1 u ) ] 1 − d j u ⋅ [ 1 − σ ( v ( w ) T θ j − 1 u ) ] d j u } = ∑ w ∈ C ∑ u ∈ c o n t e x t ( w ) ∑ j = 2 l u { ( 1 − d j u ) log ⁡ [ σ ( v ( w ) T θ j − 1 u ) ] + d j u l o g [ 1 − σ ( v ( w ) T θ j − 1 u ) ] } = ∑ w ∈ C ∑ u ∈ c o n t e x t ( w ) ∑ j = 2 l u   L ( w , u , j ) \begin{aligned} \mathcal L &= \sum_{w \in C} \log \prod_{u \in context(w)} \prod_{j=2}^{l^u} \{ [\sigma(\mathbf v(w)^T\theta_{j-1}^u)]^{1-d_j^u}\cdot[1-\sigma(\mathbf v(w)^T\theta_{j-1}^u)]^{d_j^u}\} \\ &= \sum_{w \in C} \sum_{u \in context(w)} \sum_{j=2}^{l^u} \{ (1-d_j^u) \log [\sigma(\mathbf v(w)^T\theta_{j-1}^u)]+d_j^ulog[1-\sigma(\mathbf v(w)^T\theta_{j-1}^u)] \}\\ &= \sum_{w \in C} \sum_{u \in context(w)} \sum_{j=2}^{l^u} \mathcal L(w,u,j) \end{aligned} L​=w∈C∑​logu∈context(w)∏​j=2∏lu​{[σ(v(w)Tθj−1u​)]1−dju​⋅[1−σ(v(w)Tθj−1u​)]dju​}=w∈C∑​u∈context(w)∑​j=2∑lu​{(1−dju​)log[σ(v(w)Tθj−1u​)]+dju​log[1−σ(v(w)Tθj−1u​)]}=w∈C∑​u∈context(w)∑​j=2∑lu​ L(w,u,j)​
采用随机梯度上升法将这个函数最大化。

梯度计算

(1)更新 θ j − 1 u \theta_{j-1}^u θj−1u​

因为:
∂ L ( w , u , j ) ∂ θ j − 1 u = ∂ { [ σ ( v ( w ) T θ j − 1 u ) ] 1 − d j u ⋅ [ 1 − σ ( v ( w ) T θ j − 1 u ) ] d j u } ∂ θ j − 1 u = ( 1 − d j u ) [ 1 − σ ( v ( w ) T θ j − 1 u ) ] v ( w ) − d j u σ ( v ( w ) T θ j − 1 u ) v ( w ) = { ( 1 − d j u ) [ 1 − σ ( v ( w ) T θ j − 1 u ) ] − d j u σ ( v ( w ) T θ j − 1 u ) } v ( w ) = [ 1 − d j u − σ ( v ( w ) T θ j − 1 u ) ] v ( w ) \begin{aligned}\frac{\partial \mathcal L(w,u,j)}{\partial \theta_{j-1}^u} &= \frac{\partial \{ [\sigma(\mathbf v(w)^T\theta_{j-1}^u)]^{1-d_j^u}\cdot[1-\sigma(\mathbf v(w)^T\theta_{j-1}^u)]^{d_j^u}\} }{\partial \theta_{j-1}^u} \\ &= ({1-d_j^u})[1-\sigma(\mathbf v(w)^T\theta_{j-1}^u)]\mathbf v(w) - d_j^u\sigma(\mathbf v(w)^T\theta_{j-1}^u) \mathbf v(w)\\ &=\{(1-d_j^u)[1-\sigma(\mathbf v(w)^T\theta_{j-1}^u)] - d_j^u\sigma(\mathbf v(w)^T\theta_{j-1}^u) \}\mathbf v(w) \\& = [1-d_j^u-\sigma(\mathbf v(w)^T\theta_{j-1}^u)]\mathbf v(w) \end{aligned} ∂θj−1u​∂L(w,u,j)​​=∂θj−1u​∂{[σ(v(w)Tθj−1u​)]1−dju​⋅[1−σ(v(w)Tθj−1u​)]dju​}​=(1−dju​)[1−σ(v(w)Tθj−1u​)]v(w)−dju​σ(v(w)Tθj−1u​)v(w)={(1−dju​)[1−σ(v(w)Tθj−1u​)]−dju​σ(v(w)Tθj−1u​)}v(w)=[1−dju​−σ(v(w)Tθj−1u​)]v(w)​
所以 θ j − 1 w \theta_{j-1}^w θj−1w​更新公式为:
θ j − 1 u : = θ j − 1 u + η [ 1 − d j u − σ ( v ( w ) T θ j − 1 u ) ] v ( w ) \theta_{j-1}^u:=\theta_{j-1}^u + \eta [1-d_j^u-\sigma(\mathbf v(w)^T\theta_{j-1}^u)]\mathbf v(w) θj−1u​:=θj−1u​+η[1−dju​−σ(v(w)Tθj−1u​)]v(w)
其中 η \eta η为学习率。

(2)更新 v ( w ) \mathbf v(w) v(w)

因为 L ( w , u , j ) \mathcal L(w,u,j) L(w,u,j) 关于变量 v ( w ) \mathbf v(w) v(w)和 θ j − 1 w \theta_{j-1}^w θj−1w​是对称的。所以:
∂ L ( w , u , j ) ∂ v ( w ) = [ 1 − d j u − σ ( v ( w ) T θ j − 1 u ) ] θ j − 1 u \begin{aligned}\frac{\partial \mathcal L(w,u,j)}{\partial \mathbf v(w)} = [1-d_j^u-\sigma(\mathbf v(w)^T\theta_{j-1}^u)]\theta_{j-1}^u \end{aligned} ∂v(w)∂L(w,u,j)​=[1−dju​−σ(v(w)Tθj−1u​)]θj−1u​​
所以, v ( w ) \mathbf v(w) v(w)更新公式为:
v ( w ) : = v ( w ) + η ∑ u ∈ c o n t e x t ( w ) ∑ j = 2 l w ∂ L ( w , u , j ) ∂ v ( w ) , w ∈ c o n t e x t ( w ) \mathbf v(w) := \mathbf v(w) + \eta \sum_{u \in context(w)} \sum_{j=2}^{l^w} \frac{\partial \mathcal L(w,u,j)}{\partial \mathbf v(w)},\quad w \in context(w) v(w):=v(w)+ηu∈context(w)∑​j=2∑lw​∂v(w)∂L(w,u,j)​,w∈context(w)
具体伪代码如下:

在这里插入图片描述

与 CBOW 相比,最大的区别是多个了外层循环。

优缺点分析

使用霍夫曼树来代替传统的神经网络,避免了从隐藏层到输出的softmax层这里的计算,也避免计算所有词的softmax概率。

但是如果我们的训练样本里的中心词 w w w是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。解决这个问题则是采用基于Negative Sampling的模型。

参考文章:
word2vec 中的数学原理详解
基于Hierarchical Softmax的word2vec模型

机器学习算法(十三):word2vec 1 单词表达 1.1Word embedding Embedding是数学领域的有名词,是指某个对象 X 被嵌入到另外一个对象 Y 中,映射 f : X → Y ,例如有理数嵌入实数。 Word embedding 是NLP中一组语言模型(language modeling)和特征学习技术(feature learning techniques)的总称,这些... 阅读详情

相关推荐

CBOW 和 Skip-gram

根据源码分析 COBW 和 skip-gram 的区别与联系。

weixin_52147110的博客 1553

论文学习:基于Hierarchical Softmax的CBOW模型

看到一篇写的非常好的关于 word2vec 文章《word2vec中的数学原理详解》,本来想着看完之后按自己对知识的整理做一下记录,但是觉得原文作者(peghoty)写的太好了,这里按作者写作逻辑记录一下个人的学习笔记吧。

qq_41297934的博客 1086

word2vec模型

(一)简介 1、传统的词向量一般用one-hot表示,通常面临两个问题:(1)高维稀疏的向量带来计算成本;(2)不同的词向量彼此正交,无法衡量词之间的相似度。而distributed representation通过训练,可以得到每个词的低维稠密向量,不仅计算成本低,而且可以通过向量的距离计算来表示词与词之间的相似度。word2vector就是一个将词进行低维稠密向量化的工具。 2、wor...

zakexu的专栏 1万+

基于 Hierarchical Softmax 的 CBOW 模型

基于 Hierarchical Softmax 的 CBOW 模型关注:如何构造 P(w | context(w))P(w\ |\ context(w)) ?

Oliver的博客 1872

深度学习笔记——Word2vec和Doc2vec训练实例以及参数解读

本篇主要用一个实例来介绍一下如何进行Word2vec和Doc2vec的训练,并对Word2vec和Doc2vec模型训练过程中的参数进行一些解读。使用的是Python版本的gensim库实现,想要了解Word2vec和Doc2vec的原理可以查看我的上一篇博客( 深度学习笔记——Word2vec和Doc2vec原理理解并结合代码分析)。代码见我的GitHub(使用Gensim库训练Word2vec和Doc2vec模型)

mpk_no1的博客 1万+

个人总结:自然语言处理 word2vec(skip-gram/CBOW以及优化算法Hierarchical Softmax和Negative Sampling)

前言 word2vec,顾名思义,将一个词转化为向量,也经常会看到一个非常相关的词“词嵌入”,也就是word embedding。词嵌入是一类将词从高维空间映射到低维空间的过程的统称,核心思想是将每个词都映射为低维空间(通常K=50-300维)上的一个稠密向量。K维空间的每一维可以看做一个隐含的主题,只不过不像主题模型中的主题那么直观。 假设每篇文章有N个词,每个词映射为K维的向量,那就可以用...

yyhhlancelot的博客 2738

层次softmax (hierarchical softmax)理解

基于word2vec模型学习词的语义向量表示,已在NLP许多任务中都发挥了重要的作用,接下来对词向量学习中的hierarchical softmax的应用做一个分析和学习 CBOW(Continuous Bag-of-Word) One-word context 假设我们vocabulary size 为VVV,hidden layer 神经元个数为NNN,假设我们只有一个上下文单词,则根据这个上下文单词预测目标词,类似于一个bigram model,如下图所示: 输入是一个one-hot编码的vecto

BGoodHabit的博客 9922

word2vec中数学原理详解以及原理思考

很久没有写博客了,也没有写过相关总结。最近,工作中又开始用到了word2vector,正好就做个相关总结。这方面相关的博客有很多,我看过的讲的最清楚的就是@peghoty的博客。 要理解wordvector的原理,有些知识还是需要提前了解一下。 预备知识:http://blog.youkuaiyun.com/itplus/article/details/37969635 , 背景知识:

CFZero的专栏 1万+

word2vec原理(二) 基于Hierarchical Softmax的模型

在word2vec原理(一) CBOW与Skip-Gram模型基础中,我们讲到了使用神经网络的方法来得到词向量语言模型的原理和一些问题,现在我们开始关注word2vec的语言模型如何改进传统的神经网络的方法。由于word2vec有两种改进方法,一种是基于Hierarchical Softmax的,另一种是基于Negative Sampling的。本文关注于基于Hierarchical Softma...

weixin_30677617的博客 126

Word2vec 原理公式推到和代码实现

本文摘录整编了一些理论介绍,推导了word2vec中的数学原理;并考察了一些常见的word2vec实现,评测其准确率等性能,最后分析了word2vec原版C代码;针对没有好用的Java实现的现状,移植了原版C程序到Java。时间和水平有限,本文没有就其发展历史展开多谈,只记录了必要的知识点,并着重关注工程实践。 虽然我的Java方案速度比原版C程序高出1倍,在算法代码与原版C程序一致的情况下

lyc_yongcai的博客 6268

基于Hierarchical Softmax的CBOW模型

基于Hierarchical Softmax的CBOW模型 构造 P(w | context(w)) 哈夫曼树(Huffman Tree) 又称为带权路径长度最短二叉树,或最优二叉树。如A:15,B:10,C:3,D:5,下图所示为哈夫曼树: 带权路径长度WPL=33+53+102+151=59。 在CBOW中,输出层为一棵根据词频构造的哈夫曼树。 其实在word2vec之前,即有类似的三层神...

心宝的博客 665

NLP | Word2Vec之基于Hierarchical Softmax的 skip-gram 和 CBOW 模型

主要介绍Word2Vec中的Skip-Gram模型和CBOW模型。总结来说,skip-gram是用中心词预测周围词,预测的时候是一对word pair,等于对每一个中心词都有K个词作为output,对于一个词的预测有K次,所以能够更有效的从context中学习信息,但是总共预测K*V词。CBOW模型中input是context(周围词),而output是中心词。因此,skip gram的训练时间更...

十三 1739

Word2vec核心模型精讲:CBOW与Skip-gram

Word2vec是Google提出的词向量模型,通过CBOW和Skip-gram两种神经网络架构将词汇映射到低维向量空间。CBOW通过上下文预测中心词,训练速度快但高频词表现更好;Skip-gram则相反,通过中心词预测上下文,适合处理生僻词。为解决softmax计算效率问题,Word2vec引入基于哈夫曼树的Hierarchical Softmax优化技术,将复杂度从O(V)降至O(logV)。文章详细解析了两种模型的原理差异,并演示了哈夫曼树的构造过程及其在词向量训练中的关键作用,这种结合词频的优

Trisyp的博客 528

word2vec进阶之skim-gram和CBOW模型(Hierarchical Softmax、Negative Sampling)

系列目录(系列更新中) 第二讲 cs224n系列之word2vec & 词向量 word2vec进阶之skim-gram和CBOW模型(Hierarchical Softmax、Negative Sampling) 第三讲 cs224n系列之skip-pram优化 & Global Vector by Manning & 词向量评价 语言模型 在统计自然

AI蜗牛之家 7033

Dify 1.1.3部署避坑指南:用wait-for-it.sh解决PostgreSQL初始化失败问题

本文详细解析了Dify 1.1.3部署中遇到的插件数据库初始化失败问题,并提供了使用wait-for-it.sh脚本的实战解决方案。通过剖析Docker Compose服务依赖管理的局限性,指导用户如何改造镜像与配置,确保服务按正确顺序启动,从而有效解决数据库连接失败等部署难题。

wdx012345的博客 1003

FreeRTOS项目:智能手表(1);

从 “最底层启动”→“系统基础配置”→“硬件驱动”→“中间件能力封装”→“上层业务功能”,分层递进、从基础到应用,就能逐步把整个项目的逻辑串联起来~

weixin_46847454的博客 1446

NLP词向量表示:CBOW、Skip-gram、hierarchical softmax、negative sampling

文章目录Skip-gramCBOWhierarchical softmaxnegative sampling Skip-gram skip-gram,即规定了中间词及其上下文窗口大小,会在这个窗口内随机选skip个。 CBOW hierarchical softmax 设词库大小为V,层次softmax不再计算V个softmax,而是只计算logV个,具体如下: negative sampli...

Leon_winter的博客 1331

Python 使用Pygame库实现足球游戏:创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理

本文将介绍如何使用Python和Pygame库创建一个简单的足球游戏。我们将搭建一个基本的游戏环境,创建一个球员和一个足球,并使玩家能够控制球员的移动。游戏将包括碰撞检测、简单的物理模拟,以及基本的用户输入处理。这个简单的足球游戏展示了Pygame的一些基本功能。虽然这是一个简单的游戏,但它包含了创建游戏循环、用户输入处理、物理模拟、碰撞检测等重要概念。

程序熊的博客 743

NLP | Word2Vec之基于Negative Sampling的 CBOW 和 skip-gram 模型

前面介绍了基于Hierarchical Softmax的 skip-gram 和 CBOW 模型,虽然我们使用霍夫曼树代替传统的神经网络,可以提高模型训练的效率。但是如果我们的训练样本里的中心词www是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。能不能不用搞这么复杂的一颗霍夫曼树,将模型变的更加简单呢? Negative Sampling就是这么一种求解word2vec模型的方法,它摒...

十三 1290

DeepSeek+知网研学:三步搞定文献矩阵与对比分析(实战指南)

本文提供了一套高效实用的文献管理分析实战指南,详细介绍了如何结合DeepSeek大模型与知网研学平台,通过三个核心步骤快速完成文献梳理。该方法能自动提炼文献核心要素、生成结构化对比矩阵,并辅助发现研究空白,显著提升学术研究者的文献分析效率与深度。

weixin_29061509的博客 490

使用 Python 实现无人机避障的人工势场算法

人工势场算法是一种基于力的控制方法,通过将目标位置视为一个吸引力源,而将障碍物视为排斥力源,来引导移动体朝着目标前进,同时避开障碍物。接下来,我们将定义几个类来实现人工势场算法,包括无人机类、障碍物类和势场类。

闲人编程的博客 2585

(2)基于Hierarchical Softmax的模型

1.基于Hierarchical Softmax的模型概述 由于隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。 (1)相比于DDN改进 word2vec对这个模型做了改进,首先,对于从输入层到隐藏层的映射,没有采取神经网络的线性变换加激活函数的方法,而是采用简单的对所有输入词向量求和并取平均的方法。这里从多个词向量变成了一个词向量。 第二个改进就是从隐藏层到输出的softmax层这里的计算量个改进。为了避免要计算所有词的softmax概率,word

大表哥的博客 4894

轴承寿命预测实战:手把手教你用IEEE PHM2012数据集训练模型(附Python代码)

本文详细介绍了如何利用IEEE PHM2012数据集构建轴承剩余寿命预测模型,从数据预处理、特征工程到LSTM模型训练与部署,提供了完整的Python代码实现。通过实战案例,帮助读者掌握预测性维护中的关键技术,提升工业设备的运行安全与效率。

weixin_29186249的博客 311

详解word2vec

1.嵌入是用向量表示一个物体2.用数值表示标识符,在机器学习领域称为词嵌入,也称分布式表示3.词嵌入通常有两种方法——基于平台的Embedding学习,基于预训练模型4.word2vec是...

咔咔响 4518

【笔记】2022.6.7 数据分析概论

已完结

SpriteNym的博客 1372

vscode的launch:program ‘‘ does not exist

如图 一般是由于launch.json文件没有配置好的缘故。在右下角的ADD configuration如选第二个登录: 看到program这一栏,这一栏很重要,一般是选择你CMakelist,编译出来的可执行文件 看我CMakelist, 我生成的可执行文件是test_,所以路径可以这样输入: 我在之前cmake的时候已经有了test_这个文件了 然后就可以运...

狂小虎/Anthony Dave的博客 KuangXiaoHu's Blogs 5万+
上一篇: 【word2vec】篇一:理解词向量、CBOW与Skip-Gram等知识
下一篇: 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型
VariableX
博客等级 码龄7年 142粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值