当前位置:   article > 正文

NLP算法(一)- Word2Vec_nlp识别pdf中标题

nlp识别pdf中标题

1 背景

1.1 算法提出

词向量的概念提出之前,将语料库中的单词映射到向量空间的方式是one-hot编码。但one-hot编码的缺陷在于:

  1. 无效编码过多,空间利用率极低,后续使用中极大占用内存。
  2. 单词之间均为正交关系,与单词在实际使用过程中的规律相背。

因此,我们希望找到某种方法,将单词映射到向量空间中。且希望语义相近的单词对应向量相似度更高,语义无关的单词对应向量相似度更低。
在这一背景下,Word2VecGlove两种算法相继被提出,本文将讨论Word2Vec的实现。

1.2 数学基础

适用于解决二分类问题的Sigmoid函数
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ(x)=1+ex1

该函数具有如下几个性质
1 − σ ( x ) = σ ( − x ) ( 1.1 ) l o g ′ [ σ ( x ) ] = 1 − σ ( x ) ( 1.2 ) l o g ′ [ 1 − σ ( x ) ] = − σ ( x ) ( 1.3 )

1σ(x)=σ(x)(1.1)log[σ(x)]=1σ(x)(1.2)log[1σ(x)]=σ(x)(1.3)
1σ(x)=σ(x)log[σ(x)]=1σ(x)log[1σ(x)]=σ(x)(1.1)(1.2)(1.3)

2 模型

Word2Vec的想法是,认为一篇文档中,在一定范围内位置相邻的单词具有某种关联性。且语义相近的不同单词,其上下文的内容也相近。
因此,

  • 通过一单词的上下文预测该中心词可建立模型,即为CBOW
  • 通过一单词预测其上下文可建立模型,即为SkipGram

2.1 CBOW模型

