词向量空间中词表示的有效估计

摘要

提出了两种计算连续词向量表示模型。
特点:计算低,在语法和语义上的词相似度任务上精度有所提升

1. 简介

以前模型的优点缺点:

  • 统计翻译模型的缺陷:把单词当做原子单元,作为语料字典的索引失去了相似性。
  • N-gram优点能在任何数据集上训练。

简单模型在任务上的限制。如,语音识别:要求语音数据质量高,规模大,但不超过10亿级别的词汇量。因此简单技术改进不会有任何进步。

随着机翻技术发展,现在能大规模数据上训练复杂模型。非常成功的概念是分布式词表示。例如,基于神经语言模型明显地优于N-gram模型

论文目标

主要目标:从百万级词汇的大数据集中学习高质量的词向量。之前方法不能在百万级别词上学到词向量在50-100维之间。

词从原空间映射到词向量子空间后,词与词之间不仅更近,而且有更多相似度。

惊人的是,词表示的相似度超越了简单的语法规则。如:

本文,试图通过开发新模型来最大化词向量操作的准确性,以保留词之间的线性规则。作者设计新的全面的测试集用于测量语法和语义规则,并且其展示了许多规则可以高准确率学到。此外,作者讨论训练时间和经典如何依赖词向量的维度和训练数据量。

之前的工作

词表示作为联系向量有很长的历史。流行的NNLM模型由Bengio提出,是前馈神经网络,有一个线性投影层和非线性隐藏层,用来学习词向量表示的联合分布和统计语言模型。

另一个有趣的NNLM架构是词向量首先用单隐层的神经网络学习到。然后这个词向量被用来训练NNLM。这个词向量不是在构建整个NNLM中学到的。作者直接扩展了该架构,集中于第一步,用简单模型学到词向量。

2.模型架构

以前估计连续词表示,用LSA(Latent Semantic Analysis)和LDA (Latent Dirichlet Allocation).本文用神经网络学习,在保留词之间的线性规则上,表现好于LSA;而LDA在大数据集上计算代价昂贵。

为了比较不同模型架构,作者首先定义计算复杂度为充分训练模型所需要的参数的数量。接下来,最小化计算复杂度时最大化准确率。

模型复杂度正比于:

其中,E是训练轮数,T是训练集里词的数目,Q接下来会具体定义。通常,E是3-50轮,T可达到十亿数量级,所有模型都使用随机梯度下降和反向传播。

前馈神经网络 (NNLM)

下图是NNLM,来源于 A Neural Probabilistic Language Model

image-20210305150250100

包含输入层, 投影层, 隐藏层和输出层。在输入层, N个预测词之前的单词用1xV的one-hot编码,V是词汇表大小。输入层用共享的投影矩阵,然后被投影到NxD投影层 P,。因为在给定时间只有N个输入有效,构成投影层是相对廉价的操作。

NNLM架构在投影层和隐藏层的计算变得复杂, 因为投影层上的值是稠密的。通常选择N=10, 投影层P可能是500-2000,与此同时,隐藏层通常为500-1000.而且,隐藏通常用来计算字典中所有词概率分布, 这导致输出层是维度V。因此,每一个训练样本的计算复杂度为:(H是隐藏层节点个数)

其中主要计算量来自于$H \times V$。然而,几个实际解决方案提出来避免计算量。比如石油分层版本的softmax,或者避免在训练中通过使用没有归一化的模型来避免完全归一模型。 用二叉树表示词汇表, 需要被估计的输出单元数目能降到$\text{log}_2(V)$。因此,主要计算复杂度源自于$N \times D \times H $项。

