当前位置:   article > 正文

Word2vec与论文学习_困惑度和loss

困惑度和loss

Word2vec

一、语言模型

1、语言模型的概念

语言模型是计算一个句子是一个句子的概率的模型,一个句子既需要符合语法规则,同时也需要符合语义,只有两方面都满足的情况下,语言模型才会给出一个较高的概率值。语言模型是一个无监督的模型,不需要任何的语料标注。

2、语言模型的发展
(1)基于专家知识的语言模型

所谓的基于专家知识的语言模型就是语言学家企图总结出一套通用的语法规则,例如形容词后接名词,但是这种方法并无法当今网络用语频繁出现的这样一种情况,因此现在不用常用这种方法

(2)统计语言模型

所谓的统计语言模型是指通过概率计算来刻画语言模型

P ( s ) = P ( w 1 , w 2 , … , w n ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 1 w 2 ) … P ( w n ∣ w 1 w 2 … w n − 1 )

P(s)=P(w1,w2,,wn)=P(w1)P(w2|w1)P(w3|w1w2)P(wn|w1w2wn1)
P(s)==P(w1,w2,,wn)P(w1)P(w2w1)P(w3w1w2)P(wnw1w2wn1)

  • 某一个词语出现概率的求解方法:用语料的频率代替概率(频率学派)
    p ( w i ) = c o u n t ( w i ) N p(w_i) = \frac{count(w_i)}{N} p(wi)=Ncount(wi)

  • 条件概率如 P ( w 2 ∣ w 1 ) P(w_2 | w_1) P(w2w1)的求解方法:频率学派+条件概率

p ( w i ∣ w i − 1 ) = p ( w i − 1 , w i ) p ( w i − 1 ) = c o u n t ( w i − 1 , w i ) c o u n t ( w i − 1 ) p\left(w_{i} | w_{i-1}\right)=\frac{p\left(w_{i-1}, w_{i}\right)}{p\left(w_{i-1}\right)} = \frac{count(w_{i-1},w_i)}{count(w_{i-1})} p(wiwi1)=p(wi1)p(wi1,wi)=count(wi1)count(wi1,wi)

通常概率表达的方式,我们就能构造出一个较好的语言模型,但仍然存在下面两个问题:

  • 由于 P ( s ) P(s) P(s)采用的是连乘方式,因此对于某一个词语 w i w_i wi,如果在语料中没有出现过,那么 P ( w i ) = 0 P(w_i)=0 P(wi)=0,这样会导致 P ( s ) = 0 P(s)=0 P(s)=0
  • 如果一句话由非常多的短语构成,同时某些短语在语料中出现的次数较少,那么多个小于1的概率相乘必然会使得 P ( s ) P(s) P(s)趋向于零

如何对上面两个问题进行解决呢? ⇒ \Rightarrow 平滑操作

(3)统计语言模型中的平滑操作
  • 有一些词或词组在语料中没有出现过,但是这不能代表它不可能存在,而平滑操作就是给那些没有出现过的词或者词组一个不为零的较小的概率。最常用的就是 Laplace Smoothing ,也称之为加1平滑,具体操作为:每个词在原来出现的次数上加1
  • 例如一个语料库中, A A A出现的次数为0, B B B为990, C C C为10,则 A A A B B B C C C的概率为0、 0.99 0.99 0.99 0.01 0.01 0.01;如果通过加1平滑,则相当于 A A A出现的次数为1, B B B为991, C C C为11,则 A A A B B B C C C的概率为0.001、 0.988 0.988 0.988 0.011 0.011 0.011。从上面的例子就可以看出,进行加1平滑后,出现次数多的词语的概率计算值有所下降,而出现次数少的词语概率计算值有所上升,加1平滑本质上起到了一个“劫富济贫”的作用
  • 加1平滑只要词有显著的作用,对于很长的词组短语并没有很好的效果,这是因为这种长的短语很稀疏,如果要平滑操作,则所有的短语都要平滑,这是因为参数空间太大数据稀疏严重,如何解决这两个问题呢?需要用到马尔可夫假设
(4)马尔可夫假设

在统计语言模型中的马尔可夫假设主要内容就是:下一个词出现的概率仅依赖于前面的一个词或几个词,如果与前 k k k个词有关,则称为 k − g r a m k-gram kgram模型

u n i g r a m P ( s ) = P ( w 1 ) P ( w 2 ) … P ( w n ) b i g r a m P ( s ) = P ( w 1 ) P ( w 2 ∣ w 1 ) … P ( w n ∣ w n − 1 ) t r i g r a m P ( s ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 2 w 1 ) … P ( w n ∣ w n − 1 w n − 2 ) k − g r a m P ( s ) = P ( w 1 ) P ( w 2 ∣ w 1 ) P ( w 3 ∣ w 2 w 1 ) … P ( w n ∣ w n − k + 1 … w n − 1 )

