题目: 向量空间中词表示的有效估计
论文地址:Efficient Estimation of Word Representations in Vector Space
本文提出了两种新的模型架构,用于计算来自非常大的数据集的单词的连续向量表示。新的模型架构在低得多的计算成本下,准确率有了很大的提高,从16亿个单词数据集中学习高质量的单词向量只需不到一天的时间。
许多当前的NLP系统和技术将单词视为原子单位——单词之间没有相似性的概念,因为它们是作为词汇表中的索引来表示的。
这种选择有几个很好的理由:简单性、健壮性以及在大量数据上训练的简单模型优于在较少数据上训练的复杂模型。一个例子是用于统计语言建模的流行的N-gram模型,当下可以在几乎所有可用的数据(数万亿个单词)上训练N-gram。
但是,简单的技术在许多任务中都有其局限性。例如,用于自动语音识别的相关域内数据的数量是有限的。
本文的主要目标是介绍一些技术,这些技术可以用于从包含数十亿个单词和词汇中的数百万个单词的巨大数据集中学习高质量的单词向量。
神经网络语言模型(NNLM)的模型架构,其中前馈神经网络具有线性投影层和非线性隐藏层,用于联合学习词向量表示和统计语言模型。
另一种NNLM架构:单词向量使用具有单个隐藏层的神经网络学习,然后使用单词向量来训练NNLM。因此,即使不构建完整的NNLM也可以学习单词向量。
常见的用于估计单词的连续向量表示的模型:Latent Semantic Analysis (LSA,潜在索引分析)和Latent Dirichlet Allocation (LDA,潜在狄利克雷分析)。
本文主要关注神经网络,有以下两点原因:
为了比较不同的模型体系结构,首先将模型的计算复杂度定义为需要访问完整训练模型的参数的数量。接下来,我们将尝试在最小化计算复杂度的同时,最大化精度。
对于以下所有模型,训练的复杂度都是成比例的:
E为训练模型时的迭代次数,T为训练集中的单词数,Q是每个模型的参数。一般E在3-50之间,T≤10亿。所有模型都使用随机梯度下降和反向传播进行训练。
前馈神经网络语言模型:由输入、投影、隐藏和输出层组成。
在输入层,N个以前的单词使用1 - of - V编码,其中V是词汇表的大小。然后使用共享的投影矩阵将输入层投影到维度为N×D的投影层P。由于在任何给定的时间内只有N个输入是活跃的,因此P的合成成本比较小。
隐藏层用于计算词汇表中所有单词的概率分布,得到一个维数为v的输出层,因此每个训练示例的计算复杂度为:
解释一下上述参数: N×D是投影层的维度,即输入层到投影层的计算复杂度,N×D×H表示投影层到隐藏层的计算复杂度(H是隐藏层size),H×V表示隐藏层到输出层的计算复杂度。
在本文提出的模型中,使用分层softmax,其中词汇表表示为Huffman二叉树。Huffman树将短的二进制代码分配给频繁的单词,这进一步减少了需要评估的输出单元的数量。输出减少,复杂度 V V V可以下降为 l o g 2 ( V ) log_2(V) log2(V)
基于RNN的语言模型:没有投影层,只有输入,隐藏和输出层。
模型的特殊之处在于它的递归矩阵使用延时连接将隐藏层与自身连接起来。这允许循环模型形成某种短期记忆,因为来自过去的信息可以用隐藏层状态表示,该状态根据当前输入和前一个时间步中的隐藏层状态进行更新。
RNN模型每个训练实例的复杂度为:
词向量(维度为D)与隐藏层H具有相同的维数。同样使用分层softmax可以有效地将H×V简化为H×log2(V),因此,大部分的复杂性来自H×H。
为了更好地理解,与(2)进行一下对比:
(3)中没有了第一项(投影层复杂度),N和D都等于H。
为了在巨大的数据集上训练模型,本文在大规模分布式框架DistBelief上实现了几个模型,包括前馈NNLM和本文提出的新模型。这个框架允许并行运行同一个模型的多个副本,每个副本通过一个保存所有参数的集中式服务器同步其梯度更新。对于这种并行训练,使用Adagrad优化算法。
第二节告诉我们:大部分的复杂性是由模型中的非线性隐藏层引起的。
更简单的模型可能无法像神经网络那样精确地表示数据,但却可以训练更多的数据。
连续的词汇袋模型(CBOW):类似于前馈NNLM,非线性隐藏层被移除,投影层对所有单词(不仅仅是投影矩阵)共享。因此,所有的单词被投影到相同的位置(它们的向量被平均),故该模型又被称为词袋模型。
如果在输入端构建一个包含未来词和历史词的对数线性分类器,训练标准是正确分类当前(中间)词,则该模型称之为CBOW(Continuous Bag-of-Words Model)。
看下CBOW的示意图:
可以看到,CBOW只有输入、投影以及输出三层。输入是指定单词的context单词(上下文单词,前后各取几个单词),预测的是中间的单词(指定单词)。
因此,CBOW模型的训练复杂度:
N N N是输入单词的数量,D是每个单词的向量维度, N × D N \times D N×D表示输入层到投影层的计算复杂度,最终投影层只有一个词向量, D × l o g 2 ( V ) D \times log_2(V) D×log2(V)为投影层到输出层的复杂度。
这种架构类似于CBOW,但它不是根据上下文预测当前的单词,而是根据同一句子中的另一个单词最大限度地分类一个单词。更准确地说,我们将当前每个单词作为连续投影层的对数线性分类器的输入,在当前单词之前和之后预测一定范围内的单词。
如下所示:
skip-gram(SG)同样只有输入层、投影层以及输出层。输入的是某一个单词的词向量,输出的是它的上下文单词。这与CBOW恰恰相反。
SG的复杂度:
增加范围可以提高生成的词向量的质量,但也增加了计算复杂度。由于距离较远的单词通常与当前单词的相关性较低,所以我们通过在训练示例中较少地从这些单词中抽样,来对距离较远的单词给予较少的权重。
C是单词之间的最大距离。如果我们选择C=5,对于每个训练词,我们将随机选择一个范围<1, C>的数字R,然后使用来自历史的R词和来自未来的R词作为正确的标签。这将要求我们进行R×2单词分类,将当前单词作为输入,并将每个R+R单词作为输出。
简言之,使用某一个单词来预测其前面R个单词和未来的R个单词。