NLP领域中的预训练模型杂谈

近期NLP领域发生了很多大事,基本都离不开Pretrain这个字眼,比如大名鼎鼎的BERT、GPT等,笔者也是在近期撸了 7篇 近一年内相关的论文及它们的源码,这里就是对这7篇论文进行一个大总结,用更有条理的方式理清这些模型的关系,以期能加深印象,真正掌握这些论文背后要强调的思路~

一. 前言

笔者看的这7篇论文,分别是ULMFiT、ELMo、GPT、BERT、MT-DNN、XLM和GPT-2,这也是它们的发表时间顺序。笔者在之前的博客中,对这些论文和源码都有详细的剖析,有感兴趣的读者可以跳转到对应的链接去阅读:

1. ULMFiT解读(论文 + PyTorch源码)
2. ELMo解读(论文 + PyTorch源码)
3. GPT解读(论文 + TensorFlow实现)
4. BERT解读(论文 + TensorFlow源码)
5. MT-DNN解读(论文 + PyTorch源码)
6. XLM解读(论文 + PyTorch源码)
7. GPT-2解读(论文 + TensorFlow实现)

当然里面有不少论文是要依赖Transformer这个模型的,关于Transformer和它的衍生改进版Transformer-XL,笔者之前也都有详细剖析过,想看的话可以去翻阅:

Transformer解读(论文 + PyTorch源码)
Transformer-XL解读(论文 + PyTorch源码)

一句话总结一下这些模型的精神(希望以后提到这个模型的时候,不用费力去脑海里面检索它的细节,能快速提取出这句话):

  1. ULMFiT:LSTM语言模型pretrain,在分类任务上finetune,提出了一堆trick
  2. ELMo:LSTM正向和反向语言模型pretrain,主推生成offline的向量
  3. GPT:Transformer单向语言模型pretrain,在多个任务上单独finetune
  4. BERT:Transformer双向语言模型pretrain,用MLM+NSP作为目标函数,在多个任务上单独finetune,横扫11项NLP任务
  5. MT-DNN:BERT预训练,MTL进行finetune,在多个任务上联合学习,10个任务上超越BERT
  6. XLM:多语言版的BERT,使用CLM/MLM(+TLM)的策略,在多语任务如翻译等上表现良好
  7. GPT-2:GPT升级版,大语料+大模型+很好的一个insight

整体来看,Transformer + Pretrain-Finetune 是趋势啊!!!

二. 杂谈

这里就想到啥就总结啥吧…

1. 为啥pretrain是有用的?

有些论文,比如Why Does Unsupervised Pre-training Help Deep Learning?等,都是专门研究这种套路为啥work的,总结来看,有如下几个观点:

  • 找到了一个更好的初始化点,在一个能让模型更好收敛的区域(putting the parameter values in the appropriate range for further supervised training,initializes the model to a point in parameter space that somehow renders the optimization process more effective)
  • 一种正则化手段(minimizing variance and introducing bias towards configurations of the parameter space that are useful for unsupervised learning)
  • 一种多任务学习者(GPT-2论文的主要思想,主要是说LM是一种多任务学习者)

2. 分类

在BERT论文的Related Work里面,对这些五花八门的Pretrain论文做了个很好的Group,笔者也是通过看这里才在头脑中有了更结构化的思路:

目前的Pretrain模型方向分为两大类:

  1. 基于特征

这个最典型的就是一些诸如Word2Vec(虽然很老了,但也别忘了,人家毕竟也是预训练的)、Sent2Vec、Para2Vec等,当然还有近期提出的ELMo。都是用一个算法或者模型,比如Word2Vec里面的Skip-Gram和CBOW,以及ELMo里面的LSTM,来预先通过大语料库进行训练,得到特征存下来,然后可以加入到任何想加入的地方进行下游NLP任务的训练。

  1. 基于微调

这个就很像图像里面的ImageNet那堆预训练网络所干的事情了,也是最近论文比较多的趋势,都是先在一个大语料上面进行预训练,然后后面接上各个下游任务的特定网络,再用下游任务的数据进行微调,就能得到很好的效果。

在这7篇论文里面,只有ELMo是侧重基于特征的,其他6篇都是这种基于微调的套路。并且其实这也只是论文的侧重点不同,方法都是通用的,基于特征的方法也可以用来做微调,基于微调的方法还不能提取出特征了吗?就看你想咋用了!

3. 对比

各个论文在发表的时候,肯定都要提到一波之前发表的相关论文,这里笔者整理了一些对比:

  1. ELMo与GPT对比

GPT论文里面总是不自觉得会在各个地方对比ELMo论文,笔者总结成如下几点:

  • GPT用的是Transformer,而ELMo用的是biLMs
  • GPT是基于bpe的,ELMo是基于char的
  • GPT的目的是把预训练的model接到下游的NLP任务上去一起训练,与ELMo生成embedding的侧重点不一样
  • GPT在训练时候使用的语料长度比ELMo更长,实际上ELMo使用的shuffle过后的句子,GPT用的是原始段落
  • GPT在接入下游任务时,需要做的改动更少,ELMo可能还要配合一个复杂的下游模型
  1. GPT与BERT细节对比

