翻译:Distributed Representations of Words and Phrases and their Compositionality

原文:《Distributed Representations of Words and Phrases and their Compositionality
原作者:Tomas Mikolov等

摘要

最近引入的连续Skip-gram模型是学习高质量distributed vector representations(分布向量表示)的有效方法,distributed vector representations可以捕获大量精确的句法和语义关系。在本文中,我们提出了几个扩展,提高了向量的质量和训练速度。通过对frequent words进行二次抽样,我们获得了显着的加速,同时还学习了更多的regular word representations(常规单词表示)。我们还提出了一个分层softmax的简单替代方案,称为negative sampling(负采样)。
word representations的一个固有限制是:它们不关心词序,而且无法表示idiomatic phrases(习惯用语)。例如,不能简单地将“Canada/加拿大”和“Air/空中”的含义组合起来得到“Canada Air/加拿大航空公司”的含义。在这个例子的启发下,我们提出了一种在文本中查找短语的简单方法,并表明学习数百万个phrases的good vector representations是可能的。

1 介绍

通过分组相似的单词,在向量空间中的distributed representations可以帮助学习算法在NLP任务中获得更好的表现。最早使用word representations可以追溯到1986年(Rumelhart,Hinton和Williams)。这个想法已经被应用于统计语言建模且取得了相当大的成功。后续工作包括应用于自动语音识别和机器翻译,以及大范围的NLP任务。
最近,Mikolov等人引入了Skip-gram模型,这是一种从大量非结构化文本数据中学习高质量向量表示的有效方法。与过去大部分用于学习word vectors的神经网络架构不同,Skip-gram模型的训练(参见图1)不涉及密集矩阵的乘法。这使得训练非常高效:一个优化过的单机实现可以在一天内训练超过1000亿字。
使用神经网络计算的word representation非常有趣,因为已训练的向量明确地编码了许多语言规律和模式。有点令人惊讶的是,许多这些模式可以表示为线性翻译。例如,向量计算vec("Madrid")-vec("Spain")+vec("France")的结果比任何其他word vector更接近于vec("Paris")
figure 1
图1:Skip-gram模型架构。训练目标是学习善于预测附近单词的word vector representations

在本文中,我们提出了原始Skip-gram模型的几个扩展。在训练过程中,对frequent words进行二次采样会导致显着的加速(大约2-10倍),并提高频率较低的word representation的准确性。此外,我们提出了一种用于训练Skip-gram模型的简化NCE(Noise Contrastive Estimation/噪声对比估计)。结果表明,与更复杂的分层softmax相比,它有更快的训练速度,而且frequent words的vector representation也更好。
words representation天生受限于idiomatic phrases的表示。例如,“Boston Globe/波士顿环球报”是报纸,它不是“Boston/波士顿”和“Globe/地球”的含义的自然组合。因此,用向量来表示整个短语会使Skip-gram模型更具表现力。其他旨在通过组合单词向量(例如递归自动编码器/recursive autoencoders)来表示句子意义的技术也将受益于使用phrase vectors而不是word vectors。
模型从基于单词扩展到基于短语模型相对简单。首先,我们使用data-driven的方法识别大量的短语,然后在训练过程中将短语视为单独的tokens(标记)。为了评估短语向量的质量,我们开发了一个包含单词和短语的类比推理任务测试集。测试集中一个典型类比对是"Montreal":"Montreal Canadiens" :: "Toronto":"TorontoMaple Leafs"如果最靠近vec("Montreal Canadiens") - vec("Montreal") + vec("Toronto")的表达是 vec("TorontoMaple Leafs"),则被认为回答正确。
最后,我们描述了Skip-gram模型的另一个有趣属性。我们发现简单的向量加法通常可以产生有意义的结果。例如,vec("Russia")+vec("river")接近 vec("Volga River"),而vec("Germany")+vec("capital")接近 vec("Berlin")。这种组合性表明,通过对word vector representation使用基本的数学运算,可以获得非明显(non-obvious)程度的语言理解。

2 Skip-gram模型

