修改密码

请输入密码
请输入密码 请输入8-64长度密码 和 email 地址不相同 至少包括数字、大写字母、小写字母、半角符号中的 3 个
请输入密码
提交

修改昵称

当前昵称:
提交

??certificate-table.title_zh_CN??

??certificate-table.name_zh_CN?? ??certificate-table.issued-at_zh_CN?? ??certificate-table.valid-until_zh_CN?? ??certificate-table.serial_zh_CN?? ??certificate-table.actions_zh_CN??
??certificate-table.serial_zh_CN?? ??certificate-table.valid-until_zh_CN?? ??certificate-table.actions_zh_CN??

??certificate-table.no-data.p1_zh_CN?? ??certificate-table.no-data.p2_zh_CN??

??invoice-table.title_zh_CN??

??invoice-table.name_zh_CN?? ??invoice-table.create-time_zh_CN?? ??invoice-table.id_zh_CN?? ??invoice-table.price_zh_CN?? ??invoice-table.actions_zh_CN??
??invoice-table.name_zh_CN?? ??invoice-table.create-time_zh_CN?? ??invoice-table.id_zh_CN?? ??invoice-table.price_zh_CN?? ??invoice-table.actions_zh_CN??
v4.3
搜索
    中文EN
    v4.3

      Skip-gram 模型优化

      概述

      由于原始 Skip-gram 模型的计算量非常高,因此几乎无法应用到实际场景中。

      矩阵 WW 的大小取决于词汇量的大小(例如,V=10000)和嵌入维度(例如,N=300),其中每个矩阵通常包含数百万个权重(例如,VN=3 百万)! 因此,Skip-gram 的神经网络变得非常庞大,需要大量的训练样本来调整这些权重。

      另外,在每个反向传播步骤中,矩阵 W 的所有输出向量 vw 都会被更新,但其中的绝大多数的向量与目标词和上下文词都没有关系。鉴于 W 的尺寸巨大,梯度下降过程将非常缓慢。

      还有一个显著的成本来自于 Softmax 函数,该函数归一化分母的计算涉及到词汇表中的所有单词。

      T. Mikolov 和其他研究人员引入了一些 Skip-gram 模型的优化技术,包括二次采样(Subsampling)和负采样(Negative Sampling)。这些方法不仅加速了训练过程,还提高了嵌入向量的质量。

      二次采样

      在语料库中,有些词会频繁出现,如 "the"、"and"、"is" 等。这些高频词会带来一些问题:

      • 它们的语义价值有限。例如,模型更多地受益于 "France" 和 "Paris" 的共现,而不是 "France" 和 "the" 频繁共现的情况。
      • 会存在过多包含这些词的训练样本,超过了训练相应向量所需的数量。

      二次采样(Subsampling)方法就用于解决这个问题:对于训练集中的每个单词,设定一定的机会将其丢弃,而不常见的单词较少被丢弃。

      首先,通过下式计算保留一个单词的概率:

      其中,f(wi) 表示第 i 个单词出现的频率,α 是影响概率分布的因子,默认大小为 0.001

      接着,生成一个大小介于 01 之间的随机数。如果 P(wi) 小于这个数,则丢弃这个单词。

      例如,如果 α=0.001,当 f(wi)0.0026 时,P(wi)1,这意味着频率为 0.0026 或更低的单词将完全被保留。对于高频词汇,比如 f(wi)=0.03,有 P(wi)=0.22

      如果 α=0.002,那么频率为 0.0052 或更低的单词将百分之百被保留。对于相同的高频词汇 f(wi)=0.03,此时有 P(wi)=0.32

      因此,较大的 α 会增加高频词被二次采样的概率。

      举个例子,在训练句子 "Graph is a good way to visualize data" 中,如果单词 "a" 被丢弃,那么这个句子的采样结果将不会包含以 "a" 作为目标词或上下文词的样本。

      负采样

      在负采样(Negative Sampling)方法中,每当对目标词进行采样获得一个上下文词作为正样本时,同时选择 k 个单词作为负样本。

      我们讨论原始 Skip-gram 模型时使用了一个简单的语料库,这个语料库包含一个由 10 个单词组成的词汇表:graph、is、a、good、way、to、visualize、data、very 和 at。举例来说,当使用滑动窗口生成正样本 (target, content): (is, a) 时,我们同时选择 k=3 个负样本单词 graph、data 和 at。

      目标词 上下文词 期待的输出
      is 正样本 a 1
      负样本 graph 0
      data 0
      at 0

      使用负采样后,模型的训练目标从预测目标词的上下文词转变为一个二分类任务。在这个设置中,正例单词的输出期望为 1,而负例单词的输出期望为 0;其他无关的单词将被忽略。

      因此,在反向传播过程中,模型只更新与正例和负例单词相关联的输出向量 vw,以提高模型的分类性能。

      考虑一个情景,其中 V=10000N=300。当应用参数 k=9 的负采样时,矩阵 W 中只有 300×10=3000 个权重需要更新,这相当于没有应用负采样时需要更新的 3 百万个权重的 0.1%

      我们的实验表明,在小型训练数据集中,k 值在 5~20的范围内即可;而对于大型数据集,k 值可以更小,大约 2~5。(Mikolov 等

      选择负样本单词需要一个概率分布 Pn,其基本原则是优先考虑语料库中的高频词汇。然而,如果选择完全基于词频,可能导致高频词被过度表示而低频词被忽视。为了取得平衡,通常使用将词频提升 34 幂次的经验分布:

      其中,f(wi) 表示第 i 个单词的频率,P 的下标 n 表示"噪音"的概念,因此Pn 也被称为噪音分布(Noise Distribution)。

      在极端情况下,如果语料库只包含两个单词,频率分别为 0.90.1,使用上式调整后的概率分别为 0.840.16。这种调整在一定程度上缓解了由频率差异引起的固有选择偏差。

      处理大型语料库时,负采样在计算效率方面可能存在挑战。因此,我们进一步采用一个 resolution 参数来重新缩放噪音分布。较大的 resolution 值能提供对原始噪音分布的更接近的近似。

      优化的模型训练

      前向传播过程

      我们将以目标词 is、正样本词 a 和负样本词 graph、data 和 at 为例进行说明:

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

      反向传播过程

      如前所述,期望正样本单词的输出(表示为 y0)为 1;而对应的 k 个负样本单词的输出(表示为 yi)为 0。因此,模型训练的目标是最大化 y01-yi,这可以等价为最大化它们的乘积:

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

      分别求 E 相对于 u0ui 的偏导数:

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

      更新矩阵 WW 权重的过程与 Skip-gram 的原始形式类似。然而,只有 W 中的 w11w21w13w23w18w28w1,10w2,10 以及 W 中的 w21w21 会被更新。

      请完成以下信息后可下载此书
      *
      公司名称不能为空
      *
      公司邮箱必须填写
      *
      你的名字必须填写
      *
      你的电话必须填写
      *
      你的电话必须填写