CBOW(continuous bag-of-words)模型结构如下所示。
CBOW模型
用符号 C C C 表示包含所有文档的语料库, w w w 表示中心词, c o n t e x t ( w ) context(w) context(w)表示中心词 w w w 的上下文,该模型希望最大化
L = ∏ w ∈ C p ( w ∣ c o n t e x t ( w ) ) = ∏ w ∈ C e x p [ p ( w ∣ c o n t e x t ( w ) ] ∑ z ∈ V e x p [ p ( z ∣ c o n t e x t ( w ) ]

L=wCp(w|context(w))=wCexp[p(w|context(w)]zVexp[p(z|context(w)]
L=wCp(wcontext(w))=wCzVexp[p(zcontext(w)]exp[p(wcontext(w)]

2.1 SkipGram模型

SkipGram模型结构如下所示。
Skip-Gram
用符号 C C C 表示包含所有文档的语料库, w w w 表示中心词, c o n t e x t ( w ) context(w) context(w)表示中心词 w w w 的上下文,该模型希望最大化
L = ∏ w ∈ C p ( c o n t e x t ( w ) ∣ w ) = ∏ w ∈ C ∏ u ∈ c o n t e x t ( w ) p ( u ∣ w ) = ∏ w ∈ C ∏ u ∈ c o n t e x t ( w ) e x p [ p ( u ∣ w ) ] ∑ z ∈ V e x p [ p ( z ∣ w ) ]

L=wCp(context(w)|w)=wCucontext(w)p(u|w)=wCucontext(w)exp[p(u|w)]zVexp[p(z|w)]
L=wCp(context(w)w)=wCucontext(w)p(uw)=wCucontext(w)zVexp[p(zw)]exp[p(uw)]

2.3 算法优化

在模型实际计算中,由于词表往往很大,输出层在计算 ∑ z ∈ V e x p [ p ( z ∣ c o n t e x t ( w ) ] \sum_{z\in{V}}exp[p(z|context(w)] zVexp[p(zcontext(w)] ∑ z ∈ V e x p [ p ( z ∣ w ) ] \sum_{z\in{V}}exp[p(z|w)] zVexp[p(zw)] 时,把词表中所有单词的相应概率计算一遍代价过高。因此,需要通过优化提升计算效率。

3 Hierachical霍夫曼编码

通过语料库构建词表,根据各单词词频,可将所有单词通过霍夫曼编码表示,其中每个叶子节点对应词表中的各单词。

3.1 CBOW

CBOW结合霍夫曼树改动后的模型如下所示
CBOW-Huffman
在具体介绍该模型算法时,先引入相关记号:

  1. p w p^w pw:从根节点出发,到达w对应叶子节点的路径。
  2. l w l^w lw:路径 p w p^{w} pw 包含节点的个数。
  3. p l 0 w , p l 1 w , … , p l w − 1 w p^w_{l^0},p^w_{l^1},\dots,p^w_{l^w-1} pl0w,pl1w,,plw1w:路径 p w p^{w} pw 中各节点。其中 p l 0 w p^w_{l^0} pl0w 表示根节点, p l w − 1 w p^w_{l^w-1} plw1w 表示单词 w w w 对应的叶子节点。
  4. d 1 w , d 2 w , … , d l w − 1 w ∈ { 0 , 1 } d^w_{1},d^w_{2},\dots,d^w_{l^w-1} \in{\{0,1\}} d1w,d2w,,dlw1w{0,1}:单词 w w w 的霍夫曼编码,共 l w − 1 l^w-1 lw1 位。 d j w d^w_j djw 表示第 j j j 位对应编码,树的根节点没有编码。
  5. θ 1 w , θ 2 w , … , θ l w − 1 w \theta^w_1, \theta^w_2,\dots, \theta^w_{l^w-1} θ1w,θ2w,,θlw1w:路径 p w p^w pw 中非叶子节点对应向量, θ l w − 1 w \theta^w_{l^w-1} θlw1w 即为我们最终需要获得的词向量。

假设 c o n t e x t ( w ) context(w) context(w) 对应的词向量为 x w x_w xw, p ( w ∣ c o n t e x t ( w ) = f ( x w , θ j w ) p(w|context(w) = f(x_w,\theta^w_j) p(wcontext(w)=f(xw,θjw)
根据霍夫曼树的性质,每个单词 w w w 必存在唯一一条路径 p w p^w pw。该路径上存在 l w − 1 l^w-1 lw1 个分支,可以将其看成做了 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 = 1 l w − 1 p ( d j w ∣ x w , θ j w ) p(w|context(w) = \prod_{j=1}^{l^w-1} {p(d_j^w|x_w,\theta^w_j)} p(wcontext(w)=j=1lw1p(djwxw,θjw)

利用Sigmoid函数,做出如下假设
p ( d j w ∣ x w , θ j w ) = { σ ( x w T θ j w ) ( d j w = 0 ) 1 − σ ( x w T θ j w ) ( d j w = 1 )

p(djw|xw,θjw)={σ(xwTθjw)(djw=0)1σ(xwTθjw)(djw=1)
p(djwxw,θjw)={σ(xwTθjw)1σ(xwTθjw)(djw=0)(djw=1)

因此,模型的损失函数可写为
L = l o g ∏ w ∈ C ∏ j = 1 l w − 1 [ σ ( x w T θ j w ) ] 1 − d j w ∗ [ 1 − σ ( x w T θ j w ) ] d j w = ∑ w ∈ C ∑ j = 1 l w − 1 ( 1 − d j w ) l o g [ σ ( x w T θ j w ) ] + d j w l o g [ 1 − σ ( x w T θ j w ) ]

L=logwCj=1lw1[σ(xwTθjw)]1djw[1σ(xwTθjw)]djw=wCj=1lw1(1djw)log[σ(xwTθjw)]+djwlog[1σ(xwTθjw)]
L=logwCj=1lw1[σ(xwTθjw)]1djw[1σ(xwTθjw)]djw=wCj=1lw1(1djw)log[σ(xwTθjw)]+djwlog[1σ(xwTθjw)]

上式中各变量均相互独立,记
L ( x w , θ j w ) = ( 1 − d j w ) l o g [ σ ( x w T θ j w ) ] + d j w l o g [ 1 − σ ( x w T θ j w ) ] L(x_w,\theta^w_j) = (1-d^w_j)log[\sigma(x_w^T\theta^w_j)] + d^w_jlog[1-\sigma(x_w^T\theta^w_j)] L(xw,θjw)=(1djw)log[σ(xwTθjw)]+djwlog[1σ(xwTθjw)]

分别对 x w , θ j w x_w,\theta^w_j xw,θjw 求导,并利用Sigmoid函数求导时的性质
∇ θ j w L ( x w , θ j w ) = ( 1 − d j w ) [ 1 − σ ( x w T θ j w ) ] x w − d j w σ ( x w T θ j w ) x w = [ 1 − d j w − σ ( x w T θ j w ) ] x w

θjwL(xw,θjw)=(1djw)[1σ(xwTθjw)]xwdjwσ(xwTθjw)xw=[1djwσ(xwTθjw)]xw
θjwL(xw,θjw)=(1djw)[1σ(xwTθjw)]xwdjwσ(xwTθjw)xw=[1djwσ(xwTθjw)]xw

∇ x w L ( x w , θ j w ) = ( 1 − d j w ) [ 1 − σ ( x w T θ j w ) ] θ j w − d j w σ ( x w T θ j w ) θ j w = [ 1 − d j w − σ ( x w T θ j w ) ] θ j w

xwL(xw,θjw)=(1djw)[1σ(xwTθjw)]θjwdjwσ(xwTθjw)θjw=[1djwσ(xwTθjw)]θjw
xwL(xw,θjw)=(1djw)[1σ(xwTθjw)]θjwdjwσ(xwTθjw)θjw=[1djwσ(xwTθjw)]θjw

之后通过梯度上升法更新相应参数即可, θ l w − 1 w \theta^w_{l^w-1} θlw1w 即为最终需要获得的词向量。

3.2 SkipGram

SkipGram结合霍夫曼树改动后的模型如下所示
Skip-Gram-Huffman
该方法的思路与CBOW完全一样,只因模型结构略有不同,通过霍夫曼树表示的概率变为 p ( u ∣ w ) p(u|w) p(uw)
其计算方法与之前类似,将路径上各节点的概率累乘
p ( u ∣ w ) = ∏ j = 1 l u − 1 p ( d j u ∣ v ( w ) , θ j u ) = ∏ j = 1 l u − 1 [ σ ( v ( w ) T θ j u ) ] 1 − d j u ∗ [ 1 − σ ( v ( w ) T θ j u ) ] d j u

p(u|w)=j=1lu1p(dju|v(w),θju)=j=1lu1[σ(v(w)Tθju)]1dju[1σ(v(w)Tθju)]dju
p(uw)=j=1lu1p(djuv(w),θju)=j=1lu1[σ(v(w)Tθju)]1dju[1σ(v(w)Tθju)]dju

模型损失函数可写为
L = l o g ∏ w ∈ C ∏ u ∈ c o n t e x t ( w ) ∏ j = 1 l u − 1 [ σ ( v ( w ) T θ j u ) ] 1 − d j u ∗ [ 1 − σ ( v ( w ) T θ j u ) ] d j u = ∑ w ∈ C ∑ u ∈ c o n t e x t ( w ) ∑ j = 1 l u − 1 ( 1 − d j u ) l o g [ σ ( v ( w ) T θ j u ) ] + d j u l o g [ 1 − σ ( v ( w ) T θ j u ) ]

L=logwCucontext(w)j=1lu1[σ(v(w)Tθju)]1dju[1σ(v(w)Tθju)]dju=wCucontext(w)j=1lu1(1dju)log[σ(v(w)Tθju)]+djulog[1σ(v(w)Tθju)]
L=logwCucontext(w)j=1lu1[σ(v(w)Tθju)]1dju[1σ(v(w)Tθju)]dju=wCucontext(w)j=1lu1(1dju)log[σ(v(w)Tθju)]+djulog[1σ(v(w)Tθju)]


L ( v ( w ) , θ j u ) = ( 1 − d j u ) l o g [ σ ( v ( w ) T θ j u ) ] + d j u l o g [ 1 − σ ( v ( w ) T θ j u ) ] L(v(w),\theta^u_j) = (1-d^u_j)log[\sigma(v(w)^T\theta^u_j)] + d^u_jlog[1-\sigma(v(w)^T\theta^u_j)] L(v(w),θju)=(1dju)log[σ(v(w)Tθju)]+djulog[1σ(v(w)Tθju)]

分别对 v ( w ) , θ j u v(w),\theta^u_j v(w),θju 求导
∇ θ j u L ( v ( w ) , θ j u ) = [ 1 − d j u − σ ( v ( w ) T θ j u ) ] v ( w ) \nabla_{\theta^u_j}L(v(w),\theta^u_j) = [1-d^u_j-\sigma(v(w)^T\theta^u_j)]v(w) θjuL(v(w),θju)=[1djuσ(v(w)Tθju)]v(w)

∇ v ( w ) L ( v ( w ) , θ j u ) = [ 1 − d j u − σ ( v ( w ) T θ j u ) ] θ j u \nabla_{v(w)}L(v(w),\theta^u_j) = [1-d^u_j-\sigma(v(w)^T\theta^u_j)]\theta^u_j v(w)L(v(w),θju)=[1djuσ(v(w)Tθju)]θju

之后通过梯度上升法更新相应参数即可, θ l w − 1 w \theta^w_{l^w-1} θlw1w 即为最终需要获得的词向量。

4 负采样

除了利用霍夫曼编码的性质优化计算,还可利用负采样方式简化计算。

4.1 负样本

该方法的本质是利用已知概率密度函数预测未知的概率密度函数。

  1. CBOW模型中,对于给定的上下文 c o n t e x t ( w ) context(w) context(w),将中心词 w w w 看成是一个正样本,其他单词为负样本。
  2. SkipGram模型中,对于给定的中心词 w w w,将 c o n t e x t ( w ) context(w) context(w) 中的所有单词看成正样本,其他单词为负样本。

为了拟合 p ( w ∣ c o n t e x t ( w ) ) p(w|context(w)) p(wcontext(w)) p ( c o n t e x t ( w ) ∣ w ) p(context(w)|w) p(context(w)w),以语料库中各单词词频为权重,做带权重的随机采样,取出 K K K 个负样本。

4.2 CBOW

在CBOW模型中,通过正样本和负样本的结合,拟合
e x p [ p ( w ∣ c o n t e x t ( w ) ] ∑ z ∈ V e x p [ p ( z ∣ c o n t e x t ( w ) ] ≈ p ( w ∣ c o n t e x t ( w ) ) ∏ u ∈ N E G ( w ) p ( u ∣ c o n t e x t ( w ) ) \frac{exp[p(w|context(w)]}{\sum_{z\in{V}}exp[p(z|context(w)]} \approx p(w|context(w))\prod_{u\in{NEG(w)}}{p(u|context(w))} zVexp[p(zcontext(w)]exp[p(wcontext(w)]p(wcontext(w))uNEG(w)p(ucontext(w))

记单词 w w w 对应的词向量为 θ w \theta_w θw,上下文对应向量为 x w x_w xw
p ( u ∣ c o n t e x t ( w ) ) = { σ ( x w T θ u ) ( u = w ) 1 − σ ( x w T θ u ) ( u ≠ w ) = [ σ ( x w T θ u ) ] δ ( u − w ) [ 1 − σ ( x w T θ u ) ] 1 − δ ( u − w )

p(u|context(w))={σ(xwTθu)(u=w)1σ(xwTθu)(uw)=[σ(xwTθu)]δ(uw)[1σ(xwTθu)]1δ(uw)
p(ucontext(w))={σ(xwTθu)1σ(xwTθu)(u=w)(u=w)=[σ(xwTθu)]δ(uw)[1σ(xwTθu)]1δ(uw)

由此可得模型的损失函数
L = l o g ∏ w ∈ C ∏ u ∈ { w , N E G ( w ) } [ σ ( x w T θ u ) ] δ ( u − w ) [ 1 − σ ( x w T θ u ) ] 1 − δ ( u − w ) = ∑ w ∈ C ∑ u ∈ { w , N E G ( w ) } δ ( u − w ) l o g [ σ ( x w T θ u ) ] + [ 1 − δ ( u − w ) ] l o g [ 1 − σ ( x w T θ u ) ]

L=logwCu{w,NEG(w)}[σ(xwTθu)]δ(uw)[1σ(xwTθu)]1δ(uw)=wCu{w,NEG(w)}δ(uw)log[σ(xwTθu)]+[1δ(uw)]log[1σ(xwTθu)]
L=logwCu{w,NEG(w)}[σ(xwTθu)]δ(uw)[1σ(xwTθu)]1δ(uw)=wCu{w,NEG(w)}δ(uw)log[σ(xwTθu)]+[1δ(uw)]log[1σ(xwTθu)]

定义
L ( x w , θ u ) = δ ( u − w ) l o g [ σ ( x w T θ u ) ] + [ 1 − δ ( u − w ) ] l o g [ 1 − σ ( x w T θ u ) ] L(x_w, \theta_u) = \delta(u-w)log[\sigma(x^T_w\theta_u)] + [1-\delta(u-w)]log[1-\sigma(x^T_w\theta_u)] L(xw,θu)=δ(uw)log[σ(xwTθu)]+[1δ(uw)]log[1σ(xwTθu)]

分别对 x w , θ u x_w, \theta_u xw,θu 求导
∇ θ u L ( x w , θ u ) = δ ( u − w ) [ 1 − σ ( x w T θ u ) ] x w − [ 1 − δ ( u − w ) ] σ ( x w T θ u ) x w = [ δ ( u − w ) − σ ( x w T θ u ) ] x w

θuL(xw,θu)=δ(uw)[1σ(xwTθu)]xw[1δ(uw)]σ(xwTθu)xw=[δ(uw)σ(xwTθu)]xw
θuL(xw,θu)=δ(uw)[1σ(xwTθu)]xw[1δ(uw)]σ(xwTθu)xw=[δ(uw)σ(xwTθu)]xw

∇ x w L ( x w , θ u ) = δ ( u − w ) [ 1 − σ ( x w T θ u ) ] θ u − [ 1 − δ ( u − w ) ] σ ( x w T θ u ) θ u = [ δ ( u − w ) − σ ( x w T θ u ) ] θ u

xwL(xw,θu)=δ(uw)[1σ(xwTθu)]θu[1δ(uw)]σ(xwTθu)θu=[δ(uw)σ(xwTθu)]θu
xwL(xw,θu)=δ(uw)[1σ(xwTθu)]θu[1δ(uw)]σ(xwTθu)θu=[δ(uw)σ(xwTθu)]θu

之后通过梯度上升法更新相应参数即可, θ w \theta_w θw 即为最终需要获得的词向量。

4.3 SkipGram

在SkipGram模型中,通过正样本和负样本的结合,拟合
e x p [ p ( u ∣ w ) ] ∑ z ∈ V e x p [ p ( z ∣ w ) ] ≈ p ( v ( z ) ∣ w ) ∏ z ∈ N E G ( c o n t e x t ( w ) ) p ( v ( z ) ∣ w ) \frac{exp[p(u|w)]}{\sum_{z\in{V}}exp[p(z|w)]} \approx p(v(z)|w) \prod_{z\in{NEG(context(w))}}{p(v(z)|w)} zVexp[p(zw)]exp[p(uw)]p(v(z)w)zNEG(context(w))p(v(z)w)

记中心词 w w w 对应的词向量为 θ w \theta_w θw,在上下文中的单词 z z z 对应向量为 v ( w ) v(w) v(w)
p ( v ( z ) ∣ w ) = { σ ( v ( z ) T θ w ) ( z = w ) 1 − σ ( v ( z ) T θ w ) ( z ≠ w ) = [ σ ( v ( z ) T θ w ) ] δ ( z − w ) [ 1 − σ ( v ( z ) T θ w ) ] 1 − δ ( z − w )

p(v(z)|w)={σ(v(z)Tθw)(z=w)1σ(v(z)Tθw)(zw)=[σ(v(z)Tθw)]δ(zw)[1σ(v(z)Tθw)]1δ(zw)
p(v(z)w)={σ(v(z)Tθw)1σ(v(z)Tθw)(z=w)(z=w)=[σ(v(z)Tθw)]δ(zw)[1σ(v(z)Tθw)]1δ(zw)

由此可得模型的损失函数
L = l o g ∏ w ∈ C ∏ u ∈ c o n t e x t ( w ) ∏ z ∈ { w , N E G ( c o n t e x t ( w ) ) } [ σ ( v ( z ) T θ w ) ] δ ( z − w ) [ 1 − σ ( v ( z ) T θ w ) ] 1 − δ ( z − w ) = ∑ w ∈ C ∑ u ∈ c o n t e x t ( w ) ∑ z ∈ { w , N E G ( c o n t e x t ( w ) ) } δ ( z − w ) l o g [ σ ( v ( z ) T θ w ) ] + [ 1 − δ ( z − w ) ] l o g [ 1 − σ ( v ( z ) T θ w ) ]

L=logwCucontext(w)z{w,NEG(context(w))}[σ(v(z)Tθw)]δ(zw)[1σ(v(z)Tθw)]1δ(zw)=wCucontext(w)z{w,NEG(context(w))}δ(zw)log[σ(v(z)Tθw)]+[1δ(zw)]log[1σ(v(z)Tθw)]
L=logwCucontext(w)z{w,NEG(context(w))}[σ(v(z)Tθw)]δ(zw)[1σ(v(z)Tθw)]1δ(zw)=wCucontext(w)z{w,NEG(context(w))}δ(zw)log[σ(v(z)Tθw)]+[1δ(zw)]log[1σ(v(z)Tθw)]

定义
L ( v ( z ) , θ w ) = δ ( z − w ) l o g [ σ ( v ( z ) T θ w ) ] + [ 1 − δ ( z − w ) ] l o g [ 1 − σ ( v ( z ) T θ w ) ] L(v(z), \theta_w) = \delta(z-w)log[\sigma(v(z)^T\theta_w)] + [1-\delta(z-w)]log[1-\sigma(v(z)^T\theta_w)] L(v(z),θw)=δ(zw)log[σ(v(z)Tθw)]+[1δ(zw)]log[1σ(v(z)Tθw)]

分别对 v ( z ) , θ w v(z), \theta_w v(z),θw 求导
∇ θ w L ( v ( z ) , θ w ) = δ ( z − w ) [ 1 − σ ( v ( z ) T θ w ) ] v ( z ) − [ 1 − δ ( z − w ) ] σ ( v ( z ) T θ w ) v ( z ) = [ δ ( z − w ) − σ ( v ( z ) T θ w ) ] v ( z )

θwL(v(z),θw)=δ(zw)[1σ(v(z)Tθw)]v(z)[1δ(zw)]σ(v(z)Tθw)v(z)=[δ(zw)σ(v(z)Tθw)]v(z)
θwL(v(z),θw)=δ(zw)[1σ(v(z)Tθw)]v(z)[1δ(zw)]σ(v(z)Tθw)v(z)=[δ(zw)σ(v(z)Tθw)]v(z)

∇ v ( z ) L ( v ( z ) , θ w ) = δ ( z − w ) [ 1 − σ ( v ( z ) T θ w ) ] θ w − [ 1 − δ ( z − w ) ] σ ( v ( z ) T θ w ) θ w = [ δ ( z − w ) − σ ( v ( z ) T θ w ) ] θ w

v(z)L(v(z),θw)=δ(zw)[1σ(v(z)Tθw)]θw[1δ(zw)]σ(v(z)Tθw)θw=[δ(zw)σ(v(z)Tθw)]θw
v(z)L(v(z),θw)=δ(zw)[1σ(v(z)Tθw)]θw[1δ(zw)]σ(v(z)Tθw)θw=[δ(zw)σ(v(z)Tθw)]θw

之后通过梯度上升法更新相应参数即可, θ w \theta_w θw 即为最终需要获得的词向量。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/940605
推荐阅读
相关标签
  

闽ICP备14008679号