(三)Word2vec -- 2 基于Hierarchical Softmax的模型

2. 基于Hierarchical Softmax的模型

从上一小节 相比神经概率语言模型的改进 的内容可以了解到,Word2vec提出了两种优化Softmax计算过程的方法,分别对应Word2vec的两种框架:Hierarchical Softmax 和 Negative Sampling。

而Word2vec中存在两种重要模型:CBOW模型(Continuous Bag-of-Words Model)和Skip-gram模型,分别可以基于上述两种框架进行实现。

本节将介绍基于Hierarchical Softmax框架的两种模型。


2.1 CBOW模型

CBOW模型(Continuous Bag-of-Words Model),输入层到投影层的操作由「拼接」变成了「叠加」。
对于「叠加」而言,无所谓词的顺序,所以称为词袋模型(Bag-of-Words)。

模型结构如下图所示:

其中,

上下文 C o n t e x t ( w ) Context(w) Context(w):由 w w w前后各 c c c个词构成。
输入层:包含 2 c 2c 2c个词的词向量。
投影层:将输入层的 2 c 2c 2c个词做「累加求和」。

X w = ∑ i = 1 2 c v ( C o n t e x t ( w i ) ) ∈ R m X_w= \sum_{i=1}^{2c}v(Context(w_i)) \in \Bbb R^m Xw=i=12cv(Context(wi))Rm

输出层:输出层对应一棵Huffman树。该Huffman树以语料中出现的词为叶子节点,以各词在语料中出现的次数为权值。该树中,叶子节点共有 N N N个( N = ∣ D ∣ N=|D| N=D)。


2.1.1 梯度计算

  • 相关符号含义
    p w p^w pw:从根节点到对应叶子节点的路径。
    l w l^w lw:路径上包含的节点个数。
    p 1 w , p 2 w , . . . , p l w w p^w_1,p^w_2,...,p^w_{l^w} p1w,p2w,...,plww:路径上对应的节点。
    d 1 w , d 2 w , . . . , d l w w ∈ { 0 , 1 } d^w_1,d^w_2,...,d^w_{l^w} \in \{0,1\} d1w,d2w,...,dlww{ 0,1}:路径上的节点对应的Huffman编码(根节点不对应编码)。
    θ 1 w , θ 2 w , . . . , θ l w w ∈ R m \theta^w_1,\theta^w_2,...,\theta^w_{l^w} \in \Bbb R^m θ1w,θ2w,...,θlwwRm:路径上的「非叶子节点」对应的词向量。

从根节点出发到某个叶子节点的路径上,每个分支都可视作进行了一次「二分类」。
默认左子树(Huffman编码为1)为负类,右子树(Huffman编码为0)为正类,有:

  • 分为正类的概率: σ ( X w T θ ) = 1 1 + e x p ( − X w T θ ) \sigma(X^T_w\theta)=\frac{1}{1+exp({-X^T_w\theta)}} σ(XwTθ)=1+exp(XwTθ)1
  • 分为负类的概率: 1 − σ ( X w T θ ) 1-\sigma(X^T_w\theta) 1σ(XwTθ)

其中, θ \theta θ为当前「非叶子结点」的对应的词向量。


Hierarchical Softmax的思想