unigramP(s)=P(w1)P(w2)P(wn)bigramP(s)=P(w1)P(w2|w1)P(wn|wn1)trigramP(s)=P(w1)P(w2|w1)P(w3|w2w1)P(wn|wn1wn2)kgramP(s)=P(w1)P(w2|w1)P(w3|w2w1)P(wn|wnk+1wn1)
unigramP(s)=bigramP(s)=trigramP(s)=kgramP(s)=P(w1)P(w2)P(wn)P(w1)P(w2w1)P(wnwn1)P(w1)P(w2w1)P(w3w2w1)P(wnwn1wn2)P(w1)P(w2w1)P(w3w2w1)P(wnwnk+1wn1)

注意: k − g r a m k-gram kgram模型的参数空间为 V + V 2 + … + V k V+V^2+\ldots+V^k V+V2++Vk V V V为语料库词语总数

3、语言模型的评价指标:困惑度(Perplexity)

语言模型本质上是一个多分类问题,这里可以通过困惑度(Perplexity)进行模型的评价:

P P ( s ) = P ( w 1 , w 2 , … , w n ) − 1 n = 1 P ( w 1 , w 2 , … , w n ) n = 1 P ( s ) n PP(s) = P(w_1, w_2, \ldots, w_n)^{-\frac{1}{n}}=\sqrt[n]{\frac{1}{P\left(w_{1}, w_{2}, \dots, w_{n}\right)}} = \sqrt[n]{\frac{1}{P(s)}} PP(s)=P(w1,w2,,wn)n1=nP(w1,w2,,wn)1 =nP(s)1

因此,句子概率越大,语言模型越好,困惑度越小

二、词的表示方法

1、独热表示(One-hot Representation)

所谓的独热表示,就是一个向量,只有一个地方为1,其他位置都为0。这种表示方法的优点是:表示简单,但是缺点也十分明显,那就是当词非常多的时候,表示向量的维度非常高,需要的空间非常大,同时还有一个问题就是这种表示方法无法表示词与词之间的关系

2、分布式表示方法(Distributed Representation)

分布式表示也称为稠密表示,对于每一个词,仅需要一个 D D D维的向量就能表示,这里的 D D D是远远小于总的词语个数 V V V,对于独热表示,每一个都需要一个 V V V维的向量,而分布式表示相当于是把 V V V维压缩到了 D D D维,但 D D D维向量中某一位置的数值大小需要通过训练得到。同时,分布式表示有一个很大的好处,那就是可以表示词与词之间的相似性(利用余弦相似度)—— Word embedding

三、论文学习

1、论文背景知识

1986年, Hinton 第一次提出了 Distributed Representation ,目的是将离散形式的词输入到神经网络中,由于神经网络需要的是连续的值,因此提出了一种 Distributed Representation 的表示方法,把离散形式的词进行连续的分布式表示;2003年,在文章 A Neural Probabilistic Language Model首次使用了词向量,而在2003年到2013年间,提出了很多训练词向量的方法,但共同的缺点就是非常慢,无法在大的预料上训练,在2013年提出的 word2vec 模型解决了训练速度慢的问题,能够在大的语料上进行训练,得到更好的词向量,推动了自然语言处理的发展

2、论文的研究成果
  • 提出了一种新的模型结构
  • 提出优化训练的方法,使得训练速度加快
  • 废除训练代码 word2vec ,使得单机训练成为可能
  • 成果:训练的词向量又快又好,并且能够在大规模预料上进行词向量的训练
3、论文的研究意义
(1)衡量词向量之间的相似程度

对于两个词的相似度,可以用公式:

s i m ( w o r d 1 , w o r d 2 ) = cos ⁡ ( w o r d v e c 1 , w o r d v e c 2 ) sim(word1, word2) = \cos(wordvec1, wordvec2) sim(word1,word2)=cos(wordvec1,wordvec2)

进行计算,计算得到的值越接近于1,则两个词越相似,一种更客观的评价方式是词类比(analogy),计算公式为

cos ⁡ ( w o r d v e c 1 − w o r d v e c 2 + w o r d v e c 3 , w o r d v e c 4 ) \cos(wordvec1-wordvec2+wordvec3,wordvec4) cos(wordvec1wordvec2+wordvec3,wordvec4)

通过这种方式,能够学习到词与词之间的关系,例如 FranceParisItalyRome 这两个词对就是非常相似的,因此 V ( F r a n c e ) − V ( P a r i s ) ≈ V ( I t a l y ) − V ( R o m e ) V(France) - V(Paris) \approx V(Italy) - V(Rome) V(France)V(Paris)V(Italy)V(Rome),这种模型的训练就能得到非常多在语义上相似的词对

(2)作为预训练模型提升NLP任务

可以将训练得到的词向量可以用于外部任务比如命名实体识别、文本分类;也可以应用于其他NLP任务上,相当于一个半监督任务,可以有效地提高模型的泛化能力

四、论文精读

1、对比模型

