Efficient Estimation of Word Representations in Vector Space

1.1 Goals of Paper

本文的主要目标是介绍一些技术,这些技术可用于从包含数十亿个单词的庞大数据集中学习高质量的单词向量,并在词汇表中包含数百万个单词。据我们所知,之前提出的架构中没有一个能够成功地训练超过数亿个单词,单词向量的维数在50-100之间。

我们使用最近提出的技术来测量结果向量表示的质量,期望不仅相似的单词彼此接近,而且单词可以具有多个相似度[20]。这在之前的屈折变化语言中已经观察到了——例如,名词可以有多个词尾,如果我们在原始向量空间的子空间中搜索相似的词,就有可能找到具有相似词尾的词[13,14]。

有点令人惊讶的是,人们发现词语表达的相似性超出了简单的句法规则。使用在字向量上形成简单代数运算的字偏移技术,例如显示向量(“国王”)-向量(“男人”)+向量(“女人”)产生的向量最接近字皇后的向量表示[20]。

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

1.2 Previous Work

将单词表示为连续向量有着悠久的历史[10,26,8]。文献[1]中提出了一种非常流行的估计神经网络语言模型(NNLM)的模型结构,其中使用具有线性投影层和非线性隐藏层的前馈神经网络联合学习单词向量表示和统计语言模型。这项工作之后还有许多其他工作。

[13,14]中介绍了NNLM的另一个有趣架构,其中首先使用具有单个隐藏层的神经网络学习单词向量。然后使用字向量训练NNLM。因此,即使不构建完整的NNLM,也可以学习单词向量。在这项工作中,我们直接扩展了这个体系结构,重点放在第一步,即使用简单的模型学习单词向量。

后来的研究表明,字向量可用于显著改进和简化许多NLP应用程序[4,5,29]。使用不同的模型架构对词向量本身进行评估,并在不同的语料库上进行训练[4,29,23,19,9],得到的一些词向量可用于未来的研究和比较2。然而,据我们所知,这些架构的训练计算成本明显高于[13]中提出的架构,但使用对角权重矩阵的对数双线性模型的某些版本除外[23]。

2 Model Architectures

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

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

对于以下所有模型,训练复杂度为:O = E × T × Q

其中,E是training_epoch的数量,T是训练集中的单词数目,Q是为每个模型架构进一步定义的。通常的选择是E=3− 50,T最多10亿。所有模型都使用随机梯度下降和反向传播进行训练[26]。

2.1 Feedforward Neural Net Language Model (NNLM)

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

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

Q = N × D + N × D × H + H × V, (2)

其中主导项为H×V。然而,为了避免这种情况,提出了几种切实可行的解决办法;要么使用softmax的分层版本[25,23,18],要么通过使用在培训期间未标准化的模型完全避免标准化模型[4,9]。通过词汇表的二叉树表示,需要计算的输出单元的数量可以降到log2(V)左右。因此,大部分复杂性是由N×D×H项引起的。

在我们的模型中,我们使用分层softmax,其中词汇表表示为哈夫曼二叉树。这遵循了之前的观察结果,即单词的频率对于获得神经网络语言模型中的类非常有效[16]。哈夫曼树将短二进制代码分配给频繁的字,这进一步减少了需要评估的输出单元的数量:虽然平衡二叉树需要评估log2(V)输出,但基于哈夫曼树的分层softmax只需要大约log2(单格复杂度(V))。例如,当词汇量为一百万个单词时,这将导致评估速度提高约两倍。虽然这对于神经网络LMs来说不是关键的加速,因为计算瓶颈在N×D×H项中,但我们稍后将提出没有隐藏层的架构,因此严重依赖于softmax规范化的效率。

2.2 Recurrent Neural Net Language Model (RNNLM)

提出了基于递归神经网络的语言模型,以克服前馈NNLM的某些限制,例如需要指定上下文长度(模型N的顺序),并且因为理论上RNN可以有效地表示比浅层神经网络更复杂的模式[15,2]。RNN模型没有投影层;仅输入、隐藏和输出层。这种模型的特殊之处在于使用延时连接将隐藏层连接到自身的递归矩阵。这使得递归模型能够形成某种短期记忆,因为过去的信息可以由隐藏层状态表示,该状态根据当前输入和上一时间步中隐藏层的状态进行更新。

