(30)[ICLR13] Efficient Estimation of Word Representations in Vector Space

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_37993251/article/details/88930130

计划完成深度学习入门的126篇论文第三十篇,Google的Jeffrey Dean、Greg Corrado、Tomas Mikolov发表的第一排word2vec论文,引用高达10000次,同时也是CS224nLecture1的推荐readings。源码


ABSTRACT&INTRODUCTION

摘要

我们提出了两种新的模型结构,用于从非常大的数据集计算单词的连续向量表示。这些表示的质量在单词相似性任务中进行测量,并将结果与之前基于不同类型的神经网络的最佳表现技术进行比较。我们观察大改善准确性以低得多的计算成本,即从16亿字数据集中只需要不到一天时间来学习优质词向量。此外,我们表明,这些向量提供最先进的性能测试集测量句法和语义词相似之处。

介绍

许多当前的NLP系统和技术将单词视为原子单位——单词之间不存在相似性的概念,因为这些单词被表示为词汇表中的索引。这种选择有几个很好的理由——简单、健壮性和观察到,在大量数据上训练的简单模型优于在较少数据上训练的复杂系统。一个例子是用于统计语言建模的流行的N-gram模型——今天,在几乎所有可用数据(数万亿单词[3])上训练N-gram是可能的。

然而,这些简单的技术在许多任务中都有其局限性。例如,用于自动语音识别的相关域内数据的数量是有限的——性能通常由高质量转录语音数据的大小(通常只有数百万个单词)决定。在机器翻译中,许多语言的现有语料库只包含数十亿或更少的单词。因此,在某些情况下,简单地扩大基本技术并不能取得任何重大进展,我们必须把重点放在更高级的技术上。

随着近年来机器学习技术的进步,在更大的数据集上训练更复杂的模型成为可能,而且它们通常比简单模型表现得更好。可能最成功的概念是使用单词[10]的分布式表示distributed representations。例如,基于神经网络的语言模型显著优于N-gram模型[1,27,17]。

1.1 Goals of the Paper

本文的主要目标是介绍一种可以从数十亿个单词组成的海量数据集中学习高质量单词向量的技术,这些数据集在词汇表中有数百万个单词。据我们所知,之前提出的架构都没有成功地在上进行过训练超过几亿字,具有适度维数的字向量在50 - 100之间。

我们使用最近提出的技术来测量得到的向量表示的质量,期望不仅相似的单词彼此会更接近,而且单词可以有多个相似度[20]。早前在inflectional languages的上下文中已经观察到这一点——例如,名词可以有多个单词结尾,如果我们在原始向量空间的子空间中搜索相似的单词,就有可能找到具有相似结尾的单词[13,14]。

有些令人惊讶的是,人们发现单词表示的相似性超出了简单的语法规则。使用单词偏移技术,对单词向量进行简单的代数运算,例如,vector(”King”) - vector(”Man”) + vector(”Woman”)得到的向量最接近单词Queen[20]的向量表示。

在本文中,我们试图通过开发新的模型体系结构来最大限度地提高这些向量运算的精度,以保持单词之间的线性规律。我们设计了一个新的综合测试集来测量句法和语义规则,结果表明,许多这样的规则可以被高精度地学习到。此外,我们还讨论了训练时间和精度如何依赖于单词向量的维数和训练数据量。

1.2 Previous Work

单词作为连续向量的表示有很长的历史[10,26,8]。在[1]中提出了一种非常流行的神经网络语言模型(NNLM)估计模型体系结构,采用线性投影层和非线性隐层的前馈神经网络共同学习矢量表示和统计语言模型。这项工作已被许多人效仿。

NNLM的另一个有趣的架构是在[13,14]中提出的,其中单词向量首先是使用具有单个隐含层的神经网络学习的。然后用向量这个词来训练NNLM。因此,即使不构造完整的NNLM,也可以学习单词向量。在这项工作中,我们直接扩展了这个体系结构,并只关注第一步,即使用一个简单的模型学习单词vector。

后来的研究表明,word vectors可以显著地改进和简化许多NLP应用[4,5,29]。使用不同的模型体系结构对单词向量本身进行估计,并对各种语料库进行训练[4,29,23,19,9],得到的一些单词向量可用于未来的研究和比较。然而,据我们所知,这些体系结构在训练方面的计算成本明显高于[13]中提出的体系结构,只是使用对角权矩阵[23]的特定版本的log-bilinear模型除外。