对于词典 D D D中的任意词 w w w,Huffman树中必存在一条从根节点到词 w w w对应叶子节点的路径 p w p^w pw,路径 p w p^w pw上存在 l w − 1 l^w-1 lw1个分支。
将每个分支看做一次二分类,则每次分类会产生一个概率。将这些概率连乘,即得到 p ( w ∣ C o n t e x t ( w ) ) p(w|Context(w)) p(wContext(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 ( 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 = [ σ ( X w T θ j − 1 w ) ] 1 − d j w ⋅ [ 1 − σ ( X w T θ j − 1 w ) ] d j w p(w|Context(w))=\prod_{j=2}^{l^w}p(d^w_j|X_w,\theta^w_{j-1}) \\ \text{} \\ 其中 \\ \text{} \\ p(d^w_j|X_w,\theta^w_{j-1})=\begin{cases} \sigma(X^T_w\theta^w_{j-1}) & \text {$d^w_j=0$} \\ 1-\sigma(X^T_w\theta^w_{j-1}) & \text{$d^w_j=1$} \end{cases} \\ \text{} \\ =[ \sigma(X^T_w\theta^w_{j-1})]^{1-d^w_j} \cdot [1-\sigma(X^T_w\theta^w_{j-1})]^{d^w_j} p(wContext(w))=j=2lwp(djwXw,θj1w)p(djwXw,θj1w)={ σ(XwTθj1w)1σ(XwTθj1w)djw=0djw=1=[σ(XwTθj1w)]1djw[1σ(XwTθj1w)]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 ) ⋅ l o g [ σ ( X w T θ j − 1 w ) ] + d j w ⋅ l o g [ 1 − σ ( X w T θ j − 1 w ) ] } L= \sum_{w \in c}log\prod_{j=2}^{l^w}\{[ \sigma(X^T_w\theta^w_{j-1})]^{1-d^w_j} \cdot [1-\sigma(X^T_w\theta^w_{j-1})]^{d^w_j}\} \\ =\sum_{w \in c}\sum_{j=2}^{l^w}\{(1-d^w_j) \cdot log[ \sigma(X^T_w\theta^w_{j-1})]+d^w_j \cdot log[1-\sigma(X^T_w\theta^w_{j-1})]\} L=wclogj=2lw{ [σ(XwTθj1w)]1djw[1σ(XwTθj1w)]djw}=wcj=2lw{ (1djw)log[σ(XwTθj1w)]+djwlog[1σ(XwTθj1w)]}

令:

L ( w , j ) = ( 1 − d j w ) ⋅ l o g [ σ ( X w T θ j − 1 w ) ] + d j w ⋅ l o g [ 1 − σ ( X w T θ j − 1 w ) ] L(w,j)=(1-d^w_j) \cdot log[ \sigma(X^T_w\theta^w_{j-1})]+d^w_j \cdot log[1-\sigma(X^T_w\theta^w_{j-1})] \\ \text{} \\ L(w,j)=(1djw)log[σ(XwTθj1w)]+djwlog[1σ(XwTθj1w)]

求最大似然,采用「随机梯度上升法」。

首先对 θ \theta θ求导:

∂ L ( w , j ) ∂ θ j − 1 w = ∂ ∂ θ j − 1 w { ( 1 − d j w ) ⋅ l o g [ σ ( X w T θ j − 1 w ) ] + d j w ⋅ l o g [ 1 − σ ( X w T θ j − 1 w ) ] } 利 用 [ l o g σ ( x ) ] ′ = 1 − σ ( x ) , [ l o g ( 1 − σ ( x ) ) ] ′ = − σ ( x ) 得 = ( 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 \frac{\partial L(w,j)}{\partial \theta^w_{j-1}}=\frac{\partial }{\partial \theta^w_{j-1}}\{(1-d^w_j) \cdot log[ \sigma(X^T_w\theta^w_{j-1})]+d^w_j \cdot log[1-\sigma(X^T_w\theta^w_{j-1})]\} \\ \text{} \\ 利用 [log\sigma(x)]'=1-\sigma(x), [log(1-\sigma(x))]'=-\sigma(x) 得 \\ \text{} \\ =(1-d^w_j) [1-\sigma(X^T_w\theta^w_{j-1})]X_w-d^w_j [\sigma(X^T_w\theta^w_{j-1})]X_w \\ \text{} \\ =\{(1-d^w_j) [1-\sigma(X^T_w\theta^w_{j-1})]-d^w_j [\sigma(X^T_w\theta^w_{j-1})]\}X_w \\ \text{} \\ =[1-d^w_j-\sigma(X^T_w\theta^w_{j-1})]X_w θj1wL(w,j)=θj1w{ (1djw)log[σ(XwTθj1w)]+djwlog[1σ(XwTθj1w)]}[logσ(x)]=1σ(x),[log(1σ(x))]=σ(x)=(1djw)[1σ(XwTθj1w)]Xwdjw[σ(XwTθj1w)]Xw={ (1djw)[1σ(XwTθj1w)]djw[σ(XwTθj1w)]}Xw=[1djwσ(XwTθj1w)]Xw

由于 X w X_w Xw L ( w , j ) L(w,j) L(w,j)的表达式中与 θ \theta θ是对称的,因此有:

∂ L ( w , j ) ∂ X w = [ 1 − d j w − σ ( X w T θ j − 1 w ) ] θ j − 1 w \frac{\partial L(w,j)}{\partial X_w}=[1-d^w_j-\sigma(X^T_w\theta^w_{j-1})]\theta^w_{j-1} XwL(w,j)=[1djwσ(XwTθj1w)]θj1w

在对词向量进行更新时,由于 X w X_w Xw表示 C o n t e x t ( w ) Context(w) Context(w)中各词词向量的叠加,因此 X w X_w Xw的更新也要贡献到 C o n t e x t ( w ) Context(w) Context(w)中的每个词的词向量上:

v ( w ‾ ) : = v ( w ‾ ) + η ∑ j = 2 l w ∂ L ( w , j ) ∂ X w , w ‾ ∈ C o n t e x t ( w ) v(\overline w):=v(\overline w)+\eta\sum_{j=2}^{l^w}\frac{\partial L(w,j)}{\partial X_w}, \overline w \in Context(w) v(w):=v(w)+ηj=2lwXwL(w,j),wContext(w)


2.1.2 伪码

CBOW模型的伪码如下:

其中,步骤3.3和3.4不能交换位置, θ \theta θ需要等 e e e更新后再更新。



2.2 Skip-gram模型

Skip-gram模型是已知当前词 w w w,对其上下文 C o n t e x t ( w ) Context(w) Context(w)中的词进行预测。

模型结构如下图所示:

其中,

输入层:当前样本的中心词 w w w的词向量。
投影层:无作用。
输出层:类似于CBOW模型,同样为一颗Huffman树。


2.2.1 梯度计算

p ( C o n t e x t ( w ) ∣ w ) = ∏ u ∈ C o n t e x t ( w ) p ( u ∣ w ) 基 于 前 文 所 述 的 H i e r a r c h i c a l   S o f t m a x 思 想 p ( u ∣ w ) = ∏ j = 2 l u 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(Context(w)|w)=\prod_{u \in Context(w)}p(u|w) \\ \text{} \\ 基于前文所述的 Hierarchical \, Softmax 思想 \\ \text{} \\ p(u|w)=\prod_{j=2}^{l^u}p(d^u_j|v(w),\theta^u_{j-1}) \\ \text{} \\ =[ \sigma(v(w)^T\theta^u_{j-1})]^{1-d^u_j} \cdot [1-\sigma(v(w)^T\theta^u_{j-1})]^{d^u_j} p(Context(w)w)=uContext(w)p(uw)HierarchicalSoftmaxp(uw)=j=2lup(djuv(w),θj1u)=[σ(v(w)Tθj1u)]1dju[1σ(v(w)Tθj1u)]dju

带入最大似然公式,有:

L = ∑ w ∈ c l o g ∏ w ∈ 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 l o g ∑ w ∈ C o n t e x t ( w ) ∑ j = 2 l u { ( 1 − d j u ) ⋅ l o g [ σ ( v ( w ) T θ j − 1 u ) ] + d j u ⋅ l o g [ 1 − σ ( v ( w ) T θ j − 1 u ) ] } L= \sum_{w \in c}log\prod_{w \in Context(w)}\prod_{j=2}^{l^u}\{[ \sigma(v(w)^T\theta^u_{j-1})]^{1-d^u_j} \cdot [1-\sigma(v(w)^T\theta^u_{j-1})]^{d^u_j}\} \\ =\sum_{w \in c}log\sum_{w \in Context(w)}\sum_{j=2}^{l^u}\{(1-d^u_j) \cdot log[ \sigma(v(w)^T\theta^u_{j-1})]+d^u_j \cdot log[1-\sigma(v(w)^T\theta^u_{j-1})]\} L=wclogwContext(w)j=2lu{ [σ(v(w)Tθj1u)]1dju[1σ(v(w)Tθj1u)]dju}=wclogwContext(w)j=2lu{ (1dju)log[σ(v(w)Tθj1u)]+djulog[1σ(v(w)Tθj1u)]}

令:

L ( w , u , j ) = ( 1 − d j u ) ⋅ l o g [ σ ( v ( w ) T θ j − 1 u ) ] + d j u ⋅ l o g [ 1 − σ ( v ( w ) T θ j − 1 u ) ] L(w,u,j)=(1-d^u_j) \cdot log[ \sigma(v(w)^T\theta^u_{j-1})]+d^u_j \cdot log[1-\sigma(v(w)^T\theta^u_{j-1})] \\ \text{} \\ L(w,u,j)=(1dju)log[σ(v(w)Tθj1u)]+djulog[1σ(v(w)Tθj1u)]

求最大似然,对上式采用「随机梯度上升法」。

首先对 θ \theta θ求导:

∂ L ( w , u , j ) ∂ θ j − 1 u = ∂ ∂ θ j − 1 u { ( 1 − d j u ) ⋅ l o g [ σ ( v ( w ) T θ j − 1 u ) ] + d j u ⋅ l o g [ 1 − σ ( v ( w ) T θ j − 1 u ) ] } 利 用 [ l o g σ ( x ) ] ′ = 1 − σ ( x ) , [ l o g ( 1 − σ ( x ) ) ] ′ = − σ ( x ) 得 = ( 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 ) \frac{\partial L(w,u,j)}{\partial \theta^u_{j-1}}=\frac{\partial }{\partial \theta^u_{j-1}}\{(1-d^u_j) \cdot log[ \sigma(v(w)^T\theta^u_{j-1})]+d^u_j \cdot log[1-\sigma(v(w)^T\theta^u_{j-1})]\} \\ \text{} \\ 利用 [log\sigma(x)]'=1-\sigma(x), [log(1-\sigma(x))]'=-\sigma(x) 得 \\ \text{} \\ =(1-d^u_j) [1-\sigma(v(w)^T\theta^u_{j-1})]v(w)-d^u_j [\sigma(v(w)^T\theta^u_{j-1})]v(w) \\ \text{} \\ =\{(1-d^u_j) [1-\sigma(v(w)^T\theta^u_{j-1})]-d^u_j [\sigma(v(w)^T\theta^u_{j-1})]\}v(w) \\ \text{} \\ =[1-d^u_j-\sigma(v(w)^T\theta^u_{j-1})]v(w) θj1uL(w,u,j)=θj1u{ (1dju)log[σ(v(w)Tθj1u)]+djulog[1σ(v(w)Tθj1u)]}[logσ(x)]=1σ(x),[log(1σ(x))]=σ(x)=(1dju)[1σ(v(w)Tθj1u)]v(w)dju[σ(v(w)Tθj1u)]v(w)={ (1dju)[1σ(v(w)Tθj1u)]dju[σ(v(w)Tθj1u)]}v(w)=[1djuσ(v(w)Tθj1u)]v(w)

由于 v ( w ) v(w) v(w) L ( w , u , j ) L(w,u,j) L(w,u,j)的表达式中与 θ \theta θ是对称的,因此有:

∂ L ( w , u , j ) ∂ v ( w ) = [ 1 − d j u − σ ( v ( w ) T θ j − 1 u ) ] θ j − 1 u \frac{\partial L(w,u,j)}{\partial v(w)}=[1-d^u_j-\sigma(v(w)^T\theta^u_{j-1})]\theta^u_{j-1} v(w)L(w,u,j)=[1djuσ(v(w)Tθj1u)]θj1u

梯度更新公式如下:

θ j − 1 u : = θ j − 1 u + η [ 1 − d j u − σ ( v ( w ) T θ j − 1 u ) ] v ( w ) \theta^u_{j-1}:=\theta^u_{j-1}+\eta[1-d^u_j-\sigma(v(w)^T\theta^u_{j-1})]v(w) θj1u:=θj1u+η[1djuσ(v(w)Tθj1u)]v(w)

v ( w ) : = v ( w ) + η ∑ w ∈ C o n t e x t ( w ) ∑ j = 2 l u [ 1 − d j u − σ ( v ( w ) T θ j − 1 u ) ] θ j − 1 u v(w):=v(w)+\eta\sum_{w \in Context(w)}\sum_{j=2}^{l^u}[1-d^u_j-\sigma(v(w)^T\theta^u_{j-1})]\theta^u_{j-1} v(w):=v(w)+ηwContext(w)j=2lu[1djuσ(v(w)Tθj1u)]θj1u


2.2.2 伪码

Skip-gram模型的伪码如下:

在Word2vec源码中,并非等 C o n t e x t ( w ) Context(w) Context(w)中所有词都处理完后才更新 v ( w ) v(w) v(w),而是每处理完 C o n t e x t ( w ) Context(w) Context(w)中的一个词就更新一次。伪码如下:



参考

博客:Word2Vec-知其然知其所以然

猜你喜欢

转载自blog.csdn.net/m0_38111466/article/details/108037461
今日推荐