Skip-gram模型的训练目标是找到可用于预测句子或文档中surrounding words的word representation。更正式地,给出训练词 w 1 , w 2 , w 3 , . . . , w T w_1,w_2,w_3,... ,w_T w1,w2,w3,...,wT,Skip-gram模型的目标是最大化对数日志概率:
1 T ∑ t = 1 T ∑ − c ≤ j ≤ c , j ≠ 0 l o g p ( w t + j ∣ w t ) (1) \frac{1}{T}\sum_{t=1}^T\sum_{-c\leq j\leq c,j\ne0}{\rm log}p(w_{t+j}|w_t)\tag{1} T1t=1Tcjc,j=0logp(wt+jwt)(1)
其中 c c c是训练上下文(可以是中心单词 w t w_t wt的一个函数)的大小。较大的 c c c意味着更多的训练例,因此可以导致更高的准确性,同时也意味着更多的训练时间。基本Skip-gram公式使用softmax函数:
p ( w O ∣ w I ) = e x p ( v w O ′ T v w I ) ∑ w = 1 W e x p ( v w ′ T v w I ) (2) p(w_O|w_I)=\frac{{\rm exp}({v'_{w_O}}^{\rm T}v_{w_I})}{\sum_{w=1}^W {\rm exp}({v'_w}^{\rm T}v_{w_I})}\tag{2} p(wOwI)=w=1Wexp(vwTvwI)exp(vwOTvwI)(2)来定义 p ( w t + j ∣ w t ) p(w_{t+j} | w_t) p(wt+jwt)。其中 v w v_w vw v w ′ v'_w vw分别为 w w w的输入和输出向量表示, W W W为词汇表中的单词数。这个公式是不切实际的,因为计算 ∇ l o g p ( w O ∣ w I ) \nabla{\rm log}p(w_O|w_I) logp(wOwI)的花费与 W W W成正比,通常会达到 1 0 5 − 1 0 7 10^5-10^7 105107的数量级。

2.1 分层Softmax