对比模型主要对比两种模型,一种是前馈神经网络语言模型(NNLM),一种是循环神经网络模型(RNNLM)

(1)前馈神经网络语言模型(NNLM)

前馈神经网络语言模型最早由 Bengio 在2003年提出,网络结构如下图所示:

在这里插入图片描述

从上图中可以看出,NNLM的结构分为三层,最下面为输入层: input layer ,输入的是词的索引而非词本身, 输入后,将每个 index 映射为一个向量,最后将这些向量 contact 在一起;中间一层为隐藏层: hidden layer ,即将输入层的向量接上一个全连接层,用 t a n h tanh tanh作为激活函数激活;最上面为输出层: output layer,也是接上一个全连接层,利用 s o f t m a x softmax softmax输出概率。这里输入的是前 n − 1 n-1 n1个词语,最后输出的是第 n n n个位置单词的概率。下面详细介绍三个层:

  • 输入层:将词映射为向量,相当于一个 1 × V 1\times V 1×Vone-hot 向量乘以一个 V × D V\times D V×D的向量得到一个 1 × D 1\times D 1×D 的向量
  • 隐藏层:一个以 t a n h tanh tanh为激活函数的全连接层: a = t a n h ( d + U x ) a=tanh(d+Ux) a=tanh(d+Ux)
  • 输出层:一个全连接层,后面接个 s o f t m a x softmax softmax函数来生成概率分布: y = b + W a y=b+Wa y=b+Wa,其中 y y y是一个 1 × V 1\times V 1×V的向量,即:
    P ( w t ∣ w t − n + 1 , … , w t − 1 ) = exp ⁡ ( y w t ) ∑ i exp ⁡ ( y i ) P\left(w_{t} \mid w_{t-n+1}, \ldots, w_{t-1}\right)=\frac{\exp \left(y_{w_{t}}\right)}{\sum_{i} \exp \left(y_{i}\right)} P(wtwtn+1,,wt1)=iexp(yi)exp(ywt)
Remark:语言模型困惑度和Loss的关系

对于一句话, L o s s Loss Loss的定义和困惑度的定义如下:

  • L o s s Loss Loss L = − 1 T ∑ i = 1 T log ⁡ p ( w i ∣ w i − n + 1 , … , w i − 1 ) L=-\frac{1}{T} \sum_{i=1}^{T} \log p\left(w_{i} \mid w_{i-n+1}, \dots, w_{i-1}\right) L=T1i=1Tlogp(wiwin+1,,wi1)
  • 困惑度: P P ( s ) = P ( w 1 , w 2 , … , w T ) − 1 T = 1 P ( w 1 , w 2 , … , w T ) T PP(s)=P\left(w_{1}, w_{2}, \ldots, w_{T}\right)^{-\frac{1}{T}}=\sqrt[T]{\frac{1}{P\left(w_{1}, w_{2}, \ldots, w_{T}\right)}} PP(s)=P(w1,w2,,wT)T1=TP(w1,w2,,wT)1
    对困惑度取对数得到 log ⁡ ( P P ( s ) ) = − 1 T log ⁡ P ( w 1 , w 2 , … , w T ) \log(PP(s)) = -\frac{1}{T}\log P\left(w_{1}, w_{2}, \ldots, w_{T}\right) log(PP(s))=T1logP(w1,w2,,wT),根据全连接公式和马尔可夫假设可以得到 log ⁡ ( P P ( s ) ) = − 1 T ∑ i = 1 T log ⁡ p ( w i ∣ w i − n + 1 , … , w i − 1 ) = e L o s s \log(PP(s))= -\frac{1}{T} \sum_{i=1}^{T} \log p\left(w_{i} \mid w_{i-n+1}, \dots, w_{i-1}\right) = e^{Loss} log(PP(s))=T1i=1Tlogp(wiwin+1,,wi1)=eLoss,所以困惑度是自然对数的 L o s s Loss Loss次方,这就是两者的关系

讨论: Bingio 在2003年的文章中提出的 N N L M NNLM NNLM是一篇开山之作,也为后面的研究提出了几个研究的思路,具体如下:

  • 仅对一部分输出进行梯度传播:像 t h e the the a a a这类词语,出现次数多,但是在模型中并没特别重要作用,因此对于这一类词语,可以不进行梯度传播
  • 引入先验知识,如词性等:2003年这篇模型并没有输入词性,因此提出了词性的输入是否可以提高模型的精度这个问题,其中主要有两个子问题:
  • 网络模型自身能否学习到词性
  • 网络模型如果能自己学习词性,学到的词性知识是否够用
  • 解决一词多义问题,对于同一词语的不同意思,模型如何进行区分
  • 加速 s o f t m a x softmax softmax层,由于输出层是全连接层,对每一个词语都需要输出概率,因此非常慢,需要进行加速
(2)循环神经网络语言模型(RNNLM)

