Word2Vec 理解过程记录

2019-11-04  本文已影响0人  大豆油

以下是记录 word2vec 的详细内容,但是不包含推导公式。首先需要先去了解 NNLM 模型,这是先验知识。然后再来讨论 word2vec,主要内容是它的两个模型 CBOW 和 Skip-Gram,我们平常讨论的 word2vec,实则是这两个模型来实现的。然后介绍改进的训练方法:Hierarchical Softmax 和 Negative Sampling,这两个方法都是针对隐藏层到输出层这一步,后面会详细讨论。

一、NNLM(Neural Network Language Model)模型

首先,需要有一个概念:词嵌入。传统的词表示,如 one-hot 编码和共现矩阵都不能很好的表示词与词之间的关系。而词嵌入,是把每个词映射到固定的维度大小的向量上。

然后,看一下 NNLM 模型的结构图:

可以看得出来,这是一个由输入层,隐藏层(以一层为例),和输出层。这里的 C 矩阵也就是需要训练的词嵌入,事实上,C 矩阵只是这个模型的副产物。模型的输出是概率函数,整个模型的含义是根据前 t-1 个单词来预测第 t 个单词,这是一种无监督学习。这里面最大的问题在于从隐藏层到输出的 softmax 层的计算量很大,因为要计算所有词的 softmax 概率,再去找概率最大的值。

二、word2vec 中 CBOW 和 Skip-Gram

1. CBOW 模型

CBOW 的含义是利用上下文来预测当前词,网络结构如下图所示:

具体的步骤如下:

2. Skip-Gram 模型

SG 模型的含义是根据当前词来预测上下文,网络结构如下图所示:

具体的步骤如下:

三、方法改进:Hierarchical Softmax 和 Negative Sampling

由上面的训练过程可知,不管是 CBOW 还是 SG,在输出层的时候都要输出词汇表大小的概率值。计算量太大,下面的两种分案就是针对输出层来改进。

1. Hierarchical Softmax

Hierarchical softmax 使用一个哈夫曼树来表示词表中的所有词。树中的每个叶结点都是一个单词,而且只有一条路径从根结点到叶结点。在这个模型中,没有词的输出表示。相反,图的每个节点(根节点和叶结点除外)与模型要学习的向量相关联。结构如下图所示:

w2 在 CBOW 模型中就是平均值向量,然后与每个节点内部的向量相乘后,通过 Sigmoid 函数,一直到叶子节点结束。理解这个哈夫曼树的关键在于:哈夫曼树的特点是权重最大的叶子结点,离根节点越近,所以在训练的时候,需要事先定义好哈夫曼树(按照词频大小)。

2. Negative Sampling

在讲基于 Negative Sampling 的 word2vec 模型前,先看看 Hierarchical Softmax 的的缺点。的确,使用霍夫曼树来代替传统的神经网络,可以提高模型训练的效率。但是如果我们的训练样本里的中心词w是一个很生僻的词,那么就得在霍夫曼树中辛苦的向下走很久了。

目标函数:
注意对 |V| 的求和计算量是非常大的!任何的更新或者对目标函数的评估都要花费 O(|V|) 的时间复杂度。使用负采样时,比如我们有一个训练样本,中心词是 w, 它周围上下文共有 2c 个词,记为 context(w)。由于这个中心词 w, 的确和 context(w) 相关存在,因此它是一个真实的正例。通过 Negative Sampling 采样,我们得到 neg 个和 w 不同的中心词 wi,i=1,2,..neg,这样 context(w) 和 wi 就组成了 neg 个并不真实存在的负例。

目的就在于最大化下面式子:

采样方法:

  1. 根据词频将线段分成 V 份,每份对应词汇表中的一个词,高频词对应长线段,低频词对应短线段。每个词 W 的线段长度由下式决定:
  1. 对分子和分母取 3/4 幂如下:
  1. 在采样前,我们将这段长度为 1 的线段划分成 M 等份,这里 M >> V,这样可以保证每个词对应的线段都会划分成对应的小块。而 M 份中的每一份都会落在某一个词对应的线段上。在采样的时候,只需要从 M 个位置中采样出 neg 个位置就行,此时采样到的每一个位置对应到的线段所属的词就是负例词。具体如下所示:

四:参考文章

上一篇 下一篇

猜你喜欢

热点阅读