语言模型【word2vec】学习笔记

概要

Word2Vec模型是由Tomas Mikolov在2013发表的《Efficient Estimation of Word Representations in Vector Space》论文中提出的。其主要是为了解决大规模数据下(数据集大且词典表大)训练出低维度(50-100)的高质量的词向量。

Word2Vec模型包含两个模型框架:Continuous Bag of Words Model(CBOW)和Continuous Skip-gram Model(Skip-gram)。如下图
在这里插入图片描述
从图中我们知道模型分为三层:输入层、映射层、输出层。为了提高word2vec模型的性能,采用了如下两种实现方法:基于Hierarchical Softmax和基于Negative Sampling。

基于Hierarchical Softmax

输入层: c t c_t ct中包含 2 n 2n 2n个词的词向量, v w t − n , . . . , v w t − 1 , v w t + 1 , . . . , v w t + n ∈ R m v_{w_{t-n}},...,v_{w_{t-1}},v_{w_{t+1}},...,v_{w_{t+n}} \in \R^m vwtn,...,vwt1,vwt+1,...,vwt+nRm这里m的含义表示词向量的长度。
映射层:将输入层 2 n 2n 2n个向量做求和累加,取平均,即 x ⁡ w = 1 2 n ∑ i = 1 2 n v w i \operatorname{x}_w=\frac{1}{2n}\sum_{i=1}^{2n}v_{w_{i}} xw=2n1i=12nvwi
输出层:输出层对应一颗二叉树,它是以语料中出现过的词当叶子节点,以各词在语料中出现的次数当权值构造出来的Huffman树。在这课Huffman树中,叶子节点共 N ( = ∣ D ∣ ) N(=|D|) N(=D)个,分别对应词典 D D D中的词,非叶子节点 N − 1 N-1 N1个。

如图所示,为词库构建的Huffman树,如何利用此树计算每个词的概率。
在这里插入图片描述
在word2vec中采用了二元逻辑回归的方法,即规定沿着左子树走,那么就是负类(霍夫曼树编码1),沿着右子树走,那么就是正类(霍夫曼树编码0)。判别正类和负类的方法是使用sigmoid函数,即: P ( + ) = σ ( x w T θ ) = 1 1 + e − x w T θ P(+)=\sigma(x_w^T\theta)=\frac{1}{1+e^{-x_w^T\theta}} P(+)=σ(xwTθ)=1+exwTθ1其中 x w x_w xw是当前内部节点的词向量,而 θ \theta θ则是我们需要从训练样本求出的逻辑回归的模型参数。对于负类样本的概率: P ( − ) = 1 − P ( + ) = 1 − 1 1 + e − x w T θ P(-)=1-P(+)=1-\frac{1}{1+e^{-x_w^T\theta}} P()=1P(+)=11+exwTθ1为了获得所有节点的词向量和所有内部节点的 θ \theta θ,使用最大似然法求解,如上图的 w 2 w_2 w2,我们期望最大化下面的似然函数: ∏ i = 1 3 P ( n ( w i ) , i ) = ( 1 − 1 1 + e − x w T θ 1 ) ( 1 − 1 1 + e − x w T θ 2 ) ( 1 − 1 1 + e − x w T θ 3 ) \prod_{i=1}^3P(n(w_i),i)=(1-\frac{1}{1+e^{-x_w^T\theta_1}})(1-\frac{1}{1+e^{-x_w^T\theta_2}})(1-\frac{1}{1+e^{-x_w^T\theta_3}}) i=13P(n(wi),i)=(11+exwTθ11)(11+exwTθ21)(11+exwTθ31)为了便于我们后面一般化的描述,我们定义输入的词为 w w w,其从输入层词向量求和平均后的霍夫曼树根节点词向量为 x w x_w xw, 从根节点到 w w w所在的叶子节点,包含的节点总数为 l w l_w lw, w w w在霍夫曼树中从根节点开始,经过的第 i i i个节点表示为 p i w p_{i}^w piw,对应的霍夫曼编码为 d i w d^w_i diw∈{0,1},其中 i = 1 , 2 , . . . , l w i=1,2,...,l_w i=1,2,...,lw。而该节点对应的模型参数表示为 θ i w \theta_i^w θiw, 其中 i = 1 , 2 , . . . , l w − 1 i=1,2,...,l_w-1 i=1,2,...,lw1,没有 i = l w i=l_w i=lw是因为模型参数仅仅针对于霍夫曼树的内部节点。

