深度 | 通过NMT训练的通用语境词向量:NLP中的预训练模型?

机器之心 2017-08-08 14:43 阅读:101

本文由机器之心编辑,“机器之心”专注生产人工智能专业性内容,适合开发者和从业者阅读参考。点击右上角即刻关注。

自然语言处理(NLP)这个领域目前并没有找到合适的初始化方法,它不能像计算机视觉那样可以使用预训练模型获得图像的基本信息,我们在自然语言处理领域更常用的还是随机初始化词向量。本文希望通过 MT-LSTM 先学习一个词向量,该词向量可以表征词汇的基本信息,然后再利用该词向量辅助其它自然语言处理任务以提升性能。本文先描述了如何训练一个带注意力机制的神经机器翻译,其次描述了如何抽取该模型的通用词向量与将其应用于其它任务的性能

对于自然语言处理中的大多数问题而言,理解语境是很有必要的。为了生成一句英文的德语翻译,翻译模型需要理解英文句子中的单词是如何组织在一起的。为了知道哪些单词是最重要的,文本摘要模型也需要语境。执行语义情感分析的模型需要理解如何挑选出能够改变一句话的情感的关键词。问答模型依赖于对「问题中的词汇分布如何改变答案中的词汇分布」的理解。因为这些模型都需要理解语境是如何影响一个单词的意思的,所以,只要能够与一个学会了如何将单词语境化的模型相结合,上述每个模型都能够从中获益。

在自然语言处理(NLP)中模仿 IMAGENET-CNN 模式

机器视觉在寻求可重用的表征方面比自然语言处理更加成功。在大型图像分类数据集 ImageNet 上训练的深度卷积神经网络(CNN)经常被用作其他模型的组成部分。为了将图像分类做得更好,卷积神经网络通过逐渐构建一个更加复杂模型,而去理解像素是如何与其他像素关联的。模型可以在这些表征的基础上去解决看图说话问题、人脸识别问题以及目标检测问题,而不是一切都从零开始。自然语言处理也应该做一些类似的表征去解决单词和语境之间的关联。

为了教会神经网络理解单词在语境中的含义,我们首先教它如何将英文翻译成德语。然后,我们展示了可以重用该翻译任务的神经网络就像模仿机器视觉中在 ImageNet 上训练卷积神经网络的方式那样。我们是这样来做的:通过将神经网络的输出(也就是我们所说的语境向量(CoVe))作为其它自然语言处理任务的神经网络的新输入。在我们的实验中,给这些网络提供 CoVe 的情况总会改善模型的性能,这十分令我们振奋,所以所以我们公布了这个能够生成 CoVe 的可训练神经网络,以进一步探索自然语言处理中的可重用表征

词向量

今天大多数用于自然语言处理的深度学习模型都依赖词向量来代表单个单词的含义。对于不太熟悉这领域的人而言,可以这样简单的理解:我们把每一种语言中的每一个单词都与一串被叫做向量的数字联系起来了。


图 1. 深度学习中将单词表示成向量是很普遍的情况。深度学习模型以词向量序列的形式读取序列化的单词,而不是以文本的形式。

预训练的词向量

有时候在为特定任务训练模型之前,词向量会被初始化成随机数,但是,也有其他很常见的方式,例如,使用 word2vec、GloVe 或者 FastText 等方法来初始化词向量。前两个方法会逐渐和这一假设结合起来:至少一个单词的部分含义是和它的用法有关的。

Word2Vec 会训练出能够预测局部语境窗(local context window)的模型;这个模型在发现一个单词之后就会去预测它附近的单词。


图 2. 像 word2vec 和 GloVe 一样的算法能够生成一些相互关联的词向量,这些词向量在自然语言中通常也是相关的。就像像图中描述的一样,「Word vectors are lists of numbers」这句话中,「vector」的向量就在「lists」、「of」「numbers」这三个词的周围。

GloVe 采用了相似的方法,它还显式地附加了每个单词和其他单词一起出现的统计信息。在这两种方法中,每个单词都由一个对应的词向量来表示,训练过程会将词向量之间的关联与单词在自然语言中的使用方式联系起来。

预训练的词向量的天然特性

将这些词向量看作空间中的点,我们就会发现一些非常有趣的关联,它可以让人回想起自然语言中单词之间的语义关联。


图 3. 男性-女性词对在向量分布的不同(Pennington 等人 2014)


图 4. a-b,c:d 这种关系指的是:c+(a-b) 会生成一个距离 d 最近的向量(Mikolov 等人,2013)


图 5. 比较级和最高级之间的向量的差别

显而易见,对于目标任务,使用由 word2vec 或者 GloVe 的中间结果作为预训练词向量去初始化任务,会给目标任务的模型带来一些优势。由此,由 word2vec 或者 GloVe 生成的词向量也就找到了在很多自然语言处理任务中进行广泛实验的方式。