RNN模型的每个训练示例的复杂性为

Q = H × H + H × V,

其中,单词表示D具有与隐藏层H相同的维度。同样,通过使用分层softmax,可以有效地将术语H×V减少到H×log2(V)。然后,大部分复杂性来自H×H。

2.3 Parallel Training of Neural Networks

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

3 New Log-linear Models

在本节中,我们提出了两种新的模型架构,用于学习单词的分布式表示,以尽量减少计算复杂性。上一节的主要观察结果是,大多数复杂性是由模型中的非线性隐藏层引起的。虽然这正是神经网络如此吸引人的原因,但我们决定探索更简单的模型,这些模型可能无法像神经网络那样精确地表示数据,但可能可以在更有效的数据上进行训练。

新的体系结构直接遵循了我们早期工作[13,14]中提出的体系结构,我们发现神经网络语言模型可以通过两个步骤成功训练:首先,使用简单模型学习连续词向量,然后在这些词的分布表示上训练N-gram NNLM。虽然后来有大量的工作集中于学习单词向量,但我们认为在[13 ]中提出的方法是最简单的。请注意,相关模型的提出也早得多[26,8]。

3.1 Continuous Bag-of-Words Model

第一个提出的架构类似于前馈NNLM,其中非线性隐藏层被移除,投影层被所有单词共享(不仅仅是投影矩阵);因此,所有单词都被投影到相同的位置(它们的向量被平均)。我们称这种结构为单词袋模型(bag-of-words model),因为历史上的文字顺序不影响投影。此外,我们还使用来自未来的词语;在下一节介绍的任务中,我们通过构建一个对数线性分类器,输入四个未来单词和四个历史单词,从而获得了最佳性能,其中训练标准是正确分类当前(中间)单词。训练的复杂性也随之增加

Q = N × D + D × log2(V ). 我们将该模型进一步表示为CBOW,因为与标准单词袋模型不同,它使用上下文的连续分布式表示。模型架构如图1所示。请注意,输入层和投影层之间的权重矩阵对于所有单词位置是共享的,方式与NNLM中相同。

CBOW体系结构根据上下文预测当前单词,Skip gram根据当前单词预测周围单词。

3.2 Continuous Skip-gram Model

第二种架构类似于CBOW,但它不是根据上下文预测当前单词,而是尝试根据同一句子中的另一个单词最大限度地对单词进行分类。更准确地说,我们使用每个当前单词作为具有连续投影层的对数线性分类器的输入,并在当前单词前后预测一定范围内的单词。我们发现,增加范围可以提高结果词向量的质量,但也会增加计算复杂度。由于距离较远的单词通常与当前单词的相关性小于与当前单词的相关性,因此我们通过在训练示例中从这些单词中取样较少,从而减少了距离较远单词的权重。

此体系结构的训练复杂性为:

Q = C × (D + D × log2(V )),

其中C是单词的最大距离。因此,如果我们选择C=5,对于每个训练词,我们将随机选择的数字R在范围,然后使用历史和R从将来的单词中选择当前单词作为正确的标签。这将要求我们进行R×2单词分类,以当前单词作为输入,每个R+R单词作为输出。在下面的实验中,我们使用C=10。

4 Results

为了比较不同版本的词向量的质量,以前的论文通常使用一个表格来显示示例词及其最相似的词,并直观地理解它们。尽管很容易证明“法国”一词与意大利和其他一些国家相似,但在更复杂的相似性任务中使用这些向量时,难度要大得多,如下所示。我们遵循之前的观察,单词之间可能有许多不同类型的相似性,例如,单词big类似于biger,在同样的意义上,small类似于small。另一种类型的关系可以是单词对大-最大和小-最小[20]。我们进一步将两对具有相同关系的单词表示为一个问题,因为我们可以问:“在与最大相似的意义上,与小相似的单词是什么?”

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

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

4.1 Task Description

为了衡量词向量的质量,我们定义了一个综合测试集,其中包含五种类型的语义问题和九种类型的句法问题。表1显示了每个类别的两个示例。总的来说,共有8869个语义问题和10675个语法问题。每个类别中的问题分两步创建:首先,手动创建一个相似单词对列表。然后,通过连接两个词对形成一个大的问题列表。例如,我们列出了68个美国大城市和它们所属的州,并通过随机挑选两个词对形成了大约2.5万个问题。我们在测试集中只包含了单个标记字,因此不存在多字实体(如纽约)。

