**
摘要
**
论文提出了两种新的模型架构——CBOW, skip-gram,用于从非常大的数据集中计算单词的连续向量表示。在单词相似性任务中测量这些表征的质量,并且将结果与先前表现最佳的基于不同类型的神经网络技术进行比较。我们观察到,在低得多的计算成本下,准确度有了很大的提高。而且,这些向量为测试集提供了最好的性能,用于测量句法和语义词的相似性。
**
1. 简介:
**
当前很多自然语言处理系统和技术将单词视为原子单位——单词之间没有相似性的概念,因为它们在词汇表中都被表示为索引。这样做有几个很好的原因——简单性、健壮性,以及观察到在大量数据上训练的简单模型优于在较少数据上训练的复杂模型系统。一个例子是用于统计语言建模的比较流行的N-gram模型——今天,可以在几乎所有可用的数据(万亿字)上训练N-gram。
然而,简单的技术在许多任务中都有其局限性。例如,用于自动语音识别的相关领域内数据的数量是有限的——性能通常由高质量转录语音数据的大小(通常只有数百万字)决定。在机器翻译中,许多语言的现有语料库只包含几十亿或更少的单词。因此,在某些情况下,简单地扩大基本技术的规模不会带来任何显著的进步,我们必须关注更先进的技术。
随着近年来机器学习技术的进步,在更大的数据集上训练更复杂的模型已经成为可能,并且它们通常优于简单模型。也许最成功的概念是使用单词的分布式表示。例如,基于神经网络的语言模型明显优于N-gram模型。
1.1 论文的目标
本论文的主要目标是引进一种可以从有几十亿和数百万单词的庞大数据集中学习到高质量的词向量的技术。之前提出的架构都没有成功地训练过超过数亿个单词,单词向量的维数在50 - 100之间。
论文使用最近提出的技术来测量词向量表示的质量,还希望相似的单词可以彼此靠近,而且单词直接可以有不同程度的相似度(degree of similar)。这已经在早期的屈折语言中观察到——例如,名词可以有多个词尾,如果我们在原始向量空间的子空间中搜索相似的词,就有可能找到词尾相似的词[13,14]。
论文发现词表征的相似性超出了简单的句法规律。使用单词偏移技术(word offset technique)对单词向量进行简单的代数运算,例如,vector(“King”)- vector(“Man”)+ vector(“Woman”)得到一个最接近单词Queen的向量表示的向量。
开发新的模型架构来保持单词之间的线性规律,以最大限度地提高这些向量运算的准确性。我们设计了一个新的综合测试集来衡量语法和语义规则,并表明许多这样的规则可以学习的高精度。此外,我们讨论了训练时间和准确性如何依赖于字向量的维数和训练数据的数量。
论文试图用新的模型来维持单词之间的线性规律,以最大限度地提高这些向量运算的准确性。论文设计了一个综合试集来衡量语法和语义规则。而且这些规则可以学习得很好,另外,我们讨论了训练时间和准确率与词向量的维度和训练数据数量之间的关系。
**
1.2 先前的工作
**
将单词表示为连续向量表示已经有很长的历史了,提出了一个用来评估神经网络语言模型(NNLM)的流行框架,该框架使用了前馈神经网络,有一个线性投影层和一个非线性隐藏层,用来学习词向量表示和统计语言模型。
NNLM的另一个框架中,词向量是使用带有单个隐藏层的网络学到的,这些词向量用来训练NNLM,而且不需要构建整个NNLM就可以学习到,在这个工作中,我们扩展了这个结构,并且关注于使用简单模型获得词向量。
后来发现词向量可以简化和提高一些NLP应用。使用不同的模型架构对词向量本身进行估计,并在不同的语料库上进行训练,得到的部分词向量可用于将来的研究和比较。但是,据目前所知,这些模型的训练代成本还是比较大的。
2. 模型结构
用来估计词的连续表示的模型有很多,比如潜在语义分析(Latent Semantic Analysis,LSA),潜在狄雷特分布(Latent Dirichlet Allocation,LDA),论文中主要关注由神经网络获得的词向量。 因为之前已经表明,在保留单词之间的线性规律方面,神经网络的表现明显优于潜在语义分析(Latent Semantic Analysis,LSA)。此外,潜在狄雷特分布(Latent Dirichlet Allocation,LDA)在大型数据集上的计算开销非常大。
比较模型的差异,首先是计算复杂度(训练模型所需要的参数),然后是最大化正确率,同时最小化计算复杂度。
下面所有的模型的训练复杂度是:
O = E × T × Q , (1)
其中E是模型epochs次数,T是训练集中单词的个数,Q:根据模型结构而定(多是根据模型的参数进行定义)。
通常E:3-50;Q:高达10亿;所有模型都用随机梯度下降法和反向传播算法训练。
2.1 前馈神经网络语言模型(NNLM)
概率前馈神经网络语言模型由输入层、投影层、隐藏层和输出层组成。在输入层,前面的N个单词使用1-of-V编码,其中V为词汇表的大小。然后使用共享的投影矩阵将输入层投影到维数N×D的投影层Ρ。由于在任何给定时间只有N个输入有效,所以合成投影层是一个性价比相对较高的操作。
由于投影层中的值很密集,NNLM结构中投影层和隐藏层之间的计算变得复杂。对于N = 10的常见选择,投影层Ρ的大小可以是500到2000,而隐藏层Η的大小通常是500到1000个单位。此外,隐藏层用于计算词汇中所有单词的概率分布,从而产生维度为V的输出层。因此,每个训练示例的计算复杂度为:
Q = N × D + N × D × H + H × V, (2)
其中主导项是H × V。然而,为了解决这个问题,提出了几种实用的解决方案;要么使用softmax的分层版本,要么通过完全使用训练期间未标准化的模型避免归一化。用二叉树表示词汇,需要评估的输出单元的数量可以下降到log2(V)左右。因此大部分计算复杂性主要在于N × D × H项。
论文中的模型使用分层softmax,为霍夫曼Huffman二叉树表示词汇。这遵循了之前的观察,即词频对于在神经网络语言模型中获得类很有效。霍夫曼树为频繁出现的单词分配短的二进制代码,这进一步减少了需要评估的输出单元的数量:虽然平衡二叉树需要评估log2(V)输出,但是基于霍夫曼树的分层softmax只需要大约log2(U nigram perplexity(V ))。例如,当词汇量为一百万个单词时,这将导致评估速度提高两倍。这对于神经网络LMs来说并不是关键的加速,因为计算瓶颈在N × D × H项。但我们稍后将提出没有隐藏层的架构,因此严重依赖于softmax规范化的效率。
2.2 循环神经网络语言模型(RNNLM)
为了解决前馈NNLM的某些局限,提出了基于循环神经网络的语言模型,例如需要指定上下文长度(模型N的阶数),因为理论上循环神经网络可以比浅层神经网络更有效地表示更复杂的模式。RNN模型没有投影层;仅输入层、隐藏层和输出层。这种模型的特别之处在于使用延时连接将隐藏层连接到自身的循环矩阵。这允许循环模型形成某种短期记忆,因为来自过去的信息可以由隐藏层状态来表示,该隐藏层状态基于当前输入和隐藏层在前一时间步的状态来更新。
RNN模型的每个训练示例的复杂性为:
Q = H × H + H × V, (3)
其中单词表示D具有与隐藏层H相同的维数。同样,H × V项可以通过使用softmax有效地减少到H × log2(V)。大部分的计算复杂性来自于H × H。
2.3 神经网络的并行训练
为了在海量数据集上训练模型,我们在名为DistBelief的大规模分布式框架上实现了多个模型,包括前馈NNLM和作者提出的新模型。该框架允许同时运行同一模型的多个副本,每个副本通过一个中央服务器同步其梯度更新,该服务器保存所有参数。在这个并行训练中,我们使用了一个名为Adagrad的自适应学习率程序,即mini-batch异步梯度下降。在这种框架下,通常使用100多个模型副本,每个模型副本使用数据中心中不同机器上的多个CPU核。
3. 新的对数线性(log-linear)模型
作者提出了两种新的模型来学习单词的分布式表示,并且最小化计算复杂度。模型的复杂性主要在于非线性隐藏层。虽然这是神经网络具有魅力的原因。
探索的简单模型:
缺点:不能像神经网络那样精确地表示数据;
优点:更有效地对数据进行训练。
神经网络语言模型训练步骤:
1) 使用简单模型学习连续的单词向量;
2) 在这些单词的分布式表示的基础上训练N-gram NNLM。
3.1 CBOW model
结构:类似于前馈NNLM,去除了非线性隐藏层,并且所有字共享投影层(不仅仅是投影矩阵);因此,所有的单词被投影到相同的位置(它们的向量被平均)。我们称这种架构为bag-of-words模型,因为之前的单词的顺序不会影响投影。此外,我们还使用后面的词汇。
训练复杂度为:
Q = N × D + D × log2(V) (4)
与标准的bag-of-words模型不同,它使用了上下文的连续分布式表示。模型架构如图1所示。输入层和投影层之间的权重矩阵是以与NNLM相同的方式被所有单词位置共享的。
3.2 Continuous skip-gram model
Skip-gram模型,类似于CBOW,但是它不是基于上下文预测当前单词,而是试图基于同一句子中的另一个单词得到单词的最大化分类。更准确地说,我们使用每个当前单词作为具有连续投影层的对数线性分类器的输入,并预测当前单词前后一定范围内的单词。我们发现增加范围提高了得到的词向量的质量,但也增加了计算复杂度。由于距离较远的单词通常比距离较近的单词与当前单词的关系更小,因此我们在训练示例中通过从这些单词中抽取较少的样本来降低距离较远的单词的权重
这种体系结构的训练复杂度与下式成正比:
Q = C × (D +D × log2(V) ) (5)
其中,C是单词的最大距离。因此,如果我们选择C = 5,对于每个训练单词,我们将随机选择一个范围在1~ C之间的数字R,然后使用当前词的前后R个单词作为正确的标签。这要求我们做R × 2 单词分类,用当前词作为输入,其前后各R个单词作为输出。在下面的实验中,我们使用C = 10。
补充知识点:
词向量最简单的方式是1-of-N的one-hot方式。,也就是从很大的词库corpus里选V个频率最高的词(忽略其他的) ,V一般比较大,比如V = 10W,固定这些词的顺序,然后每个词就可以用一个V维的稀疏向量表示了,这个向量只有一个位置的元素是1,其他位置的元素都是0。One hot方式其实就是简单的直接映射,所以缺点也很明显,维数很大,也没啥计算上的意义。
在上图中,
1、Input layer输出层:是上下文单词的one hot。假设单词向量空间的维度为V,即整个词库corpus大小为V,上下文单词窗口的大小为C。
2、假设最终词向量的维度大小为N,则图中的权值共享矩阵为W。W的大小为V∗N,并且初始化。
3、假设语料中有一句话"我爱你"。如果我们现在关注"爱"这个词,令C=2,则其上下文为"我",“你”。模型把"我" "你"的one-hot形式作为输入。易知其大小为V1 。C个 V1大小的向量分别跟同一个V∗N大小的权值共享矩阵W相乘,得到的是C个 N1大小的隐层hidden layer。
4.C个N1大小的hidden layer取平均,得到一个N1大小的向量,即图中的Hidden layer。
5.输出权重矩阵W’为N∗V,并进行相应的初始化工作。
6.将得到的Hidden layer向量 N1与’相乘,并且用softmax处理,得到V 1的向量,此向量的每一维代表corpus中的一个单词。概率中最大的index所代表的单词为预测出的中间词。
7.与groud truth中的one hot比较,求loss function的极小值。
具体计算过程为:
从input -> hidden: WT ∗ x 其中W为VN矩阵,x为V * 1向量,最终隐藏层的结果为 N * 1。
从hidden -> output: W’T * x ,其中W’为N∗V矩阵,x为隐藏层得出的结果,为N ∗ 1的向量。最终结果为V * 1。
4. 结果
为了比较不同版本的词向量的质量,以前的论文通常使用一个表格来显示示例单词和与它们最相似的单词,并直观地理解它们。虽然很容易看出“法国”这个词与“意大利”或者其他一些国家相似,但是在进行更复杂的相似性任务时,这就更具挑战性了,如下所示。我们遵循先前的观察,即单词之间可能有许多不同类型的相似之处,例如,单词“big”相似于“bigger”,就像“small”相似于“smaller”一样。另一种关系的例子可以是单词对big-biggest和small-smallest[20]。我们进一步将关系相同的单词对表示为一个问题,我们可以这样问:“什么词与“small”相似,就像“biggest”和“big”相似”。
令人惊讶的是,这些问题可以通过用词向量表示进行简单的代数运算来回答。为了找到一个与“small”相似的词,就像“biggest”与“big”相似,我们可以简单地计算向量X =向量(“biggest”) + 向量(“big”) + 向量(“small”)。然后,我们在向量空间中搜索用余弦距离度量的最接近于X的单词,并将其用作问题的答案(我们在搜索过程中丢弃输入问题单词)。当单词向量被很好地训练时,使用这种方法有可能找到正确的答案(单词“smallest”)。
最后,我们发现,当我们在大量数据上训练高维词向量时,所得到的向量可以用来回答词之间非常微妙的语义关系,例如一个城市和它所属的国家,例如法国对巴黎,德国对柏林。具有这种语义关系的词向量可以用于改进许多现有的自然语言处理应用,例如机器翻译、信息检索和问答系统,并且可能会使其他尚未出现的未来应用成为可能。
4.1 任务描述
为了衡量词向量的质量,我们定义了一个包含五种语义问题和九种句法问题的综合测试集。表1显示了每个类别的两个示例。总的来说,有8869个语义问题和10675个句法问题。每个类别中的问题分两步创建:首先,手动创建一个相似单词对的列表。然后,通过连接两个单词对形成一个大的问题列表。例如,我们列出了68个美国大城市及其所属的州,并通过随机挑选两个单词对形成了大约2.5千个问题。我们在测试集中只包含了单个标记词,因此不存在多词实体(如纽约)。
我们评估所有问题类型的整体准确性,并分别对每个问题类型(语义、句法)进行评估。只有当与用上述方法计算的向量最接近的单词与问题中的正确单词完全相同时,问题才被假定为正确答案;同义词因此被视为错误。这也意味着达到100%的准确率是不可能的,因为当前的模型没有任何关于词法的输入信息。然而,我们认为单词向量在某些应用中的有用性应该与这个准确度度量正相关。进一步的进展可以通过联合关于单词结构的信息来实现,特别是对于句法问题。
4.2 准确性最大化
我们使用Google News语料库来训练词汇向量。这个语料库包含大约6B个标签。我们将词汇量限制在100万个最常见的单词。显然,我们面临着时间约束优化问题,因为我们预期使用更多的数据和更高维度的词向量来提高准确性。为了快速评估模型架构的最佳选择以获得尽可能好的结果,我们首先评估了在训练数据子集上训练的模型,使用词汇限制在最频繁的30k单词。使用CBOW架构,在不同的词向量维数选择和训练数据量增加的情况下,结果如表2所示。
可以看到,在某个点之后,增加更多的维度或增加更多的训练数据,所提供的改善在递减。因此,我们必须同时增加训练数据的向量维数和的数量。虽然这个观察可能看起来微不足道,但必须注意的是目前流行在相对大量的数据上训练单词向量,但其大小不够(例如50 - 100)。如公式4所示,增加两次训练数据的量所带来的计算复杂度的增加与增加两次向量大小所带来的计算复杂度的增加大致相同。
对于表2和表4中报告的实验,我们使用了三个具有随机梯度下降和反向传播的训练epoch。我们选择初始学习率为0.025,并线性递减,使它在最后一个训练epoch结束时趋于0。
表3:在相同数据集、640维词向量训练的模型进行比较。语义-句法词关系测试集和[20]的句法关系测试集的准确率
表4:比较语义-句法词关系测试集上公开可用的词向量和模型中的词向量。使用完整的词汇表。
表5:比较在同一数据上为三个epoch训练的模型和为一个epoch训练的模型。完整语义-句法数据集上的准确性
4.3 模型结构的比较
首先,我们比较了使用相同的训练数据和使用相同维数640的单词向量来派生单词向量的不同模型架构。在进一步的实验中,我们在新的语义-句法词关系测试集中使用了完整的问题集,即不限制为30k词汇。我们还包括[20]中引入的测试集的结果,该测试集中关注单词之间的语法相似性。
训练数据由几个LDC语料库组成,在[18]中有详细的描述(320M words, 82K vocabulary)。我们使用这些数据来与之前在单一CPU上花费8周时间训练的循环神经网络语言模型进行比较。我们使用DistBelief并行训练[6]训练了具有相同数量640个隐藏单元的前馈NNLM,使用8个以前的单词的历史(这样,NNLM比RNNLM有更多的参数,因为投影层的大小是640×8)。
从表3中可以看出,RNN([20]中使用的)的词向量在句法问题上表现良好。NNLM向量的性能明显优于RNN——这并不奇怪,因为RNNLM中的词向量直接连接到一个非线性隐藏层。CBOW体系结构在句法任务上比NNLM工作得更好,在语义任务上也差不多。最后,在语法任务上,skip-gram体系结构比CBOW模型稍微差一点(但仍然比NNLM模型好),在测试的语义部分比所有其他模型好得多。
接下来,我们评估只训练一个CPU的模型,并将结果与公开的可用单词向量进行比较。表4给出了比较结果。CBOW模型对谷歌新闻数据子集的训练时间约为一天,而Skip-gram模型的训练时间约为3天。
对于进一步报道的实验,我们只使用了一个训练epoch(同样,我们线性地降低学习率,以便在训练结束时接近于零)。使用一个epoch在两倍多的数据上训练一个模型,与在3个epoch中迭代相同的数据相比,可以得到类似或更好的结果,如表5所示,并提供了额外的小加速。
4.4 模型的大规模并行训练
如前所述,我们已经在一个名为DistBelief的分布式框架中实现了各种模型。下面报告了几个模型在谷歌News 6B数据集上的训练结果,这些模型使用了小批量异步梯度下降和自适应学习率程序,称为Adagrad[7]。我们在训练中使用了50到100个模型副本。由于数据中心机器与其他生产任务共享,所以CPU内核的数量只是一个估计,使用情况可能会有很大波动。请注意,由于分布式框架的开销,CBOW模型和Skip-gram模型的CPU使用量比它们的单机实现更接近。结果如表6所示。
4.5 微软研究句子完成挑战
微软句子完成挑战(Microsoft Sentence Completion Challenge)是最近引入的一项任务,用于推进语言建模和其他NLP技术[32]。这项任务由1040个句子组成,每个句子都少一个单词,目标是选出与整个句子最连贯的单词,给出5个合理的选择。已经在这个数据集上报道了几个模型的性能,包括N-gram模型,基于(Latent Semantic Analysis)LSA的模型[32],对数双线性模型[24]和一个循环神经网络的组合,目前在这个基准[19]上保持着55.4%的精度。
我们研究了Skip-gram体系结构在这一任务上的性能。首先,我们在[32]中提供的50M个单词上训练640维模型。然后,利用输入的未知词计算测试集中每个句子的得分,并预测一个句子周围的所有单词。最后的句子分数就是这些单个预测的总和。使用句子分数,我们选择最可能的句子。
表7给出了一些先前结果和新结果的简短总结。虽然Skip-gram模型本身在这项任务上的表现并不比(Latent Semantic Analysis)LSA相似性好,但是来自该模型的分数与使用RNNLMS获得的分数是互补的,并且加权组合导致58.9%的准确率达到新的技术水平(59.2%关于集合的开发部分和58.7%关于集合的测试部分)(集合的开发部分的准确率为59.2%,测试部分的准确率为58.7%)。
表7:微软完句挑战赛中模型的比较与组合
5. 学习关系的例子
表8显示了遵循各种关系的单词。我们遵循上面描述的方法:关系是通过减去两个词向量来定义的,然后将结果添加到另一个单词。例如,巴黎 − 法国 + 意大利 = 罗马。可以看到,虽然显然还有很大的改进空间,但是精度还是相当不错的(注意,使用我们假设精确匹配的精度度量,表8中的结果只有大约60%)。我们相信在更高维度的数据集上训练单词向量将会表现得更好,并且将会使开发应用程序变得可行。另一种提高准确性的方法是提供更多这种关系的例子。通过使用十个例子而不是一个例子来形成关系向量(我们将单个的向量平均起来),我们观察到,在语义-句法测试中,我们最好的模型的准确性提高了大约10%。
也可以应用向量运算来解决不同的任务。例如,通过计算单词列表的平均向量和查找最远的单词向量,我们观察到选择列表外单词的良好准确性。这是某些人类智力测试中常见的一类问题。显然,使用这些技术仍有很多发现有待发现。
表8:单词对关系的例子,使用表4中最好的词向量(对7.83亿个单词进行300维的训练的Skip-gram模型)。
6. 结论
这篇论文研究了在一组在句法和语义语言任务上由各种模型训练出的词向量表示的质量。我们观察到,与流行的神经网络模型(包括前馈神经网路和循环神经网络)相比,使用非常简单的模型结构训练高质量的词向量是可能的。因为计算复杂度低得多,所以可以从大得多的数据集上计算出非常精确的高维词向量。使用DistBelief分布式框架,即使在拥有1万亿个单词的语料库上,也可以训练CBOW和Skip-gram模型,因为基本上词汇量是无限的。这比之前发表的类似模型的最佳结果大几个数量级。
最近被证明SemEval-2012任务2中单词向量明显优于之前最好的水平。将公开可用的RNN向量与其他技术一起使用,使得Spearman’s rank correlation比之前的最佳结果[31]提高了50%多。基于神经网络的词向量之前被应用于许多其他的NLP任务,例如情绪分析[12]和意译检测[28]。可以预期,这些应用程序可以受益于本文中描述的模型体系结构。
词向量可以成功地应用于知识库中事实的自动扩展,也可以用于验证现有事实的正确性。机器翻译实验的结果也很有前景。将来,将我们的技术与潜在关系分析(Latent Relational Analysis)[30]和其他技术进行比较也是很有趣的。我们相信,我们的综合测试集将有助于研究界改进现有的估计单词向量的技术。期望高质量的词向量将成为未来自然语言处理应用的重要基石。
Reference:
[1]. Mikolov T , Chen K , Corrado G , et al. Efficient Estimation of Word Representations in Vector Space[J]. Computer ence, 2013.