在本文模型中,作者使用层次softmax, 词汇表表示成哈夫曼树。这延续之前的研究, 词频对于在神经网络语言模型中获取类别是有效的。哈夫曼树,分配给高频词端的二进制编码,这进一步减少了要估计的输出单元的数目:虽然平衡二叉树有$\text{log}_2(V) $的输出要估计, 但基于层次的softmax哈夫曼树只需要$\text{log}_2 (\text{Unigram_perplexity}(V))$(V的一元困惑度)。 举例来说, 当词汇表是100万, 使用该结构估计时大约快两倍。但对于神经网络语言模型来说,计算瓶颈在$N \times D \times H $ 项, 作者后面将替代不含隐藏层, 严重取决于softmax归一化效率。

循环神经网络语言模型 (RNNLM)

基于语言模型的循环神经网络, 提出来克服前馈神经语言模型的限制,比如需要具体的上下文长度(模型的顺序为N), 因为理论上比起浅层神经网络, RNNs能更有效地表示更复杂的模式。RNN模型没有投影层,只有输入,隐藏层和输出层。 这类模型的特殊之处是连接自身隐藏层间的循环矩阵, 用来形成短期记忆,因为来自过去的信息可以有隐藏层状态表示, 隐藏层状态根据当前输入和上时间中的隐层状态来更新。

循环神经网络训练每个样本是的复杂度为:

其中,词表示D和隐藏层H有同样维度。这样通过使用层次softmax $H \times V$ 有效地降为$H \times \text{log}_2(V)$。 复杂度主要来自于 $ H \times H$

平行训练神经网络

为了在大数据集上训练模型,作者在大规模分布式框架之上实现了几个模型叫做DistBelief, 包括前馈神经语言模型和本文中提出的新模型。该框架允许作者并行地运行同一模型的多个副本,并且每个副本通过保留所有参数的中央服务器来同步更新其梯度。对应这种并行训练,作者使用称为Adagrad的自适应学习速率程序小批次异步梯度下降。在该框架下, 通常使用100或更多模型副本,每个腹部在数据中的不同机器上使用不同CPU内核。

3. 新的对数线性模型

在本节中, 作者提出两种新模型架构,用于学习分布式词表示, 并试图最小化计算复杂度。从前一节的主要研究中, 大部分复杂度源自于模型中非线性的隐藏层。虽然这是是的神经网络如此吸引人的地方, 作者觉得探索简单模型, 其可能无法像神经网络一样精确地表示数据,但可以在更多数据上有效地训练。

新的架构直接遵循作者早期工作中提出的, 其发现神经语言模型可以分成两步成功训练 (1.2节): 首先, 连续词向量用简单模型学习,然后 N-gram NNLM 在这些分布式词表示上训练。算人后面大量的工作重点学习词向量,作者认为之前提出的是最简单的。注意,相关模型Hinton等人早就提出了。

连续词袋模型 (Bag-of-Words)

首先提出价格类似于前馈NNLM, 其中非线性隐藏层被移除并且投影层为所有词所共享(不仅仅是投影矩阵):隐藏, 所有词都被投影到相同位置(它们词向量被平均)。作者叫这种架构为词袋模型,因为在历史记录里词的顺序不影响投影。 此外,作者还使用前面的词;作者在下一节要介绍的,用四个前面的词和四个后面的词作为输入建立的一个对数线性分类器任务上得到最佳表现,其中,训练标准是正确分类当前(中间)词。训练复杂度为:

其中, N是输入数,D是输入one-hot维度, V是词汇表大小

作者把这个模型称为CBOW, 不同于标准词袋模型,它使用上下文的连续分布表示。如下图,注意输入层和投影层的权重矩阵,由所有词共现,跟NNLM一样。

image-20210306103847361

连续跳字模型 (Continuous Skip-gram Model)

第二个类似于CBOW的架构,但不再基于上下文预测中心词,它试着优化一个基于同一个句子中的其他词的词分类器。更精确地说,作者用每一个当前词作为带连续投影层的输入, 然后预测当前词之前和之后一定范围内的词。作者发现增加范围能够梯度词向量的质量,但也增加了计算复杂度。因为距离当前词远的词不如距离它仅的词更相关,所以在作者的训练集中通过采用更少来给更远的词小的权重。

该架构的训练复杂度正比于:

这里, C是词与词的最大距离。如果作者选择C=5, 对每个训练的词作者将随机选取一个在<1, C>的数字,然后用当前词的前R个词和后R个词作为当前词的正确标签。这需要作者对$R \times 2$个单词做分类, 当前词作为分类器的输入,当前词的前R个词和后R个词作为输出。在下面实验中,作者取C=10.

image-20210306121224008

4.结果

通过加大在词向量维度并在大数据集上训练后,相似词之间的词向量在空间上是相近的(文中 提出small相似词的问题,用$ \vec{X} = \vec{\text{biggest}} - \vec{\text{big}} + \vec{\text{small}} $ 找到smallest,然后用余弦相似度找到跟$\vec{X}$ 相近的词向量,就可以回答这个问题)

词向量在5类语义和9类句法关系测试如下表:

image-20210306122123397

任务描述

为了衡量词向量的质量,作者定义了一个综合测试集,包含五种语义问题和九种句法问题。上图显示了每类中的两个示例。总的来说,有8869个语义问题和10675个句法问题。每个类别中的问题都是通过两个步骤创建的:首先,手动创建类似单词对的列表。然后,通过连接两个词对形成一个大的问题列表。例如,列出了68个美国大城市及其所属的州,并通过随机选择两个词对,形成了大约 2.5k 的问题。测试集中只包含单个标记词,因此不存在多词实体(such as New York)。

评价模型结果好坏的标准就是上述的词向量线性运算,如果通过线性运算得到的单词与正确的单词是完全一致的,那么就代表该词向量是正确的。所以同义词很难被计算出来,因为没有对同义词的输入,所以模型不可能达到 100% 的准确率。但是该模型的准确率与某些任务是正相关的,所以还是有一些用处的。

最大化准确度

使用谷歌新闻语料库训练词向量(6B tokens), 限制词汇表大小为1百万。下表是CBOW在不同维度的词向量和不同数据量上测试结果。

image-20210306125620794

可以看到到达某个点之后,增加词向量维度或增加数据量带来的提升很小。但流行的是在相对大的数据上训练词向量。增大数据量由公式4可知,增大2倍数据,差不多也增大2倍复杂度。

训练每3轮以初始学习率为0.025线性下降的SGD反向传播,最后一轮为0.

模型架构比较

传统模型的比较工作,使用相同的数据集,相同 640 维度的词向量,也不仅限使用 30k 的单词,并且使用了全部的测试集数据。以下是训练结果的比较:

image-20210306132629622

image-20210306132959540

image-20210306133118236

5. 学习到的关系示例

表8中是遵循各种关系的词。通过前面定义的:两个词向量相减再将其加上另一个词向量,例如, Paris - France + Italy = Rome.

image-20210306133317569

另外提高准确性的方法是提供多个关系的例子,然后将得到的关系向量平均,在本文测试中准确性提升了10%左右。

6. 结论

在本文中,在一系列的语法和语义的语言任务上不同模型的表现,研究了词表示向量的质量。作者观察到用简单模型架构而不是流行的神经网络模型(包括前馈和循环)是可能训练得到高质量的词向量。因为更低的计算复杂度,从大规模数据集上训练得到非常精确的高维词向量是可能得到的。使用DistBelief 分布式框架,它能在万亿级别的语料上训练CBOWSkip-gram模型。这比比类似模型的先前最佳结果大几个数量级。

词向量可以成功的应用于知识库中事实的自动扩展,还可以用于验证已有事实的准确性。从机翻实验结果来看也非常有前景。在未来,将作者的技术与潜在关系分析或其它进行比较也很有趣。作者想想作者的全面测试集将帮助研究社区提升估计词向量的现有技术。作者也期望高质量词向量将成为未来NLP应用的关键一环。

Inference

[1] 论文阅读《Efficient Estimation of Word Representations in Vector Space》

[2] word2vec论文翻译(部分)

[3] 2.Embedding系列一(word2vec)

[4] 不可思议的Word2Vec 1.数学原理