Transformer一统江湖:自然语言处理三大特征抽取器比较.doc
《Transformer一统江湖:自然语言处理三大特征抽取器比较.doc》由会员分享,可在线阅读,更多相关《Transformer一统江湖:自然语言处理三大特征抽取器比较.doc(28页珍藏版)》请在三一办公上搜索。
1、Transformer一统江湖:自然语言处理三大特征抽取器比较自然语言处理中的三大特征处理器:RNN、CNN、Transformer,它们目前谁各方面占据优势?未来谁又更有前途呢?这篇文章用目前的各种实验数据给出了说明,结论是:放弃幻想,全面拥抱Transformer。在辞旧迎新的时刻,大家都在忙着回顾过去一年的成绩(或者在灶台前含泪数锅),并对 2019 做着规划,当然也有不少朋友执行力和工作效率比较高,直接把 2018 年初制定的计划拷贝一下,就能在 3 秒钟内完成 2019 年计划的制定,在此表示祝贺。2018 年从经济角度讲,对于所有人可能都是比较难过的一年,而对于自然语言处理领域来说
2、,2018 年无疑是个收获颇丰的年头,而诸多技术进展如果只能选择一项来讲的话,那么当之无愧的应该就是Bert 模型了。在上一篇介绍 Bert 的文章 “从 Word Embedding 到 Bert 模型自然语言处理中的预训练技术发展史”1里,我曾大言不惭地宣称如下两个个人判断:一个是Bert 这种两阶段的模式(预训练 + Finetuning)必将成为 NLP 领域研究和工业应用的流行方法;第二个是从 NLP 领域的特征抽取器角度来说,Transformer 会逐步取代 RNN 成为最主流的的特征抽取器。关于特征抽取器方面的判断,上面文章限于篇幅,只是给了一个结论,并未给出具备诱惑力的说明,
3、看过我文章的人都知道我不是一个随便下结论的人(那位正在补充下一句:“你随便起来不是” 的同学请住口,请不要泄露国家机密,你可以继续睡觉,吵到其它同学也没有关系,哈哈),但是为什么当时我会下这个结论呢?本文可以看做是上文的一个外传,会给出比较详实的证据来支撑之前给出的结论。如果对目前NLP 里的三大特征抽取器的未来走向趋势做个宏观判断的话,我的判断是这样的:RNN人老珠黄,已经基本完成它的历史使命,将来会逐步退出历史舞台;CNN如果改造得当,将来还是有希望有自己在 NLP 领域的一席之地,如果改造成功程度超出期望,那么还有一丝可能作为割据一方的军阀,继续生存壮大,当然我认为这个希望不大,可能跟宋
4、小宝打篮球把姚明打哭的概率相当;而新欢Transformer明显会很快成为 NLP 里担当大任的最主流的特征抽取器。至于将来是否会出现新的特征抽取器,一枪将 Tranformer 挑落马下,继而取而代之成为新的特征抽取山大王?这种担忧其实是挺有必要的,毕竟李商隐在一千年前就告诫过我们说:“君恩如水向东流,得宠忧移失宠愁。 莫向樽前奏花落,凉风只在殿西头。” 当然这首诗看样子目前送给 RNN 是比较贴切的,至于未来 Transformer 是否会失宠?这个问题的答案基本可以是肯定的,无非这个时刻的来临是 3 年之后,还是 1 年之后出现而已。当然,我希望如果是在读这篇文章的你,或者是我,在未来的
5、某一天,从街头拉来一位长相普通的淑女,送到韩国整容,一不小心偏离流水线整容工业的美女模板,整出一位天香国色的绝色,来把 Transformer 打入冷宫,那是最好不过。但是在目前的状态下,即使是打着望远镜,貌似还没有看到有这种资质的候选人出现在我们的视野之内。我知道如果是一位严谨的研发人员,不应该在目前局势还没那么明朗的时候做出如上看似有些武断的明确结论,所以这种说法可能会引起争议。但是这确实就是我目前的真实想法,至于根据什么得出的上述判断?这种判断是否有依据?依据是否充分?相信你在看完这篇文章可以有个属于自己的结论。可能谈到这里,有些平常吃亏吃的少所以喜欢挑刺的同学会质疑说:你凭什么说 NL
6、P 的典型特征抽取器就这三种呢?你置其它知名的特征抽取器比如 Recursive NN 于何地? 嗯,是,很多介绍 NLP 重要进展的文章里甚至把 Recursive NN 当做一项 NLP 里的重大进展,除了它,还有其它的比如 Memory Network 也享受这种部局级尊贵待遇。但是我一直都不太看好这两个技术,而且不看好很多年了,目前情形更坚定了这个看法。而且我免费奉劝你一句,没必要在这两个技术上浪费时间,至于为什么,因为跟本文主题无关,以后有机会再详细说。上面是结论,下面,我们正式进入举证阶段。战场侦查:NLP 任务的特点及任务类型NLP 任务的特点和图像有极大的不同,上图展示了一个例
7、子,NLP 的输入往往是一句话或者一篇文章,所以它有几个特点:首先,输入是个一维线性序列,这个好理解;其次,输入是不定长的,有的长有的短,而这点其实对于模型处理起来也会增加一些小麻烦;再次,单词或者子句的相对位置关系很重要,两个单词位置互换可能导致完全不同的意思。如果你听到我对你说:“你欠我那一千万不用还了” 和 “我欠你那一千万不用还了”,你听到后分别是什么心情?两者区别了解一下;另外,句子中的长距离特征对于理解语义也非常关键,例子参考上图标红的单词,特征抽取器能否具备长距离特征捕获能力这一点对于解决 NLP 任务来说也是很关键的。上面这几个特点请记清,一个特征抽取器是否适配问题领域的特点,
8、有时候决定了它的成败,而很多模型改进的方向,其实就是改造得使得它更匹配领域问题的特性。这也是为何我在介绍 RNN、CNN、Transformer 等特征抽取器之前,先说明这些内容的原因。NLP 是个很宽泛的领域,包含了几十个子领域,理论上只要跟语言处理相关,都可以纳入这个范围。但是如果我们对大量 NLP 任务进行抽象的话,会发现绝大多数 NLP 任务可以归结为几大类任务。两个看似差异很大的任务,在解决任务的模型角度,可能完全是一样的。通常而言,绝大部分 NLP 问题可以归入上图所示的四类任务中:一类是序列标注,这是最典型的 NLP 任务,比如中文分词,词性标注,命名实体识别,语义角色标注等都可
9、以归入这一类问题,它的特点是句子中每个单词要求模型根据上下文都要给出一个分类类别。第二类是分类任务,比如我们常见的文本分类,情感计算等都可以归入这一类。它的特点是不管文章有多长,总体给出一个分类类别即可。第三类任务是句子关系判断,比如 Entailment,QA,语义改写,自然语言推理等任务都是这个模式,它的特点是给定两个句子,模型判断出两个句子是否具备某种语义关系;第四类是生成式任务,比如机器翻译,文本摘要,写诗造句,看图说话等都属于这一类。它的特点是输入文本内容后,需要自主生成另外一段文字。解决这些不同的任务,从模型角度来讲什么最重要?是特征抽取器的能力。尤其是深度学习流行开来后,这一点更
10、凸显出来。因为深度学习最大的优点是 “端到端(end to end)”,当然这里不是指的从客户端到云端,意思是以前研发人员得考虑设计抽取哪些特征,而端到端时代后,这些你完全不用管,把原始输入扔给好的特征抽取器,它自己会把有用的特征抽取出来。身为资深 Bug 制造者和算法工程师,你现在需要做的事情就是:选择一个好的特征抽取器,选择一个好的特征抽取器,选择一个好的特征抽取器,喂给它大量的训练数据,设定好优化目标(loss function),告诉它你想让它干嘛. 然后你觉得你啥也不用干等结果就行了是吧?那你是我见过的整个宇宙中最乐观的人. 你大量时间其实是用在调参上.。从这个过程可以看出,如果我们
11、有个强大的特征抽取器,那么中初级算法工程师沦为调参侠也就是个必然了,在 AutoML(自动那啥)流行的年代,也许以后你想当调参侠而不得,李斯说的 “吾欲与若复牵黄犬,俱出上蔡东门逐狡兔,岂可得乎!” 请了解一下。所以请珍惜你半夜两点还在调整超参的日子吧,因为对于你来说有一个好消息一个坏消息,好消息是:对于你来说可能这样辛苦的日子不多了!坏消息是:对于你来说可能这样辛苦的日子不多了!那么怎么才能成为算法高手?你去设计一个更强大的特征抽取器呀。下面开始分叙三大特征抽取器。沙场老将 RNN:廉颇老矣,尚能饭否RNN 模型我估计大家都熟悉,就不详细介绍了,模型结构参考上图,核心是每个输入对应隐层节点,
12、而隐层节点之间形成了线性序列,信息由前向后在隐层之间逐步向后传递。我们下面直接进入我想讲的内容。为何 RNN 能够成为解决 NLP 问题的主流特征抽取器我们知道,RNN 自从引入 NLP 界后,很快就成为吸引眼球的明星模型,在 NLP 各种任务中被广泛使用。但是原始的 RNN 也存在问题,它采取线性序列结构不断从前往后收集输入信息,但这种线性序列结构在反向传播的时候存在优化困难问题,因为反向传播路径太长,容易导致严重的梯度消失或梯度爆炸问题。为了解决这个问题,后来引入了 LSTM 和 GRU 模型,通过增加中间状态信息直接向后传播,以此缓解梯度消失问题,获得了很好的效果,于是很快 LSTM 和
13、 GRU 成为 RNN 的标准模型。其实图像领域最早由 HighwayNet/Resnet 等导致模型革命的 skip connection 的原始思路就是从 LSTM 的隐层传递机制借鉴来的。经过不断优化,后来 NLP 又从图像领域借鉴并引入了 attention 机制(从这两个过程可以看到不同领域的相互技术借鉴与促进作用),叠加网络把层深作深,以及引入 Encoder-Decoder 框架,这些技术进展极大拓展了 RNN 的能力以及应用效果。下图展示的模型就是非常典型的使用 RNN 来解决 NLP 任务的通用框架技术大礼包,在更新的技术出现前,你可以在 NLP 各种领域见到这个技术大礼包的
14、身影。上述内容简单介绍了 RNN 在 NLP 领域的大致技术演进过程。那么为什么 RNN 能够这么快在 NLP 流行并且占据了主导地位呢?主要原因还是因为 RNN 的结构天然适配解决 NLP 的问题,NLP 的输入往往是个不定长的线性序列句子,而 RNN 本身结构就是个可以接纳不定长输入的由前向后进行信息线性传导的网络结构,而在 LSTM 引入三个门后,对于捕获长距离特征也是非常有效的。所以 RNN 特别适合 NLP 这种线形序列应用场景,这是 RNN 为何在 NLP 界如此流行的根本原因。RNN 在新时代面临的两个严重问题RNN 在 NLP 界一直红了很多年(2014-2018?),在 20
15、18 年之前,大部分各个子领域的 State of Art 的结果都是 RNN 获得的。但是最近一年来,眼看着 RNN 的领袖群伦的地位正在被动摇,所谓各领风骚 3-5 年,看来网红模型也不例外。那这又是因为什么呢?主要有两个原因。第一个原因在于一些后起之秀新模型的崛起,比如经过特殊改造的 CNN 模型,以及最近特别流行的 Transformer,这些后起之秀尤其是 Transformer 的应用效果相比 RNN 来说,目前看具有明显的优势。这是个主要原因,老人如果干不过新人,又没有脱胎换骨自我革命的能力,自然要自觉或不自愿地退出历史舞台,这是自然规律。至于 RNN 能力偏弱的具体证据,本文后
16、面会专门谈,这里不展开讲。当然,技术人员里的 RNN 保皇派们,这个群体规模应该还是相当大的,他们不会轻易放弃曾经这么热门过的流量明星的,所以也想了或者正在想一些改进方法,试图给 RNN 延年益寿。至于这些方法是什么,有没有作用,后面也陆续会谈。另外一个严重阻碍 RNN 将来继续走红的问题是:RNN 本身的序列依赖结构对于大规模并行计算来说相当之不友好。通俗点说,就是 RNN 很难具备高效的并行计算能力,这个乍一看好像不是太大的问题,其实问题很严重。如果你仅仅满足于通过改 RNN 发一篇论文,那么这确实不是大问题,但是如果工业界进行技术选型的时候,在有快得多的模型可用的前提下,是不太可能选择那
17、么慢的模型的。一个没有实际落地应用支撑其存在价值的模型,其前景如何这个问题,估计用小脑思考也能得出答案。那问题来了:为什么 RNN 并行计算能力比较差?是什么原因造成的?我们知道,RNN 之所以是 RNN,能将其和其它模型区分开的最典型标志是:T 时刻隐层状态的计算,依赖两个输入,一个是 T 时刻的句子输入单词 Xt,这个不算特点,所有模型都要接收这个原始输入;关键的是另外一个输入,T 时刻的隐层状态 St 还依赖 T-1 时刻的隐层状态 S(t-1) 的输出,这是最能体现 RNN 本质特征的一点,RNN 的历史信息是通过这个信息传输渠道往后传输的,示意参考上图。那么为什么 RNN 的并行计算
18、能力不行呢?问题就出在这里。因为 T 时刻的计算依赖 T-1 时刻的隐层计算结果,而 T-1 时刻的计算依赖 T-2 时刻的隐层计算结果. 这样就形成了所谓的序列依赖关系。就是说只能先把第 1 时间步的算完,才能算第 2 时间步的结果,这就造成了 RNN 在这个角度上是无法并行计算的,只能老老实实地按着时间步一个单词一个单词往后走。而 CNN 和 Transformer 就不存在这种序列依赖问题,所以对于这两者来说并行计算能力就不是问题,每个时间步的操作可以并行一起计算。那么能否针对性地对 RNN 改造一下,提升它的并行计算能力呢?如果可以的话,效果如何呢?下面我们讨论一下这个问题。如何改造
19、RNN 使其具备并行计算能力?上面说过,RNN 不能并行计算的症结所在,在于 T 时刻对 T-1 时刻计算结果的依赖,而这体现在隐层之间的全连接网络上。既然症结在这里,那么要想解决问题,也得在这个环节下手才行。在这个环节多做点什么事情能够增加 RNN 的并行计算能力呢?你可以想一想。其实留给你的选项并不多,你可以有两个大的思路来改进:一种是仍然保留任意连续时间步(T-1 到 T 时刻)之间的隐层连接;而另外一种是部分地打断连续时间步(T-1 到 T 时刻)之间的隐层连接 。我们先来看第一种方法,现在我们的问题转化成了:我们仍然要保留任意连续时间步(T-1 到 T 时刻)之间的隐层连接,但是在这
20、个前提下,我们还要能够做到并行计算,这怎么处理呢?因为只要保留连续两个时间步的隐层连接,则意味着要计算 T 时刻的隐层结果,就需要 T-1 时刻隐层结果先算完,这不又落入了序列依赖的陷阱里了吗?嗯,确实是这样,但是为什么一定要在不同时间步的输入之间并行呢?没有人说 RNN 的并行计算一定发生在不同时间步上啊,你想想,隐层是不是也是包含很多神经元?那么在隐层神经元之间并行计算行吗?如果你要是还没理解这是什么意思,那请看下图。上面的图只显示了各个时间步的隐层节点,每个时间步的隐层包含 3 个神经元,这是个俯视图,是从上往下看 RNN 的隐层节点的。另外,连续两个时间步的隐层神经元之间仍然有连接,上
21、图没有画出来是为了看着简洁一些。这下应该明白了吧,假设隐层神经元有 3 个,那么我们可以形成 3 路并行计算(红色箭头分隔开成了三路),而每一路因为仍然存在序列依赖问题,所以每一路内仍然是串行的。大思路应该明白了是吧?但是了解 RNN 结构的同学会发现这样还遗留一个问题:隐层神经元之间的连接是全连接,就是说 T 时刻某个隐层神经元与 T-1 时刻所有隐层神经元都有连接,如果是这样,是无法做到在神经元之间并行计算的,你可以想想为什么,这个简单,我假设你有能力想明白。那么怎么办呢?很简单,T 时刻和 T-1 时刻的隐层神经元之间的连接关系需要改造,从之前的全连接,改造成对应位置的神经元(就是上图被
22、红箭头分隔到同一行的神经元之间)有连接,和其它神经元没有连接。这样就可以解决这个问题,在不同路的隐层神经元之间可以并行计算了。第一种改造 RNN 并行计算能力的方法思路大致如上所述,这种方法的代表就是论文 “Simple Recurrent Units for Highly Parallelizable Recurrence” 中提出的SRU 方法,它最本质的改进是把隐层之间的神经元依赖由全连接改成了哈达马乘积,这样 T 时刻隐层单元本来对 T-1 时刻所有隐层单元的依赖,改成了只是对 T-1 时刻对应单元的依赖,于是可以在隐层单元之间进行并行计算,但是收集信息仍然是按照时间序列来进行的。所以
23、其并行性是在隐层单元之间发生的,而不是在不同时间步之间发生的。这其实是比较巧妙的一种方法,但是它的问题在于其并行程度上限是有限的,并行程度取决于隐层神经元个数,而一般这个数值往往不会太大,再增加并行性已经不太可能。另外每一路并行线路仍然需要序列计算,这也会拖慢整体速度。SRU 的测试速度为:在文本分类上和原始 CNN(Kim 2014)的速度相当,论文没有说 CNN 是否采取了并行训练方法。 其它在复杂任务阅读理解及 MT 任务上只做了效果评估,没有和 CNN 进行速度比较,我估计这是有原因的,因为复杂任务往往需要深层网络,其它的就不妄作猜测了。第二种改进典型的思路是:为了能够在不同时间步输入
24、之间进行并行计算,那么只有一种做法,那就是打断隐层之间的连接,但是又不能全打断,因为这样基本就无法捕获组合特征了,所以唯一能选的策略就是部分打断,比如每隔 2 个时间步打断一次,但是距离稍微远点的特征如何捕获呢?只能加深层深,通过层深来建立远距离特征之间的联系。代表性模型比如上图展示的 Sliced RNN。我当初看到这个模型的时候,心里忍不住发出杠铃般的笑声,情不自禁地走上前跟他打了个招呼:你好呀,CNN 模型,想不到你这个糙汉子有一天也会穿上粉色裙装,装扮成 RNN 的样子出现在我面前啊,哈哈。了解 CNN 模型的同学看到我上面这句话估计会莞尔会心一笑:这不就是简化版本的 CNN 吗?不了
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Transformer 一统江湖 自然语言 处理 特征 抽取 比较
链接地址:https://www.31ppt.com/p-4854746.html