自然语言处理NLP总结:时下最好的通用词和句子嵌入方法
2018年05月17日 由 yuxiangyu 发表
607830
0
词和句子的嵌入已成为所有基于深度学习的自然语言处理(NLP)系统的重要组成部分。
它们在固定长度的稠密向量中编码单词和句子,以大幅度提高神经网络处理文本数据的能力。
大趋势是对通用嵌入的追求:在大型语料库上预训练好的嵌入,可以插入各种下游任务模型(情感分析,分类,翻译...),通过在更大的数据集中学习一些常用的词句表示,从而自动提高它们的性能。
这是一种迁移学习。
虽然句子的无监督表示学习已经成为相当长一段时间的规范,但最近几个月已经看到了向2017年末/ 2018年初提出的一些非常有趣的提议:转向监督和多任务学习方案。
通用词/句子嵌入的最新趋势。
因此,这篇文章简要介绍了自然语言处理(NLP)通用词和句子嵌入的最新技术:
- 强/快的基线:FastText,Bag-of-Words(词袋)
- 最先进的模型:ELMo,Skip-Thoughts,Quick-Thoughts,InferSent,MILA / MSR的通用句子表示和Google的通用句子编码器。
我们先从词嵌入开始。
词嵌入的最新发展
在过去的五年里,人们已经提出了大量可能的嵌入词汇的方法。最常用的模型是word2vec和GloVe,它们都是基于分布假设的无监督方法(在相同上下文中的单词往往具有相似的含义)。
虽然有些人通过结合语义或句法知识的监督来增强这些无监督的方法,但纯粹的无监督方法在2017-2018中发展非常有趣,最著名的是FastText(word2vec的扩展)和ELMo(最先进的上下文词向量)。
F astText由Tomas Mikolov团队在2013年提出word2vec框架开发,引发了关于通用词嵌入研究的爆炸式增长。
FastText对原始word2vec向量的主要改进是包含了字符n-gram,它允许为没有出现在训练数据中的单词计算单词表示。
FastText向量训练速度超快,可在157种语言的Wikipedia和Crawl训练中使用。他们是一个很好的基线。
深度语境化的单词表示(ELMo)最近通过提升数量在词汇嵌入方面提高了水平。它们由艾伦研究所开发,将于6月初在NAACL 2018年发布。
在ELMo中,每个单词被赋予一个表示,它是它们所属的整个语料库句子的函数。所述的嵌入从计算
的两层双向语言模型(LM)的内部状态,因此得名“ELMo”:Embeddings from Language Models。
ELMo的特点:
- ELMo的输入是特征(characters )而不是单词。因此,他们可以利用子字词单元来计算有意义的表示,即使对于词典外的词(如FastText)也是如此。
- ELMo是biLMs几层激活的连接。语言模型的不层对单词上的不同类型的信息进行编码。连接所有层可以自由组合各种文字表示,以提高下游任务的性能。
现在,让我们谈谈通用句子嵌入。
通用句子嵌入的兴起
目前有很多有竞争力的学习句子嵌入的方案。尽管像平均词嵌入这样的简单基线始终效果不错,但一些新颖的无监督和监督方法以及多任务学习方案已于2017年末至2018年初出现,并且引起了有趣的改进。
让我们快速浏览目前研究的四种方法:从简单的词向量平均基线到无监督/监督方法和多任务学习方案。
在这一领域有一个普遍的共识,即直接平均一个句子的词向量(即所谓的“单词”方法)的简单方法为许多下游任务提供了一个强大的基线。
Arora等人的工作详细介绍了计算这种基线的一个很好的算法。去年在ICLR上发表了一个简单但有效的句子嵌入基线:使用你选择的热门词语嵌入,在线性加权组合中对一个句子进行编码,并执行一个通用组件移除(移除它们的第一主成分上的向量)。这种通用的方法具有更深入而强大的理论动机,它依赖于一个使用语篇向量上的生成模型的随机游走来生成文本。
除了简单的平均,第一个主要的建议是使用无监督的训练目标,从Jamie Kiros和他的同事在2015年提出的Skip-thoughts向量开始。
无监督方案将句子嵌入学习作为学习的副产,以预测句子内连贯的句子顺序或句子中连贯的连续从句。这些方法可以(理论上)使用任何文本数据集,只要它包含以连贯方式并列的句子/子句。
Skip-thoughts向量是学习无监督句子嵌入的典型例子。它可以作为为词嵌入而开发的跳跃词模型的句子的等价物:我们试着预测一个句子的周围句子,而不是预测单词周围的单词。该模型由基于RNN的编码器 - 解码器组成,该解码器被训练用于重构当前句子周围的句子。
Skip-Thought论文中有一个有趣的见解是词汇扩展方案:Kiros等人在训练过程中,通过在RNN单词嵌入空间和一个更大的单词嵌入(如word2vec)之间进行线性变换,来处理未见过的单词。
Quick-thoughts向量 是今年在ICLR上发布的Skip-thoughts向量的最新发展。在这项工作中,预测下一句话的任务被重新定义为一个分类任务:解码器被一个分类器所取代,该分类器必须在一组候选者中选择下一句。它可以被解释为对生成问题的一种判别近似。
该模型的一个优势是其训练速度(与Skip-thoughts模型相比数量级)使其成为开发大量数据集的有竞争力的解决方案。
快速思考分类任务。
在很长一段时间里,监督学习句子嵌入被认为是比无监督的方法提供更低质量的嵌入,但是这个假设最近被推翻,部分是在推论结果的发布之后。
与之前详述的无监督方法不同,监督学习需要标注数据集来标注某些任务,如自然语言推理或机器翻译,构成特定的任务选择的问题和相关问题的数据集的大小需要质量好的嵌入。在讨论这个问题之前,让我们看看2017年发布的推理突破的背后是什么。
因其简单的体系结构, 推理是一个有趣的方法。它使用句子自然语言推理数据集(一组570k对标有3个类别的句子:中性,矛盾和隐含)来在句子编码器之上训练分类器。两个句子都使用相同的编码器进行编码,而分类器则是根据两个句子嵌入构建的一对表示进行训练。Conneau等人 采用双向LSTM完成最大池操作员作为句子编码器。
从NLI数据集中学习的监督句子嵌入模型(InferSent)
除了通常的寻找最佳神经网络模型的探索之外,推论的成功还提出了以下问题:
什么样的监督训练任务会学习更好地推广下游任务的句子嵌入?
多任务学习可以看作是Skip-Thoughts,推理和相关的无监督/监督学习方案的泛化,它通过试图在训练方案中结合几个训练目标来回答这个问题。
最近几个关于多任务学习的提议于2018年初发布。让我们简要的看一下MILA / MSR的通用句子表示和Google的通用句子编码器。
在描述MILA和Microsoft蒙特利尔的工作并在ICLR 2018(https://arxiv.org/abs/1804.00079)中提出的论文中,Subramanian等观察到,为了能够推广各种不同的任务,它是编码同一句子的多个方面是必要的。
因此,作者利用一对多的多任务学习框架,通过在多个任务之间切换来学习通用语句嵌入。选择的6个任务共享由双向GRU获得的相同语句嵌入。实验表明,当添加多语言神经机器翻译任务时,可以更好地学习语法属性,通过解析任务学习长度和词序并且训练自然语言推断编码语法信息。
Google的通用句子编码器,于2018年初发布,采用相同的方法。他们的编码器使用一个转换网络,该网络经过各种数据源和各种任务的训练,目的是动态地适应各种自然语言理解任务。一个预训练的版本已经提供给了TensorFlow。
详见:https://www.tensorflow.org/hub/modules/google/universal-sentence-encoder/1