之前汇报时看到过词嵌入这部分,这里把自己看到过的总结在这里,尽可能写的全一点。
word2vec( 把词映射为实数域向量的技术也叫做词嵌入(word embedding))
- 由来
为什么要引入word2vec:之前都是用one-hot编码表示结点信息,当然也可以用one-hot来表示词。虽然one-hot词向量构造起来很容易,但通常并不是⼀个好选择。⼀个主要的原因是,one-hot词向量⽆法准确表达不同词之间的相似度,如我们常常使⽤的余弦相似度。对于向量x, y ∈ R d,它 们的余弦相似度是它们之间夹⻆的余弦值:∥x∥∥y∥x⊤y∈[−1,1]由于任何两个不同词的one-hot向量的余弦相似度都为0,多个不同词之间的相似度难以通过onehot向量准确地体现出来。word2vec⼯具的提出正是为了解决上⾯这个问题 它将每个词表⽰成⼀个定⻓的向量,并使得这些向量能较好地表达不同词之间的相似和类⽐关系。word2vec⼯具包含了两个模型,即跳字模型(skip-gram)和连续词袋模型(continuous bag of words,CBOW)以及两种高效的训练方法:负采样和层序softmax。word2vec词向量可以较好地表达不同词之间的相似和类比关系。
- 跳字模型
跳字模型假设基于某个词来⽣成它在⽂本序列周围的词。举个例⼦,假设⽂本序列是 “the”“man”“loves”“his”“son”。以“loves”作为中⼼词,设背景窗口⼤小为2。如图所示,跳字模型所关⼼的是,给定中⼼词“loves”,⽣成与它距离不超过2个词的背景词“the”“man”“his”“son”的条件概率,即: P(“the”, “man”, “his”, “son” | “loves”)

假设给定中⼼词的情况下,背景词的⽣成是相互独⽴的,那么上式可以改写成: P(“the” | “loves”) · P(“man” | “loves”) · P(“his” | “loves”) · P(“son” | “loves”) 。假设给定⼀个⻓度为T的⽂本序列,设时间步t的词为w (t)。 假设给定中⼼词的情况下背景词的⽣成相互独⽴,当背景窗口⼤小为m时,跳字模型的似然函数即给定任⼀中⼼词⽣成所有背景词的概率:t=1∏T−m≤j≤m,j̸=0∏P(w(t+j)∣w(t))训练跳字模型
训练中我们通过最⼤化似然函数来 学习模型参数,即最⼤似然估计。这等价于最小化以下损失函数:−t=1∑T−m≤j≤m,j̸=0∑logP(w(t+j)∣w(t))在跳字模型中,每个词被表⽰成两个d维向量,⽤来计算条件概率。假设这个词在词典中索引为i, 当它为中⼼词时向量表⽰为vi∈Rd,而为背景词时向量表⽰为ui∈Rd。设中⼼词wc在词典中索引为c,背景词wo在词典中索引为o,给定中⼼词⽣成背景词的条件概率可以通过对向量内积 做softmax运算而得到:P(wo∣wc)=∑i∈Vexp(ui⊤vc)exp(uo⊤vc)其中词典索引集V=0,1,...,∣V∣−1。
按照以往经验,我们可以用随机梯度下降法来求解,以其中一个词为例子来看一下:每个词的中心词和背景词的词向量是模型参数,是我们要求的参数。
Vc=Vc−∂Vc∂L∂vc∂logP(wo∣wc)=uo−j∈V∑∑i∈vexp(ui⊤vc)exp(uj⊤vc)uj∂vc∂logP(wo∣wc)=uo−j∈V∑P(wj∣wc)uj不算前面的两个加和,只针对后半部分求导,已经有很大的计算开销了,即使用随机梯度下降,每一步的迭代的开销也非常大,时间复杂度至少 O∣V∣。 它的计算需要词典中所有词以wc为中⼼词的条件概率。有关其他词向量的梯度同理可得。 训练结束后,对于词典中的任⼀索引为i的词,我们均得到该词作为中⼼词和背景词的两组词向量vi和ui。在⾃然语⾔处理应⽤中,⼀般使⽤跳字模型的中心词向量作为词的表征向量。
- 连续词袋模型
连续词袋模型与跳字模型类似。与跳字模型最⼤的不同在于,连续词袋模型假设基于某中⼼词在 ⽂本序列前后的背景词来⽣成该中⼼词。在同样的⽂本序列“the”“man”“loves”“his”“son” ⾥,以“loves”作为中⼼词,且背景窗口⼤小为2时,连续词袋模型关⼼的是,给定背景词 “the”“man”“his”“son”⽣成中⼼词“loves”的条件概率(如图所示),也就是:P(“loves” | “the”, “man”, “his”, “son”)。

因为连续词袋模型的背景词有多个,我们将这些背景词向量取平均,然后使⽤和跳字模型⼀样的⽅法来计算条件概率。设vi∈Rd和ui∈Rd分别表⽰词典中索引为i的词作为背景词和中⼼词的向量(注意符号的含义与跳字模型中的相反)。设中⼼词wc在词典中索引为c,背景词wo1,...,wo2m在 词典中索引为o1,...,o2m,那么给定背景词⽣成中心词的条件概率:
P(wc∣wo1,…,wo2m)=∑i∈Vexp(2m1ui⊤(vo1+…+vo2m))exp(2m1uc⊤(vo1+…+vo2m))Wo=(wo1,⋯,wo2m}vo=(vo1+…+vo2m)/(2m)P(wc∣Wo)=∑i∈Vexp(ui⊤vo)exp(uc⊤vo)给定⼀个⻓度为T的⽂本序列,设时间步t的词为w(t),背景窗口⼤小为m。连续词袋模型的似然 函数是由背景词⽣成任⼀中⼼词的概率:t=1∏TP(w(t)∣w(t−m),…,w(t−1),w(t+1),…,w(t+m))
训练连续词袋模型同训练跳字模型基本⼀致。连续词袋模型的最⼤似然估计等价于最小化损失函数:−t=1∑TlogP(w(t)∣w(t−m),…,w(t−1),w(t+1),…,w(t+m))logP(wc∣Wo)=uc⊤vo−log(i∈V∑exp(ui⊤vo))通过微分,我们可以计算出上式中条件概率的对数有关任⼀背景词向量voi(i=1,...,2m)的梯度:∂voi∂logP(wc∣Wo)=2m1⎝⎛uc−j∈V∑∑i∈Vexp(ui⊤vo)exp(uj⊤vo)uj⎠⎞=2m1⎝⎛uc−j∈V∑P(wj∣Wo)uj⎠⎞
有关其他词向量的梯度同理可得。同跳字模型不⼀样的⼀点在于,我们⼀般使⽤连续词袋模型的背景词向量作为词的表征向量。至于弊端吗,和跳字模型的弊端一样,有很大的计算开销,从∑j∈V就可以看出,针对这个弊端,引出两种
两种近似训练的方法:负采 样(negative sampling)或层序softmax(hierarchical softmax),下篇文章再总结吧。
- ⼩结
• 词向量是⽤来表⽰词的向量。把词映射为实数域向量的技术也叫词嵌⼊。
• word2vec包含跳字模型和连续词袋模型。跳字模型假设基于中⼼词来⽣成背景词。连续词袋模型假设基于背景词来⽣成中⼼词。