Approximate Training

跳元模型的主要思想是使用softmax运算来计算基于给定的中心词wcw_c生成上下文字w0w_0的条件概率。

  • 由于softmax操作的性质,上下文词可以是词表VV中的任意项,这个包含与整个词表大小一样多的项的求和。因此,在跳元模型的梯度计算和连续词袋模型的梯度计算都包含求和。

  • 不幸的是,在一个词典上(通常有几十万或数百万个单词)求和的梯度的计算成本是巨大的!

为了降低上述计算复杂度,本节将介绍两种近似训练方法:负采样和分层softmax。由于跳元模型和连续词袋模型的相似性,我们将以跳元模型为例来描述这两种近似训练方法。

Negative Sampling

负采样修改了原目标函数。给定中心词wcw_c的上下文窗口,任意上下文词wow_o来自该上下文窗口的被认为是由下式建模概率的事件:

P(D=1wc,wo)=σ(uovc),P(D = 1 \mid w_c, w_o) = \sigma(\mathbf{u}_o^\top \mathbf{v}_c),

其中σ\sigma使用了sigmoid激活函数的定义:

σ(x)=11+exp(x).\sigma(x) = \frac{1}{1 + \exp(-x)}.

让我们从最大化文本序列中所有这些事件的联合概率开始训练词嵌入。具体而言,给定长度为$T$的文本序列,以w(t)w^{(t)}表示同步tt的词,并使上下文窗口为mm,考虑最大化联合概率:

t=1Tmjm,j0P(D=1w(t),w(t+j)). \prod_{t=1}^{T} \prod_{-m \leq j \leq m, j \neq 0} P(D = 1 \mid w^{(t)}, w^{(t+j)}).

然而,只考虑那些正样本的事件。仅当所有词向量都等于无穷大时,这其中的联合概率才最大化为1。当然,这样的结果毫无意义。为了使目标函数更有意义,负采样添加从预定分布中采样的负样本。

SS表示上下文词wow_o来自中心词wcw_c的上下文窗口的事件。对于这个涉及wow_o的事件,从预定义分布P(w)P(w)中采样KK个不是来自这个上下文窗口噪声词。

NkN_k表示噪声词wkw_kk=1,,Kk=1,\dots,K)不是来自wow_o的上下文窗口的事件。假设正例和负例S,N1,,NKS, N_1,\dots,N_K的这些事件是相互独立的。

负采样将(14.2.3)中的联合概率(仅涉及正例)重写为:

t=1Tmjm,j0P(w(t+j)w(t)), \prod_{t=1}^{T} \prod_{-m \leq j \leq m, j \neq 0} P(w^{(t+j)} \mid w^{(t)}),

通过事件S,N1,,NKS, N_1,\dots,N_K近似条件概率:

P(w(t+j)w(t))=P(D=1w(t),w(t+j))k=1,wkP(w)KP(D=0w(t),wk). P(w^{(t+j)} \mid w^{(t)}) = P(D = 1 \mid w^{(t)}, w^{(t+j)}) \prod_{k=1, w_k \sim P(w)}^{K} P(D = 0 \mid w^{(t)}, w_k).

分别用iti_thkh_k表示词w(t)w^{(t)}和噪声词wkw_k在文本序列中的同步处的索引。(14.2.5)中关于条件概率的对数损失为:

logP(w(t+j)w(t))=logP(D=1w(t),w(t+j))k=1,wkP(w)KlogP(D=0w(t),wk)-\log P(w^{(t+j)} \mid w^{(t)}) = -\log P(D = 1 \mid w^{(t)}, w^{(t+j)}) - \sum_{k=1, w_k \sim P(w)}^{K} \log P(D = 0 \mid w^{(t)}, w_k)

=logσ(ut+jvit)k=1,wkP(w)Klog(1σ(uhkvit))= -\log \sigma(\mathbf{u}{t+j}^\top \mathbf{v}{i_t}) - \sum_{k=1, w_k \sim P(w)}^{K} \log \left( 1 - \sigma(\mathbf{u}{h_k}^\top \mathbf{v}{i_t}) \right)