BERT论文里面总结了与GPT的对比(其实感觉BERT就像是个GPT的对标文,但真的是宝藏论文啊):

  • GPT是单向模型,BERT是双向模型
  • GPT的训练语料比BERT要小很多(800M v.s 800M+2500M)
  • GPT是在finetune时才加入[SEP]、[CLS]这些标识,而BERT在预训练的时候就一起训练了
  • GPT和BERT训练步数一样,但BERT的batchsize更大(32000 v.s 128000 words)
  • BERT在finetune的时候,针对不同任务选定不同的学习率,但GPT一直都用同一个
  1. ELMo、GPT与BERT结构对比

BERT论文里面有个图,描述了BERT、GPT和ELMo之间的不同:

  1. BERT和XLM对比
  • 输入构造:BERT在预训练构造输入的时候,用的都是pair的输入方式,其实就是先构建NSP的数据,然后再mask并构造MLM的数据。输入会规定一个最大长度,然后选择两个句子组(句子组的概念就是把物理上相邻的多个句子当成一整个句子,中间不加入任何句子的分隔符),满足在这个长度内即可。XLM在预训练的时候,对于CLM和MLM都是用的stream的方式,将多个物理上的句子(不一定相邻?)通过分隔符连接起来作为输入,对于TLM的构造与前者一样,只不过又拼接了一个平行语料。同时,去掉了BERT里面的句子id标识,改成了语言的id标识
  • 多语言训练方式:这其实是笔者脑补出来的,毕竟BERT的多语版给的信息实在太少了!笔者认为ML-BERT的训练,应该就是直接将所有语言的文章混合在一起,然后构建所有语言的词表,直接用BERT的方式训练,而XLM还用了CLM/MLM+TLM这种的套路
  • 预训练好的模型:感觉BERT的多语版本会更通用一些,XLM虽然更强,但更task-specific,而且BERT有100+语言,还有中文的,XLM就只有10+种
  1. BERT和MT-DNN对比

从BERT的视角看过去,MT-DNN就是在其上finetune的时候,用了MTL的思路。

  1. BERT和GPT-2对比
  • BERT是双向模型
  • BERT用了两种预训练任务,MLM和NSP,但还是有手动的嫌疑,除了双向语言模型不得不使用MLM,用预测下一句的任务还是为了应用在QA和NLI任务中,所以还是手动specific的了;而GPT2强行解释了LM+更高质量的数据集就可以学出这些信息,比较clean一些,但在有些任务上的表现确实也不是特别好

4. 优缺点

  • ULMFiT:感觉没太大优势,可能适用于一些非英文、有标签数据很少、没有SoTA的任务吧;对于分类任务可能比较好调,毕竟论文研究的就是这个,但迁移到别的任务上,可能就需要新的精调方法
  • ELMo:优点就是效果好,相比于之前的embedding,可以更好地捕捉语法、语义等更深层面的信息,而且想塞到哪里用就塞到哪里用!基于char的也不会出现OOV的情况;缺点就是,计算比较慢,每个embedding都需要运行一遍LM
  • GPT:优点就是用了Transformer,捕捉信息的范围更长,并且计算也比较快,可以并行化,效果也确实好!缺点就是对于某些类型的任务还需要对输入数据的格式进行调整,这就导致与pretrain的数据分布不一致
  • BERT:优点就是双向模型,缺点就是还是有手动specific的部分,比如两个预训练任务的设计
  • MT-DNN:优点就是结合了MTL的思想,缺点就是太像堆砌的论文了
  • XLM:优点就是多语版本的训练思路很好,缺点就是提供的预训练模型不够通用,都比较task-specific,而且语言比较少
  • GPT-2:优点就是提出了一个很好地证明当前这些LM pretrain的方法为何生效的insight,缺点就是没有放出最好的模型参数

5. 适用场景

主要整理了论文里面测试的场景,当然想用并且愿意调的话,哪哪儿都能用

  • ULMFiT:论文里面只用在了文本分类(分类、序列标注等)上,但看它那个套路,应该用到别的任务上也没有问题,只是调起来比较麻烦
  • ELMo:这个就随便用了吧,就当成embedding用,论文里面是用在了问答、情感分类、语义角色标注、共指消解、命名实体识别、文本蕴含等任务
  • GPT:文本蕴含、问答、推理、分类、文本相似度任务等
  • BERT:单句分类、句子对分类、问答、命名实体识别等任务
  • MT-DNN:单句分类、句子相似度、句子对分类、相关度排序等任务
  • XLM:多语的文本蕴含、无监督机器翻译、有监督机器翻译等任务
  • GPT-2:啥都行吧,论文里面都是用ZSL验证的各种任务

传送门

整合工具:https://github.com/huggingface/pytorch-pretrained-BERT (PyTorch的,目前有BERT、GPT、Transformer-XL和GPT-2)

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值