隐向量

这些预训练的词向量表现出了很有趣的性质,并且相对随机初始化的词向量而言,有着显著的性能提升。但是正如之前提及的,单词很少独立出现。使用预训练词向量的模型必须学习如何去使用它们。在该项工作中,我们通过训练中间任务获得环境词向量,该环境词向量是通过截断寻找比随机初始化方法更好的向量而得出。

编码器

将词向量语境化的一个常用方法就是使用循环神经网络(RNN)。循环神经网络是能够处理可变长度向量序列的深度学习模型。这一特性使得它们很适合来处理词向量序列。为了更好地处理长序列,我们使用了一种特定种类的 RNN,即长短期记忆(LSTM)网络。在处理过程的每一步中,LSTM 输入一个词向量,输出一个被称作隐向量的新向量。这个过程常常被称之为对序列的编码,完成编码过程的神经网络就被称为编码器。


图 6. LSTM 将词向量序列作为输入,输出一个新的隐向量

双向编码器

隐向量并不包含出现在当前输入序列之后的单词的信息,但是这个很容易被改进。我们可以反向运行一个 LSTM 以得到一些反向的输出向量。我们将这一对前向-反向 LSTM 看做一个单元,通常被称作双向 LSTM。它以一个词向量序列作为输入,运行了前向和反向 LSTM,并将每个 LSTM 对应的输出连接成一个输出,然后返回最终得到的隐向量。


图 7. 包含每个单词之前和之后信息的双向编码器。

我们将两个双向 LSTM 堆叠在一起作为一个编码器。第一个双向 LSTM 处理整个序列,然后将输出作为作为第二个双向 LSTM 的输入。

机器翻译中的隐向量

因为结果证明预训练的词向量对于很多自然语言处理任务来说都是很有用的表征,所以我们要预训练我们的编码器,这样的话,它就能够输出普遍有用的隐向量。为了预训练,我们选择机器翻译作为我们的第一个任务。较之于其他的自然语言处理任务,机器翻译拥有更大的数据集。并且,对于训练通用的语境向量而言,翻译任务的本质看上去更加吸引人。例如,与其他的类似于文本分类的任务相比,翻译貌似更需要那种能够理解语言的语感。

解码器

我们通过教编码器如何将英文翻译成德文来教它生成有用的隐向量。解码器生成了针对英文句子的隐向量,另一个叫做解码器的神经网络就会在生成德语句子的时候参考这些隐向量。

正因为 LSTM 是我们编码器的基础,所以 LSTM 也在解码器中起着非常重要的作用。与编码器一样,我们在解码器中也使用两层的 LSTM。用编码器的最终状态来初始化解码器,读入一个德语词向量来启动解码器,然后就会生成解码状态向量。


图 8. 解码器使用一个单向的 LSTM 来从输入词向量创建解码器状态。

注意力机制

为了决定下一步翻译英语句子中的哪一部分,注意力机制需要从隐向量向前回溯。它使用状态向量来判别每一个隐向量的重要性,为了记录它的观察值,注意力机制会生成一个新的向量,我们可以称之为语境调整状态(context-sdjusted state)。

图 9. 注意力机制使用隐状态和解码状态来生成语境调整状态

生成模型

然后,生成器会根据语境调整状态来决定要生成哪个德语单词,接下来语境调整状态会回传到解码器中,让解码器对其翻译的结果有一个准确的感知。解码器一直重复这个过程,直至它完成所有翻译。这就是一个标准的基于注意力机制的编码器-解码器结构,它被用来学习像机器翻译一样的序列到序列任务。


图 10. 生成器使用语境调整状态来选择一个输出单词

预训练的机器翻译--长短期记忆网络(MT-LSTM)中的语境向量

当训练过程结束之后,我们可以将我们训练好的 LSTM 提取出来作为编码器用于机器翻译。我们将这个预训练的 LSTM 称作机器翻译 LSTM(MT-LSTM),并使用它生成新句子的隐向量。当我们把这些机器翻译隐向量用于其它的自然语言处理模型时,我们就把它们称作语境向量(CoVe)。


图 11. 两种通用架构:a). 我们如何训练一个编码器;b). 我们如何将训练好的编码器用在新的特定任务的模型上

使用 CoVe 进行的实验

我们的实验探索了在文本分类和问答模型中使用预训练的 MT-LSTM 生成语境向量(CoVe)的优点,但是 CoVe 可以被用在任何将向量序列作为输入的模型中。

文本分类



图 12. 双注意力机制(biattention)的分类网络