2 Model Architectures

许多不同类型的模型被用来估计单词的连续表示,包括著名的潜在语义分析Latent Semantic Analysis(LSA)和Latent Dirichlet Allocation(LDA)。在本文中,我们重点研究了神经网络学习到的单词的分布式表示,因为之前的研究表明,神经网络在保持单词之间的线性规律方面的表现明显优于LSA [20,31];此外,对于大型数据集,LDA在计算上变得非常昂贵。

与[18]类似,为了比较不同的模型体系结构,我们首先将模型的计算复杂度定义为需要访问的参数数量,以完全训练模型。接下来,我们将尝试在最小化计算复杂度的同时,最大化精度。

对于下面所有的模型,训练复杂度都是成正比的

其中E为训练周期数,T为训练集中单词数,Q为每个模型体系结构进一步定义。通常的选择是E = 3-50,T大于10亿。所有模型均采用随机梯度下降和反向传播[26]进行训练。

2.1 Feedforward Neural Net Language Model (NNLM)

在[1]中提出了概率前馈神经网络语言模型。它由输入层、投影层、隐藏层和输出层组成。在输入层,使用1-of-V编码对前面的N个单词进行编码,其中V表示单词的大小。然后使用共享的投影矩阵将输入层投影到维数为NxD的投影层P。由于在任何给定时间只有N个输入是活动的,投影层的合成是一种相对便宜的操作。

由于投影层中的值变得更深,NNLM结构使得在投影层和隐层之间的计算变得复杂。对于N = 10的常见选择,投影层(P)的大小可能是500到2000,而隐藏层的大小H通常是500到1000个单元。利用隐层计算词汇表中所有单词的概率分布,得到维数为V的输出层。因此,每个训练实例的计算复杂度为:

其中主导项是H x V。但是,提出了若干实际的解决办法来避免这种情况;要么使用softmax的分层版本[25,23,18],要么使用训练期间没有标准化的模型来完全避免标准化模型[4,9]。使用词汇表的二叉树表示,需要计算的输出单元数量可以减少到log_2(V)左右。因此,大部分的复杂性是由术语N x D x H引起的。

在我们的模型中,我们使用hierarchical softmax,其中词汇表表示为Huffman binary tree。这与之前的观察结果一致,即单词的频率对于在神经网络语言模型[16]中获取类非常有效。Huffman binary tree将短二进制代码分配给频繁的单词,这进一步减少了需要计算的输出单元的数量;平衡的二叉树需要计算log_2(V)输出,而基于Huffman binary tree的hierarchical softmax只需要大约log_2(Unigram\_perplexity(V ))。例如,当词汇量为100万个单词时,这将导致评估速度提高约两倍。虽然这对于神经网络LMs来说不是关键的加速,因为计算瓶颈是在N x D x H项,但是我们稍后将提出没有隐藏层的体系结构,从而严重依赖于softmax归一化的效率。

2.2 Recurrent Neural Net Language Model (RNNLM)

提出基于递归神经网络的语言模型是为了克服前馈神经网络的某些局限性,如需要指定上下文长度(模型N的阶数),以及理论上RNNs可以比浅层神经网络更有效地表示复杂的模式[15,2]。RNN模型没有投影层;只有输入、隐藏和输出层。这种模型的特殊之处在于使用延时连接将隐藏层连接到它自己的递归矩阵。这允许递归模型形成某种短期记忆,因为来自过去的信息可以由根据当前输入和前一个时间步骤中隐藏层的状态更新的隐藏层状态表示。

RNN模型每个训练实例的复杂度为:

word representations D与隐藏层H有相同的大小。同样的,式子H x V也能使用hierarchical softmax有效降低 H \times log_2(V)。更复杂的来源于H x H。

2.3 Parallel Training of Neural Networks

为了在海量数据集上训练模型,我们在大规模分布式框架DistBelief[6]上实现了多个模型,包括前馈神经网络模型(NNLM)和本文提出的新模型。该框架允许我们并行运行同一模型的多个副本,每个副本通过保存所有参数的集中式服务器同步其梯度更新。对于这种并行训练,我们使用小型批量异步梯度下降与自适应学习率过程称为Adagrad[7]。在此框架下,通常使用100个或多个模型副本,每个副本在数据中心的不同机器上使用多个CPU内核。

