乐趣区

关于算法:NLP随笔三

本篇介绍深度学习在自然语言解决 (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 预训练模型的成果。这无疑是振奋人心的

退出移动版