渣渣 2018-08-24
本文的重点是回顾和比较在各种NLP任务(如视觉问答(QA)和机器翻译)上取得最新成果的模型和方法。在这篇全文章中,读者将会对NLP课程的过去、现在和未来有一个详细的了解。此外,读者还将学习一些目前在NLP中应用深度学习的最佳实践。一些主题包括:
自然语言处理(NLP)涉及构建计算算法以自动分析和表示人类语言。基于NLP的系统已经实现了广泛的应用,例如Google强大的搜索引擎,以及最近亚马逊的语音助手Alexa。NLP还可用于教授机器执行复杂的自然语言相关任务的能力,例如机器翻译和对话生成。
长期以来,用于研究NLP问题的大多数方法都采用浅机器学习模型和耗时的手工制作功能。由于语言信息用稀疏表示(高维特征)表示,这导致诸如维数灾难之类的问题。然而,随着最近词嵌入(低维,分布式表示)的普及和成功,与传统的机器学习模型(如SVM或逻辑回归)相比,基于神经的模型在各种语言相关任务上取得了优异的成果。
如前所述,手工制作的特征主要用于模拟自然语言任务,直到神经方法出现并解决了传统机器学习模型所面临的一些问题,如维度诅咒。
词嵌入:分布向量,又称单词嵌入,是基于所谓的分布假设——出现在相似语境中的词具有相似的含义。词嵌入是预先训练的,目的是根据上下文来预测单词,通常使用浅神经网络。下图是Bengio及其同事提出的神经语言模型。
词向量倾向于嵌入句法和语义信息,并在各种各样的NLP任务中负责SOTA,如情感分析和句子复合。
在过去,分布式表示被广泛用于研究各种NLP任务,但直到continuous bag-of-words(CBOW)和skip-gram模型被引入这个领域后,它才开始流行起来。它们之所以受欢迎,是因为它们可以有效地构建高质量的词嵌入,并且可以用于语义复合(例如,“man”+“royal”=“king”)。
Word2vec:大约在2013年,Mikolav等人提出了CBOW和skip-gram模型。CBOW是一种构造词嵌入的神经方法,其目标是在给定窗口大小下计算给定上下文词的条件概率。另一方面,Skip-gram是一种构造词嵌入的神经方法,其目标是在给定中心目标单词的情况下预测周围的上下文单词(即条件概率)。对于这两个模型,单词嵌入维数是由计算(以无监督的方式)预测的准确性决定的。
词嵌入方法面临的挑战之一是,当我们想要获得“hot potato”或“Boston Globe”等短语的向量表示时。我们不能简单地组合单个词向量表示,因为这些短语并不代表单个词的意思组合。如果考虑到更长的短语和句子,事情就会变得更加复杂。
word2vec模型的另一个限制是,使用更小的窗口大小会产生类似的嵌入,用于对比单词,如“good”和“bad”,这是不可取的,尤其是对于区分非常重要的任务,如情绪分析。word嵌入的另一个注意事项是,它们依赖于使用它们的应用程序。为每个新任务重新训练特定于任务的嵌入是一种经过探索的选择,但这通常计算代价昂贵,并且可以使用负抽样更有效地解决。Word2vec模型还存在其他问题,比如没有考虑到训练数据中可能出现的多义词和其他偏差。
字符嵌入:对于词性标记(POS)和命名实体识别(NER)等任务,查看单词中的形态信息(如字符或其组合)是很有用的。这对形态丰富的语言如葡萄牙语、西班牙语和汉语也有帮助。由于我们是在字符级别分析文本,这些类型的嵌入有助于处理未知的单词问题,因为我们不再使用大型单词词汇表来表示序列,为了高效的计算目的,这些词汇表需要减少。
最后,重要的是要理解即使字符级和词级嵌入都已成功应用于各种NLP任务,但长期影响仍受到质疑。例如,Lucy和Gauthier最近发现,单词向量受限于它们如何很好地捕捉单词背后的概念意义的不同方面。换句话说,声称只有分布式语义不能用于理解单词背后的概念。最近,在自然语言处理系统的背景下,对意义表征进行了重要的辩论。
CNN基本上是基于神经的方法,其表示用于构成单词或n元语法以提取更高级别特征的特征函数。由此产生的抽象特征已被有效地用于情感分析,机器翻译和问答,以及其他任务。Collobert和Weston是首批将基于CNN的框架应用于NLP任务的研究人员之一。他们的方法的目标是通过查找表将单词转换为向量表示,这导致了一种原始的单词嵌入方法,可以在网络训练期间学习权重(见下图)。
为了利用基本CNN进行句子建模,首先将句子标记为单词,进一步将其转换为d维的单词嵌入矩阵(即输入嵌入层)。然后,在该输入嵌入层上应用卷积滤波器,其包括应用所有可能窗口大小的滤波器以产生所谓的特征映射。然后进行最大池操作,对每个过滤器应用最大操作以获得固定长度输出并减小输出的维数。并且该过程产生最终句子表示。
通过增加上述基本CNN的复杂性并使其适应于执行基于词的预测,可以研究诸如NER, aspect detection和POS的其他NLP任务。这需要window-based的方法,其中对于每个单词,考虑相邻单词(sub-sentence)的固定大小窗口。然后将独立的CNN应用于子句,并且训练目标是预测窗口中心的单词,也称为词级分类。
基本CNN的一个缺点是无法建模长距离依赖关系,这对于各种NLP任务很重要。为了解决这个问题,CNN已经与时间延迟神经网络(TDNN)耦合,后者在训练期间立即实现更大的上下文范围。在不同NLP任务中表现成功的其他有用类型的CNN,例如情绪预测和问题类型分类,被称为动态卷积神经网络(DCNN)。DCNN使用动态k-max池化策略,其中过滤器可以在执行句子建模时动态地跨越可变范围。
CNN还用于更复杂的任务,其中使用不同长度的文本,例如aspect detection,情感分析,短文本分类和sarcasm detection。然而,其中一些研究报告说,在将基于CNN的方法应用于Twitter文本等微观文本时,外部知识是必要的。CNN证明有用的其他任务是查询 - 文档匹配,语音识别,机器翻译(在某种程度上)和问答 - 答案表示等。另一方面,DCNN被用于分层学习地捕获并将低级词汇特征组合成用于文本的自动概括的高级语义概念。
总体而言,CNN是有效的,因为它们可以在上下文窗口中挖掘语义线索,但是它们难以保持连续顺序和模拟远程上下文信息。循环模型更适合这种类型的学习,接下来将对它们进行讨论。
RNN是一种专门的基于神经的方法,能够有效地处理序列信息。RNN递归地将计算应用于以先前计算结果为条件的输入序列的每个实例。这些序列通常由固定大小的标记向量表示,其顺序(逐个)进给至循环单元。下图展示了一个简单的RNN框架。
RNN的主要优势在于能够记忆先前计算的结果并在当前计算中使用该信息。这使得RNN模型适合于在任意长度的输入中建模上下文依赖性,以便创建输入的适当组合。RNN已被用于研究各种NLP任务,例如机器翻译,图像字幕和语言建模等。
与CNN模型相比,RNN模型在特定的自然语言任务中可以同样有效甚至更好,但不一定优越。这是因为它们模拟了数据的非常不同的方面,这只会使它们有效,具体取决于手头任务所需的语义。
RNN期望的输入通常是One-hot编码或词嵌入,但在某些情况下,它们与由CNN模型构造的抽象表示耦合。简单的RNN遭受梯度消失问题,这使得难以学习和调整较早层中的参数。其他变体,例如长短期记忆(LSTM)网络,残差网络(ResNets)和门控循环网络(GRU)后来被引入以克服这一限制。
RNN变体: LSTM由三个门(输入,遗忘和输出门)组成,并通过三者的组合计算隐藏状态。GRU类似于LSTM,但只包含两个门,效率更高,因为它们不那么复杂。一项研究表明,很难说哪些门控RNN更有效,并且通常根据可用的计算能力来挑选它们。已经提出了各种基于LSTM的模型用于序列到序列映射(通过编码器 - 解码器框架),其适用于机器翻译,文本摘要,人工对话建模,问题回答,基于图像的语言生成以及其他任务。
总的来说,RNN用于许多NLP应用,例如:
本质上,Attention Mechanim是一种技术,其受益于允许上述基于RNN的框架的解码器部分使用最后隐藏状态以及基于输入隐藏状态序列计算的信息(即,上下文矢量)的需要。这对于需要在输入和输出文本之间进行某些对齐的任务特别有用。
Attention Mechanim已成功用于机器翻译,文本摘要,图像字幕,对话生成和情感分析等。已经提出了各种不同形式和类型的Attention Mechanim,它们仍然是NLP研究人员研究各种应用的重要研究领域。
递归神经网络
与RNN类似,递归神经网络是对连续数据建模的自然机制。这是因为语言可以被视为递归结构,其中单词和子短语构成层次结构中的其他更高级别的短语。在这种结构中,非终端节点由其所有子节点的表示来表示。下图说明了下面的一个简单的递归神经网络。
在基本递归神经网络形式中,组合函数以自下而上的方法组合成分来计算更高级别短语的表示(参见上图)。在MV-RNN中,单词由矩阵和向量表示,意味着由网络学习的参数表示每个成分(单词或短语)的矩阵。另一种变型,即递归神经张量网络(RNTN),使得输入矢量之间的更多交互能够避免大的参数,如MV-RNN的情况。递归神经网络显示出灵活性,并且它们与LSTM单元耦合以处理诸如梯度消失之类的问题。
递归神经网络用于各种应用,例如:
强化学习包括机器学习方法,训练代理执行离散行动,然后奖励。采用强化学习的方法,可研究自然语言生成(NLG)任务,如文本摘要。
强化学习在NLP问题中的应用是由几个问题引起的。当使用基于rnngenerator时,ground-truth令牌会被模型生成的令牌所取代,从而迅速提高错误率。此外,有了这些模型,字级训练目标与测试度量(如机器翻译和对话系统中使用的n-gram重叠度量、BLEU)不同。由于这种差异,目前的nlg类型系统往往产生不连贯、重复和枯燥的信息。
为了解决上述问题,我们使用了一种被称为enhance的增强算法来处理NLP任务,例如图像字幕和机器翻译。这种强化学习框架由一个代理(基于rnnbased生成性模型)组成,它与外部环境(每次步骤中看到的输入词和上下文向量)相互作用。代理根据策略(参数)选择操作,该策略涉及到在每个时间步骤中预测序列的下一个单词。然后代理更新它的内部状态(RNN的隐藏单元)。这一过程一直持续到最终计算出奖励的序列的末尾。奖励函数因任务而异;例如,在一个句子生成任务中,奖励可能是信息流。
强化学习方法虽然有很好的效果,但需要对动作和状态空间进行适当的处理,这可能会限制模型的表达能力和学习能力。请记住,独立的基于RNN的模型力求表现力和表达语言的自然能力。
对抗式训练也被用于训练语言生成器,其目的是愚弄训练有素的判别器,以区分生成的序列和真实的序列。考虑一个有策略梯度的对话系统,它可以在一个强化学习范式下构建任务,在这个学习范式中,判别器就像一个人的图灵测试器。判别器基本上是经过训练来区别人与机器产生的对话。
无监督句子表示学习涉及到将句子以无监督的方式映射到固定大小的向量。分布式表示从语言中获取语义和句法属性,并使用辅助任务进行训练。
与学习词嵌入的算法相似,本文提出了一个skip-thought 模型,其任务是根据中心句预测下一个相邻句。该模型是使用seq2seq框架进行训练的,在该框架中,解码器生成目标序列,编码器被视为通用的特征提取器,甚至词嵌入都是在这个过程中学习到的。这个模型本质上是学习输入句子的分布式表示,类似于以前的语言建模技术中学习每个单词的嵌入。
深度生成模型
诸如变分自动控制器(VAE)和生成对抗网络(GAN)之类的深度生成模型也应用于NLP中,以通过从潜在代码空间生成逼真句子的过程来发现自然语言中的丰富结构。
众所周知,由于无约束的潜在空间,标准句自动编码器无法生成逼真的句子。VAE在隐藏的潜在空间上施加先验分布,使模型能够生成适当的样本。VAE由编码器和生成器网络组成,编码器和生成器网络将输入编码到潜在空间中,然后从潜在空间生成样本。训练目标是在生成模型下最大化观测数据的对数似然的变分下界。下图说明了用于句子生成的基于RNN的VAE。
生成模型对于许多NLP任务是有用的,并且它们本质上是灵活的。例如,与标准自动编码器相比,基于RNN的VAE生成模型被提出用于产生更多样化且格式良好的句子。其他模型允许将结构化变量(例如,时态和情感)结合到潜在代码中,以生成合理的句子。
由两个竞争网络组成的GAN(生成器和判别器)也被用于生成逼真的文本。例如,LSTM用作发生器,CNN用作区分真实数据和生成样本的判别器。在这种情况下,CNN表示binary 句子分类器。该模型能够在对抗训练后生成逼真的文本。
除了判别器的梯度不能通过离散变量适当地反向传播的问题之外,深层生成模型也难以评估。近年来已经提出了许多解决方案,但这些解决方案尚未标准化。
在令牌生成阶段期间由Attention mechanisms访问的隐藏向量表示模型的“internal memory”。神经网络还可以与某种形式的memory 耦合,以解决视觉QA,语言建模,POS标记和情感分析等任务。例如,为了解决QA任务,将支持事实或常识知识作为存储器的形式提供给模型。动态存储器网络是对先前基于存储器的模型的改进,其采用神经网络模型用于输入表示,attention和应答机制。
到目前为止,我们现在已经知道了基于神经网络的模型(如CNN和RNN)的容量和有效性。我们也意识到将强化学习,无监督方法和深度生成模型应用于复杂的NLP任务(如可视化QA和机器翻译)的可能性。Attention mechanisms和记忆增强网络在扩展基于神经的NLP模型的能力方面是强大的。结合所有这些强大的技术,提供了令人信服的方法来理解语言的复杂性。下一波基于语言的学习算法可以提供更高的能力,例如常识和建模复杂的人类行为。