定义 w w w经过的Huffman树某一个节点 j j j的逻辑回归概率为 P ( d j w ∣ x w , θ j − 1 w ) P(d_j^w|x_w,\theta_{j-1}^w) P(djwxw,θj1w),其表达式为: 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|x_w,\theta_{j-1}^w)=\begin{cases} \sigma(x_w^T\theta_{j-1}^w) & d_j^w=0 \\ 1-\sigma(x_w^T\theta_{j-1}^w) & d_j^w=1 \end{cases} P(djwxw,θj1w)={σ(xwTθj1w)1σ(xwTθj1w)djw=0djw=1那么对于某一个目标输出词 w w w,其最大似然为: ∏ j = 2 l w P ( d j w ∣ x w , θ j − 1 w ) = ∏ j = 2 l w [ σ ( x w T θ j − 1 w ) ] 1 − d j w [ 1 − σ ( x w T θ j − 1 w ) ] d j w \prod_{j=2}^{l_w}P(d_j^w|x_w,\theta_{j-1}^w)=\prod_{j=2}^{l_w}[\sigma(x_w^T\theta_{j-1}^w)]^{1-d_j^w}[1-\sigma(x_w^T\theta_{j-1}^w)]^{d_j^w} j=2lwP(djwxw,θj1w)=j=2lw[σ(xwTθj1w)]1djw[1σ(xwTθj1w)]djw在word2vec中,由于使用的是随机梯度上升法,所以并没有把所有样本的似然乘起来得到真正的训练集最大似然,仅仅每次只用一个样本更新梯度,这样做的目的是减少梯度计算量。这样我们可以得到 w w w的对数似然函数 L L L如下: L = l o g ∏ j = 2 l w P ( d j w ∣ x w , θ j − 1 w ) = ∑ 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=log\prod_{j=2}^{l_w}P(d_j^w|x_w,\theta_{j-1}^w)=\sum_{j=2}^{l_w}((1-d_j^w)log[\sigma(x_w^T\theta_{j-1}^w)]+d_j^wlog[1-\sigma(x_w^T\theta_{j-1}^w)]) L=logj=2lwP(djwxw,θj1w)=j=2lw((1djw)log[σ(xwTθj1w)]+djwlog[1σ(xwTθj1w)])根据梯度求解可以得到模型参数 θ j − 1 w \theta_{j-1}^w θj1w x w x_w xw的梯度:
∂ L ∂ θ j − 1 w = ( 1 − d j w − σ ( x w T θ j − 1 w ) ) x w \frac{\partial L}{\partial \theta_{j-1}^w}=(1-d_j^w-\sigma(x_w^T\theta_{j-1}^w))x_w θj1wL=(1djwσ(xwTθj1w))xw ∂ L ∂ x w = ∑ j = 2 l w ( 1 − d j w − σ ( x w T θ j − 1 w ) ) θ j − 1 w \frac{\partial L}{\partial x_w}=\sum_{j=2}^{l_w}(1-d_j^w-\sigma(x_w^T\theta_{j-1}^w))\theta_{j-1}^w xwL=j=2lw(1djwσ(xwTθj1w))θj1w有了梯度表达式,我们就可以用梯度上升法进行迭代来一步步的求解我们需要的所有的 θ j − 1 w \theta_{j-1}^w θj1w x w x_w xw,即:¥ θ 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(x_w^T\theta_{j-1}^w))x_w θj1w=θj1w+η(1djwσ(xwTθj1w))xw x i = x i + η ∑ j = 2 l w ( 1 − d j w − σ ( x w T θ j − 1 w ) ) θ j − 1 w ( i = 1 , 2 , . . . , 2 n ) x_i=x_i+\eta\sum_{j=2}^{l_w}(1-d_j^w-\sigma(x_w^T\theta_{j-1}^w))\theta_{j-1}^w\quad(i=1,2,...,2n) xi=xi+ηj=2lw(1djwσ(xwTθj1w))θj1w(i=1,2,...,2n)其中 η \eta η为学习步长。

