摘要: 愈来愈火的NLP到底经历了什么?html
本文扩展了Herman Kamper和我在2018年深度学习Indaba组织的天然语言处理前沿课程。整个课程的幻灯片均可以在这里找到,这篇文章将主要讨论NLP中基于神经网络方法的近期进展。git
免责声明:本文尝试将大约15年NLP的发展历程浓缩为今天最相关的八个里程碑,所以遗漏了许多相关和重要的发展。特别是,它严重偏向于当前的神经方法,这可能给人留下此期间没有其余有影响力方法的错误影响。github
2001年-神经语言模型网络
语言建模是在给定前面的单词的状况下预测文本中的下一个单词的任务。 它多是最简单的语言处理任务,具备实际应用,如智能键盘和电子邮件响应建议(Kannan et al.,2016)。语言建模有着丰富的历史。基于n-gram的经典方法采用平滑处理看不见的n-gram(Kneser&Ney,1995)。Bengio等人于2001年提出了第一种神经语言模型,一种前馈神经网络,以下图1所示。ide
该模型把n个能够在表C中查找的先前单词向量表示做为输入。如今,这种向量被称为词嵌入。这些词嵌入被链接并送入隐藏层,而后将其输出提供给softmax层。想要了解更多该模型的信息,请查看此文章。工具
最近,前馈神经网络已被用于语言建模的递归神经网络(RNN; Mikolov等人,2010)和长短时间记忆网络(LSTM; Graves,2013)所取代。近年来已经提出了许多经典LSTM的新语言扩展模型(请参阅此页面以得到概述)。尽管有这些发展,但经典的LSTM仍然是一个强大的基线(Melis等,2018)。即便Bengio等人的经典前馈神经网络在某些环境中也与更复杂的模型竞争,但这些一般只学会考虑最近的词(Daniluk等,2017)。如何理解这些语言模型捕获的信息是一个活跃的研究领域(Kuncoro等,2018; Blevins等,2018)。post
语言建模一般是应用RNN时的首选训练场,并成功捕捉到了想象力,许多人经过Andrej的博客文章开始了解。语言建模是无监督学习的一种形式,Yann LeCun也将预测性学习做为获取常识的先决条件(参见NIPS 2016的Cake幻灯片)。 关于语言建模最显著的方面多是,尽管它很简单,但它是本文讨论的许多后期进展的核心:性能
词嵌入:word2vec的目标是简化语言建模;学习
序列到序列模型:这种模型经过一次预测一个词来生成输出序列;优化
预训练语言模型:这些方法使用语言模型中的表示来进行迁移学习;
这反过来意味着NLP中许多最重要的最新进展减小为一种语言建模形式。 为了作“真正的”天然语言理解,仅仅从原始形式的文本中学习多是不够的,咱们将须要新的方法和模型。
2008-多任务学习
多任务学习是在多个任务上训练的模型之间共享参数的通常方法。在神经网络中,这能够经过绑定不一样层的权重来轻松实现。多任务学习的想法在1993年由Rich Caruana首次提出,并应用于道路跟踪和肺炎预测(Caruana,1998)。直观地说,多任务学习鼓励模型学习对许多任务有用的表示。特别对于学习通常的低级表示,集中模型的注意力或在有限量的训练数据的设置中特别有用。有关多任务学习的更全面概述,请查看此文章。
Collobert和Weston于2008年首次将多任务学习应用于NLP的神经网络。 在他们的模型中,查找表(或词嵌入矩阵)在两个在不一样任务上训练的模型之间共享,以下面的图2所示。
共享词嵌入使模型可以在词嵌入矩阵中协做和共享通常的低级信息,这一般构成模型中最大数量的参数。Collobert和Weston在2008年的论文中证实了它在多任务学习中的应用,它引领了诸如预训练词嵌入和使用卷积神经网络(CNN)之类的思想,这些思想仅在过去几年中被普遍采用。它赢得了ICML 2018的时间考验奖(参见此时的时间考验奖论文)。
多任务学习如今用于各类NLP任务,而且利用现有或“人工”任务已成为NLP指令集中的有用工具。有关不一样附加任务的概述,请查看此文章。虽然一般预先定义参数的共享,可是在优化过程期间也能够学习不一样的共享模式(Ruder等,2017)。随着模型愈来愈多地在多项任务中被评估来评估其泛化能力,多任务学习愈来愈重要,最近提出了多任务学习的专用基准(Wang et al,2018; McCann et al,2018)。
2013-词嵌入
文本的稀疏向量表示,即所谓的词袋模型,在NLP中具备悠久的历史。正如咱们在上面所看到的,早在2001年就已经使用了词或词嵌入的密集向量表示。 Mikolov等人在2013年提出的主要创新,是经过移动隐藏层和近似目标来使这些词嵌入的训练更有效率。虽然这些变化本质上很简单,但它们与高效的word2vec一块儿实现了大规模的词嵌入训练。
Word2vec有两种模式,能够在下面的图3中看到:连续的词袋(CBOW)和skip-gram。它们的目标不一样:一个基于周围的词预测中心词,而另外一个则相反。
虽然这些嵌入在概念上与使用前馈神经网络学习的嵌入技术没有什么不一样,可是对很是大的语料库的训练使它们可以捕获诸如性别,动词时态和国家–首都关系之类的词之间的某些关系,由图4可知:
这些关系及其背后的意义引起了对嵌入词的初步兴趣,许多研究调查了这些线性关系的起源(Arora等,2016; Mimno&Thompson,2017; Antoniak&Mimno,2018; Wendlandt等,2018))。然而,使用预训练嵌入做为初始化的固定词嵌入,把它做为当前NLP的主要内容被证实能够提升各类下游任务的性能。
虽然捕获的关系word2vec具备直观且几乎神奇的性能,但后来的研究代表word2vec没有任何固有的特殊性:经过矩阵分解也能够学习词嵌入(Pennington等,2014; Levy&Goldberg,2014)和经过适当的调整,经典的矩阵分解方法(如SVD和LSA)能够得到相似的结果(Levy等,2015)。
从那时起,许多工做已经开始探索词嵌入的不一样方面,能够经过这篇文章了解一些趋势和将来方向。尽管有许多发展,但word2ve仍然是现在被普遍使用的一种流行的选择。Word2vec的范围甚至超出了词级别:带有负抽样的skip-gram,一个基于本地环境学习嵌入的方便目标,已被应用于学习句子的表示(Mikolov&Le,2014; Kiros et al.,2015)-甚至超越NLP,应用到网络(Grover&Leskovec,2016)和生物序列(Asgari&Mofrad,2015)等。
一个特别使人兴奋的方向是将不一样语言的词嵌入投影到同一空间中以实现(零射击)跨语言转移。愈来愈有可能以彻底无监督的方式(至少对于相似语言)学习良好的投影,这开启了低资源语言和无监督机器翻译的应用(Lample等,2018; Artetxe等,2018)。请查看(Ruder等,2018)的概述。
2013年-NLP的神经网络
2013年和2014年是神经网络模型开始应用于NLP的标志年份。三种主要类型的神经网络被普遍使用:递归神经网络、卷积神经网络、循环神经网络。
递归神经网络(RNN)是处理NLP中广泛存在的动态输入序列问题的明显选择。 Vanilla RNNs(Elman,1990)很快被经典的长短时间记忆网络(Hochreiter&Schmidhuber,1997)所取代,后者证实其对消失和爆炸梯度问题更具弹性。在2013年以前,RNN仍然被认为很难训练,Ilya Sutskever的博士论文是改变这种现状的一个关键例子。LSTM细胞可视化能够在下面的图5中看到。双向LSTM(Graves等,2013)一般用于处理左右上下文。
随着卷积神经网络(CNN)被普遍用于计算机视觉,它们也开始应用于文本(Kalchbrenner等,2014; Kim等,2014)。用于文本的卷积神经网络仅在两个维度上操做,其中滤波器仅须要沿时间维度移动。下面的图6显示了NLP中使用的典型CNN。
卷积神经网络的一个优势是它们比RNN更可并行化,由于每一个时间步的状态仅取决于本地环境(经过卷积运算)而不是像RNN取决过去全部状态。CNN可使用扩张卷积扩展到更宽的感觉野,以捕捉更普遍的背景(Kalchbrenner等2016)。 CNN和LSTM也能够组合和堆叠,而且可使用卷积来加速LSTM。
RNN和CNN都将语言视为一个序列。然而,从语言学的角度来看,语言本质上是等级的:单词被组成高阶短语和子句它们自己能够根据一组生产规则递归地组合。将句子视为树而不是序列的语言启发思想产生了递归神经网络,这能够在下面的图7中看到:
与从左到右或从右到左处理句子的RNN相比,递归神经网络从下到上构建序列的表示。在树的每一个节点处,经过组合子节点的表示来计算新表示。因为树也能够被视为在RNN上施加不一样的处理顺序,所以LSTM天然地扩展到树。
RNN和LSTM不只仅能够被扩展来使用分层结构,并且不只能够根据本地语言学习词嵌入,并且能够基于语法背景来学习词嵌入(Levy&Goldberg,2014);语言模型能够基于句法堆栈生成单词(Dyer et al。,2016); 图形卷积神经网络能够在树上运行(Bastings等,2017)。