Efficient Estimation of Word Representations in Vector Space

提出两个新颖的模型来计算词的连续向量表示,这些表示的质量用词的相似度来计算,结果和其他表现最好的技术进行比较。我们发现有很大的提高而且计算量低,比如1.6百万的词只需要不到一天的计算,而且这些向量对于语义和语法的相似度的计算获得最好的成绩。

 

1 Introduction

一些NLP任务把词作为原子单元,词与词之间没有相似度,是作为词典的下标表示的,这种方法有几个好处:简单,鲁棒性,在大数据集上训练的简单模型比小数据集上训练的复杂模型好。最广为流传的是用于统计语言模型的N元模型,今天,它可以训练几乎所有数据的n元模型。

但是,这些简单的技术在一些任务上有限制。比如,自动语音识别的相关域内数据是有限的,性能通常由高质量转录的语音数据的规模决定(通常是百万级别的词)。在机器翻译,各种各样现存的语料仅仅包含不超过十亿级别的词汇量。因此,在一些情况下,简单改进基本技术不会导致任何重大进展,我们必须关注更先进的技术。

随着机器翻译的进一步发展,在更大的数据上训练更复杂的模型成为可能。而且性能比简单模型好,而且最成功的是使用词的分布式表示,比如,基于语言模型的神经网络比N元模型好。

 

1.1 Goals of the Paper

本文的目的是提出学习高质量的词向量的方法,这个方法可以在十亿级别的数据集,百万级别的词汇量上进行训练,据目前所知,还没有方法提出可以在几百万的数据上学习50-100的词向量。

我们使用最近提出的用于测试词向量质量的方法,我们不仅希望相似的词相似,而且词有不同的相似度(degree of similarity),这在曲折语言已经发现,例如,名词有不同的结尾,如果在属于原始向量空间里的子空间搜索相似的词,它可以发现词有相同的结尾。

更奇怪的是,词向量的相似度比简单的语法规则复杂,例如,使用词偏移技术 ,即在词向量上使用简单的线性操作,vector(king)-vector(man)+vector(woman)接近vector(queen)。

本文中,我们试图用新的模型来最大化这些向量操作的正确性,并且保留词之间的线性规律性,我们设计了一个全面的测试集来衡量语法和语义规则。而且这些规则可以学习得很好,另外,我们讨论了训练时间和准确率与词向量的维度和训练数据的关系。

 

1.2 Previous Work

把词作为连续的向量来表示已经有很长的历史,一个用来估测神经网络语言模型(NNLM)提出来了,该方法使用了前向神经网络,有一个线性投影层和一个非线性隐藏层,用来学习词向量表示和统计语言模型。

NNLM的一个模型是词向量是使用一个隐藏层学习到的,这些词向量用来训练NNLM,而且不需要构建整个NNLM就可以学习到,在这个工作中,我们扩展了这个结构,并且关注于使用简单模型获得词向量。

后来发现词向量可以简化和提高一些NLP应用,使用不同的模型和不同的数据集来获得向量,一些训练好的词向量可以为未来的研究使用,但是,据目前所知,这些模型的训练代价还是比较大的。

 

2 Model Architectures

用来估计词的连续表示的模型有很多,比如LSA(潜在索引分析),LDA(潜在狄雷特分布),本文中,主要关注由神经网络获得的词向量。 如之前所示,比LSA表现得更好,更好的体现了词之间的线性规则,LDA在大的数据集上的计算消耗更大。

比较模型的差异,首先是计算复杂度(训练模型所需要的参数),然后是最大化正确率,同时最小化计算复杂度。

下面所有的模型的训练复杂度是:

是训练模型的迭代次数,是训练集里的词个数,Q是每个模型的参数,通常的选择是E=3-50,T可达1百万,所有模型使用随机梯度下降法和后向传播方法。

2.1 Feedforward Neural Net Language Model (NNLM)

概率前向神经网络语言模型包含4层,输入层,投影层,隐藏层和输出层。在输入层,N个排在前面的词使用one-hot编码,V是词汇表的大小。然后输入层投影到投影层P,P的维度是N×D,这是一个共享投影矩阵。因为在任何给定时间只有N个输入有效,所以投影层的组成是性价比相对较高的操作。

NNLM架构由于投影层和隐藏层之间的计算而变得复杂,投影层的数值是稠密的。如果N=10,投影层P的神经元个数是500-2000,隐藏层H的神经元个数是500-1000,隐藏层用来计算词汇中所有词的概率分布,最后输出层的维度是V,每个训练样本的计算复杂度是:

