NLP发展简史
文章目录
前言
原文链接
这是由两部分组成的系列文章中的第一篇。该系列扩展了赫尔曼·坎珀(Herman Kamper)和我在2018年深度学习印达巴(Deep Learning Indaba)上组织的自然语言处理前沿会议。整个会议的幻灯片可以在这里找到。这篇文章将讨论NLP的主要最新进展,重点是基于神经网络的方法。第二篇文章将讨论NLP中的公开问题。
免责声明 这篇文章试图将15年的工作浓缩成当今最相关的八个里程碑,从而省略了许多相关和重要的发展。特别是,它严重偏向于目前的神经方法,这可能会给人一种错误的印象,认为在这一时期没有其他方法具有影响力。更重要的是,这篇文章中提出的许多神经网络模型都建立在同一时代的非神经里程碑之上。在这篇文章的最后一节,我们将重点介绍这些为以后的方法奠定基础的有影响力的工作。
2001 - 神经语言模型
语言建模是在给定先前单词的情况下预测文本中的下一个单词的任务。这可能是最简单的语言处理任务,具有具体的实际应用,如智能键盘和电子邮件回复建议(Kannan等人,2016年)。不出所料,语言建模有着悠久的历史。经典的方法是基于n元语法,并使用平滑来处理看不见的n元语法(Kneser&Ney,1995)。
第一个神经语言模型,前馈神经网络是由Bengio等人在2001年提出的,如下面的图1所示。
图1:前馈神经网络语言模型(Bengio等人,2001;2003)
该模型用前n个单词的输入向量表示为输入,在表C中进行查找。现在,这样的向量被称为单词嵌入。这些字嵌入被串联并馈送到隐藏层,然后隐藏层的输出被提供给Softmax层。有关该模型的更多信息,请查看此帖子。
最近,用于语言建模的前馈神经网络已经被递归神经网络(RNNS;Mikolov等人,2010年)和长短期记忆网络(LSTMS;Graves,2013)所取代。近年来提出了许多扩展经典LSTM的新语言模型(请查看本网页以获取概述)。尽管有这些发展,经典的LSTM仍然是一个强有力的基线(Melis等人,2018年)。即使是Bengio等人的经典前馈神经网络在某些情况下也与更复杂的模型竞争,因为这些模型通常只学习考虑最新的单词(Daniluk等人,2017年)。因此,更好地理解这些语言模型捕捉到什么信息是一个活跃的研究领域(Kuncoro等人,2018年;Blevins等人,2018年)。
语言建模通常是应用RNN时选择的培训场所,并且已经成功地激发了人们的想象力,许多人都是通过Andrej的博客文章第一次接触到RNN的。语言建模是无监督学习的一种形式,严乐存也称其为预测性学习,并指出这是获得常识的先决条件(参见他的NIPS 2016幻灯片)。语言建模最值得注意的方面可能是,尽管它很简单,但它是本文后来讨论的许多进展的核心:
- 单词嵌入:word2vec的目标是简化语言建模。
- 序列到序列模型:这种模型通过一次预测一个单词来生成输出序列。
- 预先训练的语言模型:这些方法使用语言模型中的表示法进行迁移学习。
相反,这意味着NLP中许多最重要的最新进展都简化为一种语言建模形式。为了进行“真正的”自然语言理解,仅仅从原始文本中学习可能是不够的,我们需要新的方法和模型。
2008 - 多任务学习
多任务学习是在多个任务上训练的模型之间共享参数的一种通用方法。在神经网络中,通过将不同层的权重捆绑在一起就可以很容易地做到这一点。多任务学习的思想最早是由Rich Caruana于1993年提出的,并被应用于道路跟踪和肺炎预测(Caruana,1998)。直观地说,多任务学习鼓励模型学习对许多任务有用的表示法。这对于学习常规的低级表示、集中模型的注意力或在训练数据数量有限的设置中特别有用。想要更全面地了解多任务学习,请看这篇文章。
多任务学习在2008年由Collobert和Weston首次应用于NLP的神经网络。在他们的模型中,查找表(或单词嵌入矩阵)在两个针对不同任务训练的模型之间共享,如下面的图2所示:
图2:单词嵌入矩阵的共享(Collobert&Weston,2008;Collobert等人,2011)
共享单词嵌入使模型能够协作和共享单词嵌入矩阵中的一般低级信息,该矩阵通常构成模型中最大数量的参数。科洛伯特和韦斯顿在2008年发表的论文证明,除了使用多任务学习之外,它还具有影响力。它率先提出了一些想法,如预训练单词嵌入和对文本使用卷积神经网络(CNN),这些想法在过去几年才被广泛采用。它在2018年ICML大会上获得了时间测试奖(请参阅与论文相关的时间测试获奖演讲)。
多任务学习现在被广泛用于各种NLP任务,利用现有的或\“人工\”任务已成为NLP剧目中的一个有用工具。有关不同辅助任务的概述,请看这篇文章。虽然参数的共享通常是预定义的,但在优化过程中也可以学习不同的共享模式(Ruder等人,2017年)。随着越来越多的人在多任务上对模型进行评估,以衡量其泛化能力,多任务学习变得越来越重要,最近提出了多任务学习的专用基准(Wang等人,2018年;McCann等人,2018年)。
2013 - 单词嵌入
文本的稀疏向量表示,即所谓的词袋模型,在自然语言处理领域有着悠久的历史。正如我们在上面看到的,单词或单词嵌入的密集向量表示早在2001年就已被使用。米科洛夫等人在2013年提出的主要创新。是通过去除隐藏层并接近目标来使这些单词嵌入的训练更有效率。虽然这些改变本质上很简单,但它们使得-连同高效的word2vec实现-能够进行大规模的单词嵌入训练。
Word2vec有两种风格,可以在下面的图3中看到:连续词袋(CBOW)和跳过语法。它们的目的不同:一种根据周围的单词预测中心词,而另一种则相反。
图3:连续的词袋和跳格结构(Mikolov等人,2013a;2013b)
虽然这些嵌入在概念上与通过前馈神经网络学习的嵌入没有什么不同,但在非常大的语料库上进行的训练使它们能够捕获性别、动词时态和国家-首都关系等单词之间的特定关系,如下面的图4所示。
图4:Word2VEC(Mikolov等,2013A)捕获的关系
这些关系及其背后的意义最初激发了人们对单词嵌入的兴趣,许多研究已经调查了这些线性关系的起源(Arora等人,2016;Mimno&Thompson,2017;Antoniak&Mimno,2018;Wendlandt等人,2018)。然而,巩固单词嵌入作为当前NLP的支柱的是,使用预先训练的嵌入作为初始化被证明在广泛的下游任务中提高了性能。虽然word2vec捕捉到的关系具有直观且近乎神奇的性质,但后来的研究表明,word2vec本身并没有什么特殊之处:单词嵌入也可以通过矩阵因式分解来学习(Pennington等人,2014;Levy&Goldberg,2014),经过适当的调整,SVD和LSA等经典矩阵因式分解方法取得了类似的结果(Levy等人,2015)。
从那时起,人们在探索单词嵌入的不同方面做了大量工作(正如原始论文惊人的被引用数量所表明的那样)。看看这篇文章可以找到一些趋势和未来的方向。尽管有了许多发展,word2vec仍然是一个流行的选择,并在今天得到了广泛的使用。Word2vec的覆盖范围甚至超出了单词层面:负采样跳过语法(Skip-gram with Negative Samples)是基于当地上下文学习嵌入的一个方便目标,已被应用于学习句子的表示(Mikolov&Le,2014;Kiros等人,2015)–甚至超越了NLP–网络(Grover&Leskovec,2016)和生物序列(Asgari&Mofrad,2015)等。
一个特别令人兴奋的方向是将不同语言的单词嵌入到同一空间中,以实现(零镜头)跨语言迁移。以完全无监督的方式学习好的投影(至少对于类似的语言)变得越来越有可能,这将打开低资源语言和无监督机器翻译的应用程序(Lample等人,2018年;Artexe等人,2018年)。看一看(Ruder等人,2018年)的概述。
2013-NLP的神经网络
2013年和2014年标志着神经网络模型开始在NLP中被采用。三种主要类型的神经网络得到了最广泛的应用:递归神经网络、卷积神经网络和递归神经网络。
递归神经网络(RNNs)是处理自然语言处理中普遍存在的动态输入序列的一种明显的选择。香草RNN(Elman,1990)很快被经典的长-短期记忆网络(Hochreiter&Schmidhuber,1997)所取代,后者被证明对消失和爆炸的梯度问题更有弹性。2013年前,RNN仍然被认为很难培养;伊利亚·萨茨凯弗(Ilya Sutskever)的博士论文是改变这一声誉的关键例子。LSTM单元的可视化可以在下面的图5中看到。双向LSTM(Graves等人,2013)通常用于处理左上下文和右上下文。
图5:LSTM网络(来源:Chris Olah)
随着卷积神经网络(CNN)在计算机视觉中的广泛应用,它们也开始应用于语言(Kalchbrenner等人,2014;Kim等人,2014)。用于文本的卷积神经网络仅在二维运行,过滤器只需要沿时间维度移动。下面的图6显示了NLP中使用的典型CNN。
图6:用于文本的卷积神经网络(Kim,2014)
卷积神经网络的优点在于它们比RNN更可并行化,因为每个时间步的状态仅依赖于局部上下文(通过卷积运算),而不是RNN中的所有过去状态。CNN可以用更广泛的接受域扩展,使用扩张的卷积来捕捉更广泛的上下文(Kalchbrenner等人,2016年)。CNN和LSTM也可以组合和堆叠,卷积可以用来加速LSTM。
卷积神经网络的优点在于它们比RNN更可并行化,因为每个时间步的状态仅依赖于局部上下文(通过卷积运算),而不是RNN中的所有过去状态。CNN可以用更广泛的接受域扩展,使用扩张的卷积来捕捉更广泛的上下文(Kalchbrenner等人,2016年)。CNN和LSTM也可以组合和堆叠,卷积可以用来加速LSTM。
图7:递归神经网络(Socher等人,2013)
递归神经网络自下而上构建序列的表示形式,而RNN则从左到右或从右到左处理句子。在树的每个节点上,通过合成子节点的表示来计算新的表示。由于树也可以被视为对RNN施加不同的处理顺序,因此LSTM自然被扩展到树。
不仅RNN和LSTM可以扩展为使用分层结构。单词嵌入不仅可以基于本地,也可以基于语法上下文学习(Levy&Goldberg,2014);语言模型可以基于句法堆栈生成单词(Dyer等人,2016年);图形卷积神经网络可以在树上操作(Bastings等人,2017年)。
2014-顺序到顺序模型
2014年,Sutskever等人。提出了序列到序列学习,这是一个使用神经网络将一个序列映射到另一个序列的通用框架。在该框架中,编码器神经网络逐个符号地处理句子符号,并将其压缩成矢量表示;然后解码器神经网络基于编码器状态逐个符号地预测输出符号,在每个步骤将先前预测的符号作为输入,如下面的图8所示。
图8:序列到序列模型(Sutskever等人,2014)
机器翻译被证明是这个框架的杀手级应用。2016年,谷歌宣布开始用神经机器翻译模型取代其基于短语的整体式机器翻译模型(Wu等人,2016年)。根据Jeff Dean的说法,这意味着用500行神经网络模型取代50万行基于短语的机器翻译代码。
由于其灵活性,这个框架现在是自然语言生成任务的首选框架,不同的模型承担编码器和解码器的角色。重要的是,解码器模型不仅可以以序列为条件,而且可以以任意表示为条件。这使得例如能够基于图像(Vinyals等人,2015)(如下面的图9所示)、基于表格(Lebret等人,2016)以及基于源代码改变的描述(Loyola等人,2017)以及许多其他应用来生成字幕。
图9:基于图像生成标题(Vinyals等人,2015)
序列到序列学习甚至可以应用于NLP中常见的结构化预测任务,其中输出具有特定的结构。为简单起见,输出是线性化的,如下面图10中的选区解析所示。神经网络已经证明了在有足够数量的训练数据用于选区解析(Vinyals等人,2015年)和命名实体识别(Gillick等人,2016年)的情况下,直接学习产生这样的线性化输出的能力。
图10:将选区解析树线性化(Vinyals等人,2015)
序列编码器和解码器通常基于RNN,但也可以使用其他模型类型。新的体系结构主要是在机器翻译中出现的,它充当了顺序到顺序体系结构的培养皿。最近的模型是深度LSTM(Wu等人,2016)、卷积编码器(Kalchbrenner等人,2016;Gehring等人,2017)、变压器(Vaswani等人,2017),以及LSTM和Transformer的组合(Chen等人,2018)。
2015 - Attention
注意(Bahdanau等人,2015)是神经机器翻译的核心创新之一,也是使神经机器翻译模型优于经典的基于短语的机器翻译系统的关键思想。序列到序列学习的主要瓶颈是需要将源序列的全部内容压缩成固定大小的向量。注意通过允许解码器回顾源序列隐藏状态来缓解这一问题,然后将源序列隐藏状态作为加权平均提供给解码器作为附加输入,如下面的图11所示。
图11:Attention(巴赫达努等人,2015年)
有不同形式的注意可用(Luong等人,2015年)。这里有一个简短的概述。在任何需要根据输入的某些部分做出决定的任务中,注意力都是广泛适用的,并且有潜在的用处。它已被应用于语篇分析(Vinyals等人,2015)、阅读理解(Hermann等人,2015)和一次性学习(Vinyals等人,2016)等许多领域。输入甚至不需要是序列,但可以由其他表示组成,就像在图像字幕的情况下(Xu等人,2015年),这可以在下面的图12中看到。注意力的一个有用的副作用是,通过基于注意力权重检查输入的哪些部分与特定输出相关,它提供了一个难得的-如果只是肤浅的–对模型内部工作原理的一瞥。
图12:图像字幕模型中的视觉注意力,表明模型在生成单词\“飞盘\”时关注的是什么。(徐等人,2015年)
注意力也不局限于只看输入序列;自我注意可以用来查看句子或文档中的周围单词,以获得更多上下文敏感的单词表示。多层自我关注是Transformer架构的核心(Vaswani等人,2017年),这是NMT当前最先进的模型。
2015-基于内存的网络
注意力可以看作是模糊记忆的一种形式,记忆由模型过去的隐藏状态组成,模型选择从记忆中检索什么。想要更详细地了解注意力及其与记忆的联系,请看这篇文章。已经提出了许多具有更明确记忆的模型。它们有不同的变体,例如神经图灵机(Graves等人,2014)、记忆网络(Weston等人,2015)和端到端记忆Newtorks(Sukhbaata等人,2015)、动态记忆网络(Kumar等人,2015)、神经可区分计算机(Graves等人,2016)和循环实体网络(Henaff等人,2017)。
存储器通常基于与注意类似的当前状态的相似性而被访问,并且通常可以被写入和读取。模型在实现和利用内存的方式上有所不同。例如,端到端存储网络多次处理输入,并更新存储以实现多步骤推理。神经图灵机还具有基于位置的寻址,这使它们能够学习简单的计算机程序,如排序。基于记忆的模型通常应用于任务,在这些任务中,在更长的时间跨度内保留信息应该是有用的,比如语言建模和阅读理解。内存的概念非常多用:知识库或表可以用作内存,而内存也可以根据整个输入或其特定部分填充。
2018-预训练的语言模型
预先训练的单词嵌入是上下文不可知的,只用于初始化我们模型中的第一层。近几个月来,一系列受监督的任务被用于预训练神经网络(Conneau等人,2017年;McCann等人,2017年;Subramanian等人,2018年)。相比之下,语言模型只需要未标记的文本;因此,培训可以扩展到数十亿个符号、新域和新语言。预先训练的语言模型于2015年首次提出(Dai&Le,2015);直到最近,它们才被证明在一系列不同的任务中都是有益的。语言模型嵌入可以用作目标模型中的功能(Peters等人,2018年),或者语言模型可以根据目标任务数据进行微调(Ramachandran等人,2017年;Howard&Ruder,2018年)。如下面的图13所示,添加语言模型嵌入在许多不同的任务中提供了比现有技术更大的改进。
图13:语言模型嵌入对最先进技术的改进(Peters等人,2018年)
已有研究表明,预先训练的语言模型可以用明显较少的数据进行学习。由于语言模型只需要未标记的数据,因此对于有标记的数据稀缺的低资源语言来说,它们特别有用。有关预先培训的语言模型潜力的更多信息,请参阅本文。