word2vec总结(一)

之前汇报时看到过词嵌入这部分,这里把自己看到过的总结在这里,尽可能写的全一点。
word2vec( 把词映射为实数域向量的技术也叫做词嵌入(word embedding))

  1. 由来
    为什么要引入word2vec:之前都是用one-hot编码表示结点信息,当然也可以用one-hot来表示词。虽然one-hot词向量构造起来很容易,但通常并不是⼀个好选择。⼀个主要的原因是,one-hot词向量⽆法准确表达不同词之间的相似度,如我们常常使⽤的余弦相似度。对于向量x, y ∈ R d,它 们的余弦相似度是它们之间夹⻆的余弦值: x ⊤ y ∥ x ∥ ∥ y ∥ ∈ [ − 1 , 1 ] \frac{\boldsymbol{x}^{\top} \boldsymbol{y}}{\|\boldsymbol{x}\|\|\boldsymbol{y}\|} \in[-1,1] xyxy[1,1]由于任何两个不同词的one-hot向量的余弦相似度都为0,多个不同词之间的相似度难以通过onehot向量准确地体现出来。word2vec⼯具的提出正是为了解决上⾯这个问题 它将每个词表⽰成⼀个定⻓的向量,并使得这些向量能较好地表达不同词之间的相似和类⽐关系。word2vec⼯具包含了两个模型,即跳字模型(skip-gram)和连续词袋模型(continuous bag of words,CBOW)以及两种高效的训练方法:负采样层序softmax。word2vec词向量可以较好地表达不同词之间的相似和类比关系。
  2. 跳字模型
    跳字模型假设基于某个词来⽣成它在⽂本序列周围的词。举个例⼦,假设⽂本序列是 “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 ) ) \prod_{t=1}^{T} \prod_{-m \leq j \leq m, j \neq 0} P\left(w^{(t+j)} | w^{(t)}\right) t=1Tmjm,j̸=0P(w(t+j)w(t))训练跳字模型
    训练中我们通过最⼤化似然函数来 学习模型参数,即最⼤似然估计。这等价于最小化以下损失函数: − ∑ t = 1 T ∑ − m ≤ j ≤ m , j ≠ 0 log ⁡ P ( w ( t + j ) ∣ w ( t ) ) -\sum_{t=1}^{T} \sum_{-m \leq j \leq m, j \neq 0} \log P\left(w^{(t+j)} | w^{(t)}\right) t=1Tmjm,j̸=0logP(w(t+j)w(t))在跳字模型中,每个词被表⽰成两个d维向量,⽤来计算条件概率。假设这个词在词典中索引为i, 当它为中⼼词时向量表⽰为 v i ∈ R d , v_i ∈ R^d, viRd而为背景词时向量表⽰为 u i ∈ R d u_i ∈ R^d uiRd。设中⼼词 w c w_c wc在词典中索引为c,背景词 w o w_o wo在词典中索引为o,给定中⼼词⽣成背景词的条件概率可以通过对向量内积 做softmax运算而得到: P ( w o ∣ w c ) = exp ⁡ ( u o ⊤ v c ) ∑ i ∈ V exp ⁡ ( u i ⊤ v c ) P\left(w_{o} | w_{c}\right)=\frac{\exp \left(\boldsymbol{u}_{o}^{\top} \boldsymbol{v}_{c}\right)}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \boldsymbol{v}_{c}\right)} P(wowc)=iVexp(uivc)exp(uovc)其中词典索引集 V = 0 , 1 , . . . , ∣ V ∣ − 1 V = {0, 1, . . . , |V|−1} V=0,1,...,V1
    按照以往经验,我们可以用随机梯度下降法来求解,以其中一个词为例子来看一下:每个词的中心词和背景词的词向量是模型参数,是我们要求的参数。
    V c = V c − ∂ L ∂ V c ∂ log ⁡ P ( w o ∣ w c ) ∂ v c = u o − ∑ j ∈ V exp ⁡ ( u j ⊤ v c ) ∑ i ∈ v exp ⁡ ( u i ⊤ v c ) u j ∂ log ⁡ P ( w o ∣ w c ) ∂ v c = u o − ∑ j ∈ V P ( w j ∣ w c ) u j V_{c}=V_{c}-\frac{\partial L}{\partial V_{c}}\\ \frac{\partial \log \mathbb{P}\left(w_{o} | w_{c}\right)}{\partial \mathbf{v}_{c}}=\mathbf{u}_{o}-\sum_{j \in V} \frac{\exp \left(\mathbf{u}_{j}^{\top} \mathbf{v}_{c}\right)}{\sum_{i \in v} \exp \left(\mathbf{u}_{i}^{\top} \mathbf{v}_{c}\right)} \mathbf{u}_{j}\\ \frac{\partial \log \mathbb{P}\left(w_{o} | w_{c}\right)}{\partial \mathbf{v}_{c}}=\mathbf{u}_{o}-\sum_{j \in \mathcal{V}} \mathbb{P}\left(w_{j} | w_{c}\right) \mathbf{u}_{j} Vc=VcVcLvclogP(wowc)=uojVivexp(uivc)exp(ujvc)ujvclogP(wowc)=uojVP(wjwc)uj不算前面的两个加和,只针对后半部分求导,已经有很大的计算开销了,即使用随机梯度下降,每一步的迭代的开销也非常大,时间复杂度至少 O ∣ V ∣ O| V | OV。 它的计算需要词典中所有词以 w c w_c wc为中⼼词的条件概率。有关其他词向量的梯度同理可得。 训练结束后,对于词典中的任⼀索引为i的词,我们均得到该词作为中⼼词和背景词的两组词向量 v i v_i vi u i u_i ui。在⾃然语⾔处理应⽤中,⼀般使⽤跳字模型的中心词向量作为词的表征向量。
  3. 连续词袋模型
    连续词袋模型与跳字模型类似。与跳字模型最⼤的不同在于,连续词袋模型假设基于某中⼼词在 ⽂本序列前后的背景词来⽣成该中⼼词。在同样的⽂本序列“the”“man”“loves”“his”“son” ⾥,以“loves”作为中⼼词,且背景窗口⼤小为2时,连续词袋模型关⼼的是,给定背景词 “the”“man”“his”“son”⽣成中⼼词“loves”的条件概率(如图所示),也就是:P(“loves” | “the”, “man”, “his”, “son”)。
    在这里插入图片描述
    因为连续词袋模型的背景词有多个,我们将这些背景词向量取平均,然后使⽤和跳字模型⼀样的⽅法来计算条件概率。设 v i ∈ R d 和 u i ∈ R d v_i ∈ R^d和u_i ∈ R^d viRduiRd分别表⽰词典中索引为i的词作为背景词和中⼼词的向量(注意符号的含义与跳字模型中的相反)。设中⼼词 w c w_c wc在词典中索引为c,背景词 w o 1 , . . . , w o 2 m w_{o_1} , . . . , w_{o_{2m}} wo1,...,wo2m在 词典中索引为 o 1 , . . . , o 2 m o_1, . . . , o_{2m} o1,...,o2m,那么给定背景词⽣成中心词的条件概率:
    P ( w c ∣ w o 1 , … , w o 2 m ) = exp ⁡ ( 1 2 m u c ⊤ ( v o 1 + … + v o 2 m ) ) ∑ i ∈ V exp ⁡ ( 1 2 m u i ⊤ ( v o 1 + … + v o 2 m ) ) W o = ( w o 1 , ⋯   , w o 2 m } v ‾ o = ( v o 1 + … + v o 2 m ) / ( 2 m ) P ( w c ∣ W o ) = exp ⁡ ( u c ⊤ v ‾ o ) ∑ i ∈ V exp ⁡ ( u i ⊤ v ‾ o ) P\left(w_{c} | w_{o_{1}}, \ldots, w_{o_{2 m}}\right)=\frac{\exp \left(\frac{1}{2 m} \boldsymbol{u}_{c}^{\top}\left(\boldsymbol{v}_{o_{1}}+\ldots+\boldsymbol{v}_{o_{2 m}}\right)\right)}{\sum_{i \in \mathcal{V}} \exp \left(\frac{1}{2 m} \boldsymbol{u}_{i}^{\top}\left(\boldsymbol{v}_{o_{1}}+\ldots+\boldsymbol{v}_{o_{2 m}}\right)\right)}\\ \mathcal{W}_{o}=\left(w_{o_{1}}, \cdots, w_{o_{2 m}}\right\}\\ \overline{v}_{o}=\left(v_{o_{1}}+\ldots+v_{o_{2 m}}\right) /(2 m)\\ P\left(w_{c} | \mathcal{W}_{o}\right)=\frac{\exp \left(\boldsymbol{u}_{c}^{\top} \overline{\boldsymbol{v}}_{o}\right)}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \overline{\boldsymbol{v}}_{o}\right)} P(wcwo1,,wo2m)=iVexp(2m1ui(vo1++vo2m))exp(2m1uc(vo1++vo2m))Wo=(wo1,,wo2m}vo=(vo1++vo2m)/(2m)P(wcWo)=iVexp(uivo)exp(ucvo)给定⼀个⻓度为 T T T的⽂本序列,设时间步t的词为 w ( t ) w^{(t)} w(t),背景窗口⼤小为 m m m。连续词袋模型的似然 函数是由背景词⽣成任⼀中⼼词的概率: ∏ t = 1 T P ( w ( t ) ∣ w ( t − m ) , … , w ( t − 1 ) , w ( t + 1 ) , … , w ( t + m ) ) \prod_{t=1}^{T} P\left(w^{(t)} | w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}, \ldots, w^{(t+m)}\right) t=1TP(w(t)w(tm),,w(t1),w(t+1),,w(t+m))
    训练连续词袋模型同训练跳字模型基本⼀致。连续词袋模型的最⼤似然估计等价于最小化损失函数: − ∑ t = 1 T log ⁡ P ( w ( t ) ∣ w ( t − m ) , … , w ( t − 1 ) , w ( t + 1 ) , … , w ( t + m ) ) log ⁡ P ( w c ∣ W o ) = u c ⊤ v ‾ o − log ⁡ ( ∑ i ∈ V exp ⁡ ( u i ⊤ v ‾ o ) ) -\sum_{t=1}^{T} \log P\left(w^{(t)} | w^{(t-m)}, \ldots, w^{(t-1)}, w^{(t+1)}, \ldots, w^{(t+m)}\right)\\ \log P\left(w_{c} | \mathcal{W}_{o}\right)=\boldsymbol{u}_{c}^{\top} \overline{\boldsymbol{v}}_{o}-\log \left(\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \overline{\boldsymbol{v}}_{o}\right)\right) t=1TlogP(w(t)w(tm),,w(t1),w(t+1),,w(t+m))logP(wcWo)=ucvolog(iVexp(uivo))通过微分,我们可以计算出上式中条件概率的对数有关任⼀背景词向量 v o i ( i = 1 , . . . , 2 m ) v_{o_i}(i = 1, . . . , 2m) voi(i=1,...,2m)的梯度: ∂ log ⁡ P ( w c ∣ W o ) ∂ v o i = 1 2 m ( u c − ∑ j ∈ V exp ⁡ ( u j ⊤ v ‾ o ) u j ∑ i ∈ V exp ⁡ ( u i ⊤ v ‾ o ) ) = 1 2 m ( u c − ∑ j ∈ V P ( w j ∣ W o ) u j ) \frac{\partial \log P\left(w_{c} | \mathcal{W}_{o}\right)}{\partial \boldsymbol{v}_{o_{i}}}=\frac{1}{2 m}\left(\boldsymbol{u}_{c}-\sum_{j \in \mathcal{V}} \frac{\exp \left(\boldsymbol{u}_{j}^{\top} \overline{\boldsymbol{v}}_{o}\right) \boldsymbol{u}_{j}}{\sum_{i \in \mathcal{V}} \exp \left(\boldsymbol{u}_{i}^{\top} \overline{\boldsymbol{v}}_{o}\right)}\right)=\frac{1}{2 m}\left(\boldsymbol{u}_{c}-\sum_{j \in \mathcal{V}} P\left(w_{j} | \mathcal{W}_{o}\right) \boldsymbol{u}_{j}\right) voilogP(wcWo)=2m1ucjViVexp(uivo)exp(ujvo)uj=2m1ucjVP(wjWo)uj
    有关其他词向量的梯度同理可得。同跳字模型不⼀样的⼀点在于,我们⼀般使⽤连续词袋模型的背景词向量作为词的表征向量。至于弊端吗,和跳字模型的弊端一样,有很大的计算开销,从 ∑ j ∈ V \sum_{j \in \mathcal{V}} jV就可以看出,针对这个弊端,引出两种
    两种近似训练的方法:负采 样(negative sampling)或层序softmax(hierarchical softmax),下篇文章再总结吧。
  4. ⼩结
    • 词向量是⽤来表⽰词的向量。把词映射为实数域向量的技术也叫词嵌⼊。
    • word2vec包含跳字模型和连续词袋模型。跳字模型假设基于中⼼词来⽣成背景词。连续词袋模型假设基于背景词来⽣成中⼼词。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浅唱战无双

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值