在这里插入图片描述
如上图所示, R N N L M RNNLM RNNLM也有三层:

  • 输入层:和 N N L M NNLM NNLM一样,需要将当 前时间步的转化为词向量( one-hot
  • 隐藏层:对输入和上一个时间步的隐藏输出进行全连接层操作:
    s ( t ) = U w ( t ) + W s ( t − 1 ) + d s(t)=U w(t)+W s(t-1)+d s(t)=Uw(t)+Ws(t1)+d
  • 输出层:一个全连接层,后面接个 s o f t m a x softmax softmax函数来生成概率分布, y ( t ) = b + V s ( t ) y(t) = b + Vs(t) y(t)=b+Vs(t),其中, y y y是一个 1 × V 1\times V 1×V的向量,
    P ( w t ∣ w t − n + 1 , … , w t − 1 ) = exp ⁡ ( y w t ) ∑ i exp ⁡ ( y i ) P\left(w_{t} \mid w_{t-n+1}, \ldots, w_{t-1}\right)=\frac{\exp \left(y_{w_{t}}\right)}{\sum_{i} \exp \left(y_{i}\right)} P(wtwtn+1,,wt1)=iexp(yi)exp(ywt)
    循环神经网络语言模型并没有使用马尔可夫假设,因为每个时间步预测一个词,在预测第 n n n 个词时,已经使用了前 n − 1 n-1 n1个词的信息
2、Word2vec
(1)Log-linear model

定义:将语言模型的建立看成个多分类问题,相当于线性分类器加上 s o f t m a x softmax softmax,这样就构成了一个 L o g − Log- Log线性模型: Y = s o f t m a x ( W x + b ) Y = softmax(Wx+b) Y=softmax(Wx+b),多分类的逻辑回归模型就是一个 L o g − Log- Log线性模型, w o r d 2 v e c word2vec word2vec中的两种模型: s k i p − g r a m skip-gram skipgram C B O W CBOW CBOW都是 L o g − Log- Log线性模型

(2)Word2vec 原理
  • 语言模型基本思想:句子中下一个词的出现和前面的词是有关系的,所以可以使用前面的词预测下一个词
  • w o r d 2 v e c word2vec word2vec基本思想:句子中相近的词之间是有联系的,比如今天后面经常出现上午,下午和晚上。所以 w o r d 2 v e c word2vec word2vec的基本思想就是用词来预测词:
  • s k i p − g r a m skip-gram skipgram使用中心词预测周围词
  • C B O W CBOW CBOW使用周围词预测中心词
  • w o r d 2 v e c word2vec word2vec可以看成是对语言模型的一种简化
(3)Skip-gram

S k i p − g r a m Skip-gram Skipgram是用中心词预测周围词,若中心词为 w i w_i wi,这里需要定义在中心词附近多大的范围才是中心词,既需要一个 w i n d o w window window,例如我们取 w i n d o w = 2 window=2 window=2,则我们需要计算的就是: P ( w i − 1 ∣ w i ) , P ( w i − 2 ∣ w i ) , P ( w i + 1 ∣ w i ) , P ( w i + 2 ∣ w i ) P(w_{i-1} | w_i), P(w_{i-2} | w_i), P(w_{i+1} | w_i), P(w_{i+2} | w_i) P(wi1wi),P(wi2wi),P(wi+1wi),P(wi+2wi),那么 S k i p − g r a m Skip-gram Skipgram是如何求取这些概率值的呢?前面讲到,求这种概率的问题本质上是一个多分类问题,以 P ( w i − 1 ∣ w i ) P(w_{i-1}| w_i) P(wi1wi)为例,输入的是 w i w_i wi l a b e l label label w i − 1 w_{i-1} wi1,计算过程如下图所示:

在这里插入图片描述

注意:

  • 输入的是 w i w_i wi的索引
  • W W W为中心词矩阵, W ∈ R V × D W \in \mathbb{R}^{V\times D} WRV×D W ′ W^{\prime} W为周围词矩阵, W ′ ∈ R D × V W^{\prime} \in \mathbb{R}^{D\times V} WRD×V
  • 最后通过 s o f t m a x softmax softmax,求得每个位置的一个概率,为一个 1 × V 1\times V 1×V的向量,我们需要第 i − 1 i-1 i1个位置的值最大,因此通过不断的反向传播,训练 W ′ W^{\prime} W W W W
  • 计算公式可写为:
    p ( w i − 1 ∣ w i ) = exp ⁡ ( u w i − 1 T v w i ) ∑ w = 1 V exp ⁡ ( u w T v w i ) p\left(w_{i-1} \mid w_{i}\right)=\frac{\exp \left(u_{w_{i-1}}^{T} v_{w_{i}}\right)}{\sum_{w=1}^{V} \exp \left(u_{w}^{T} v_{w_{i}}\right)} p(wi1wi)=w=1Vexp(uwTvwi)exp(uwi1Tvwi)

S k i p − g r a m Skip-gram Skipgram的损失函数:

J ( θ ) = 1 T ∑ t = 1 T ∑ − m ≤ j ≤ m , j ≠ 0 log ⁡ p ( w t + j ∣ w t ) J(\theta)=\frac{1}{T} \sum_{t=1}^{T} \sum_{-m \leq j \leq m, j \neq 0} \log p\left(w_{t+j} \mid w_{t}\right) J(θ)=T1t=1Tmjm,j=0logp(wt+jwt)

需要对 J ( θ ) J(\theta) J(θ)求最大值,或者对 J ( θ ) J(\theta) J(θ)取相反数并求取最小值

(4)CBOW

在这里插入图片描述

C B O W CBOW CBOW的结构如上图所示,是通过周围词预测中心词, B O W BOW BOW指的是 B a g   o f   w o r d Bag \ of \ word Bag of word,即词袋模型,因此 C B O W CBOW CBOW是基于词袋模型的一种模型,具体细节如下图所示:

在这里插入图片描述

从上面可以看出, C B O W CBOW CBOW也是使用了 W W W W ′ W^{\prime} W,只是中间进行了一个加和,最后的优化过程仍然是优化 W W W W ′ W^{\prime} W


损失函数:

J ( θ ) = 1 T ∑ T ∑ log ⁡ P ( c ∣ o ) = 1 T ∑ exp ⁡ { u o T v c } ∑ j = 1 V exp ⁡ { u o T v j } J(\theta)=\frac{1}{T} \sum_{T} \sum \log P(c \mid o)=\frac{1}{T} \sum \frac{\exp \left\{u_{o}^{T} v_{c}\right\}}{\sum_{j=1}^{V} \exp \left\{u_{o}^{T} v_{j}\right\}} J(θ)=T1TlogP(co)=T1j=1Vexp{uoTvj}exp{uoTvc}
其中,
P ( c ∣ o ) = exp ⁡ { u o T v c } ∑ j = 1 V exp ⁡ { u o T v j } P(c \mid o)=\frac{\exp \left\{u_{o}^{T} v_{c}\right\}}{\sum_{j=1}^{V} \exp \left\{u_{o}^{T} v_{j}\right\}} P(co)=j=1Vexp{uoTvj}exp{uoTvc}
u 0 u_0 u0是窗口内上下文词向量之和, v c v_c vc v j v_j vj是中心词向量‘

(5)关键技术

w o r d 2 v e c word2vec word2vec中,最后一层需要输出 V V V个概率,因此需要一些降低复杂度的方法:

  • 层次 s o f t m a x softmax softmaxHierarchical Softmax
  • 负采样:Negative Sampling
  • 高频词的重采样:Subsampling of Frequent Words

下面分别介绍这三种方法


1)Hierarchical Softmax

