Shuzi_rank
不是因为看到希望才坚持,而是因为坚持才能看到希望

摘要

本文提出了两种从大规模数据集中计算连续向量表示(Continuous Vector Representation)的计算模型架构。这些表示的有效性是通过词相似度任务(Word Similarity Task)来度量的。实验结果表明,这种方法要优于已有的基于其他类型的神经网络模型的效果。更重要的是,这种方法可以以更低的计算代价获得更高的词相似性预测的准确度。举个例子来说,从16亿词的语料库中学习表示大概需要不到一天的时间。从效果角度来讲,在词的语法与语义相似度方面,达到了领先水平。

 

背景介绍

当今先进的NLP系统与技术都把词作为原子单元。总是被用作词表的索引,而不会去考虑词间的相似性。这样做的好处在于简单且robust,通常我们的观测结果是:简单模型在大量数据上的性能超过复杂模型在少量数据上的计算结果。统计语言模型中的N-gram就是这样的典型例子。

然而,简单模型在很多领域都有其局限性。例如,相关领域内的自动语音识别数据是有限的,简单模型的性能通常取决于转录的高质量的语音数据的大小,通常只有几百万的词。机器翻译任务中,好多语音的已有的语料库的大小也只有十几亿。因此,确实存在对这些简单基本技术的升级并不会带来性能很大的提升的情况,我们不得不考虑更复杂的高级技术。

随着机器学习技术的发展,训练更大规模数据上的复杂模型成为可能,它们要远远超过那些简单模型。可能最成功的概念就是使用分布式词表示[1]。例如,NNLM远远优于N-gram模型。

本文的主要目标在于从拥有几十亿的语料库与几百万的词表的巨大数据集中学习高质量词表示的技术。据我们所知,已有的方法在几百万词的语料库上,获取50~100维的词向量,效果不错。

我们使用最近提出的一项技术来评价得到的向量表示的质量,该度量指标不但期望意思相近的词表示相近,而且还能表示词的多种相似性程度[2]。这在屈折语言(Inflectional Language)中是常见的,例如,名词可能有多种词尾(后缀),如果我们在原始的向量子空间中搜索相似词,可能找到的是具有相似词尾的词[3,4]。有些奇妙的是,词表示的相似性远远超出了简单的语法规则。使用词偏置技术时,对词向量进行简单的代数操作,例如vector("King")-vector("Man")+vector("Woman")得到的向量与vector("Queen")比较近[2]。

本文通过开发新的模型结构来最大化向量操作的准确度,从而保留词间的线性规则。我们设计了一个综合的测试集,来从语法和语义规则两方面评价,以此来展示我们的模型可以以很高的精度学习到许多规则。我们进一步讨论了模型的训练时间和精度依赖于词向量的维度和训练数据集的大小。

将词表示为连续的向量的思想由来已久[1,5,6]。一个很受欢迎的模型结构称为Neural Network Language Model (NNLM)[7],采用一个线性映射层加上一个非线性隐层来同时学习到词向量表示和统计语言模型。该工作得到后续很多工作的追捧。另外一个有趣的NNLM架构[3,4],仅仅采用一个隐层来学习词向量,再使用这些词向量来学习NNLM。因此,词向量的学习不需要构建完整的NNLM。本文对这个架构进一步扩展,重点关注使用一个简单的模型来学习词向量表示。后续我们会展示词向量表示可以用来大大改善和简化许多NLP应用。词向量本身的估计可以采用多种模型架构,采用多种语料库,其中一些学习到的词向量表示可以用作进一步的研究和对比。然而,据我们所知,这些模型的计算代价要远远高于最早的那个模型[3],一个例外是采用对角权重矩阵的log-bilinear模型。

模型结构

许多已有的模型可以用来估计词的连续向量表示,包括我们所耳熟能详的LSA以及LDA。已有的工作表明,与LSA相比,分布式表示(distributed representation)可以更好的保留词间的线性规则[2,8],因此本文关注于采用neural network来学习词的分布式表示(distributed representation)。而LDA最大的缺点在于大数据集上的计算复杂度高。

我们首先用完整的训练模型所需要的参数的数量来作为模型计算复杂度的定义,从而来比较不同模型结构(这一点与工作【18】非常相似)。接下来,我们试图最大化准确率,同时最小化计算复杂度。再接下来的所有模型中,训练复杂度都是与下面这个量成正比的,,其中E表示训练epoch的次数,T表示训练集中词数,Q表示模型结构相关的量。常见的选择是E在3到50之间,T多达十亿。所有的模型采用SGD与BP来训练[5]。

Feedforward NNLM. 概率前馈NNLM[7]包括Input-projection-hidden-output四层。输入层中,前N个词编码为1-of-V的向量,V为词表大小。输入层通过一个的映射矩阵,映射到映射层P。在任何时刻,仅仅N个输入是激活的,因此映射层的组合是相对简单的操作。NNLM结构的复杂计算在于映射层和隐层之间的计算,主要原因在于映射层是稠密的。对于一个常见的选择N=10,映射层P的大小可能为500到2000,而隐层H的大小通常为500到1000。更进一步讲,隐层通常用来计算在整个词表上的概率分布,结果导致输出层的维度为V。这么说来,每个训练实例的计算复杂度为,其中主要的复杂度集中在第三项上。然而,为了避免如此,提出了一些实际的解决方案:或者使用softmax的层次版本[9,10,11],或者避免对模型进行归一化,转而在训练的时候使用未归一化的模型。采用词表的二叉树表示,可以将输出单元的数量降低到。至此模型的主要复杂计算就在于第二项了。