Q=N×D+N×D×H+H×V

最重要的项是H×V,已有一些提出的方法用来避免他,使用层次级的softmax,或避免使用规则化模型,而是在训练中完全使用不规则化的模型,有了词汇的二叉树表示,需要评估的输出单元的个数下降了log2V,所以,大部分的计算是由N×D×H决定的。

在我们的模型集中,使用层次级的softmax,词汇表用哈夫曼二叉树表示,之前的工作中,在神经网络语言模型中,词的频率对于类别是有用的。哈夫曼树给每个词赋予短的二值代码,这降低了需要估计的输出单元个数,平衡二叉树需要估计log2V个输出,基于层次级的哈夫曼树仅需要log2(Unigram-perplexity(V)),例如,当词典含有一百万个词时,使用该结构会使评估速度大约提升两倍,但是对于神经网络语言模型来说这并不是主要的提速,因为计算的瓶颈在于N×D×H这项,之后我们将提出不包括隐藏层的结构,这样模型的计算复杂度主要取决于softmax归一化的效率。

2.2 Recurrent Neural Net Language Model (RNNLM)

基于语言模型的循环神经网络主要克服前向NNLM的缺点,比如需要确定文本的长度,比起浅层神经网络,RNN可以表示更复杂的模型,RNN模型没有投影层,只有输出层,隐藏层和输出层,这种模型的特点是有循环矩阵连接隐藏层,具有时间延迟连接,这允许形成长短期记忆,过去的信息可以由隐藏状态表示,隐藏状态的更新由当前输入和前一个输入的隐藏层的状态决定。RNN模型每个样本的训练复杂度是:

Q=H×H+H×V

D和隐藏层H有相同的维度,而且,使用层次级的softmax,H×V可以降低为log2V,所以大部分的复杂度来自H×H

2.3 Parallel Training of Neural Networks

为了在更大的数据上训练模型,我们在大分布式框架DistBelief上实现几个模型,包括前向NNLM模型和本文中的模型,这个框架允许我们并行的运行同一个模型的不同副本,每个副本通过一个保存所有参数的中央服务器进行参数更新。对于这种并行训练,我们使用小batch异步梯度下降和一个自适应的学习速率,叫做Adagrad,在这个框架下,使用100多个模型副本是常见的,在一个数据中心使用不同机器的cpu核。

3 New Log-linear Models

这节中,提出两个模型来学习词的分布式表示,而且试图降低计算复杂度。之前的研究表示大部分的复杂度是由于模型的非线性层导致的。我们试图探索更简单的模型,虽然无法精确地和神经网络一样表示数据,但是可以训练更多的数据。

神经网络语言模型可以用两步训练:第一,连续词向量可以用简单模型学习得到,然后N元模型在这些词上进一步训练,在学习词向量上有很多工作。

3.1 Continuous Bag-of-Words Model

第一个提出的模型和前向NNLM相似,不同是非线性层删除了,投影层由所有词共享,因此,所有词都投影到相同的位置(向量平均化),我们称这为词袋模型,词的顺序对于投影不影响,而且我们还使用前面的词,输入为4个前面的词和4个后面的词的log-linear分类器获得最好的结果,训练复杂度是:

这个模型我们叫做CBOW,这不像标准的词袋模型,它使用文本的连续分布表示,

 

 

3.2 Continuous Skip-gram Model

第二个模型和CBOW相似,但是不是基于上下文预测当前的词,而是根据另一个词最大化这个词的类别,更确切的说,使用当前词作为log-linear分类器和连续投影层的输入,并且预测当前词的前面和后面的几个词。我们发现增加词的前后几个词的范围会增加词向量的质量,但会增加计算复杂度,由于一些距离当前词较远的词与当前词联系较少,我们赋予比较低的权重,模型的训练复杂度是:

Q=C×(D+D×log2V)

C是距离当前词的最大距离,如果C=5,对于每个训练的单词,如果我们在(1,C)之间随机选择一个数R,并使用当前词的R个后面的词和R个前面的词作为正确的标签,这要求我们做R*2个词的分类,即当前词作为输入,R+R个词作为输出。

4 Results

4.1 Task Description

4.2 Maximization of Accuracy

4.3 Comparison of Model Architectures

4.4 Large Scale Parallel Training of Models

4.5 Microsoft Research Sentence Completion Challenge

 

猜你喜欢

转载自blog.csdn.net/qq_27009517/article/details/84550580