Hierarchical(分层) softmax是完全softmax的计算效率近似。它首先由Morin和Bengio在神经网络语言模型的上下文中引入。它的主要优点是,不需要评估神经网络中的 W W W个输出节点以获得概率分布,仅需要评估约 l o g 2 ( W ) {\rm log}_2(W) log2(W)个节点。
分层softmax使用二叉树表示输出层,其中 W W W个字作为其叶,并且对于每个节点,显式地表示其子节点的相对概率。这些定义了一个可将概率分配给单词的random walk(随机游走)。
更准确地说,从一条合适的路径,可以从root到达每个单词 w w w。设 n ( w , j ) n(w,j) n(w,j)为从root到单词 w w w的路径上的第 j j j个节点, L ( w ) L(w) L(w)为该路径的长度,则 n ( w , 1 ) = r o o t , n ( w , L ( w ) ) = w n(w,1)={\rm root},n(w,L(w))=w n(w,1)=root,n(w,L(w))=w。另外,对每个内节点(:内节点/inner node为有子节点的节点),设 c h ( n ) {\rm ch}(n) ch(n) n n n的arbitrary fixed child,$[![x]!]=1 $ if x = t r u e x = true x=true o t h e r w i s e − 1 otherwise -1 otherwise1。则分层softmax将按照如下公式定义 p ( w O ∣ w I ) p(w_O|w_I) p(wOwI):
p ( w ∣ w I ) = ∏ j = 1 L ( w ) − 1 σ ( [  ⁣ [ n ( w , j + 1 ) = c h ( n ( w , j ) ) ]  ⁣ ] ⋅ v n ( w , j ) ′ T v w I ) (3) p(w|w_I)=\prod_{j=1}^{L(w)-1}\sigma\Big ([\![n(w,j+1)={\rm ch}(n(w,j))]\!]\cdot {v'_{n(w,j)}}^{\rm T}v_{w_I}\Big)\tag{3} p(wwI)=j=1L(w)1σ([[n(w,j+1)=ch(n(w,j))]]vn(w,j)TvwI)(3)其中 σ ( x ) = 1 / ( 1 + e x p ( − x ) ) \sigma(x)=1/(1+exp(-x)) σ(x)=1/(1+exp(x))。可以证明的是 ∑ w = 1 W p ( w ∣ w I ) = 1 \sum_{w=1}^Wp(w|w_I) =1 w=1Wp(wwI)=1。这意味着计算 l o g p ( w O ∣ w I ) {\rm log}p(w_O|w_I) logp(wOwI) ∇ l o g p ( w O ∣ w I ) \nabla{\rm log}p(w_O|w_I) logp(wOwI)的消耗与 L ( w O ) L(w_O) L(wO)成正比,通常来说不超过 l o g W \rm{log}W logW。此外,不像Skip-gram的标准softmax公式会把两个表示 v w v_w vw v w ′ v'_w vw分配给每个单词 w w w,在分层softmax公式中每个单词 w w w有一个 v w v_w vw且二叉树的每个内部节点 n n n有一个 v n ′ v'_n vn
分层softmax使用的树结构对性能有相当大的影响。Mnih和Hinton探索了构建树结构的一些方法以及训练时间和结果模型精度的影响。在我们的工作中,我们使用一个霍夫曼树(binary Huffman tree),因为它将短codes分配给高频词,从而加快了训练速度。之前已经观察到,根据出现频率组合单词可以很好的作为基于神经网络的语言模型的一种简单加速技术。

2.2 负采样Negative Sampling

分层softmax的替代方案是噪声对比估计(NCE),由Gutmann和Hyvarinen引入,并由Mnih和Teh用于语言建模。NCE认为一个好的模型应该能够通过logistic regression来区分数据和噪声。这类似于Collobert和Weston使用的铰链损失/hinge loss,他们通过对噪声上的数据进行排名来训练模型。
虽然NCE可以最大化softmax的对数概率,但是Skipgram模型只关注学习高质量的向量表示,因此只要向量表示保持其质量,我们可以随意简化NCE。我们通过以下公式定义Negative Sampling(NEG):
l o g σ ( v w O ′ T v w I ) + ∑ i = 1 k E w i ∼ P n ( w ) [ l o g σ ( − v w i ′ T v w I ) ] (4) {\rm log}\sigma({v'_{w_O}}^{\rm T}v_{w_I})+\sum_{i=1}^k\mathbb{E}_{w_i\sim P_n(w)}\big[ {\rm log} \sigma(-{v'_{w_i}}^{\rm T}v_{w_I})\big]\tag{4} logσ(vwOTvwI)+i=1kEwiPn(w)[logσ(vwiTvwI)](4)用于替代Skip-gram中的每个 l o g p ( w O ∣ w I ) {\rm log}p(w_O|w_I) logp(wOwI)项。因此,我们的任务是用逻辑回归将目标词 w O w_O wO从噪声分布 P n ( w ) P_n(w) Pn(w)里区分开,其中每个数据样本存在 k k k个负样本。我们的实验表明,小型训练数据集里 k k k可以取5-20。而对于大型数据集, k k k可以小到2-5。Negative Sampling和NCE之间的主要区别在于,NCE需要噪声分布的样本和数值概率,而Negative Sampling仅使用样本。尽管NCE最大化了softmax的对数概率,但这个属性对我们的应用来说并不重要。
NCE和NEG均有噪声分布 P n ( w ) P_n(w) Pn(w)作为自由参数。我们调查了 P n ( w ) P_n(w) Pn(w)的一些选择,发现对于NCE和NEG的每个包括语言建模的任务来说,将unigram distribution U ( w ) U(w) U(w)提高到3/4的幂次方(即 1 Z U ( w ) 3 / 4 \frac{1}{Z}U(w)^{3/4} Z1U(w)3/4)将显著优于unigram和uniform distribution。(具体报告此文未写出)

2.3 高频词的二次取样

在非常大的语料库中,最常见的单词很容易就出现数亿次(例如,"in", "the"和"a")。这样的单词通常比其他低频词提供的信息值还要少。例如,对于Skip-gram来说,观察"French""Paris"的同时出现(co-occurrences)是有益的,但观察"French""the"同时出现的频率并没有什么用,因为在一个句子里几乎每个词都会频繁地和"the"同时出现。这个想法也可以反向应用: 高频词的vector representation在经过几百万个例子的训练之后并不会显著变化。
为了抵消罕见词和高频词之间的不平衡,我们使用简单的二次抽样:训练集中的每个单词 w i w_i wi将有一定概率被丢弃,概率由以下公式计算:
P ( w i ) = 1 − t f ( w i ) (5) P(w_i)=1-\sqrt{\frac{t}{f(w_i)}}\tag{5} P(wi)=1f(wi)t (5)其中 f ( w i ) f(w_i) f(wi)是单词 w i w_i wi的频率, t t t是选择的阈值,通常在 1 0 − 5 10^{-5} 105左右。我们选择这个二次抽样公式是因为它主动地对频率大于 t t t的词进行二次抽样,同时保持了频率的ranking。虽然这个二次抽样公式是启发式选择的,但我们发现它在实践中运作良好。它加快了训练速度,甚至显着提高了罕见词所学向量的准确性,如以下几节所示。

3 实证结果

在本节中,我们评估了分层Softmax,NCE,NEG和训练词的二次取样。我们使用了Mikolov等人介绍的类比推理任务。这个任务包含Germany" : "Berlin" :: "France": ?这样的类比,根据余弦距离,想解决这个问题,需要找到一个向量x使得vec(x)最接近vec("Berlin")-vec("Germany")+vec("France")(我们丢弃搜索中的输入单词)。对于这个具体的案例来说,如果x"Paris",我们可以认为它是正确答案。该任务有两大类:句法类比(如"quick: "quickly" :: "slow":"slowly")和语义类比(如国家到首都的关系)。