层次 s o f t m a x softmax softmax的基本思想是将求 s o f t m a x softmax softmax操作转化为求 s i g m o i d sigmoid sigmoid操作,对于 s o f t m a x softmax softmax,我们需要做 V V V次操作,而如何转化为 s i g m o i d sigmoid sigmoid,则可以采用树结构,这样就只需要 log ⁡ 2 V \log_2^V log2V次操作。如下图所示,如果是一个8字符的情况( a ∼ h a \sim h ah),则需要对每个字符做 s o f t m a x softmax softmax,而如果将其构建为下图所示的满二叉树的结构,则对于任意字符,仅需要3次就能找到,即 log ⁡ 2 V \log_2V log2V

在这里插入图片描述

能否找到比 log ⁡ 2 V \log_2^V log2V还要快的结构呢?答案是肯定的,通过构建 Huffman 树,找到带权重路径最短的二叉树,可以进一步加速,层次 s o f t m a x softmax softmax就是通过这种方式进行构建,具体的构建方法( S k i p − g r a m Skip-gram Skipgram模型)如下图所示:

在这里插入图片描述

  • 每一个分支节点(即存在 c h i l d child child的节点)都是一个向量: θ 0 \theta_0 θ0 θ 1 \theta_1 θ1
  • 以单词 I I I为例,计算公式为:
    p ( I ∣ c ) = σ ( θ 0 T v c ) σ ( θ 1 T v c ) ( 1 − σ ( θ 2 T v c ) ) = σ ( θ 0 T v c ) σ ( θ 1 T v c ) σ ( − θ 2 T v c ) σ ( x ) = 1 1 + e − x
    p(Ic)=σ(θ0Tvc)σ(θ1Tvc)(1σ(θ2Tvc))=σ(θ0Tvc)σ(θ1Tvc)σ(θ2Tvc)σ(x)=11+ex
    p(Ic)=σ(θ0Tvc)σ(θ1Tvc)(1σ(θ2Tvc))=σ(θ0Tvc)σ(θ1Tvc)σ(θ2Tvc)σ(x)=1+ex1
  • 这里的 θ \theta θ参数就相当于上下文词向量,大概有 log ⁡ V \log V logV个,而树的高度为: L ( w ) = O ( log ⁡ 2 V ) L(w) = O(\log_2^V) L(w)=O(log2V)

