Word2Vec原理解析二

上篇文章介绍了Word2Vec的精髓内容,这篇文章主要介绍层次Softmax和负采样的内容,即Word2Vec的训练技巧,但不是Word2Vec特有的技巧哟。

1. Hierarchical Softmax

1.1 哈夫曼树

哈夫曼树是一种带权路径长度最短的二叉树,即最优二叉树。
在这里插入图片描述
权重*步长 的和 = 带权路径长度
图b即为最优二叉树(哈夫曼树)

如何构建哈夫曼树呢?如下图的过程
在这里插入图片描述
每个节点都有唯一指定的一个编码形式。

为什么在Word2Vec中使用哈夫曼树呢
假设是CBOW模型,上下文x预测中间词y,那么其输出层有词袋大小V个神经元,我们对这V个神经元一开始是等同对待的,但是如果V的数值非常大,等同对待,会导致效率过低。而用哈夫曼树去构造这V个神经元(词),越靠近root节点的地方,词频是越高的,我们可以更快的使用到该词,而越靠近叶节点的地方,词频越低,这样就提高了训练效率,这就是Word2Vec的层次softmax的训练trick。

1.2 逻辑回归

在这里插入图片描述
在这里插入图片描述

1.3 预先符号定义

在这里插入图片描述
第五点中的Θ为逻辑回归中的参数,因为每个节点都在做二分类任务,即逻辑回归

1.4 基于层级Softmax的CBOW模型

注意哈夫曼树的0、1表示与我们所定义的逻辑回归输出的正、负例是相反的。
在这里插入图片描述
图中的哈夫曼树左1右0,我们设左为逻辑回归输出的负例,右为正例,正负概率如右上角所示。

输入多个上下文词,进行求和后得到 X w X_w

假设我们要计算中间词为足球,此时的CBOW的条件概率为 p ( c o n t e x t ( ) ) p(足球|context(足球)) ,过程为:

  1. root节点进行二分类,同时包含 Θ 1 w Θ^w_1 的逻辑回归参数,判定为负例
  2. d 2 w d^w_2 处进行二分类,包含 Θ 2 w Θ^w_2 参数,判定为正例
  3. 二分类,判定为正例
  4. 二分类,判定为负例

最后 p ( c o n t e x t ( ) ) p(足球|context(足球)) = 以上概率的乘积。

1.5 数学推导CBOW层级Softmax过程

在这里插入图片描述

  1. 第二行 为CBOW的损失函数,加入log只是为了后续计算方便,使得连乘变成连加。
  2. 第一行 为逻辑回归输出概率值,正例或负例的情况,只不过写在一起了而已, d j w d^w_j 可能为0可能为1,其是哈夫曼树编码。
  3. 第一行带入第二行得到第三行,即最终的目标损失函数,我们要对其进行优化求解。

而该优化问题中,我们要更新两个参数,第一个是各个逻辑回归的 Θ Θ 值:
在这里插入图片描述
第二个是 X w X_w ,但需要注意的是,本质更新目标并非 X w X_w ,而是输入层的上下文:
在这里插入图片描述
w w 是中间词, C o n t e x t ( w ) Context(w) 是上下文词集合, w w' 是集合中的一个词, v ( w ) v(w') 表示该词的词向量。

1.6 基于层级Softmax的Skip-gram模型

CBOW模型有一个投影层到 X w X_w ,那Skip-gram模型则不需要投影,其余和CBOW模型一模一样,不多说了。数学推导的变化条件概率前和后替换一下即可。

1.7 基于层级Softmax的模型(对上述两个模型架构上的补充)

在这里插入图片描述


2. Negative Sampling

对于词袋大小V而言,如果V非常大,即使是构建哈夫曼树,复杂度也会很高,所以提出使用负采样。使用负采样的时候,可以明显感觉到训练速度快于层次softmax,而且不需要构建复杂的哈弗曼树。

什么是负采样呢?
  例如在CBOW中,我们是知道了 C o n t e x t ( w ) Context(w) ,然后来预测单词 w w ,那么这个时候,相对于 C o n t e x t ( w ) Context(w) ,我们提供一组结果,这些结果中包含正确的解 w w ,剩下的都是错误的解,那么 w w 就是正样本,剩下的解就是负样本。
  Skip-gram类似,相当于给一组输入 v v ,然后预测正确的输出 C o n t e x t ( w ) Context(w) ,输入的一组数据里面,有一个是正确的输入,为 v ( w ) v(w) ,剩下的都是错误的输入,也就是负样本。

那么如何确定 怎么选取负样本呢?见下图,一种带权采样的方法:
在这里插入图片描述
每次进行负采样时,如果采样到正样本,word2vec源代码的处理方式是直接跳过去,忽略这次采样的结果就行了,毕竟这样的概率不太高,
在这里插入图片描述

2.1 CBOW 负采样

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 Skip-gram 负采样

在这里插入图片描述
在这里插入图片描述


3. Word2Vec最后一点补充内容

在这里插入图片描述
在这里插入图片描述
传统意义上的CBOW和SG模型中的输入层到隐藏层的权重矩阵即为我们需要的词向量,输入层为one hot编码(但gensim 和 google的 word2vec 里面并没有用到one hot,而是初始化的时候直接为每个词随机生成一个N维的向量,并且把这个N维向量作为模型参数学习)

而例如基于层级的CBOW方法,模型结构为:输入层-输入层累加为向量-哈夫曼树的结构,这里的输入层也可以理解为是one hot向量,只不过再随机初始化对应的外部向量表,one hot可以与表中向量进行选中,每次更新向量时,更新对应向量表中的数据。这也是一种理解思路,这个目前业界存在理论分歧,但代码实现是如上段所述。

发布了60 篇原创文章 · 获赞 18 · 访问量 4412

猜你喜欢

转载自blog.csdn.net/qq_22795223/article/details/105627375
今日推荐