文章链接:https://arxiv.org/pdf/1708.02709.pdf
Abstract深度学习方法利用多层处理结构来学习数据中的层次化表示,在很多领域都得到了SOTA的结果。最近几年,NLP领域涌现了大量的深度学习模型和方法,这篇文章总结了一些比较重要的在NLP领域广泛应用的深度学习方法,并回顾其发展历程。通过总结和对比不同的模型,让我们对NLP中的深度学习有了一个更详细的了解。
Introduction自然语言处理(NLP)是一门为了自动分析和表达人类语言的理论驱动的计算机技术。NLP的研究最早可以追溯到打孔卡和批处理时代,在当时,处理一句话就要7分钟,而现在,我们可以在1秒钟内处理上百万的网页[1]。NLP 使得计算机可以执行各种各样不同层次的自然语言相关任务,从词性标注到机器翻译到对话系统。
深度学习架构和算法已经在诸如计算机视觉和模式识别领域取得了令人瞩目的成果。在这一趋势下,最近NLP领域的研究也日益聚焦到深度学习方法(Fig. 1)。几十年来,针对NLP问题的机器学习方法都是基于高维稀疏特征训练浅层模型(如SVM和logistic regression),在过去几年中,基于神经网络的稠密向量表示已经在很多NLP任务上得到了更好的结果,主要是词向量[2, 3]的成功和深度学习方法[4]引领了这一趋势。与此对比的是,基于传统机器学习的NLP系统往往依赖于手工提取特征,不仅费时费力,而且往往不全。
这些年来,用于产生词向量的模型一直是浅层神经网络,并不需要特别复杂的深度学习模型来生成词向量,然而,基于深度学习的NLP模型无一例外都是用的这些词向量,用来表示词、短语、甚至句子。词向量实际上是基于词计数的传统模型和基于深度学习的NLP模型的主要差异。所以,实际上可以说是词向量的广泛应用导致了NLP领域很多SOTA的诞生[9, 10, 11, 12]。
举几个例子,Glorot et al [13] 将词向量加堆叠降噪自动编码机用于领域自适用情感分类,Blunsom[14] 提出了使用组合分类编码器来学习组合句子。从这些例子中也能看出词向量的有效性及其应用的广泛性。
词的分布式表示通常是从上下文中学到的。在上个世纪90年代,相关研究进展就奠定了分布式语义研究的基础。详细情况可以参考早期综述[16, 17]。在这基础上,后来发展出了主题模型(LDA)和语言模型。这些工作奠定了自然语言表示学习的基础。
2003年,Bengio et al [7] 提出了一种可以学习词的分布式表示的神经网络语言模型(Fig. 3)。作者认为,有了词的表示,可以按词序列的联合概率来表示句子,这样可以产生指数级数量的语义相近的句子。因此,可以提升模型的泛化能力,比如,对于没见过的句子,模型可以通过见到的类似的词组成的类似的句子来学到相关性。
在通常的CBOW模型中,上下文词一般有多个,相当于输入向量中有多个1,隐含层h的结果就是所有上下文词向量的和,这样做的局限是由此得到句子的表示本质上是词袋模型,词之间组合、顺序都没法考虑。所以后来就有人提出了直接把ngram当成词来训练[23]。
由于词向量一般都是基于左右几个词作为上下文来训练,这样会导致另一个问题,比如“好”和“坏”的上下文可能差不多,最后就训练出来“好”和“坏”的词向量也近似[24],这种词向量用于情感分析就会出问题[25]。因此,Tang等人[26] 提出了sentiment specific word embedding,训练词向量的时候,在损失函数中引入情感极性作为监督信号来缓解该问题。
使用词向量时需要注意的是它们和具体任务高度相关,Labutov 和Lipson 等人[27] 提出了特定于任务的词向量,通过微调将词向量对齐到当前任务空间。由于从头开始训练词向量需要大量时间和资源,所以一般都是基于预训练的结果进行微调。为了缓解词向量训练慢的问题,Mikolov等人 [8] 提出了负采样的方法,训练模型的时候对负样本按频率采样。
传统的词向量算法一般都是每个词对应一个唯一的词向量,这也导致了无法处理一词多义的情况。在最近的研究中,Upadhyay等人[28] 提出了解决这一缺点的创新性方法。作者利用多语言平行语料来学习一词多义的词向量。比如,英语中的bank,翻译到法语就对应两个不同的词banc和banque,分别表示金融和地理学方面的含义,利用这种多语言分布信息有助于解决一词多义问题。
表I 列出了现有流行的词向量计算框架。
这可以看成是一种原始的词向量方法,词向量是在模型训练的时候学到的。后来,Collobert [5] 对这个工作做了进一步拓展,提出了一个基于CNN的通用框架来解决各种NLP任务。这些工作引导了CNN在NLP研究者中的普及。鉴于CNN在计算机视觉中的出色表现,人们很容易相信将其用于NLP效果也会不错。
CNN可以从输入的句子中提取显著的n元语法特征,从而得到信息量丰富的潜在语义表征用于下游任务。Collobert [5],Kalchbrenner [49],Kim [50]等人率先将CNN用于NLP任务中,直接导致后续相关研究中出现了大量的基于CNN的网络结构,下面,我们简单描述基于CNN对句子建模的原理:
A. Basic CNN
1)句子建模:对于每个句子,记 w_i in R^d 为句子中第i个词的词向量,其中d是词向量维度。假设句子中有n个词,那么句子就可以表示为 bold{W} in R^{ntimes d} ,Fig. 6描述这样一句话是如何作为CNN框架的输入。
Kalchbrenner等人[49]发表了一篇著名文章提出了动态卷积网络(DCNN)对句子语义建模,一定程度上缓解了上述问题。他们的主要策略是动态k最大池化(dynamic k-max pooling),对于给定的序列p,从中挑出k个最大特征,并且保持原来的顺序,如Fig. 8所示。基于时延网络的思想,加上k-max pooling,得到最后的模型。这种模型结构可以用较小的卷积核覆盖到较广的范围,有利于积累句子中的关键信息。从Fig. 8中能看出,高层特征覆盖的句子范围差异很大,有些可以聚焦在很少的词上,有些却能覆盖整个句子。他们的模型在大量任务上都取得了显著的结果,包括情感分类和句式分类。总体来讲,这项工作分析了单个卷积核在建模上下文语义的时候的覆盖范围并提出了一种扩展其覆盖范围的方法。
从公式中可以看出s_t 的计算不仅依赖当前时刻的输入还依赖上一时刻的隐藏层状态,f是非线性激活函数,比如tanh,ReLU等,U和W是网络参数,在所有时刻是共享的。在NLP的应用中, x_t 通常就是one-hot编码或者是词向量,有时候也可以是文本的表示。
RNN网络的隐藏层状态通常是其最关键的部分,如上所述,隐藏层状态可以看成是网络对当前时间点之前的信息处理的记忆。然而,实际上,这一类简单的RNN网络存在著名的梯度消失问题,这使得网络参数很难训练,特别是离输出层较远的层。
为了解决梯度消失问题,各种基于RNN的变种被提出来,比如LSTM,GRU,ResNets,前两者是在NLP中用得最多的RNN变种。
2)Long Short-Term Memory:如Fig. 10所示,LSTM在原始RNN上加入了遗忘门,这独特的机制使其能在一定程度上解决梯度消失和梯度爆炸的问题。
C. Application
1)基于RNN的词粒度分类:RNN在词粒度分类方面有着广泛的应用,而且在很多任务上都取得了最先进的结果。Lample等人[93]提出使用双向LSTM来做命名实体识别,打破了固定窗口大小的限制,可以捕捉任意长度上下文信息,在最后一层使用了CRF。
在语言模型建模方面RNN相对传统的基于计数的方法有相当大的改进,Graves[94]在这方面做了开创性的工作,通过引入RNN来对建模复杂有较长上下文的复杂句子,除此以外,作者还提出了使用多层RNN来提升模型效果,这项研究也确立了RNN网络在NLP之外的任务上的应用。随后,Sundermeyer等人[95]在基于当前词预测下一个词的时候比较了前馈神经网络(feed-forward network)和RNN的效果,在这项研究中,他们提出了一种典型的层次网络结构来做语言模型建模,结果表明,前馈神经网络效果比传统的基于计数的方法要好,基于RNN和LSTM的网络效果要比前馈神经网络好,他们提出的一个重要的点是,他们的结论适用于其他各种任务,例如统计机器翻译[96]。
2)基于RNN的句子粒度的分类:Wang等人[25]提出了使用LSTM来对推文进行编码,然后用于推文情感极性预测,这种简单策略得到了与复杂网络DCNN可比的结果,DCNN是Kalchbrenner等人[49]提出用于赋予CNN捕捉长程依赖的一种网络结构。在针对否定短语的案例研究中,作者还发现LSTM可以捕捉到否定词not的反转效应。
和CNN类似,RNN的隐藏层状态也能用于文本的语义匹配。在对话系统中,Lowe等人[97]提出使用Dual-LSTM来匹配问题和候选答案,先将句子编码成固定长度的向量,然后基于点积相似度来对候选答案排序。
3)基于RNN的文本生成:NLP中一个有挑战性的任务就是文本生成,这也是RNN的另一个应用。基于文本或视觉数据,深度LSTM被证明可用于机器翻译、image captioning等特定任务生成合理的文本,在这种情况下,RNN被称为解码器。
在[74]中,作者提出了一种通用的编码-解码框架可以用于句子到句子的映射,其中的一个LSTM用于将输入的句子编码成一个长度固定的向量,这个LSTM也叫编码器,输入的句子可以是机器翻译任务中的“源语言”,或者是问答系统中的问题,或者是对话系统中的消息,这个固定长度的句子然后被用作另一个LSTM的初始状态,这个LSTM也叫解码器。在预估阶段,解码器一步一步生成最后的文本,每一步的生成结果同时会更新解码器的状态。beam-search经常被用于来搜索近似最优的解码序列。
Sutskever等人[74]将4层LSTM用于端到端机器翻译任务,也得到有竞争力的结果,同样的编码-解码框架还被用于建模人类对话[99],在100M message-response pair的数据上训练后,LSTM的解码器在开放域对话中可以产生非常有趣的回复。在解码的时候,通常会给解码器一个额外的输入以便产生特定的效果,比如在[100]中,作者提出可以将包含说话人个人信息的角色向量作为解码器的条件输入。在上面几个例子中,文本的生成主要是基于文本输入的语义表征向量,类似的框架也可以用于基于图像的文本生成,如Fig. 12所示,视觉特征向量用于解码器的条件输入。
Kumar等人[102]提出了一个复杂的动态记忆网络(DMN)来处理视觉对话的问题,这个网络有4个子模块,主要思路是反复对输入文本和图像计算attention,在迭代中不断改进获取的特征信息。注意力网络被用于细粒度地关注输入文本短语。
D. Attention Mechanism
传统的编码-解码框架一个潜在的问题是编码阶段有时候会将和任务不相干的信息也一并编码,如果文本很长或者信息很丰富并且不能进行选择性编码的时候,传统的编码-解码框架也有会问题。
比如,文本摘要的任务可以看出是一个sequence-to-sequence的任务,输入是原文,输出是压缩后的摘要,直观来看,要将整个句子都编码到一个固定长度的向量很不现实,特别是原文有可能特别长,在机器翻译中也要类似的问题[103]。
在文本摘要和机器翻译等任务中,输入和输出之间存在着一定的对齐关系,也就是说,输出的词和输入句子中的某一部分有很强的相关性。这种直觉启发了注意力机制的诞生。注意力机制通过在解码阶段同时考虑编码结果和输入来缓解上述传统编码-解码框架的问题。具体来讲,在解码阶段,除了隐藏层的状态和上一步解码的结果之外,解码器还会利用一个基于输入句子的隐藏层状态计算得到的上下文向量。注意力机制可以认为是输入一个query向量和一个key-value集合,然后输出结果向量,结果向量是value向量的加权和,加权的权重是根据query向量和key向量之间的相似性计算得到,得到的结果向量作为上下文输入解码器用于解码。
Bahdanau等人[103]首先将注意力机制用来提升机器翻译的效果,特别是长句的效果。在他们的研究中,注意力信号是根据解码器最后的隐藏层状态利用多层感知机计算得到的,通过将解码阶段每一步计算得到的注意力信号可视化,可以发现源语言和目标语言之间存在着明显的对齐关系,如Fig. 14所示。
在另一方面,Tang等人[111]采用了基于记忆网络的解决方案(也叫MemNet[112]),其中使用了多跳(multiple-hop)注意力,通过在记忆网络上使用多重注意力机制有助于找到记忆网络中信息量最大的区域随后来帮助分类,他们的工作也代表了这个领域的最先进技术。
鉴于注意力机制的直观适用性,NLP研究者们仍然在积极地研究,并将其用于越来越多的任务。
V. Recursive neural networks
递归神经网络是序列建模的一种自然方式,然而自然不仅像一般的序列一样在时间维度上具备先后和依赖关系,还具备层次化的结构关系,比如由词构成短语、由短语构成句子,这种层次化的结构关系可以用句法分析树来表示。因此,树形结构模型被提出来以便更好地利用这种句法成分结构[4]。具体来说,在递归神经网络中,解析树中的每个非叶子节点的表征有其儿子节点决定。
A. Basic model
在这一部分,我们描述递归神经网络的基本结构。如Fig. 18所示,网络g定义了短语和单词(b,c or a, p1)的组合函数,用来计算高层短语的表征(p1 or p2)。所有结点的表征有着相同的形式。
Socher等人[116]通过为最小构成单元构建单个成分语义,从而来对句子中的语义关系(如因果关系)或者主题信息来进行分类。Bowman等人[118]提出用递归神经网络来对句子间的逻辑关系进行分类,两个句子的表征喂给另一个神经网络来进行分类,他们的研究表明,无论是简单版的或者是张量版的递归升级网络在文本蕴含数据集上都取得了有竞争力的结果。
为了避免梯度消失问题,LSTM单元也有被用于树形结构中[119],研究结果表明,树形结构得到的句子表征要优于线性LSTM模型,特别是在情感分析和句子关系测试的数据集上有明显提高。
VI. Deep Reinforced Models and Deep Unsupervised Learning
A. 强化学习用于句子生成
强化学习通过训练一个agent来执行一些离散的行为以获得奖励。在NLP中,文本生成问题可以被建模成强化学习的问题。
在原始公式中,RNN语言生成器通常通过在给定当前隐藏状态和之前的预测结果来最大化语料中句子的最大似然概率来训练。这种方案也叫“teacher forcing”,训练的时候每一步都有真实的数据作为前缀序列,然而在测试的时候,没有真实的前缀序列,所以只能用模型生成的结果作为前缀序列。这种训练和预测之间的偏差,也叫“暴露偏差”(exposure bias)[120, 121],在生成的时候,错误会不断快速累积。
基于词级别的最大似然估计的另一个问题是,在训练自回归生成语言模型时,训练目标和测试的指标不一致。评估这些任务(机器翻译,对话系统等)的指标一般是基于n-gram重叠的指标(BLEU,ROUGE),而如何通过词级别的训练方式来优化这些指标目前尚不明确。根据以往经验,基于词级别最大似然训练出来的对话系统往往会得到枯燥和短视的回答[122],用于文本摘要则容易产生不连贯或者重复的摘要[108]。
强化学习提供了在一定程度上解决上述问题的前景。为了直接优化不可微的评估指标,Ranzato等人[121]使用REINFORCE算法[123]来训练基于RNN的模型用于一系列序列生成任务(例如,文本摘要,机器翻译和图像字幕),与之前的监督学习方法相比得到了提升。在这个框架中,生成模型(RNN)可以看作是一个代理(agent),用于和外部环境进行交互(外部环境是指每个时刻看到的单词以及上下文向量)。代理的参数定义了其策略(policy),策略的执行会导致代理选择一个动作(action),也就是在每一步的时候预测下一个单词,每次执行完一个动作代理都会更新其内部状态(RNN的隐藏层单元),一旦预测完一句话,代理都会得到一个奖励(reward),奖励可以是开发者根据具体任务量身定制的,比如,Li等人[122]基于易用性、信息流和语义连贯性为生成句子定义的3个奖励函数。
强化学习有两个众所周知的缺点,首先,为了使强化学习可行,必须仔细处理状态和动作空间[124, 125],但这最终又可能会限制模型的表达和学习能力;其次,因为奖励函数需要训练,所以这也使得模型运行时评估[126, 127]。
另一个序列级别的监督学习方案是是使用对抗训练技术[128],语言生成器的训练目标是欺骗另一个训练好用来区分生成数据和实际数据的判别器。生成器G和判别器D是在min-max game中联合训练的,理想情况下得到的生成器G能生成无法与真实数据区分的序列。这种方法可以看成是生成对抗网络的变种[128],生成对抗网络往往会以某种输入作为前提(比如,图像字幕中的源图像)。实际中,上述方案可以用策略梯度强化学习框架实现。在对话系统中,鉴别器就类似于人类图灵测试者,用来区分人类和机器产生的对话。
B. Unsupervised sentence representation learning
和词向量类似,句子的分布式表征也可以用无监督学习的方式得到。通过无监督学习的方式可以得到“句子编码器”(sentence encoder),可以将任何句子都映射到一个固定长度的向量用于捕捉语义和句法特征。通常而言,需要定义一个额外的任务来辅助训练。
和词向量里面的skip-gram[8]模型比较类似,skip-thought[130]模型被提出来用于学习句子表征,其中的辅助任务是给定两个句子预测其先后顺序关系,训练的时候使用seq2seq的模型框架,其中一个LSTM将句子编码成向量,另外两个LSTM再将向量解码来生成目标句子,训练流程采用标准的seq2seq方式,训练完后,其中的编码器就可以看出是一个通用的特征提取器(训练完同时也得到了词向量)。
Kiros等人[130]在一系列句子分类任务上验证了学到的句子编码器的效果,将句子编码器得到的静态特征接入简单的线性模型,最后也能得到有竞争力的结果。当然,句子编码器也可以在训练分类器的时候进行微调。Dai和Le[43]研究了如何使用解码器来重建句子本身,和自动编码器比较类似[131]。
语言模型也可以作为辅助任务来训练LSTM编码器,预测下一个词就是监督信号。Dai和Le[43]实验了用不同任务上学到的模型参数来初始化LSTM模型,结果表明,在大规模语料上无监督预训练句子编码器的效果比仅仅预训练词向量要好,而且,与句子重建相比,语言模型是一个较差的无监督辅助任务,因为它仅仅只是预测下一个词,相对较短视。
C. Deep generative models
最近在生成逼真图像方面的成功推动了一系列将深度生成模型应用于文本数据的相关研究。这种研究的前景是发现自然语言中的丰富结构,进而能从潜在的表征空间中生成逼真的句子。在本节中,我们回顾了最近利用变分编码器(VAEs)[132]和生成对抗网络(GANs)[128]来实现这一目标的相关研究。
如上一节所述,标准的句子自动编码器不对潜在表征空间施加任何约束,因此在生成实际句子的时候往往会失败[133],因为真实句子的表征在潜在空间中可能只占了小部分区域,而潜在空间中大多数区域不一定能映射到真实句子[134],这些区域不能用于采样生成真实句子[133]。
VAE对因此编码空间加了先验分布约束,从而能从模型中得到合适的样本,通过将自动编码器框架中的确定性编码模块替换为训练得到的后验识别模型,该模型由编码器和生成器组成,分别负责将数据样本映射到潜在表征空间,以及从潜在表征空间生成样本。通过最大化实际数据在生成模型下的对数似然的变分下界来训练。
Bowman等人[133]提出了一种基于RNN的变分自动编码器生成模型,该模型包含了整个句子的潜在分布式表征,如Fig. 20所示。与普通的RNN模型不同之处在于该模型使用了显示的全局句子表征,有了这些句子全局表征作为先验,该模型能产生结构良好且多样化的句子。
此外,动态存储网络(DMN)[102]使用神经网络模型来计算输入表征、注意力以及回答机制改善了之前的记忆存储模型,由此产生的模型适用于大量的NLP任务(问答,词性标注,情感分析等),因为每个任务都可以转换为(memory,question,answer)三元组的形式。Xiong等人[139]将相同的模型用于视觉问答,并证明了存储器模块适用于视觉信号。
VIII. 不同模型在不同NLP任务上的表现
我们总结了近年来一系列深度学习方法在主要的NLP任务上的表现,主要是让读者熟悉NLP方向常见的数据集以及使用不同模型的最新结果。
A. 词性标注
WSJ-PTB(the Wall Street Journal part of the Penn Treebank Dataset)语料包含了117万的词,被广泛用于开发和评估词性标注系统。Gimenez和Marquez[140]在7个词的窗口内基于手工提取的特征采用一对多的SVM进行分类,其中评估了一些基本的n元语法特征来生成二进制特征,例如,“前一个词是the”,“前两个词的标签是DT NN”等等。词性标注的一个特点是相邻标签之间的依赖非常强。通过简单的从左到右标记方案,此方法仅仅通过特征工程来建模相邻标记之间的依赖关系。为了减少特征工程,Collobert等人[5]仅仅利用窗口范围内的单词的词向量作为特征然后用多层感知机建模,结合CRF证明是有效的。Santos和Zadrozny[32]将词向量和字向量拼接起来一遍更好利用词语中的形态学特征。在[32]中,作者没有使用CRF,但由于在上下文窗口上做了词级决策,可以看成是对依赖关系的隐式建模。Huang等人[141]将词向量和手工设计的特征拼接起来使用双向LSTM来建模任意长的上下文。一系列的对比分析表明双向性和CRF都提升了性能。Andor等人[142]展示了一种transi-based的方法,仅仅利用简单的前馈神经网络就得到了有竞争力的结果。当应用于序列标注时,DMN[102]允许基于RNN隐藏状态多次计算注意力,可以每次聚焦上下文的不同地方。
传统的SRL系统由一下几个阶段组成:生成一颗解析树,识别出哪个解析树结点代表给定动词的参数,最后对这些结点进行分类以确定相应的SRL标签。每个分类过程通常需要提取大量特征并将其输入统计模型[5]。
给定一个谓词,Tackstrom等人[154]通过一系列解析树的特征来对该谓词打分得到成分区间及可能的角色,他们提出了使用动态规划算法来加速推断的过程。Collobert等人[5]通过解析以附加查找表形式提供的信息来增强卷积神经网络在SRL上的效果,最终得到了有竞争力的结果。Zhou和Xu[153]提出了使用双向LSTM来建模任意长的上下文,结果表明即使不用任何解析树的信息也能得到不错的结果。He等人[155]进一步改进了他的工作,引入highway network连接[156]以及加入更多的正则以及利用集成模型来提升效果。
E. 情感分类
斯坦福情感树库(SST)数据集包含从电影评论网站Rotten Tomatoes中获取的数据。首先由Pang和Lee[157]提出,后来Socher等人又在此基础上进行了扩充[4]。该数据集的标注方案又启发了一个新的情感分析数据集,CMU-MOSI,其中的情感分析是在多模态的情况下进行的。
[4]和[119]的工作都是基于句法成分分析解析树的递归网络结构,他们之间的差异也表明了LSTM和普通RNN网络在建模句子方面的差异。另一方面,基于树形结构LSTM的模型比线性LSTM的效果好,这也意味着树形结构的网络可能能更好的捕捉自然语言的句法属性。Yu等人[159]提出使用情感词典来微调预训练的词向量,在[119]的基础上能有所提升。
G. 问答
问答有多种形式,有些是依靠大型知识库来回答开放性问题,有些则是根据一些给定的段落来回答特定问题(阅读理解)。对于前者,我们列出了在大规模问答数据集[164]上的几个实验(表VIII),其中有14M常识三元组数据,每个问题都可以通过单关系查询来回答。对于阅读理解问答,我们主要列出了在两个数据集上的相关实验结果(表VIII)1)bAbI[165]的合成数据集,这个数据集要求模型能推理多个相关事实来得到正确答案,一共包含20个合成任务,用于测试模型检索相关事实和推理的能力。每项任务都侧重于不同的技能,如基本相关性推断和大小推理。2)斯坦福问答数据集(SQUAD)[166],这个数据集由众包在一组维基百科的文章中提出的100000多个问题组成,每个问题的答案都是相应的文章中的一段文字。
单关系实体查询类问题的核心是能从数据库中找出对应的支撑事实。Fader等人[164]提出了使用映射的方法来解决这个问题,学习从自然语言短语到知识库概念(实体,关系,问题模式)的词典。Bordes等人[167]将问题和知识库中的三元组嵌入到向量然后使用点积进行打分。
Weston等人[112]使用了类似的方法,将知识库看成是模型的长期记忆,然后用memory network的框架解决。在bAbI数据集上,Sukhbaatar等人[138]在记忆网络[112]的基础上进行了改进,在训练的时候模型屏蔽掉真实的支撑事实,Kumar等人[102]使用神经网络模型(GRU)来建模memory而不是像[138]和[112]中使用词袋模型。
在SQuAD数据集上,问题的关键是定位答案的起止位置。Chen等人[168]使用LSTM对问题和上下文篇章中的词进行编码,然后使用双线性映射来计算二者的相似度。Shen等人[169]提出了Reasonet,模型可以多次阅读上下文篇章,每次聚焦不同部分直到找到满意的答案为止。Yu等人[170]用CNN和自注意力机制来替换RNN以提高训练速度。
I. 上下文嵌入
这部分将探讨基于上线文嵌入的一些最新结果,如第II-D节所述。ELMo为最新的NLP进展做出了重大贡献,在各种各样的NLP任务中,ELMo都以较大优势打败了当时最佳结果(表X),然而,最新出炉的BERT再次超越了ELMo,在各项NLP任务上都取得了最好的结果(标XI)。
IX. 总结
深度学习提供了一种可以利用大量数据和计算力的方法,而且几乎不需要人肉特征工程[90]。通过分布式表示,各种深度学习模型在NLP问题上都取得了SOTA。就目前而言,大部分模型都是监督学习的,然而,在很多现实场景中,我们都有大量的未标注数据,要利用这些数据我们需要先进的无监督或者半监督学习方法。如果在测试模型的时候遇到某些特定类别缺少标注数据或者出现新的类别,则需要采用zero-shot等学习策略。虽然这些学习方法仍然处于发展阶段,但我们期待基于深度学习的NLP研究能朝着更好利用无标注数据的方向发展,我们预计这种趋势会随着更多更多更好的模型设计而继续。我们也希望能看到更多采用强化学习的NLP应用,例如对话系统,我们还希望能看到更多多模态学习的研究[190],因为在现实世界中,语言通常以其他信号为基础或者与之相关。
最后,我们希望能看到更多的深度学习模型,其内部存储(从数据中学到的自下而上的知识)可以通过外部存储(从知识库中继承的自上而下的知识)进行丰富。结合symbolic和sub-symbolic 人工智能将是从NLP到自然语言理解的道路上前进的关键。事实上,依靠机器学习,可以根据过去的经验做出“好的猜测”,因为sub-symbolic方法可以编码相关性,而决策过程也是概率性的。然而,自然语言理解需要的远不止于此,用Noam Chomsky的话来讲,“你不会通过获取大量数据,将它们扔进计算机并对它们进行统计分析来获得科学中的发现:这不是你理解事物的方式,你必须有理论上的见解”。