公式表达
p ( w ∣ w I ) = ∏ j = 1 L ( w ) − 1 σ ( [  ⁣ [ n ( w , j + 1 ) = ch ⁡ ( n ( w , j ) ) ]  ⁣ ] ⋅ v n ( w , j ) ′ ⊤ v w I ) p\left(w \mid w_{I}\right)=\prod_{j=1}^{L(w)-1} \sigma \left([\![ n(w, j+1)=\operatorname{ch}(n(w, j))]\!] \cdot {v_{n(w, j)}^{\prime}}^{\top} v_{w_{I}}\right) p(wwI)=j=1L(w)1σ([[n(w,j+1)=ch(n(w,j))]]vn(w,j)vwI)

  • n ( w , j ) n(w,j) n(w,j)表示词 w w w在第 j j j个节点上, n ( w , 1 ) n(w,1) n(w,1)表示 root 节点, n ( w , L ( w ) ) n(w,L(w)) n(w,L(w))表示叶子节点

  • ch ⁡ ( n ( w , j ) ) \operatorname{ch}(n(w,j)) ch(n(w,j))表示节点 n ( w , j ) n(w,j) n(w,j)right child node

  • 双中括号表示,如果括号中为 true ,则为1,否则为-1,即:
    [  ⁣ [ x ]  ⁣ ] = { 1 ,  if  x  is true  − 1 ,  else  [\![ x]\!]=\left\{

    1, if x is true 1, else 
    \right. [[x]]={1,1, if x is true  else 

  • v W I v_{W_{I}} vWI为中心词的词向量, v n ( w , j ) ′ {v_{n(w, j)}^{\prime}} vn(w,j)为词 w w w在树上的第 j j j个节点的参数


CBOW中的层次 s o f t m a x softmax softmax
前面提到的层次 s o f t m a x softmax softmax是基于 S k i p − g r a m Skip-gram Skipgram模型进行构建的,而针对 C B O W CBOW CBOW模型的构建方法如下图所示:

在这里插入图片描述

可以看到, C B O W CBOW CBOW中的层次 s o f t m a x softmax softmax构建方式与 S k i p − g r a m Skip-gram Skipgram相似,唯一 的区别在于 u 0 u_0 u0,这里的 u 0 u_0 u0是值窗口内上下文词向量的平均


2)Negative Sampling

核心思想:
负采样的核心思想是:舍弃多分类以提高速度,在现在的研究中,层次 s o f t m a x softmax softmax并不常用,因为本质上仍然是一个多分类问题,而负采样在现在的研究中应用十分广泛,原因就在于直接舍弃了多分类,将其变为了一个二分类问题。例如有一个训练样本,中心词是 w w w,它周围上下文共有 2 c 2c 2c个词,记为 c o n t e x t ( w ) context(w) context(w)。由于这个中心词 w w w的确和 c o n t e x t ( w ) context(w) context(w)相关存在,因此它是一个真实的正例。通过负采样,我们得到 n e g neg neg个和 w w w不同的中心词 w i , i = 1 , 2 , … , n e g w_i,i=1,2,\ldots,neg wi,i=1,2,,neg,这样 c o n t e x t ( w ) context(w) context(w) w i w_i wi就组成了 n e g neg neg个并不真实存在的负例。利用这一个正例和 n e g neg neg个负例,我们进行二元逻辑回归,得到负采样对应每个词 w i w_i wi对应的模型参数 θ i \theta_i θi,和每个词的词向量


损失函数:
J neg ⁡ − sample ⁡ ( θ ) = log ⁡ σ ( u o T v c ) + ∑ k = 1 K E k ∼ P ( w ) [ log ⁡ σ ( − u k T v c ) ] J_{\operatorname{neg}-\operatorname{sample}}(\theta)=\log \sigma\left(u_{o}^{T} v_{c}\right)+\sum_{k=1}^{K} E_{k \sim P(w)}\left[\log \sigma\left(-u_{k}^{T} v_{c}\right)\right] Jnegsample(θ)=logσ(uoTvc)+k=1KEkP(w)[logσ(ukTvc)]

  • v c v_c vc是中心词向量
  • u 0 u_0 u0是窗口内上下文词向量
  • u k u_k uk是负采样上下文词向量

采样方法:

P ( w ) = U ( w ) 3 4 Z P(w)=\frac{U(w)^{\frac{3}{4}}}{Z} P(w)=ZU(w)43

  • U ( w ) U(w) U(w)是词 w w w在数据集中出现的频率, Z Z Z为归一化的参数,使得求解之后的概率和依旧为1

  • 例如 U ( a ) = 0.01 , U ( b ) = 0.99 U(a)=0.01, U(b)=0.99 U(a)=0.01,U(b)=0.99,则

    • P ( a ) = 0.01 × 0.75 0.01 × 0.75 + 0.99 × 0.75 = 0.03 P(a)=\frac{0.01 \times 0.75}{0.01 \times 0.75+0.99 \times 0.75}=0.03 P(a)=0.01×0.75+0.99×0.750.01×0.75=0.03
    • P ( b ) = 0.99 × 0.75 0.01 × 0.75 + 0.99 × 0.75 = 0.97 P(b)=\frac{0.99 \times 0.75}{0.01 \times 0.75+0.99 \times 0.75}=0.97 P(b)=0.01×0.75+0.99×0.750.99×0.75=0.97
  • 通过这样的采样方法,可以减少频率大的词的抽样概率,增加评率小的词的抽样概率


CBOW中的负采样
C B O W CBOW CBOW中的负采样与 S k i p − g r a m Skip-gram Skipgram中的负采样形式相似,损失函数为:
J ( θ ) = log ⁡ σ ( u o T v c ) + ∑ i = 1 k E j ∼ P ( w ) [ log ⁡ σ ( − u o T v j ) ] J(\theta)=\log \sigma\left(u_{o}^{T} v_{c}\right)+\sum_{i=1}^{k} E_{j \sim P(w)}\left[\log \sigma\left(-u_{o}^{T} v_{j}\right)\right] J(θ)=logσ(uoTvc)+i=1kEjP(w)[logσ(uoTvj)]

  • u 0 u_0 u0是窗口内上下文词向量的平均
  • v c v_c vc是正确的中心词向量
  • v j v_j vj是错误的中心词向量

3)Subsampling of Frequent Words

自然语言处理有一个共识,即文档或者数据集中出现频率高的词往往携带信息较少,比如 the, is, a, and等,而出现频率低的词往往携带信息多。因此应当重点关注这些低频词,这也是重采样的目的,而进行重采样的原因有以下两个:

  • 想更多地训练重要的词对,比如训练 FranceParis 之间的关系比训练 Francethe 之间的关系要有用
  • 高频词很快就训练好了,而低频次需要更多的轮次

重采样的方法

P ( w i ) = 1 − t f ( w i ) P\left(w_{i}\right)=1-\sqrt{\frac{t}{f\left(w_{i}\right)}} P(wi)=1f(wi)t

f ( w ) f(w) f(w)为词 w i w_i wi在数据集中出现的频率, t t t为一个超参数,文中 t t t选取为 1 0 − 5 10^{-5} 105,训练集中的词 w i w_i wi会以 P ( w i ) P(w_i) P(wi)的概率被删除。词频越大, f ( w i ) f(w_i) f(wi)越大, P ( w i ) P(w_i) P(wi)越大,那么词 w i w_i wi就有更大的概率被删除,反之亦然。如果词 w i w_i wi的词频小于等于 t t t,那么 w i w_i wi则不会被别除,这样就加速训练,能够得到更好的词向量。


(6)小结

w o r d 2 v e c word2vec word2vec可以总结为“ 2 + 3 2+3 2+3”或者“ 2 + 2 + 1 2+2+1 2+2+1”,第一个“ 2 2 2”表示两种模型,一种是 S k i p − g r a m Skip-gram Skipgram模型,是用中心词预测周围词,一种是 C B O W CBOW CBOW模型,是用周围词预测中心词”“ 3 3 3“表示的是三种关键技术:层次 s o f t m a x softmax softmax、负采样、重采样;也可以分为“ 2 + 1 2+1 2+1”,本质上是一样的

3、模型复杂度
(1)模型复杂度的概念

模型复杂度用 O O O表示,代表的是训练的复杂度,计算公式为:

O = E × T × Q O=E \times T \times Q O=E×T×Q

  • O O O是训练复杂度( training complexity
  • E E E是迭代次数( number of training epochs
  • T T T是数据集大小( number of words in the training set
  • Q Q Q是模型计算复杂度( model computational complexity

对不同的模型进行复杂度比较时,需要保证 E E E T T T相同,因此实际上是比较 Q Q Q的大小,而 Q Q Q的计算可以通过计算模型的参数个数来等价代替,从而进行模型之间复杂度的比较


(2)NNLM复杂度

在这里插入图片描述
N N L M NNLM NNLM是输入 N − 1 N-1 N1个词,预测第 N N N个词,每个输入的词都会被映射为一个 D D D维的向量,因此输入层的参数 x x x的维度为 N × D N\times D N×D,隐藏层 W W W是一个全连接层,因此 W W W的维度为 N × D × H N \times D \times H N×D×H,输出层 U U U也是一个全连接层,因此 U U U的维度为 H × V H\times V H×V,因此 N N L M NNLM NNLM的复杂度 Q Q Q为:
Q = V × H + N × D × H + N × D Q=V \times H+N \times D \times H+N \times D Q=V×H+N×D×H+N×D
如果使用层次 s o f t m a x softmax softmax,则复杂度可降为 Q = log ⁡ 2 V × H + N × D × H + N × D Q=\log_2^V \times H+N \times D \times H+N \times D Q=log2V×H+N×D×H+N×D


(3)RNNLM复杂度

在这里插入图片描述
N N L M NNLM NNLM输入的是 w ( t ) w(t) w(t),维度 1 × D 1\times D 1×D U U U为全连接层,维度为 D × H D \times H D×H W W W H × H H \times H H×H,输出层 V V V H × V H \times V H×V,因此

Q = 1 × D + D × H + H × H + H × V Q = 1\times D + D\times H + H \times H + H \times V Q=1×D+D×H+H×H+H×V
由于 D ≈ H D \approx H DH,因此 Q = H ( 2 H + 1 ) + H × V Q = H(2H +1)+H\times V Q=H(2H+1)+H×V,因此可以写为:

Q = H × H + H × V Q = H \times H + H \times V Q=H×H+H×V

如果使用层次 s o f t m a x softmax softmax,则 Q = H × H + H × log ⁡ 2 V Q = H \times H + H \times \log_2^V Q=H×H+H×log2V


(4)CBOW模型复杂度

在这里插入图片描述
如果周围词个数为 N N N,则输入层的维度为 N × D N\times D N×D,输出层为 D × V D\times V D×V,因此
Q = N × D + D × V Q = N\times D + D\times V Q=N×D+D×V

  • 如果使用层次 s o f t m a x softmax softmax,则 Q = N × D + D × log ⁡ 2 V Q=N\times D+D \times \log_2^V Q=N×D+D×log2V
  • 如果使用负采样,则 Q = N × D + D × ( K + 1 ) Q=N\times D+D \times (K+1) Q=N×D+D×(K+1)

(5)Skip-gram模型复杂度

在这里插入图片描述

对于一个中心词,维度为 D D D,周围词矩阵 W ∗ W^{*} W D × V D\times V D×V,同时需要求解 C C C个周围词,因此 Q Q Q为:
Q = C ( D + D × V ) Q=C(D+D \times V) Q=C(D+D×V)

  • 如果使用层次 s o f t m a x softmax softmax,则 Q = C ( D + D × log ⁡ 2 V ) Q=C(D+D \times \log_2 V) Q=C(D+D×log2V)
  • 如果使用负采样,则 Q = C ( D + D × ( K + 1 ) ) Q=C(D+D \times (K+1)) Q=C(D+D×(K+1))

(6)复杂度比较

不同模型的复杂度 Q Q Q如下:
NNLM: Q = N × D + N × D × H + H × log ⁡ 2 V Q = N \times D+N \times D \times H+H \times \log _{2} V Q=N×D+N×D×H+H×log2V
RNNLM: Q = H × H + H × log ⁡ 2 V Q= H \times H+H \times \log _{2} V Q=H×H+H×log2V
CBOW + HS: Q = N × D + D × log ⁡ 2 V Q=N \times D+D \times \log _{2} V Q=N×D+D×log2V
Skip-gram + HS: Q = C ( D + D × log ⁡ 2 V ) Q=C\left(D+D \times \log _{2} V\right) Q=C(D+D×log2V)
CBOW + NEG: Q = N × D + D × ( K + 1 ) ) Q=N \times D+D \times(K+1)) Q=N×D+D×(K+1))
Skip-gram + NEG: Q = C ( D + D × ( K + 1 ) ) Q=C(D+D \times (K+1)) Q=C(D+D×(K+1))

  • w o r d 2 v e c word2vec word2vec中的两种模型时间复杂度都比 N N L M NNLM NNLM R N N L M RNNLM RNNLM要低
  • S k i p − g r a m Skip-gram Skipgram C B O W CBOW CBOW要稍微慢一些
  • 负采样一般比层次 s o f t m a x softmax softmax要快一些

五、论文总结与启发


1、关键点
  • 更简单的预测模型: w o r d 2 v e c word2vec word2vec
  • 更快的分类方案: H S HS HS N E G NEG NEG

2、创新点
  • 使用词对的预测来替代语言模型的预测
  • 使用 H S HS HS N E G NEG NEG降低分类复杂度
  • 使用 s u b s a m p l i n g subsampling subsampling加快训练
  • 新的词对推理数据集来评估词向量的质量

3、启发点
  • 大数据集上的简单模型往往强于小数据集上的复杂模型
  • King 的词向量减去 Man 的词向量加上 Woman 的词向量和 Queen 的词向量最接近
  • 我们决定设计简单的模型来训练词向量,虽然简单的模型无法像神经网络那么准确地表示数据,但是可以在更多地数据上更快地训练
  • 我们相信在更大的数据集上使用更大的词向量维度能够训练得到更好的词向量

六、代码实现

实现 S k i p − g r a m Skip-gram Skipgram C B O W CBOW CBOW以及 H S HS HS N G E NGE NGE,具体代码见我的Github

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

闽ICP备14008679号