CBOW的基于Hierarchical Softmax的算法流程

输入:基于CBOW的语料训练样本,词向量的维度大小 M M M,CBOW的上下文大小 2 n 2n 2n,步长 η \eta η
输出:霍夫曼树的内部节点模型参数 θ \theta θ,所有的词向量 w w w
(1)、 基于语料训练样本建立霍夫曼树。
(2)、 随机初始化所有的模型参数𝜃,所有的词向量𝑤
(3)、进行梯度上升迭代过程,对于训练集中的每一个样本(𝑐_t,𝑤)做如下处理:

  1. e=0, 计算 x w = 1 2 n ∑ i = 1 2 n x i x_w=\frac{1}{2n}\sum_{i=1}^{2n}x_i xw=2n1i=12nxi
  2. for j=2 to l w l_w lw, 计算: f = σ ( x w T θ j − 1 w ) f=\sigma(x_w^T\theta_{j-1}^w) f=σ(xwTθj1w) g = ( 1 − d j w − f ) η g=(1-d_j^w-f)\eta g=(1djwf)η e = e + g θ j − 1 w e=e+g\theta^w_{j-1} e=e+gθj1w θ j − 1 w = θ j − 1 w + g x w \theta^w_{j-1}=\theta^w_{j-1}+gx_w θj1w=θj1w+gxw
  3. 对于 c t c_t ct中的每一个词向量 x i x_i xi(共 2 n 2n 2n个)进行更新: x i = x i + e x_i=x_i+e xi=xi+e
  4. 如果梯度收敛,则结束梯度迭代,否则回到步骤(3)继续迭代。

Skip-gram的基于Hierarchical Softmax的算法流程

输入:基于Skip-Gram的语料训练样本,词向量的维度大小 M M M,Skip-Gram的上下文大小 2 n 2n 2n,步长 η \eta η
输出:霍夫曼树的内部节点模型参数 θ \theta θ,所有的词向量 w w w
1、 基于语料训练样本建立霍夫曼树
2、随机初始化所有的模型参数 θ \theta θ,所有的词向量 w w w,
3、 进行梯度上升迭代过程,对于训练集中的每一个样本(𝑤,c_t)做如下处理:
  1) for i = 1 to 2n:

  1. e =0
  2. for j = 2 to l w l_w lw,计算: f = σ ( x i T θ j − 1 w ) f=\sigma(x_i^T\theta_{j-1}^w) f=σ(xiTθj1w) g = ( 1 − d j w − f ) η g=(1-d_j^w-f)\eta g=(1djwf)η e = e + g θ j − 1 w e=e+g\theta^w_{j-1} e=e+gθj1w θ j − 1 w = θ j − 1 w + g x i \theta^w_{j-1}=\theta^w_{j-1}+gx_i θj1w=θj1w+gxi3. x i = x i + e x_i=x_i+e xi=xi+e

  2) 如果梯度收敛,则结束梯度迭代,算法结束,否则回到步骤1)继续迭代

总结:从Huffman树的原理来看,对于处理高频词具有很大的优势,但是对于处理生僻词,则需要很大的开销。

基于Negative Sampling