3 New Log-linear Models

在本节中,我们提出了两种新的模型体系结构,用于学习word representation的单词,以尽量降低计算复杂度。上一节主要观察到,模型的复杂性主要是由模型中的非线性隐含层引起的。虽然这就是神经网络如此吸引人的原因,但我们决定探索更简单的模型,这些模型可能不能像神经网络那样精确地表示数据,但可以在更有效的数据上进行训练。

新架构直接按照那些在我们之前提出的工作[13, 14],在那里发现神经网络语言模型可以成功地训练两个步骤:第一,连续词向量是学会使用简单的模型,然后这些分布式的n-gram NNLM是训练上表示的单词。虽然后来有大量的工作集中于学习单词向量,但我们认为[13]中提出的方法是最简单的。注意,相关的模型也在更早的时候被提出[26,8]。

3.1 Continuous Bag-of-Words Model

第一种结构类似于前馈NNLM,去掉非线性隐层,所有单词共享投影层(不只是投影矩阵);因此,所有单词都被投影到相同的位置(它们的向量取平均值)。我们称这个架构为单词包模型,因为历史上单词的顺序并不影响投影。此外,我们也使用将来时的词;我们通过在输入端建立一个包含四个将来词和四个历史词的对数线性分类器,得到了下一节所介绍任务的最佳性能,训练准则是正确分类当前(中间)词。那么训练复杂度

我们将这个模型进一步表示为CBOW,因为它不像标准的单词袋模型,它使用上下文的连续分布式表示。模型架构如图1所示。注意,输入层和投影层之间的权重矩阵以与NNLM中相同的方式共享所有单词位置。

3.2 Continuous Skip-gram Model

第二种体系结构类似于CBOW,但是它没有根据上下文预测当前的单词,而是试图根据同一句话中的另一个单词最大限度地对单词进行分类。更精确地说,我们将每个当前单词作为一个连续投影层的对数线性分类器的输入,并在当前单词前后预测一定范围内的单词。我们发现,增加范围可以提高结果字向量的质量,但也增加了计算复杂度。由于距离较远的单词与当前单词的关联通常比与当前单词较近的单词要小,所以我们在训练示例中对这些单词的采样较少,从而对距离较远的单词的权重较小。

该体系结构的训练复杂度:

其中C为单词的最大距离。因此,如果我们选择C = 5,对于每个训练单词,我们将在范围< 1; C >内选择一个随机数R,然后从历史数据和R个单词(来源于未来的单词作为正确的标签)。这将要求我们做R×2个单词的分类,以当前单词作为输入,每个R + R单词作为输出。在接下来的实验中,我们使用C = 10。

4 Results

为了比较不同版本的词向量的质量,以前的论文通常使用一个表来显示示例词及其最相似的词,并直观地理解它们。虽然很容易看出,单词France与Italy以及其他一些国家相似,但在进行更复杂的相似任务时,对这些向量进行处理要困难得多,如下所示。我们遵循之前的观察,单词之间可以有很多不同类型的相似之处,例如,单词big与bigger在相同的意义上相似,small与small相似。另一种类型的关系的例子可以是单词对big - large和small - small[20]。我们进一步将两对关系相同的单词表示为一个问句,我们可以这样问:什么单词在与small相同的意义上与large相似?

有些令人惊讶的是,这些问题可以通过对单词的向量表示进行简单的代数运算来回答。要找到一个与small在相同意义上相似的单词,就像large与big相似一样,我们可以简单地计算vector X = vector("biggest")-vector("big")+vector("small")。然后,我们在向量空间中搜索由余弦距离度量的最接近X的单词,并将其用作问题的答案(在搜索过程中,我们丢弃了输入的问题单词)。当单词向量经过良好的训练后,就可以使用这种方法找到正确的答案(单词最小)。

最后,我们发现,当我们训练高维向量在大量数据,生成的向量可以用来回答非常微妙的词与词之间的语义关系,如一个城市和它属于国家,如法国和德国柏林巴黎。具有这种语义关系的词向量可以用于改善许多现有的NLP应用,如机器翻译、信息检索和问题回答系统,并可能使其他未来的应用尚待发明。

4.1 Task Description