我们的模型采用层次softmax,其中词表表示未Huffman二叉树。这样做主要是基于之前观测到的一个现象[12]:Frequency of words works well for obtaining classes in NNLM。Huffman树对频繁出现的词以较短的编码,这样进一步减少了输出单元的数量。然而,平衡二叉树需要,基于huffman树的层次softmax仅仅需要。举个例子来说,当词表大小为100万时,我们的计算效率得到了两倍的加速。虽然对于NNLM来讲,这并不是最关键的加速,因为主要的计算瓶颈在于这一项,我们后续提出的模型结构并没有隐层,而是主要依赖于softmax正则化的计算效率。

Recurrent NNLM。RNNLM的提出是为了克服前馈NNLM的一些局限性,例如,需要指定context的长度(模型阶数N)。因此,理论上讲RNN可以比浅层NN(shallow neural networks)高效的表示更加复杂的模式[13,14]。RNN并没有映射层,只有input-hidden-ouput几层。这类模型的特殊性就在于recurrent matrix,该matrix将隐层与自己通过时间延迟的关系联系起来。由于以前的信息能够表示为隐层中的状态,该状态可以根据当前的输入以及上个时间步的状态进行更新,这就使得recurrent model形成了某种形式的短时记忆。RNN模型对于一个训练实例的时间复杂度是,其中词表示D具有与隐层H相同的维度。类似的,我们可以使用层次softmax(hierarchical softmax)将有效降低为。至此RNN模型的主要计算复杂度在于

Parallel Training of Neural Networks.在大规模数据集上训练模型时,我们已经基于大规模分布式框架DistBlief实现了几个模型包括前馈NNLM以及本文中提出的新模型。DistBlief[15]可以并行运行一个模型的多个副本,每个副本的梯度更新同步通过中央服务器来保持所有参数的一致。对于这种并行训练,我们采用mini-batch异步梯度以及自适应的学习速率,整个过程称为Adagrad[16]。采用这种框架,使用100多个模型副本,多个机器的多个CPU核,一个数据中心时常见的配置。

本文的模型:New Log-Linear Models (word2vec)。我们提出两个模型结构来学习词的分布式表示,同时也最小化计算复杂度。从前述章节的观测结果表明:模型计算的主要复杂度来自于非线性隐层。尽管这些隐层使得neural networks非常具有吸引力,但是我们决定使用更为简单的模型。这样可能并不能够获得与Neural network一样准确的数据表示,但是至少能够高效的训练更多的数据。新结构的提出主要依赖于以前模型[3,4]中采用两步来训练NNLM:(1)使用简单模型获得连续词向量的表示;(2)基于词的分布式表示来训练N-gram NNLM。虽然后续有好多工作关注学习词向量的表示,但我们考虑到这个模型[3]是最简单的一个。

         CBOW(Continuous Bag-of-Words Model).该模型类似于前馈NNLM,去掉了其中的非线性隐层,所有词共享映射层,而非共享映射矩阵。所有的词映射到同样的位置,对这些向量进行平均。因为历史词序并不能影响映射结果,所以我们将这个模型结构称为Bag-of-Words模型。况且,我们也使用了未来的词。我们使用4个未来词和4个历史词作为输入在下节提到的任务中取得了最优的性能,其中,优化目标是能准确分类中间的词。训练复杂度为:。我们将这个模型记为CBOW。与传统的Bag-of-Words模型不同,它使用连续分布式的context表示。模型结构如图1所示。值得注意的是,输入层与映射层之间的权重矩阵,与NNLM一样,是所有词位置共享的。

          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。

实验结果

[1] G.E. Hinton, J.L. McClelland, D.E. Rumelhart. Distributed representations

[2] Linguistic Regularities in Continuous Space Word Representations

[3]T. Mikolov. Language Modeling for Speech Recognition in Czech, Masters thesis

[4] T. Mikolov, J. Kopeck´y, L. Burget, O. Glembek and J. ˇCernock´y. Neural network based language models for higly inflective languages,

[5]D. E. Rumelhart, G. E. Hinton, R. J. Williams. Learning internal representations by backpropagating errors.

[6]J. Elman. Finding Structure in Time. Cognitive Science, 14, 179-211, 1990

[7]Y. Bengio, R. Ducharme, P. Vincent. A neural probabilistic language model.

[8]A. Zhila, W.T. Yih, C. Meek, G. Zweig, T. Mikolov. Combining Heterogeneous Models for Measuring Relational Similarity

[9]F. Morin, Y. Bengio. Hierarchical Probabilistic Neural Network Language Model.

[10] A.Mnih,G.Hinton.AScalableHierarchicalDistributedLanguageModel

[11] T. Mikolov, A. Deoras, D. Povey, L. Burget, J. ˇCernock´y. Strategies for Training Large Scale Neural Network Language Models

[12] T.Mikolov,S.Kombrink,L.Burget,J. ˇCernock´y,S.Khudanpur.Extensionsofrecurrentneural network language model

[13] T. Mikolov, M. Karafi´at, L. Burget, J. ˇCernock´y, S. Khudanpur. Recurrent neural network based language model

[14] Y. Bengio, Y. LeCun. Scaling learning algorithms towards AI.

[15] J. Dean, G.S. Corrado, R. Monga, K. Chen, M. Devin, Q.V. Le, M.Z. Mao, M.A. Ranzato, A. Senior, P. Tucker, K. Yang, A. Y. Ng., Large Scale Distributed Deep Networks

[16] J.C. Duchi, E. Hazan, and Y. Singer. Adaptive subgradient methods for online learning and stochastic optimization

posted on 2017-03-10 11:53  Shuzi_rank  阅读(5273)  评论(0编辑  收藏  举报