为了解决Huffman树的缺点,提出了负采样算法。
negative sampling的原理是:如有一个训练样本,中心词为 w t w_t wt,其上下文为 c t = ( w t − n , . . . , w t − 1 , w t + 1 , . . . , w t + n ) c_t=(w_{t-n},...,w_{t-1},w_{t+1},...,w_{t+n}) ct=(wtn,...,wt1,wt+1,...,wt+n),这里中心词 w t w_t wt c t c_t ct是具有相关性的,作为正样本。然后通过采样得到 n e g neg neg个和 w t w_t wt不同的中心词 w i , i ∈ [ 1 , 2 , . . . , n e g ] w_i,i\in [1,2,...,neg] wi,i[1,2,...,neg],这些采样得到的中心词和 c t c_t ct就组成了负样本。最后利用这个正样本和 n e g neg neg个负样本进行二元逻辑回归,得到负采样对应每个词 w i w_i wi对应的模型参数 θ i \theta_i θi和每个词的词向量。

如何进行负采样(negative sampling)?
假设词汇表的大小为 V V V,算法采用全局采样(除正样本之外的所有词),将词频作为采样概率: p ( w ) = c o u n t ( w ) ∑ u ∈ v o c a b c o u n t ( u ) p(w)=\frac{count(w)}{\sum_{u\in vocab}count(u)} p(w)=uvocabcount(u)count(w)而在word2vec中分子和分母都取了 3 4 \frac{3}{4} 43次幂: p ( w ) = c o u n t ( w ) 3 / 4 ∑ u ∈ v o c a b c o u n t ( u ) 3 / 4 p(w)=\frac{count(w)^{3/4}}{\sum_{u\in vocab}count(u)^{3/4}} p(w)=uvocabcount(u)3/4count(w)3/4

负采样之后,接下来就是利用二元逻辑回归求解模型参数,对于正样本: P ( c t , w i ) = σ ( x c t T θ w i ) , y i = 1 , i = 0 P(c_t,w_i)=\sigma(x_{c_t}^T\theta^{w_i}),y_i=1,i=0 P(ct,wi)=σ(xctTθwi),yi=1,i=0对于负样本: P ( c t , w i ) = 1 − σ ( x c t T θ w i ) , y i = 0 , i = 1 , 2 , . . . , n e g P(c_t,w_i)=1-\sigma(x_{c_t}^T\theta^{w_i}),y_i=0,i=1,2,...,neg P(ct,wi)=1σ(xctTθwi),yi=0,i=1,2,...,neg最后我们得到目标函数: L = ∑ i = 0 n e g y i l o g ( σ ( x c t T θ w i ) ) + ( 1 − y i ) l o g ( 1 − σ ( x c t T θ w i ) ) L=\sum_{i=0}^{neg}y_ilog(\sigma(x_{c_t}^T\theta^{w_i}))+(1-y_i)log(1-\sigma(x_{c_t}^T\theta^{w_i})) L=i=0negyilog(σ(xctTθwi))+(1yi)log(1σ(xctTθwi))
同样的,可以得到 θ w i \theta^{w_i} θwi x c t x_{c_t} xct的梯度 ∂ L ∂ θ w i = ( y i − σ ( x c t T θ w i ) ) x c t \frac{\partial L}{\partial \theta^{w_i}}=(y_i-\sigma(x_{c_t}^T\theta^{w_i}))x_{c_t} θwiL=(yiσ(xctTθwi))xct ∂ L ∂ x c t = ∑ i = 0 n e g ( y i − σ ( x c t T θ w i ) ) θ w i \frac{\partial L}{\partial x_{c_t}}=\sum_{i=0}^{neg}(y_i-\sigma(x_{c_t}^T\theta^{w_i}))\theta^{w_i} xctL=i=0neg(yiσ(xctTθwi))θwi有了梯度就可以进一步求解参数了。

CBOW的基于Negative Sampling的算法流程

