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

词和短语的分布表示及其构成

原作者:Tomas Mikolov等
#摘要


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

 

#1 介绍


通过分组相似的单词,在向量空间中的分布表示可以帮助学习算法在NLP任务中获得更好的表现。最早使用单词表示可以追溯到1986年(Rumelhart,Hinton和Williams)。这个想法已经被应用于统计语言建模且取得了相当大的成功。后续工作包括应用于自动语音识别和机器翻译,以及大范围的NLP任务。
最近,Mikolov等人引入了Skip-gram模型,这是一种从大量非结构化文本数据中学习高质量向量表示的有效方法。与过去大部分用于学习word vectors的神经网络架构不同,Skip-gram模型的训练(参见图1)不涉及密集矩阵的乘法。这使得训练非常高效:一个优化过的单机实现可以在一天内训练超过1000亿字。
使用神经网

了许多语言规律和模式。有点令人惊讶的是,许多这些模式可以表示为线性翻译。例如,向量计算vec("Madrid")-vec("Spain")+vec("France")的结果比任何其他word vector更接近于vec("Paris")。
Distributed Representations of Words and Phrases and their Compositionality--翻译_第1张图片
图1:Skip-gram模型架构。训练目标是学习善于预测附近单词的单词向量表示。

 

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


#2 Skip-gram模型


Skip-gram模型的训练目标是找到可用于预测句子或文档中周围的单词的单词表示。更正式地,给出训练词w1 ,w2​,w3​,...,wT​,Skip-gram模型的目标是使平均对数概率最大化:

Distributed Representations of Words and Phrases and their Compositionality--翻译_第2张图片
其中c是训练上下文(可以是中心单词ωT的一个函数)的大小。较大的c意味着更多的训练例,因此可以导致更高的准确性,同时也意味着更多的训练时间。基本Skip-gram公式使用softmax函数:

Distributed Representations of Words and Phrases and their Compositionality--翻译_第3张图片

来定义。其中Vω和V’ω​分别为ω的输入和输出向量表示,W为词汇表中的单词数。这个公式是不切实际的,因为计算的花费与W成正比,通常会达到10^5-10^7的数量级。


##2.1 分层Softmax
分层 softmax是完全softmax的计算效率近似。它首先由Morin和Bengio在神经网络语言模型的上下文中引入。它的主要优点是,不需要评估神经网络中的W个输出节点以获得概率分布,仅需要评估约log2(W)个节点
分层softmax使用二叉树表示输出层,其中W个字作为其叶,并且对于每个节点,显式地表示其子节点的相对概率。这些定义了一个可将概率分配给单词的随机游走。
 更准确地说,从一条合适的路径,可以从根结点到达每个单词w。设n(w,j)为从root到单词w的路径上的第j个节点,L(w)为该路径的长度,则n(w,1)=root以及n(w,L(w))=w。另外,对每个内节点(注:内节点/inner node为有子节点的节点),令ch(n)为n的任意固定子节点,如果x为真,则令[x]为1, 否则为-1。然后,分层softmax定义p(Wo| Wi )如下:

其中。可以证明的是。这意味着计算的消耗与L(WO)成正比,通常来说不超过logW。此外,不像Skip−gram的标准softmax公式(会把两个表示Vw和V’w分配给每个单词w),在分层softmax公式中对每个单词,有一个Vw且二叉树的每个内部节点n有一个V’n。
分层softmax使用的树结构对性能有相当大的影响。Mnih和Hinton探索了构建树结构的一些方法以及训练时间和结果模型精度的影响。在我们的工作中,我们使用一个二进制霍夫曼树,因为它将短代码分配给高频词,从而加快了训练速度。之前已经观察到,根据出现频率组合单词可以很好的作为基于神经网络的语言模型的一种简单加速技术。


##2.2 负采样
分层softmax的替代方案是噪声对比估计,由Gutmann和Hyvarinen引入,并由Mnih和Teh用于语言建模。NCE认为一个好的模型应该能够通过逻辑回归来区分数据和噪声。这类似于Collobert和Weston使用的铰链损失,他们通过对噪声上的数据进行排名来训练模型。
虽然NCE可以最大化softmax的对数概率,但是Skipgram模型只关注学习高质量的向量表示,因此只要向量表示保持其质量,我们可以随意简化NCE。我们通过以下公式定义负采样(NEG):

Distributed Representations of Words and Phrases and their Compositionality--翻译_第4张图片Distributed Representations of Words and Phrases and their Compositionality--翻译_第5张图片

 

图2:国家及其首都的1000维跳格向量的二维主成分分析投影。该图说明了模型自动组织概念并隐式学习概念之间关系的能力,因为在培训期间,我们没有提供任何关于首都意味着什么的监督信息。

 

 

 

用于替代Skip-gram中的每个logP(Wo∣Wi)项。因此,我们的任务是用逻辑回归将目标词Wo从噪声分布Pn(w)的区分开,其中每个数据样本存在k个负样本。我们的实验表明,小型训练数据集里k可以取5-20。而对于大型数据集,k可以小到2-5。负采样和NCE之间的主要区别在于,NCE需要噪声分布的样本和数值概率,而负采样仅使用样本。尽管NCE最大化了softmax的对数概率,但这个属性对我们的应用来说并不重要。
NCE和NEG均有噪声分布Pn(w)作为自由参数。我们调查了Pn(w)的一些选择,发现对于NCE和NEG的每个包括语言建模的任务来说,将一元模型分布(unigram distribution)U(w)提高到3/4的幂次方()将显著优于一元模型和均匀分布。

 

 