为了测量词向量的质量,我们定义了一个包含五类语义问题和九类句法问题的综合测试集。表1显示了每个类别中的两个示例。总共有8869个语义问题和10675个句法问题。每个类别中的问题都是通过两个步骤创建的:首先,手动创建类似的单词对列表。然后,通过连接两个单词对形成一个大的问题列表。例如,我们列出了68个美国大城市及其所属的州,通过随机抽取两对单词组成了大约2.5K个问题。我们在测试集中只包含单个token words,因此不存在多词实体(如New York)。

我们评估了所有问题类型的总体准确性,以及每种问题类型(语义、句法)的总体准确性。只有当使用上述方法计算的向量与问题中正确的单词完全相同时,才假定问题得到正确答案;同义词因此被视为错误。这也意味着达到100%的准确率是不可能的,因为目前的模型没有任何关于单词形态学的输入信息。但是,我们认为单词向量在某些应用中的有用性应该与这个精度度量正相关。进一步的进步可以通过合并有关单词结构的信息来实现,尤其是在句法问题上。

4.2 Maximization of Accuracy

我们使用了一个谷歌新闻语料库来训练单词向量。这个语料库包含大约6B tokens。我们将词汇量限制在100万个最常出现的单词。显然,我们面临着时间约束的优化问题,可以预期,使用更多的数据和更高维度的词向量都将提高精度。为了评估模型体系结构的最佳选择,以便快速获得尽可能好的结果,我们首先评估了基于训练数据子集的训练模型,词汇表限制在最频繁的30k单词。使用不同矢量维数选择和训练数据量增加的CBOW体系结构的结果如表2所示。

可以看出,在某个点之后,添加更多的维度或添加更多的培训数据提供的改进越来越少。因此,我们必须同时增加向量维数和训练数据量。虽然这个观察结果可能看起来微不足道,但必须指出,目前流行的方法是在相对较大的数据量上训练单词向量,但是没有足够的大小(例如50 - 100)。如式4所示,两次增加训练数据量,计算复杂度的增加与两次增加向量大小相同。

对于表2和表4所示的实验,我们使用了三个具有随机梯度下降和反向传播的训练时点。我们选择初始学习速率为0.025,并将其线性降低,使其在最后一个训练周期结束时趋近于零。

4.3 Comparison of Model Architectures

首先,我们比较了使用相同的训练数据和相同的640个字向量的维数来得到字向量的不同模型结构。在进一步的实验中,我们在新的语义-句法词关系测试集中使用了全套问题,即不受限于30k词汇量。我们还包括了[20]中引入的一个测试集的结果,该测试集中于word3之间的语法相似性。

训练数据由几个LDC语料库组成,详细描述为[18](320m words, 82K vocabulary)。我们使用这些数据与之前训练的递归神经网络语言模型进行了比较,该模型在单个CPU上训练大约需要8周。我们训练前馈NNLM相同数量的640隐藏单位使用DistBelief并行训练[6],之前使用的历史8字(因此,比RNNLM NNLM有更多的参数,随着投影层大小640 8)。

在表3中可以看出,RNN的词向量(如用于[20])上主要表现良好的语法问题。NNLM向量的性能明显优于RNN——这并不奇怪,因为RNNLM中的单词向量直接连接到非线性隐藏层。CBOW体系结构在语法任务上比NNLM工作得更好,在语义任务上也差不多。最后,与CBOW模型相比,Skip-gram体系结构在语法任务上的表现稍差(但仍然比NNLM好),在测试的语义部分也比其他所有模型好得多。

接下来,我们评估仅使用一个CPU训练的模型,并将结果与公开可用的单词向量进行比较。比较见表4。对CBOW模型进行子集训练的谷歌的新闻数据在一天左右,而训练时间为跳跃图模型为三天左右。

对于进一步报道的实验,我们只使用了一个训练周期(同样,我们线性地降低学习率,使其在训练结束时趋近于零)。使用一个epoch在两倍的数据上训练一个模型,与在三个epoch中迭代相同的数据相比,可以得到类似或更好的结果,如表5所示,并且提供了额外的小加速。

4.4 Large Scale Parallel Training of Models

如前所述,我们已经在分布式框架中实现了各种模型,称为DistBelief。下面我们报告了在谷歌News 6B数据集上训练的几个模型的结果,这些模型使用了小型批量异步梯度下降和称为Adagrad[7]的自适应学习速率过程。我们在训练中使用了50到100个模型副本。CPU核数为估计由于数据中心计算机与其他生产任务共享,使用情况可能会有相当大的波动。注意,由于分布式框架的开销,CBOW模型和Skip-gram模型的CPU使用比它们的单机实现更加接近。结果见表6。