为了训练Skip-gram模型,我们使用了一个由各种新闻文章组成的大型数据集(内部Google数据集,有十亿字)。我们从词汇表中丢弃了在训练集中出现次数少于5的单词,最终词汇表的大小为692K。表1中列出了词类比测试集中的各种跳码模型的表现。表格显示,负采样优于类比推理任务中的分层Softmax,并且性能略好于NCE。高频词的二次采样使训练速度提高了几倍并且让word representation的准确率显著提高。

Table 1
表1:类比推理任务的各种300维Skip-gram模型的准确性。NEG- k k k代表每个positive样本的 k k k个negative样本的负采样; NCE表示Noise Contrastive Estimation/噪声对比估计,HS-Huffman代表基于频率的码的分层Softmax。

可以说,skip-gram模型的线性使它的向量更适合这样的线性类比推理。而Mikolov等的结果还表明,由于训练数据量的增长,标准sigmoidal RNN(高度非线性)所学的向量在此类任务上可以显著提高,这表明非线模型也倾向于线性结构的word representations。

4 学习短语

如前所述,许多短语的意思不仅仅是单词含义的简单组合。 要学习短语的vector representation,我们首先要找到经常一同出现但在其他语境中并不常见的单词。 例如,"New York Times""Toronto Maple Leafs"在训练集中将被独一无二的token所取代,而"this is"将保持不变。

这里写图片描述
图2:短语类比推理任务示例(完整测试集有3218个例子)。 目标是使用前三个短语计算第四个。 我们最好的模型在这个数据集上达到了72%的准确度。

这样,我们可以形成许多合理的短语,而不会大大增加词汇量的大小。理论上,我们可以使用所有的n元文法训练Skip-gram模型,但是这太消耗内存。 许多识别文本中短语的技术之前已经被开发出来了, 然而,比较它们超过了我们的工作范围。 我们决定使用一种简单的数据驱动方法,基于unigram和bigram的计数来形成短语:
s c o r e ( w i , w j ) = c o u n t ( w i w j ) − σ c o u n t ( w i ) × c o u n t ( w j ) (6) {\rm score}(w_i,w_j)=\frac{{\rm count}(w_iw_j)-\sigma}{{\rm count}(w_i)\times {\rm count}(w_j)}\tag{6} score(wi,wj)=count(wi)×count(wj)count(wiwj)σ(6) σ \sigma σ被用作折扣系数,防止形成太多由非常罕见的单词组成的短语。 得分高于所选阈值的bigram将被用作短语。 通常,我们逐渐减少阈值对训练数据进行2-4次传递,从而允许形成更长的短语(由数个单词组成)。 我们用涉及短语的新模拟推理任务来评估phrase representation的质量。 表2显示了本任务中使用的五类类比的例子。 此数据集在网络上公开提供。

4.1 Phrase Skip-Gram实验结果

