概述
由于原始 Skip-gram 模型的计算量非常高,因此几乎无法应用到实际场景中。
矩阵 和 的大小取决于词汇量的大小(例如,)和嵌入维度(例如,),其中每个矩阵通常包含数百万个权重(例如, 百万)! 因此,Skip-gram 的神经网络变得非常庞大,需要大量的训练样本来调整这些权重。
另外,在每个反向传播步骤中,矩阵 的所有输出向量 都会被更新,但其中的绝大多数的向量与目标词和上下文词都没有关系。鉴于 的尺寸巨大,梯度下降过程将非常缓慢。
还有一个显著的成本来自于 Softmax 函数,该函数归一化分母的计算涉及到词汇表中的所有单词。

T. Mikolov 和其他研究人员引入了一些 Skip-gram 模型的优化技术,包括二次采样(Subsampling)和负采样(Negative Sampling)。这些方法不仅加速了训练过程,还提高了嵌入向量的质量。
- T. Mikolov, I. Sutskever, K. Chen, G. Corrado, J. Dean, Distributed Representations of Words and Phrases and their Compositionality (2013)
- X. Rong, word2vec Parameter Learning Explained (2016)
二次采样
在语料库中,有些词会频繁出现,如 "the"、"and"、"is" 等。这些高频词会带来一些问题:
- 它们的语义价值有限。例如,模型更多地受益于 "France" 和 "Paris" 的共现,而不是 "France" 和 "the" 频繁共现的情况。
- 会存在过多包含这些词的训练样本,超过了训练相应向量所需的数量。
二次采样(Subsampling)方法就用于解决这个问题:对于训练集中的每个单词,设定一定的机会将其丢弃,而不常见的单词较少被丢弃。
首先,通过下式计算保留一个单词的概率:

其中, 表示第 个单词出现的频率, 是影响概率分布的因子,默认大小为 。
接着,生成一个大小介于 和 之间的随机数。如果 小于这个数,则丢弃这个单词。
例如,如果 ,当 时,,这意味着频率为 或更低的单词将完全被保留。对于高频词汇,比如 ,有 。
如果 ,那么频率为 或更低的单词将百分之百被保留。对于相同的高频词汇 ,此时有 。
因此,较大的 会增加高频词被二次采样的概率。
举个例子,在训练句子 "Graph is a good way to visualize data" 中,如果单词 "a" 被丢弃,那么这个句子的采样结果将不会包含以 "a" 作为目标词或上下文词的样本。
负采样
在负采样(Negative Sampling)方法中,每当对目标词进行采样获得一个上下文词作为正样本时,同时选择 个单词作为负样本。
我们讨论原始 Skip-gram 模型时使用了一个简单的语料库,这个语料库包含一个由 10 个单词组成的词汇表:graph、is、a、good、way、to、visualize、data、very 和 at。举例来说,当使用滑动窗口生成正样本 (target, content): (is, a) 时,我们同时选择 个负样本单词 graph、data 和 at。
目标词 | 上下文词 | 期待的输出 | |
---|---|---|---|
is | 正样本 | a | 1 |
负样本 | graph | 0 | |
data | 0 | ||
at | 0 |
使用负采样后,模型的训练目标从预测目标词的上下文词转变为一个二分类任务。在这个设置中,正例单词的输出期望为 ,而负例单词的输出期望为 ;其他无关的单词将被忽略。
因此,在反向传播过程中,模型只更新与正例和负例单词相关联的输出向量 ,以提高模型的分类性能。
考虑一个情景,其中 ,。当应用参数 的负采样时,矩阵 中只有 个权重需要更新,这相当于没有应用负采样时需要更新的 百万个权重的 !
我们的实验表明,在小型训练数据集中, 值在 的范围内即可;而对于大型数据集, 值可以更小,大约 。(Mikolov 等)
选择负样本单词需要一个概率分布 ,其基本原则是优先考虑语料库中的高频词汇。然而,如果选择完全基于词频,可能导致高频词被过度表示而低频词被忽视。为了取得平衡,通常使用将词频提升 幂次的经验分布:

其中, 表示第 个单词的频率, 的下标 表示"噪音"的概念,因此 也被称为噪音分布(Noise Distribution)。
在极端情况下,如果语料库只包含两个单词,频率分别为 和 ,使用上式调整后的概率分别为 和 。这种调整在一定程度上缓解了由频率差异引起的固有选择偏差。
处理大型语料库时,负采样在计算效率方面可能存在挑战。因此,我们进一步采用一个 resolution
参数来重新缩放噪音分布。较大的 resolution
值能提供对原始噪音分布的更接近的近似。
优化的模型训练
前向传播过程
我们将以目标词 is、正样本词 a 和负样本词 graph、data 和 at 为例进行说明:

在负采样中,Skip-gram模型使用以下变化的 Softmax 函数,实际上也是 的Sigmoid 函数()。这个函数将 的所有分量映射到 到 的范围内:

反向传播过程
如前所述,期望正样本单词的输出(表示为 )为 ;而对应的 个负样本单词的输出(表示为 )为 。因此,模型训练的目标是最大化 和 ,这可以等价为最大化它们的乘积:

损失函数 可以通过将上述问题转化为最小化问题来获得:

分别求 相对于 和 的偏导数:

和 具有与原始 Skip-gram 模型中 类似的含义,可以理解为从输出向量中减去期望向量:

更新矩阵 和 权重的过程与 Skip-gram 的原始形式类似。然而,只有 中的 、、、、、、 和 以及 中的 和 会被更新。