我们在两种不同种类的文本分类任务上做了实验。第一种是任务使用单一输入,它包括情感分析和问答分类。第二种拥有两个输入,但它仅包括蕴含分类。在两种任务上我们都使用双注意力分类网络(BCN)。如果仅有一个输入,我们会将其进行复制,以呈现出双输入的形式,但是同时要让模型知道避免做一些冗余的计算。不需要理解 BCN 的细节,我们就可以理解 CoVe 以及使用它的好处。

问答实验

在问答实验中我们使用了动态协同注意力网络(DCN)。而在分析机器翻译(MT)数据集对其他模型的性能影响时,我们使用了轻度修正的 DCN,然而在测试 CoVe 以及 CoVe 结合字符向量时的全局效果时,我们使用了修正的 DCN+。


表 1: 我们实验中所有的数据集和任务

Glove+CoVe

对于每一个任务,我们都用表征输入序列的不同方式进行实验。我们可以使用随机初始化的词向量,也可以使用 Glove,或者使用 Glove 和 CoVe 联合得出的词向量。在最后一种情况下,我们通过一个预训练的 MT-LSTM 来运行它,以得到 CoVe 序列,我们用对应的 Glove 序列来扩展每一个 CoVe 序列。MT-LSTM 和 Glove 都没有作为分类任务或者问答模型训练过程的一部分。

实验结果表明:包括 CoVe 和 Glove 的情况总是比随机初始化的词向量和单独使用 Glove 的情况具有更好的性能。


图 13. 结合 Glove 和 CoVe 能够改善验证性能。

更多的机器翻译-->更好的语境向量

改变训练 MT-LSTM 时所用的数据量表明:更大规模的数据集会得到更高质量的 MT-LSTM,这里的更高质量的模型意味着用它生成的 CoVe 通常会在分类任务和问答任务上产生更好的性能。

结果表明,在较小的机器翻译数据集上使用 CoVe 训练得到的 MT-LSTM 带来的性能提升是较小的。在一些情况中,使用小规模的机器翻译数据集训练的到的 MT-LSTM 会生成有损于模型性能的 CoVe。这也许意味着使用 CoVe 得到的性能提升是来自于强劲的 MT-LSTM 模型。这也意味着机器翻译训练集所在的领域会影响到最终 MT-LSTM 给其它任务带来性能提升。


图 14. 训练 MT-LSTM 的数据集规模会对使用 CoVe 的模型的验证性能产生明显地影响。在这里,MT-Small 是 2016 年的 WMT 多模数据集,MT-Medium 是 2016 IWSLT 训练集,MT-Large 是 2017 年的 WMT 新闻追踪数据集

语境向量和字符向量

在这些实验中,我们尝试着在 Glove 和 CoVe 中添加字符向量。结果表明,对于一些任务,字符向量会和 Glove 以及 CoVe 一起产生更好的性能。这意味着 CoVe 给字符级别以及单词级别的信息带来了补充信息。


图 15. CoVe 与字符级别以及单词级别的信息是互补的

测试性能

我们最好的模型都使用了 Glove、CoVe 以及字符级别的向量。我们对每种任务中验证性能最高的模型在测试集上做了测试。上图表明添加 CoVe 总能够从起点开始就提升性能,下表表明,我们的模型足以在 7 个任务测试集中的 3 个上达到目前最高水平。



表 2. 在测试的时候(2017.7.12),我们的模型与其他机器学习方法的性能对比

有一个有趣之处值得注意,就像我们使用机器翻译数据来改善我们的模型一样,SST-2 和 IMDb 任务的目前最先进水平的模型也使用外部的监督训练集来改善模型。对于 SST-2 任务,最好的模型使用了 8200 万条无标签的亚马逊评论,IMDb 任务的最好模型使用了 50000 条无标签的 IMD 评论,以及 22500 条监督训练样本。这两种方法都用了比机器翻译数据集更加相似的数据来扩展数据。这些模型的优点可能会突出附加数据的种类和有益额外数据之间的联系

结论

我们展示了如何训练神经网络来实现机器翻译,如何让模型去学习语境中单词的表征,我们还展示了能够使用一部分网络(MT-LSTM)去帮助网络学习其他的自然语言处理任务。MT-LSTM 给分类任务和问答模型提供的语境向量(也就是 CoVe),并令它们得到了性能提升。我们在训练 MT-LSTM 时使用的数据越多,模型性能的提升就越大,这或许和使用其他形式的预训练向量表征带来的性能提升是互补的。通过结合来自于 Glove、CoVe、字符向量的信息,我们能够在很多自然语言处理任务上提升基准模型的性能

代码发布

我们希望我们最好的 MT-LSTM 模型(就是那个我们用来生成 CoVe 的最佳模型)能够进一步激发对自然语言处理中可重用表征的探索。代码包括在 PyTorch 上如何生成 CoVe 的例子(代码请参见原文链接)。

版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。
阅读量: 101
0