Word2Vec语言模型:低维稠密向量

Word2Vec

一共有两种模式,以及两种近似训练的方法,个人认为CBOW搭配negative-sampling,以及SkipGram搭配H-softmax,所以以下小节按这个顺序排列。

参考资料:吾爱NLP(5)
有求导实例
https://zhuanlan.zhihu.com/p/53425736
实例计算
https://blog.csdn.net/qq_41664845/article/details/83108222
其他公式推导
https://blog.csdn.net/liuyuemaicha/article/details/52611219

1. CBOW

训练结束后,对于词语,获得其作为中心词和背景词的情况下的两组词向量和

中心词使用表示,背景词使用表示。

对于词语,当它作为中心词时,它的个背景词为,取背景词的平均向量。则用这些背景词生成它这个中心词的概率为,个背景词生成它的向量相乘数值(个背景词生成其他词语的向量相乘数值之和),即是

令,则上式取log后的形式为

则求整体最大化似然估计

因为求梯度,除了对应变量外其他数值都可以视为常数,所以,为其余常数,求梯度时可以不影响结果,则求的其中一个背景词生成中心词的梯度为,
\frac{\partial{\log{P(w^t|w^{t-m},...,w^{t-1},w^{t+1},...,w^{t+m})}}}{\partial{v_{ti}}} = \frac{1}{2m}( u_t - \frac{ \sum_{k=1}^{V}{u_k \times \exp{u_k(v_{ti}+rest)}} }{ \sum_{j=1}^{V}{\exp{u_j(v_{ti}+rest)}} } )
这个式子可以进一步写作,

2. Negative Sampling

改进的部分主要考虑词表大小的运算。softmax的运算考虑了背景词是词典中任何一个词的可能(该运算在分母)。

对于CBOW的改进

注意到 中,第二项是考虑了“给定背景词,其生成整个词表中每个词成为中心词”的情况,所以其计算复杂度为。一种缓解的方法是只考虑词表中部分词能成为中心词的情况,例如认为最多只有个词能成为中心词,则计算复杂度则降到。
所以对于之前损失函数需要改变,
之前的损失函数,

之后的损失函数(同时给分母加一防止分母为0,因为采样少数后可能出现0的情况),

其中

对于Skipgram的改进

其主要更改了中心词生成背景词的条件概率。中心词的生成变成了两个部分(背景词和噪声词):

中心词和背景词同时出现在window中
中心词和噪声词不同时出现在window中
...
中心词和噪声词不同时出现在window中

中心词和背景词同时出现,中心词和噪声词不同时出现

其中,即是sigmoid函数,这里用于计算概率

  • 中心词与背景词同时出现的概率

  • 同理,加上中心词和噪声词(不出现,)不同时出现的情况

  • 则“中心词生成背景词的条件概率”为

使用指数表达方式再加上平滑后,

3. SkipGram

主要目的为使用一个词来预测它在文本序列周围的词。

对于长度为的一句话,整体最大似然估计

给定任意作为中心词,产生作为背景词的概率,使用softmax作为损失函数

4. H-Softmax

整体改变了Softmax的计算方式,复杂度由O(|V|)下降到对应霍夫曼树的高度

判断函数:到达路径上第个节点,“它的左子节点” 是否等于 “到达路径上第个节点”

只考虑路径上的非叶子节点涉及的向量,而不再是把所有词表里的词轮流一遍。

其中,即是sigmoid函数。

举例计算
需要将的词向量和根节点到路径上的非叶子节点向量一一求内积。
在下面的例子中需要向左、向右、再向左遍历。

       n(w3,1)
      /       \
  n(w3,2)      *
   /   \       / \
  *  n(w3,3)      *
 / \    / \        \
w1  w2 w3  w4 ...  w|V|

(这里都是相乘)

第二个节点因为判断函数为负因为其节点和做子左节点不相同。

你可能感兴趣的:(Word2Vec语言模型:低维稠密向量)