本篇介绍深度学习在自然语言解决(NLP)中的利用,从词向量开始,到最新最弱小的BERT等预训练模型,梗概性的介绍了深度学习近20年在NLP中的一些重大的停顿
在深度学习之前,用于解决NLP问题的机器学习办法个别都基于浅层模型(如SVM和logistic 回归),这些模型都在十分高维和稠密的特色(one-hot encoding)上进行训练和学习,呈现了维度爆炸等问题难以解决。并且基于传统机器学习的NLP零碎重大依赖手动制作的特色,它们极其耗时,且通常并不齐备。
而近年来,基于浓密向量表征的神经网络在多种NLP工作上失去了不错后果。这一趋势取决了词嵌入和深度学习办法的胜利;并且深度学习使多级主动特色表征学习成为可能。因而,本文从词的分布式表征开始介绍深度学习在NLP中的利用
分布式词表征(词向量)的实现
通常来讲,在2003年的《A Neural Probabilistic Language Model》中Bengio等人提出了神经语言模型(NNLM),而它的副产品,词向量,能够实现词的分布式表征。该文通常被认为是深度学习在自然语言解决中利用的开始。提出伊始,因为届时计算机计算能力的限度,该网络并不能较好的失去训练。因而,这一篇成绩,在过后并没有失去相当的关注
2008年Collobert和Weston展现了第一个能无效利用预训练词嵌入的钻研工作,他们提出的神经网络架构,形成了以后很多办法的根底。这一项钻研工作还率先将词嵌入作为 NLP 工作的高效工具。
不过词嵌入真正走向NLP支流还是Mikolov 等人在 2013 年做出的钻研《Distributed Representations of Words and Phrases and their Compositionality》。
Mikolov 等研究者在这篇论文中提出了间断词袋模型CBOW和 Skip-Gram 模型,通过引入负采样等可行性的措施,这两种办法都能学习高质量的词向量
分布式的词表征的一大益处是实现了语义的合成性,即两个词向量相加失去的后果是语义相加的词,例如[man]+[royal]=[king]
这种语义合成性的理论依据最近曾经由Gittens et al. 在2017年给出,他们示意只有保障某些特定的假如能力满足语义合成性,例如词须要在嵌入空间中处于均匀分布。
GloVe是另外一个很有名的取得词向量的办法,在有些状况下,CBOW和Skip-Gram采纳的穿插熵损失函数有劣势。因而GloVe采纳了平方损失。同时,它基本上是一种基于词统计的模型,它令词向量拟合事后基于整个数据集计算失去的全局统计信息,从而学习高效的词表征
NLP中特征提取办法的进化
随着词分布式表征的问题失去了无效的解决,人们开始思考如何提取词序列中高级的语义信息,而后能力将这些提取到的语义信息,利用到上游的NLP工作中,例如情感剖析、问答零碎、机器翻译以及主动摘要等。
最早用来对自然语言词序列进行特征提取的,其实是卷积神经网络(CNN)。这次要归因于卷积神经网络在图像畛域获得的骄人成绩。
应用 CNN 进行句子建模能够追溯到Collobert和Weston在2008年的钻研,他们应用多任务学习为不同的NLP工作输入多个预测,如词性标注、语块宰割、命名实体标签和语义类似词等。其中查找表能够将每一个词转换为一个用户自定义维度的向量。因而通过查找表,n个词的输出序列 {s_1,s_2,... s_n } 能转换为一系列词向量 {w_s1, w_s2,... w_sn}。
在Collobert 2011年的钻研中,他扩大了以前的钻研,并提出了一种基于CNN的通用框架来解决大量NLP工作,这两个工作都令NLP研究者尝试在各种工作中遍及 CNN架构。CNN具备从输出句子抽取n-gram特色的能力,因而它能为上游工作提供具备句子层面信息的暗藏语义表征。
因为语言序列经常具备长程性,须要记忆很早时候的输出信息,CNN并不具备这种能力。这个时候,循环神经网络(RNN)网络被提出
RNN的思路是解决序列信息。“循环”示意RNN模型对序列中的每一个实例都执行同样的工作,并且权重共享,从而使输入依赖于之前的计算和后果。
通常,RNN通过将token挨个输出到循环单元中,来生成示意序列的固定大小向量。肯定水平上,RNN对之前的计算有“记忆”,并在以后的解决中应用对之前的记忆。该模板人造适宜很多NLP 工作,如语言建模、机器翻译、语音辨认、图像字幕生成。因而近年来,RNN在NLP工作中逐步风行。
然而RNN容易呈现梯度隐没和爆炸的问题,因此其改良版本LSTM和GRU被提出来了
LSTM比简略RNN多了“忘记门”,其独特机制帮忙该网络克服了梯度隐没和梯度爆炸问题。与原版RNN不同,LSTM容许误差通过有限数量的工夫步进行反向流传。它蕴含三个门:输出门、忘记门和输入门,并通过联合这三个门来计算暗藏状态。另一个门控RNN变体是GRU,复杂度更小,其在大部分工作中的试验性能与LSTM相似。GRU包含两个门:重置门和更新门,并像没有记忆单元的 LSTM那样解决信息流。因而,GRU不加管制地暴露出所有的暗藏内容。因为GRU的复杂度较低,它比LSTM更加高效。
在llya Sutskever等人2014年的钻研《Sequence to Sequence Learning with Neural Networks》中,作者提出了一种通用深度LSTM编码器-解码器框架,能够实现序列之间的映射。应用一个LSTM将源序列编码为定长向量,源序列能够是机器翻译工作中的源语言、问答工作中的问题或对话零碎中的待回复信息。而后将该向量作为另一个 LSTM解码器的初始状态。在推断过程中,解码器一一生成token,同时应用最初生成的token更新暗藏状态。
传统编码器-解码器框架的一个潜在问题是:有时编码器会强制编码可能与目前工作不齐全相干的信息。这个问题在输出过长或信息量过大时也会呈现,选择性编码是不可能的。因而,可能依据编码器编码内容动静解码内容的注意力机制(Attention)失去提出。
《Neural Machine Translation by Jointly Learning to Align and Translate》首次将注意力机制利用到机器翻译工作,尤其改良了在长序列上的性能。该论文中,关注输出暗藏状态序列的注意力信号由解码器最初的暗藏状态的多层感知机决定。通过在每个解码步中可视化输出序列的注意力信号,能够取得源语言和目标语言之间的清晰对齐。
然而RNN及其优化变种,因为都要按时序输出,都存在编码效率低下的问题。Transformer这种基于self-attention机制的弱小特征提取器应运而生。《Attention Is All You Need》提出了Transformer,它齐全去除了编码步中的循环和卷积,仅依赖注意力机制来捕获输出和输入之间的全局关系。因而,整个架构更加并行化,在翻译、解析等工作上训练失去踊跃后果所需的工夫也更少。
NLP中的预训练模型
训练失去的词向量表征的词语之间的信息其实无限。词向量一个难以解决的问题就是多义词的问题,例如“bank”在英文中有“河岸”和“银行”两种齐全不同意思,然而在词向量中的确雷同的向量来表征,这显然不合理。
2017年,为了解决这个问题,ELMO模型在“Deep contextualized word representation”被提出。
ELMO的实质思维是:用当时训练好的语言模型学好一个单词的Word Embedding,此时多义词无奈辨别,不过这没关系。在理论应用Word Embedding的时候,单词特定的上下文就能够晓得,这个时候模型能够依据上下文单词的语义去调整单词的Word Embedding示意,这样通过调整后的Word Embedding更能表白在这个上下文中的具体含意,天然也就能克服多义词的问题。
从ELMO开始,这种先预训练,在理论利用时再fine-Tune的模式就开始流行起来了。咱们再看ELMO,通过双向语言模型,可能学到较丰盛的语义信息。但其用的是LSTM作为特色抽取器,在特色抽取能力上较弱
2018年,Generative Pre-Training(GPT)采纳单向语言模型,用Transformer作为特色抽取器,获得了十分不错的成果,但因为主创人员营销能力欠佳,并没有像上面这一个配角一样,在NLP畛域掀起滔天巨浪。
2018年10月,谷歌推出BERT(Bidirectional Encoder Representation from Transformers)模型,刷新了简直所有NLP工作的榜单,一时风头无两。认真看BERT的实现,其与GPT的次要差异在于,BERT用的“双向语言模型”,它通过MASK掉预料中的局部词再重建的过程来学习预料中词语序列中的语义示意信息,同样采纳Transformer作为特色抽取器。BERT的呈现,因其成果太好,简直让其余所有的NLP工作都黯然失色。
2019年2月openAI用更大的模型,规模更大品质更好的数据推出了GPT2.0,其语言生成能力令人惊叹。
目前来看,出彩的工作都是基于BERT和GPT的改良工作。在2019年6月,XLNet: Generalized Autoregressive Pretraining for Language Understanding诞生,其基于BERT和GPT等两类预训练模型来进行改良,别离汲取了两类模型的短处,取得的很好的成果。
须要留神的是,所有的预训练模型都是无监督的,这意味着,模型的数据起源是便宜而且数量微小的。因为XLNET在训练时始终是under-fitting的,因而即便是通过减少数据量,都还能晋升NLP预训练模型的成果。这无疑是振奋人心的