从前面实验的新闻数据开始,我们首先构建了基于短语的训练语料库,然后我们使用不同的超参数训练了几个Skip-Gram模型。 如前所述,我们使用300维的向量和context size 5。该设置已经在短语数据集上实现了良好的性能,并且允许我们快速比较负采样和分层Softmax,无论是否二次采样高频token。 结果总结在表3中。

这里写图片描述
表3:短语类比数据集中Skip-gram模型的准确性。 这些模型已经从新闻数据集中接受了大约十亿字的训练。
这里写图片描述
表4:两个不同模型下,examples of the closest entities to the given short phrases
这里写图片描述
表5:使用元素加法的vector compositionality/向量合成性。 Four closest tokens to the sum of two vectors are shown, using the best Skip-gram model.

结果表明, k = 5 k = 5 k=5时负采样已经达到可靠的精度,而使用 k = 15 k = 15 k=15可以实现更好的性能。 令人惊讶的是,我们发现在没有subsampling的情况下训练分层Softmax会得到较低的性能,而我们对频繁的单词进行subsampling时它成为表现最好的方法。 这表明至少在某些情况下,subsampling可以导致更快的训练,而且可以提高精度。
为了最大化短语类比任务的准确性,我们使用约330亿字的数据集来增加训练数据的数量。 我们使用维度为1000的分层softmax和上下文的整个句子。 最终模型的精确度能达到72%。 当我们将训练数据集的大小减小到6B字时,准确度略微降低至66%,这表明大量的训练数据是至关重要的。
为了进一步深入了解不同模型表示的token的不同,我们手动检查了各种模型的低频短语的nearest neighbours。 表4显示了一个这样比较的样例。 与之前的结果一致,似乎使用了分层softmax和subsampling的模型可学到短语的最佳表示。

5 加法合成性

由Skip-gram模型学习的word and phrase representation显示了一个线性结构,从而通过简单地向量计算可以进行精确的模拟推理。 有趣的是,我们发现Skip-gram representations展现了另一种线性结构,使得有可能通过vector representation的元素级加法来有意义地组合单词。 这种现象如表5所示。
向量的加法属性可以通过检查训练目标来解释。 word vector与非线性softmax的输入呈线性关系。 由于 word vector被训练来预测句子中的周围单词,所以可以将向量视为一个单词出现在上下文的分布的表示。 这些值与输出层计算的概率成对数地相关,所以两个word vector的和与两个上下文分布的乘积有关。 该乘积在这里的作用为AND:被分配了两个有高概率word vector的单词将具有很高的概率,其他字将具有较低的概率。 因此,如果“Volga River”与“Russian”和“river”一起出现在同一句话中,这后两个的word vector总和将生成一个接近“Volga River”的vector的feature vector。

6 Comparison to Published Word Representations

(暂略。。。)

7 结论

这项工作有几个关键的贡献。 我们展示如何使用Skip-gram模型来训练单词和短语的分布式表示,并证明这些表示呈现线性结构,使准确的类比推理成为可能。 本文介绍的技术也可用于训练[8]中引入的连续的bag-of-words模型。
得益于计算效率高的模型架构,我们成功地在比之前模型的数据量高了数个数量级的数据集上进行了训练。 这导致了所学的单词和短语表示的质量有了显著的改善,特别是对于稀有的entity。 我们还发现,高频词的二次抽样导致了更快的训练速度,并且使罕见单词的表示得到了显著的提升。 我们文章的另一个贡献是subsampling算法,这是一个非常简单的训练方法,可以学习准确的表示,尤其是对于高频单词。
训练算法和超参数的选择得由具体任务决定,因为我们发现不同的问题具有不同的最优超参数配置。 在我们的实验中,影响性能的最关键的决策是模型架构的选择,向量的大小,二次采样率以及训练窗口的大小。
我们工作的一个非常有趣的结果是,使用简单的向量加法可以有意义地组合单词向量。 本文中提到的另一个表示短语的方法是,简单地用一个single token来表示短语。 这两种方法组合出了一种强大而简单的方法,用来表示更长的文本段同时具有最小的计算复杂度。 因此,我们的工作可以被看作是使用递归矩阵-向量操作来尝试表示短语的现有方法的补充[16]。
我们将实现本文技术的代码发布为了一个开源项目(即word2vec)

  • 21
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值