我们评估所有问题类型的总体准确性,并分别评估每种问题类型(语义、句法)的总体准确性。仅当使用上述方法计算的向量最近的单词与问题中的正确单词完全相同时,才假设问题得到正确回答;因此,同义词被视为错误。这也意味着要达到100%的准确率是不可能的,因为当前的模型没有任何关于词形的输入信息。然而,我们相信单词向量在某些应用中的有用性应该和这个准确度指标正相关。进一步的进展可以通过加入关于单词结构的信息来实现,特别是对于句法问题。

4.2 Maximization of Accuracy

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

可以看出,在某一点之后,添加更多维度或添加更多训练数据会带来越来越小的改进。因此,我们必须同时增加向量维数和训练数据量。虽然这一观察结果似乎微不足道,但必须注意的是,目前流行在相对大量的数据上训练单词向量,但大小不够(例如50-100)。给定等式4,将训练数据量增加两倍会导致计算复杂度的增加,这与将向量大小增加两倍几乎相同。

对于表2和表4中报告的实验,我们使用了三个具有随机梯度下降和反向传播的训练阶段。我们选择起始学习率0.025,并线性降低,以便在最后一次训练结束时接近零。

4.3 Comparison of Model Architectures

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

训练数据由几个LDC语料库组成,在[18]中有详细描述(3200万字,82K词汇)。我们使用这些数据与以前训练的递归神经网络语言模型进行比较,该模型在单个CPU上训练约8周。我们使用distbelt并行训练[6],使用8个先前单词的历史,训练了具有相同数量的640个隐藏单元的前馈NNLM(因此,NNLM的参数比RNNLM多,因为投影层的大小为640×8)。

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

接下来,我们评估了仅使用一个CPU训练的模型,并将结果与公开可用的字向量进行比较。表4给出了比较。CBOW模型在子集上进行了训练谷歌新闻数据的更新大约需要一天的时间,而Skip-gram模型的训练时间大约是三天。

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

4.4 Large Scale Parallel Training of Models

如前所述,我们在一个名为Dis-tBelief的分布式框架中实现了各种模型。下面我们报告了在Google News 6B数据集上训练的几个模型的结果,这些模型采用了小批量异步梯度下降和称为Ada-grad的自适应学习率程序[7]。在训练期间,我们使用了50到100个模型副本。CPU核心的数量是估计的,因为数据中心机器与其他生产任务共享,并且使用率可能会有很大的波动。请注意,由于分布式框架的开销,CBOW模型和Skip-gram模型的CPU使用率比它们的单机实现更接近。结果见表6。

4.5 Microsoft Research Sentence Completion Challenge

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

我们探讨了Skip-gram体系结构在这项任务中的性能。首先,我们在[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

在本文中,我们研究了在一系列句法和语义语言任务中,由各种模型导出的词的向量表示的质量。我们观察到,与流行的神经网络模型(前馈和递归)相比,使用非常简单的模型结构(去掉非线性的隐藏层)可以训练高质量的词向量。由于计算复杂度要低得多,因此可以从更大的数据集中计算非常精确的高维字向量。使用分布式框架,应该可以训练CBOW和Skip GRAM模型,即使是在有1万亿单词的语料库上,因为词汇的大小基本上是无限的。这比之前公布的同类模型的最佳结果要大几个数量级。

SemEval-2012任务2[11]是一项有趣的任务,最近已证明单词向量的性能显著优于先前的最新水平。公开可用的RNN向量与其他技术一起使用,使Spearman的等级相关性比之前的最佳结果提高了50%以上[31]。基于神经网络的词向量以前曾应用于许多其他NLP任务,例如情感分析[12]和释义检测[28]。可以预期,这些应用程序可以从本文描述的模型体系结构中获益。

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

7 Follow-Up Work 在本文的初始版本被写入后,我们使用单机多线程C++代码来计算单词向量,同时使用连续的单词袋和跳过的Grace-语篇。训练速度明显高于本文前面的报道,即对于典型的超参数选择,训练速度大约为每小时数十亿个单词。我们还发布了140多万个表示命名实体的向量,这些向量经过1000多亿个单词的训练。我们的一些后续工作将发表在即将出版的2013年NIPS论文[21]中。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值