4.5 Microsoft Research Sentence Completion Challenge

Microsoft语句完成挑战最近被引入,作为推进语言建模和其他NLP技术[32]的一项任务。这个任务由1040个句子组成,每个句子中缺少一个单词,目标是选择与句子其余部分最连贯的单词,给出五个合理的选择。在这一集上已经报道了几种技术的性能,包括N-gram模型、基于lsa的模型[32]、log-双线性模型[24],以及目前在这一基准[19]上保持55.4%精度的递归神经网络的组合。

我们已经探讨了跳跃图架构在此任务上的性能。首先,我们用[32]提供的50M单词训练640维模型。然后,我们使用输入的未知单词来计算测试集中每个句子的得分,并预测一个句子中所有的周围单词。最后的句子分数是这些预测的总和。使用句子得分,我们选择最有可能的句子。

表7简要总结了一些以前的结果和新的结果。而Skip-gram模型本身不执行这个任务比LSA相似,这个模型的分数与RNNLMs互补获得的分数,和加权组合会导致一个新的先进的结果58.9%的准确率(59.2%开发设置的一部分,58.7%测试集的一部分)。

5 Examples of the Learned Relationships

表8显示了遵循各种关系的单词。我们遵循上面描述的方法:通过减去两个单词向量来定义关系,然后将结果添加到另一个单词中。例如,巴黎-法国+意大利=罗马。可以看出,精确度是相当不错的,尽管显然还有很大的改进空间(请注意使用我们的精确度度量,假设精确匹配,表8中的结果只会得到大约60%)。我们相信,在更大的数据集和更大的维数上训练的字向量将表现得更好,并将使开发新的创新应用程序成为可能。提高精确度的另一种方法是提供关系的多个示例。通过使用十个例子而不是一个例子来形成关系向量(我们将单个向量平均在一起),我们发现在语义-句法测试中,我们的最佳模型的准确性绝对提高了约10%。

也可以应用向量运算来解决不同的任务。例如,通过计算单词列表的平均向量,并找到最遥远的单词向量,我们发现了选择列表外单词的良好准确性。这是某些人类智力测试中常见的问题。显然,使用这些技术仍有许多发现有待发现。

6 Conclusion

在本文中,我们研究了在一系列句法和语义语言任务上,由各种模型导出的单词向量表示的质量。我们观察到,与流行的神经网络模型(包括前馈和递归)相比,使用非常简单的模型结构训练高质量的字向量是可能的。由于更低的计算复杂度,可以计算非常准确的高维向量”一词从一个更大的数据集,使用DistBelief分布式框架,可以训练CBOW甚至Skip-gram模型在全集一万亿字,基本上无限的词汇量的大小。这比之前发表的同类模型的最佳结果高出几个数量级。

一个有趣的任务是SemEval-2012 task 2[11],在这个任务中,向量这个词最近被证明明显优于先前的技术水平。将公共可用的RNN向量与其他技术相结合,使斯皮尔曼秩相关比之前的最佳结果[31]提高了50%以上。基于神经网络的词向量已经被应用于许多其他的NLP任务中,例如情绪分析[12]和释义检测[28]。可以预期,这些应用程序可以从本文描述的模型体系结构中获益。

我们正在进行的工作表明,词向量可以成功地应用于知识库中事实的自动扩展,以及对现有事实正确性的验证。机器翻译实验的结果也很有希望。在将来,将我们的技术与潜在关系分析[30]和其他技术进行比较也会很有趣。我们相信我们的综合测试集将有助于研究社区改进现有的词向量估计技术。我们还期望高质量的字向量将成为未来NLP应用的一个重要组成部分。

7 Follow-Up Work

在编写了本文的初始版本之后,我们发布了用于计算单词向量的单机多线程c++代码,它使用连续的单词包和跳跃图架构。训练速度显著高于本文之前的报道,即对于典型的超参数选择,训练速度为每小时数十亿个单词。我们还发布了140多万个向量,它们代表命名的实体,训练了超过1000亿个单词。我们的一些后续工作将在NIPS 2013年即将发表的论文[21]中发表。

猜你喜欢

转载自blog.csdn.net/weixin_37993251/article/details/88930130