论文地址
作者:Tomas Mikolov, Kai Chen, Greg Corrdado, Jeffery Dean
Abstract
本文提出了两种新颖的模型体系结构,用于计算来自非常大的数据集的字的连续向量表示(Continuous Vector Representation)。表现结果通过词相似度任务(Word Similarity Task)来衡量,并且将结果与之前其他不同类型且在神经网络方面最优秀的技术进行比较。实验得到我们以更低的计算成本得到精度大幅提升的结果,即不到一天的时间内从16亿字数据集中学习高质量的单词向量。从效果角度来讲,在词的语法与语义相似度方面,达到了领先水平。
Introduction
当前许多NLP系统和技术将词作为原子单元,它们总是被用作词表的索引,而不会去考虑词间的相似性。他们这样选择有几个很好的理由 - 简单性,鲁棒性,我们是在大量数据训练的简单模型优于通过较少数据训练的复杂系统情况下观察到的结果。统计语言模型中的N-gram就是这样的典型例子。
然而,这些简单的技术在许多任务中具有局限性。例如,用于自动语音识别的相关域内数据的数量是有限的 - 性能通常由高质量转录语音数据(通常仅数百万字)的大小决定。在机器翻译中,许多语言的现有语料库仅包含数十亿字或更少。因此,在某些情况下,基本技术的简单扩展不会带来任何重大进展,我们必须关注更先进的技术。
随着近年来机器学习技术的进步,可以在更大的数据集上训练更复杂的模型,并且它们通常优于简单模型
可能最成功的概念是使用单词的分布式表示[10]。 例如,基于神经网络的语言模型显着优于N-gram模型[1,27,17]。
1.1 Goals of the Paper(论文目的)
本文的主要目的是介绍可用于从具有数十亿字的大型数据集中学习高质量单词向量的技术,以及词汇表中数百万个单词。据我们所知,以前提出的架构都没有成功地训练超过几亿个单词,单词向量的适度维度在50-100之间。
我们使用最近提出的一项技术来评价得到的向量表示的质量,该度量指标不但期望意思相近的词表示相近,而且还能表示词的多种相似性程度(Multiple degrees of similarity)[20]。这在前面的语言语境中已被观察到 - 例如,名词可以有多个单词结尾,如果我们在原始向量空间的子空间中搜索相似的单词,则可以找到具有相似结尾的单词[13 ,14]。
令人惊讶的是,人们发现单词表示的相似性超出了简单的语法规律。使用词偏移技术(word offset technique),对字向量执行简单的代数运算,例如向量vector("King") - vector("Man") + vector("Woman")导致一个向量最接近女王(Queen)的向量表示[20]。
在本文中,我们尝试通过开发保持线性规则性词的新模型体系结构来最大化这些向量操作的准确性。我们设计了一个综合的测试集,来从语法和语义规则两方面评价,以此来展示我们的模型可以以很高的精度学习到许多规则。我们进一步讨论了模型的训练时间和精度依赖于词向量的维度和训练数据集的大小。
1.2 Previous Work
单词作为连续向量的表示具有悠久的历史[10,26,8]。 在[1]中提出了一种非常流行的估计神经网络语言模型(NNLM)的模型体系结构,其中使用具有线性映射层和非线性隐藏层的前馈神经网络来联合学习单词向量表示和统计语言模型。 许多其他人都遵循了这项工作。
另一个有趣的NNLM架构在[13,14]中提出,其中单词向量首先使用具有单个隐藏层的神经网络来学习。 然后使用单词向量来训练NNLM。 因此,即使不构建完整的NNLM,也可以学习单词向量。 在这项工作中,我们直接扩展了这种架构,并专注于使用简单模型学习单词向量的第一步。
后来证明,单词向量可用于显着改进和简化许多NLP应用[4,5,29]。 使用不同的模型架构进行单词向量本身的估计,并在各种语料库上进行训练
[4,29,23,19,9],并且一些得到的单词向量可用于将来的研究和比较。 然而,据我们所知,这些体系结构在训练上的计算成本显着高于[13]中提出的体系结构,但使用对角线权重矩阵的某些版本的对数双线性模型除外[23]。
2 Model Architectures (模型结构)
提出了许多不同类型的模型用于估计单词的连续表示,包括众所周知的 Latent Semantic Analysis (LSA) 和Latent Dirichlet Allocation (LDA)。在本文中,我们关注神经网络学习的单词的分布式表示,因为之前已经证明它们比LSA在保持单词之间的线性规律方面表现更好[20,31]; 此外,LDA在大型数据集上的计算成本非常高。
我们首先用完整的训练模型所需要的参数的数量来作为模型计算复杂度的定义,从而来比较不同模型结构(这一点与工作[18]非常相似)。接下来,我们试图最大化准确率,同时最小化计算复杂度。
再接下来的所有模型中,训练复杂度都是与下面这个量成正比的,
(1)
其中E表示训练epoch的次数,T表示训练集中词数,Q表示模型结构相关的量。常见的选择是E在3到50之间,T多达十亿。所有的模型采用随机梯度下降( stochastic gradient descent)SGD与反向传播( backpropagation )BP来训练[5]。
2.1 Feedfroward Neural Net Language Model(NNLM)
概率前馈神经网络语言模型已在[1]中提出。 它由输入,映射,隐藏和输出层组成。 在输入层,使用1-V编码对N个先前字进行编码,其中V是词汇的大小。然后使用共享映射矩阵将输入层投影到具有维数NxD的映射层P。在任何时刻,仅仅N个输入是激活的,因此映射层的组合是相对简单的操作。
NNLM结构的复杂计算在于映射层和隐层之间的计算,主要原因在于映射层是稠密的。对于一个常见的选择N=10,映射层P的大小可能为500到2000,而隐层H的大小通常为500到1000。更进一步讲,隐层通常用来计算在整个词表上的概率分布,结果导致输出层的维度为V。这么说来,每个训练实例的计算复杂度为:
(2)
其中主要的复杂度集中在第三项上。然而,为了避免如此,提出了一些实际的解决方案:或者使用softmax的层次版本[9,10,11],或者避免对模型进行归一化,转而在训练的时候使用未归一化的模型。采用词表的二叉树表示,可以将输出单元的数量降低到。至此模型的主要复杂计算就在于第二项。
我们的模型采用层次softmax,其中词表表示未Huffman二叉树。这样做主要是基于之前观测到的一个现象[12]:Frequency of words works well for obtaining classes in NNLM。Huffman树对频繁出现的词以较短的编码,这样进一步减少了输出单元的数量。然而,平衡二叉树需要 ,基于huffman树的层次softmax仅仅需要。举个例子来说,当词表大小为100万时,我们的计算效率得到了两倍的加速。虽然对于NNLM来讲,这并不是最关键的加速,因为主要的计算瓶颈在于这一项,我们后续提出的模型结构并没有隐层,而是主要依赖于softmax正则化的计算效率。
2.2 Recurrent Neural Net Language Model(RNNLM)
RNNLM的提出是为了克服前馈NNLM的一些局限性,例如,需要指定context的长度(模型阶数N)。因此,理论上讲RNN可以比浅层NN(shallow neural networks)高效的表示更加复杂的模式[13,14]。RNN并没有映射层,只有input-hidden-ouput几层。这类模型的特殊性就在于recurrent matrix,该matrix将隐层与自己通过时间延迟的关系联系起来。由于以前的信息能够表示为隐层中的状态,该状态可以根据当前的输入以及上个时间步的状态进行更新,这就使得recurrent model形成了某种形式的短时记忆。RNN模型对于一个训练实例的时间复杂度是 (3),其中词表示D具有与隐层H相同的维度。类似的,我们可以使用层次softmax(hierarchical softmax)将有效降低为 。至此RNN模型的主要计算复杂度在于。
2.3Parallel Training of Neural Networks.
在大规模数据集上训练模型时,我们已经基于大规模分布式框架DistBlief实现了几个模型包括前馈NNLM以及本文中提出的新模型。DistBlief[15]可以并行运行一个模型的多个副本,每个副本的梯度更新同步通过中央服务器来保持所有参数的一致。对于这种并行训练,我们**采用mini-batch异步梯度以及自适应的学习速率,整个过程称为Adagrad[7]。采用这种框架,使用100多个模型副本,多个机器的多个CPU核,一个数据中心时常见的配置。
3 New Log-linear Models
在本节中,我们提出了两种新的模型体系结构,用于学习单词的分布式表示,以尽量减少计算复杂性。 上一节的主要观察结果表明,由于线性隐藏层的模型,其中很多都是复杂的。 虽然这是使神经网络如此具有吸引力的原因,但我们决定探索更简单的模型,这些模型可能无法像神经网络那样精确地表示数据,但可以有效地训练更多的数据。
新结构的提出主要依赖于以前模型[13,14]中采用两步来训练NNLM:(1)使用简单模型获得连续词向量的表示;(2)基于词的分布式表示来训练N-gram NNLM。虽然后续有好多工作关注学习词向量的表示,但我们考虑到这个模[26,8]是最简单的一个。
3.1 Continuous Bag-of-Words Model
第一个提出的架构类似于前馈NNLM,其中非线性隐藏层被移除,投影层被共享用于所有单词(不仅仅是映射矩阵); 因此,所有单词都被投射到相同的位置(它们的向量被平均)。 我们将这种架构称为词袋模型,因为历史中词语的顺序不会影响投影。 此外,我们还使用未来的文字; 通过在输入处构建具有四个未来和四个历史单词的对数线性分类器,我们已经在下一部分中介绍的任务中获得了最佳性能,其中训练标准是正确地对当前(中间)单词进行分类。 训练复杂度:
我们将此模型进一步表示为CBOW,与标准的词袋模型不同,它使用上下文的连续分布式表示。 模型体系结构如图1所示。注意,在NNLM中,权重矩阵输入和投影层之间的差异是非常的方式。
3.2 Continuous Skip-gram Model
第二个模型结构与CBOW类似,不同与CBOW根据context来预测当前word,本模型尝试优化根据另外一个词来预测同一个句子中这个词的类别。更准确来讲,我们使用当前词作为输入,经过连续映射层,到log-linear分类器,来预测指定窗口内,位于该词前后的词。我们发现,增加窗口的大小可以改善学习到的词向量的质量,但是也增加了计算复杂度。既然离得最远的词通常与当前词的关系要远远小于离得近的,所以我们给那些离得较远的词较小的权重,使得它们采样到的概率要小。该模型结构的训练复杂度正比于:
其中C为词的最大距离。若我们选择C=5,那么对于每个训练词,我们从1~C随机选择一个数R,使用R个历史词与R个未来词作为正确的标注(R words from history and R words from the future of the current word as correct labels)。这就需要我们进行2R次词分类:将当前词作为输入,2R个词中的每个词作为输出。在下面的实验中我们采用C=10。
![01]1F@684KW0]W0KC(X4POB.png](https://upload-images.jianshu.io/upload_images/17159264-be65e0ce80f4742a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
新模型架构。 CBOW体系结构基于上下文预测当前单词,并且Skip-gram预测给定当前单词的周围单词。