输入:基于CBOW的语料训练样本,词向量的维度大小 M M M,CBOW的上下文大小 2 n 2n 2n,步长 η \eta η, 负采样的个数 n e g neg neg
输出:词汇表每个词对应的模型参数 θ \theta θ,所有的词向量 w w w
(1)、随机初始化所有的模型参数 θ \theta θ,所有的词向量 w w w
(2)、对于每个训练样本 ( c t , w 0 ) (c_{t},w_0) (ct,w0),负采样出 n e g neg neg个负例中心词 w i , i = 1 , 2 , . . . , n e g w_i,i=1,2,...,neg wi,i=1,2,...,neg
(3)、 进行梯度上升迭代过程,对于训练集中的每一个样本 ( c t , w 0 , w 1 , . . . , w n e g ) (c_{t},w_0,w_1,...,w_{neg}) (ct,w0,w1,...,wneg)做如下处理:

  1. e=0, 计算 x w 0 = 1 2 n ∑ i = 1 2 n x i x_{w_0}=\frac{1}{2n}\sum_{i=1}^{2n}x_i xw0=2n1i=12nxi
  2. for i = 0 to neg, 计算: f = σ ( x w 0 T θ w i ) f=\sigma(x_{w_0}^T\theta^{w_i}) f=σ(xw0Tθwi) g = ( y i − f ) η g=(y_i-f)\eta g=(yif)η e = e + g θ w i e = e+g\theta^{w_i} e=e+gθwi θ w i = θ w i + g x w 0 \theta^{w_i}=\theta^{w_i}+gx_{w_0} θwi=θwi+gxw0
  3. 对于 c t c_t ct中的每一个词向量 x k x_k xk(共 2 n 2n 2n个)进行更新: x k = x k + e x_k=x_k+e xk=xk+e
  4. 如果梯度收敛,则结束梯度迭代,否则回到步骤(3)继续迭代。

Skip-gram的基于Negative Sampling的算法流程

输入:基于Skip-Gram的语料训练样本,词向量的维度大小 M M M,Skip-Gram的上下文大小 2 n 2n 2n,步长 η \eta η, 采样的个数 n e g neg neg
输出:词汇表每个词对应的模型参数 θ \theta θ,所有的词向量 w w w
(1)、 随机初始化所有的模型参数 θ \theta θ,所有的词向量 w w w
(2)、对于每个训练样本( c t , w 0 c_t, w_0 ct,w0),负采样出 n e g neg neg个负例中心词 w i , i = 1 , 2 , . . . , n e g w_i,i=1,2,...,neg wi,i=1,2,...,neg
(3)、进行梯度上升迭代过程,对于训练集中的每一个样本( c t , w 0 , w 1 , . . . , w n e g c_t, w_0, w_1,...,w_{neg} ct,w0,w1,...,wneg)做如下处理:
  1) for i = 1 to 2n:

  1. e=0
  2. for j = 0 to neg, 计算: f = σ ( x w 0 i T θ w j ) f=\sigma(x_{w_{0i}}^T\theta^{w_j}) f=σ(xw0iTθwj) g = ( y j − f ) η g=(y_j-f)\eta g=(yjf)η e = e + g θ w j e=e+g\theta^{w_j} e=e+gθwj θ w j = θ w j + g x w 0 i \theta^{w_j}=\theta^{w_j}+gx_{w_{0i}} θwj=θwj+gxw0i
  3. 词向量更新: x w 0 i = x w 0 i + e x_{w_{0i}}=x_{w_{0i}}+e xw0i=xw0i+e

  2) 如果梯度收敛,则结束梯度迭代,算法结束,否则回到步骤1)继续迭代。

参考资料:
Efficient Estimation of Word Representations in Vector Space
word2vec原理(一) 基于Hierarchical Softmax的模型
word2vec原理(二) 基于Hierarchical Softmax的模型
word2vec原理(三) 基于Hierarchical Softmax的模型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值