##2.3 高频词的二次取样
在非常大的语料库中,最常见的单词很容易就出现数亿次(例如,"in", "the"和"a")。这样的单词通常比其他低频词提供的信息值还要少。例如,对于Skip-gram来说,观察"French"和"Paris"的同时出现是有益的,但观察"French"和"the"同时出现的频率并没有什么用,因为在一个句子里几乎每个词都会频繁地和"the"同时出现。这个想法也可以反向应用: 高频词的向量表示在经过几百万个例子的训练之后并不会显著变化。
为了抵消罕见词和高频词之间的不平衡,我们使用简单的二次抽样:训练集中的每个单词Wi​将有一定概率被丢弃,概率由以下公式计算:Distributed Representations of Words and Phrases and their Compositionality--翻译_第6张图片
uploading.4e448015.gif正在上传…重新上传取消

uploading.4e448015.gif正在上传…重新上传取消Distributed Representations of Words and Phrases and their Compositionality--翻译_第7张图片
表1:类比推理任务的各种300维Skip-gram模型的准确性。NEG-k代表每个正向样本的有k个负向样本的负采样; NCE表示噪声对比估计,HS-Huffman代表基于频率的码的分层Softmax。

 

其中f(wi)是单词Wi​的频率,t是选择的阈值,通常10^-5左右。我们选择这个二次抽样公式是因为它主动地对频率大于t的词进行二次抽样,同时保持了频率的排名。虽然这个二次抽样公式是启发式选择的,但我们发现它在实践中运作良好。它加快了训练速度,甚至显着提高了罕见词所学向量的准确性,如以下几节所示。


#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。高频词的二次采样使训练速度提高了几倍并且让词表示的准确率显著提高。

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


#4 学习短语


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

Distributed Representations of Words and Phrases and their Compositionality--翻译_第8张图片

uploading.4e448015.gif正在上传…重新上传取消
图2:短语类比推理任务示例(完整测试集有3218个例子)。 目标是使用前三个短语计算第四个。 我们最好的模型在这个数据集上达到了72%的准确度。

 

这样,我们可以形成许多合理的短语,而不会大大增加词汇量的大小。理论上,我们可以使用所有的n-gram训练Skip-gram模型,但是这太消耗内存。 许多识别文本中短语的技术之前已经被开发出来了, 然而,比较它们超过了我们的工作范围。 我们决定使用一种简单的数据驱动方法,基于unigram和bigram的计数来形成短语:                              
uploading.4e448015.gif转存失败重新上传取消

σ被用作折扣系数,防止形成太多由非常罕见的单词组成的短语。 得分高于所选阈值的bigram将被用作短语。 通常,我们逐渐减少阈值对训练数据进行2-4次传递,从而允许形成更长的短语(由数个单词组成)。 我们用涉及短语的新模拟推理任务来评估的质量。 表2显示了本任务中使用的五类类比的例子。 此数据集在网络上公开提供。

 


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

 

uploading.4e448015.gif转存失败重新上传取消
表3:短语类比数据集中Skip-gram模型的准确性。 这些模型已经从新闻数据集中接受了大约十亿字的训练。


 uploading.4e448015.gif转存失败重新上传取消Distributed Representations of Words and Phrases and their Compositionality--翻译_第9张图片
表4:两个不同模型下,与给定短语最接近的实体的示例。
uploading.4e448015.gif转存失败重新上传取消
表5:使用元素加法的向量合成性。 使用最佳跳过图模型,显示了两个向量之和最近的四个标记。

结果表明,k=5时负采样已经达到可靠的精度,而使用k=15可以实现更好的性能。 令人惊讶的是,我们发现在没有subsampling的情况下训练分层Softmax会得到较低的性能,而我们对频繁的单词进行subsampling时它成为表现最好的方法。 这表明至少在某些情况下,subsampling可以导致更快的训练,而且可以提高精度。

 

 

为了最大化短语类比任务的准确性,我们使用约330亿字的数据集来增加训练数据的数量。 我们使用维度为1000的分层softmax和上下文的整个句子。 最终模型的精确度能达到72%。 当我们将训练数据集的大小减小到6B字时,准确度略微降低至66%,这表明大量的训练数据是至关重要的。
为了进一步深入了解不同模型表示的token的不同,我们手动检查了各种模型的低频短语的最相似短语。 表4显示了一个这样比较的样例。 与之前的结果一致,似乎使用了分层softmax和subsampling的模型可学到短语的最佳表示。

 

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

 

#6 与已发布的单词表示法的比较
许多以前致力于基于神经网络的单词表示的作者已经发表了他们的结果模型以供进一步使用和比较:其中最著名的作者是Collobert和Weston[2],Turian等人。[17] ,以及Mnih和Hinton[10]。我们从web3下载了他们的词向量。Mikolov等人。[8] 已经在单词类比任务中评估了这些单词表示法,其中Skip-gram模型以很大的幅度获得了最佳性能。

uploading.4e448015.gif转存失败重新上传取消

Distributed Representations of Words and Phrases and their Compositionality--翻译_第10张图片

表6:给定各种已知模型的最接近的标记示例,以及使用超过300亿个训练单词的短语训练的跳过语法模型。空单元格表示单词不在词汇表中。

 

为了更深入地了解学习向量质量的差异,我们通过在表6中显示不常用词的最近邻来提供经验比较。这些例子表明,在大型语料库上训练的大跳跃gram模型在学习表示的质量上明显优于所有其他模型。这在一定程度上可以归因于这样一个事实,即这个模型已经接受了大约300亿字的训练,这比先前工作中使用的典型大小的数据要多出大约两到三个数量级。有趣的是,尽管训练集要大得多,但是Skip-gram模型的训练时间只是先前模型架构所需时间复杂性的一小部分。

 

#7 结论


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

 

你可能感兴趣的:(文献翻译)