=logσ(ut+jvit)k=1,wkP(w)Klogσ(uhkvit). = -\log \sigma(\mathbf{u}{t+j}^\top \mathbf{v}{i_t}) - \sum_{k=1, w_k \sim P(w)}^{K} \log \sigma(-\mathbf{u}{h_k}^\top \mathbf{v}{i_t}).

我们可以看到,现在每个训练步的梯度计算成本与词表大小无关,而是线性依赖于KK。当将超参数$K$设置为较小的值时,在负采样的每个训练步处的梯度的计算成本较小。

Hierarchical Softmax

作为另一种近似训练方法,层序Softmax(hierarchical softmax)使用二叉树(图14.2.1中说明的数据结构),其中树的每个叶节点表示词表VV中的一个词。

L(w)L(w)表示二叉树中表示字ww的从根节点到叶节点的路径上的节点数(包括两端)。设n(w,j)n(w, j)为该路径上的第jjth节点,其上下文字向量为un(w,j)\mathbf{u}_{n(w,j)}。例如,图14.2.1中的L(w3)=4L(w_3) = 4。分层softmax将(14.1.4)中的条件概率近似为

P(wowc)=j=1L(wo)1σ([n(wo,j+1)=leftChild(n(wo,j))]un(wo,j)vc),P(w_o \mid w_c) = \prod_{j=1}^{L(w_o)-1} \sigma\left(\left[n(w_o, j+1) = \text{leftChild}(n(w_o,j))\right] \cdot \mathbf{u}_{n(w_o,j)}^\top \mathbf{v}_c\right),

其中函数σ\sigma在(14.2.2)中定义,leftChild(n)\text{leftChild}(n)是节点nn的左子节点:如果xx为真,x=1\llbracket x \rrbracket = 1;否则x=1\llbracket x \rrbracket = -1

为了说明,让我们计算图14.2.1中给定词w3w_3生成词w3w_3的条件概率。这需要wcw_c的词向量vc\mathbf{v}_c和从根到w3w_3的路径(图14.2.1中加粗的路径)上的非叶节点向量之间的点积,该路径依次向左、向右和向左遍历:

P(w3wc)=σ(un(w3,1)vc)σ(un(w3,2)vc)σ(un(w3,3)vc).P(w_3 \mid w_c) = \sigma(\mathbf{u}_{n(w_3,1)}^\top \mathbf{v}c) \cdot \sigma(-\mathbf{u}_{n(w_3,2)}^\top \mathbf{v}c) \cdot \sigma(\mathbf{u}_{n(w_3,3)}^\top \mathbf{v}_c).

由于σ(x)+σ(x)=1\sigma(x) + \sigma(-x) = 1,它认为基于任意词wcw_c生成词表VV中所有词的条件概率总和为1:

wVP(wwc)=1. \sum_{w \in V} P(w \mid w_c) = 1.

幸运的是,由于二叉树结构,L(wo)1L(w_o) - 1大约与O(log2V)O(\log_2 |V|)是一个数量级。当词表大小V|V|很大时,与没有近似训练的相比,使用分层softmax的每个训练步的计算代价显著降低。

下采样

文本数据通常有“the”“a”和“in”等高频词:它们在非常大的语料库中甚至可能出现数十亿次。然而,这些词经常在上下文窗口中与许多不同的词共同出现,提供的有用信息很少。

例如,考虑上下文窗口中的词“chip”:直观地说,它与低频单词“intel”的共现比与高频单词“a”的共现在训练中更有用。

此外,大量(高频)单词的训练速度很慢。因此,当训练词嵌入模型时,可以对高频单词进行下采样 (Mikolov et al., 2013)。具体地说,数据集中每个词wiw_i将有概率地被丢弃:

P(wi)=max(1tf(wi),0), P(w_i) = \max \left( 1 - \sqrt{\frac{t}{f(w_i)}}, 0 \right),

其中f(wi)f(w_i)wiw_i的词数与数据集中的总词数的比率,常量tt是超参数(在实验中为10410^{-4})。我们可以看到,只有当相对比率f(wi)>tf(w_i) > t时,(高频)词wiw_i才能被丢弃,且该词的相对比率越高,被丢弃的概率就越大。

Last updated