查看原文
其他

BERT相关模型汇总梳理

熊志伟 PaperWeekly 2022-03-17


©PaperWeekly 原创 · 作者|熊志伟

学校|清华大学

研究方向|自然语言处理


BERT 自 2018 年被提出以来,获得了很大的成功和关注。基于此,学术界陆续提出了各类相关模型,以期对 BERT 进行改进。本文尝试对此进行汇总和梳理。



MT-DNN


MT-DNN(Multi-Task DNN)在 Microsoft 于 2019 年发表的《Multi-Task Deep Neural Networks for Natural Language Understanding》中被提出。

模型结构如下:


模型整体是个 MTL(Multi-Task Learning)框架,底层的 Shared layers 复用了 BERT 的结构,为所有 task 所共有,顶层的 Task specific layers 则为单个 task 所独有。总体来看,和 BERT 差异不大,区别仅在于 Pre-training 阶段,MT-DNN 加入了 multi-task 进行训练,期望学习到更好的 text representations(图中的  )。

MTL 的优点:

  • 标注数据较少的任务,可以利用其它相似任务的标注数据
  • 降低针对特定任务的过拟合,起到正则化的作用


MT-DNN 引入了 4 中不同类型的 task,并相应设计了不同的 loss function:

Single-Sentence Classification:选用了 [CLS] 在  层对应的输出,loss function 是交叉熵;

Text Similarity:选用了 [CLS] 在  层对应的输出,loss function 是 MSE(建模为回归问题);

Pairwise Text Classification:输出后接了一个SAN(Stochastic Answer Network),loss function 是交叉熵;

Relevance Ranking:选用了 [CLS] 在  层对应的输出,loss function 采用 LTR 的训练范式。

MT-DNN 的 Pre-training 部分包括两个阶段:第一阶段,采用 BERT 的训练方式(MLM+NSP),学习 Shared layers 的参数;第二阶段,采用 MTL 的方式,学习 Shared layers+Task specific layers 的参数,论文中此处采用的是 9 项 GLUE 的 task。详细的训练步骤描述如下:


论文中,作者采用了  作为 Shared layers 的初始化,并且证明,即使没有 fine-tuning 阶段,MT-DNN 的效果也要好于  。

总的来说,MT-DNN 相对于 BERT 的提升,来自于 MTL 和 special output module(输出模块和 loss function 设计更复杂)。


XLNet


XLNet 在 CMU+Google 于 2019 年发表的《XLNet: Generalized Autoregressive Pretraining for Language Understanding》中被提出。

论文中,作者提到了两种 Pre-training 的方式:AR(autoregressive language modeling)、AE(denoising autoencoding)。前者的代表如 ELMo、GPT 系列,后者的代表则是 BERT。

两种方式各有劣势:

  • AR:只利用到单向 context 的信息(前向或后向)

  • AE(这里特指 BERT):Pre-training 阶段引入的 [MASK] 占位符在 Fine-tuning 阶段并不存在;同一个 sequence 如果有多个位置 [MASK],BERT 假定它们之间是独立的,这与事实不符


为了解决 BERT 面临的问题,XLNet 做了如下改进:

  • Pre-training的训练目标调整为PLM (Permutation Language Modeling),具体实现时采用了 Two-Stream Self-Attention 机制,并对可能的排列进行了采样
  • 模型结构采用 Transformer-XL,解决 Transformer 对长文档不友好的问题
  • 采用更优质更大规模的语料



RoBERTa


RoBERTa 在华盛顿大学 +Facebook 于 2019 年发表的《RoBERTa: A Robustly Optimized BERT Pretraining Approach》中被提出。

RoBERTa 的改进点主要有:

1. 训练时间更长:更大规模的训练数据(16GB -> 160GB)、更大的 batch_size(256 -> 8K);

2. 去除 NSP 任务,输入格式相应修改为 FULL-SENTENCES;

3. 输入粒度:由 character-level BPE 改为 byte-level BPE;

4. masking 机制:由 static masking改为dynamic masking:

  • static masking:仅在数据预处理阶段做一次随机 mask,每条数据在每个 epoch 中的 mask 方式不变;

  • dynamic masking:每条数据在训练时随机mask,每个 epoch 中的 mask 方式不同。





SpanBERT


SpanBERT 在华盛顿大学+普林斯顿大学于 2019 年发表的《SpanBERT: Improving Pre-training by Representing and Predicting Spans》中被提出。

模型结构如下:


SpanBERT 的改进点主要有:

1. Span Masking:首先根据几何分布  采样出 span 的长度(大于 10 则重新采样),然后根据均匀分布随机选择起始点,最后从起始点开始将 span 内的 token 进行 mask;注意,这个过程会进行多次,直到被 mask 的 token 数量达到阈值,如输入序列的 15%;

2. Span Boundary Objective(SBO):对于 span 内的每一个 token,除了原始的 MLM 的 loss,再加 SBO 的 loss,即:


3. Single-Sequence Training:去掉 NSP 任务,用一个长句替代原来的两个句子。



ALBERT


ALBERT 在 Google于 2019 年发表的《ALBERT: A LITE BERT FOR SELF-SUPERVISED LEARNING OF LANGUAGE REPRESENTATIONS》中被提出。

ALBERT 的出发点在于,如果模型参数持续变大,会出现两类问题:GPU/TPU OOM;模型效果退化。基于此,ALBERT 考虑减少模型的参数。

ALBERT 的改进点主要有:

1. Factorized embedding parameterization:之前的模型中,都会使  (E 是 vocabulary embedding size,H 是 hidden size),如此一来,H的提升会导致E的提升,从而使参数量呈平方级的增加。ALBERT 将 E 和 H 解绑,在 embedding 后再接一个  的矩阵,这样可以保持 E 不变的情况下提升 H。在这种情况下,参数量由  降低至  ,当  时,效果更加显著;

2. Cross-layer parameter sharing:将 Transformer Encoder 中每一个 layer 的参数进行共享,也即,每个 layer 复用同一套参数;

3. Inter-sentence coherence loss:将 NSP 替换为 SOP(sentence-order prediction),即从同一个文档中抽取两个连续的句子作为正样本,调换顺序后作为负样本(NSP 的负样本来自两个不同的文档);

4. 采用更大规模的训练数据并去除 Dropout(因为作者发现模型仍然没有过拟合)。

ALBERT 和 BERT 在不同配置下的参数量如下:


ALBERT 和 BERT 在不同配置下的效果和训练时间如下:


注意,这里的 Speedup 指的是训练时间而非推理时间,因为 ALBERT 的优化点主要在于降低参数量,这可以加速训练,但是模型层数并没有变化,所以推理时间不受影响。


MASS


MASS 在 Microsoft 于 2019 年发表的《MASS: Masked Sequence to Sequence Pre-training for Language Generation》中被提出。

像 BERT 这类基于 Pre-training 和 fine-tuning 的模型在 NLU(Natural Language Understanding)任务中取得了很大的成功。与之相对应地,NLG(Natural Language Generation)任务如 neural machine translation(NMT)、text summarization 和 conversational response generation 等,经常面临着训练数据(paired data)匮乏的问题。

因此,在大量 unpaired data 上做 pre-training 然后在少量 paired data 上做 fine-tuning,对 NLU 任务而言是同样有益的。然而,直接采用类似 BERT 的预训练结构(仅用 encoder 或 decoder)是不可取的,因为 NLG 任务通常是基于 encoder-decoder 的框架。基于此,论文提出了一种适用于 NLG 任务的预训练方式——MASS。

区别于单独对 encoder 或 decoder 进行 pre-training,MASS 可以对二者进行联合 pre-training,其结构如下:


整体基于 Transformer,Encoder 被 mask 的 token 是连续的,Decoder 将 Encoder 中未被 mask 的 token 进行 mask,预测 Encoder 中被 mask 的 token。

论文中提到,通过控制 Encoder 中 mask 的 token 长度 k,BERT 和 GPT 可看作是 MASS 的特例:


Pre-training:

  • 由于 NMT 涉及跨语言,因此采用了 4 种语言的数据,并在 Encoder、Decoder 的 input 中给每个 token 加上了一个 language embedding
  • Encoder,mask 的 token 数量为序列长度的 50%,随机选择起点,mask 方式同 BERT(80% 替换为 [M],10%替换为其它随机 token,10% 不变)
  • Decoder,移除被 mask 的 token,未 mask 的 token 依然保持它们的 positional encoding 不变


Fine-tuning:

  • 同常规 Seq2Seq 任务



UNILM


UNILM 在 Microsoft 于 2019 发表的《Unified Language Model Pre-training for Natural Language Understanding and Generation》中被提出。

UNILM 是一种能同时适用于 NLU 和 NLG 任务的 Pre-training 框架,基于参数共享的 Transformer,对三种类型的无监督语言建模目标进行联合预训练:Unidirectional LM(left-to-right && right-to-left)、Bidirectional LM、Sequence-to-Sequence LM。预训练后的 UNILM 可以进行 Fine-tuning(如有必要可添加 task-specific layers)以适应不同类型的下游任务。

模型结构如下:


Pre-training:

  • 对于不同类型的 LM 目标,所使用的 segment embedding 不同,以示区分

  • 对于所有类型的 LM 目标,预训练采用的任务都是 cloze task,有所区分的是,不同的 LM 它们所能利用到的 context 不同:Unidirectional LM,context 是单侧的 token(左侧 or 右侧);Bidirectional LM,context 是两侧的 token;Sequence-to-Sequence LM,context 是源序列的所有 token 以及目标序列的左侧 token。不同的 context 是通过相应的 mask 矩阵来实现的
  • 对于 Bidirectional LM,加入了 NSP 任务

  • 对于 Sequence-to-Sequence LM,在 Pre-training 阶段,源序列和目标序列都有可能被 mask

  • 在一个 batch 中,1/3 的时间采用 Bidirectional LM,1/3 的时间采用 Sequence-to-Sequence LM,1/6 的时间采用 left-to-right Unidirectional LM,1/6 的时间采用 right-to-left Unidirectional LM

  • 80% 的时间 mask 一个 token,20% 的时间 mask一个bigram 或 trigram

Fine-tuning:

  • 对于 NLU 任务,同 BERT

  • 对于 NLG 任务,若是 Seq2Seq 任务,则只 mask 目标序列中的 token

UNILM 的优势:

  • 统一的预训练流程让单个 Transformer 能为不同类型的语言模型使用共享的参数和架构,从而减轻对分开训练和管理多个语言模型的需求
  • 参数共享使得学习到的文本表征更通用,因为它们针对不同的语言建模目标(其中利用上下文的方式各不相同)进行了联合优化,这能缓解在任意单个语言模型任务上的过拟合
  • 除了在 NLU 任务上的应用,作为 Sequence-to-Sequence LM 使用的 UNILM 也使其能自然地用于 NLG 任务,比如抽象式摘要和问答



BART


BART在Facebook于2019年发表的《BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension》中被提出。

BART 采用了 Transformer 的 Seq2Seq 框架,和 MASS 类似,只不过它的 Pre-training 任务是:在 Encoder 端输入被破坏的文本,在 Decoder 端复原原始文本。

模型结构如下:


破坏文本的方式有如下几种(可组合使用):


Fine-tuning:

  • Sequence Classification Tasks:



  • Token Classification Tasks:将完整文档输入到 Encoder 和 Decoder 中,使用 Decoder 最上方的隐藏状态作为每个 token 的表征,进行分类
  • Sequence Generation Tasks:同常规 Seq2Seq 任务

  • Machine Translation:新增了一个 Encoder 结构(随机初始化),视作对预训练 Encoder 的 embedding layer 的替换




参考文献

[1] https://arxiv.org/pdf/1901.11504.pdf
[2] https://fyubang.com/2019/05/23/mt-dnn/
[3] https://zhuanlan.zhihu.com/p/103220246
[4] https://zhpmatrix.github.io/2019/08/08/mt-dnn/
[5] https://blog.csdn.net/magical_bubble/article/details/89517709
[6] https://arxiv.org/pdf/1906.08237.pdf
[7] https://medium.com/ai-academy-taiwan/2019-nlp%E6%9C%80%E5%BC%B7%E6%A8%A1%E5%9E%8B-xlnet-ac728b400de3
[8] http://fancyerii.github.io/2019/06/30/xlnet-theory/
[9] http://fancyerii.github.io/2019/06/30/xlnet-theory/
[10] https://arxiv.org/pdf/1907.11692.pdf
[11] https://blog.csdn.net/ljp1919/article/details/100666563
[12] https://www.jiqizhixin.com/articles/2019-09-05-6
[13] https://arxiv.org/pdf/1909.11942.pdf
[14] https://cloud.tencent.com/developer/article/1682418
[15] https://zhuanlan.zhihu.com/p/85221503
[16] https://arxiv.org/pdf/1907.10529.pdf
[17] https://zhuanlan.zhihu.com/p/75893972
[18] https://zhuanlan.zhihu.com/p/149707811
[19] https://arxiv.org/pdf/1905.02450.pdf
[20] https://easyai.tech/blog/mass-bert-gpt/
[21] https://zhuanlan.zhihu.com/p/67687640
[22] https://blog.csdn.net/ljp1919/article/details/90312229
[23] https://www.zhihu.com/question/324019899
[24] https://arxiv.org/pdf/1905.03197.pdf
[25] https://zhuanlan.zhihu.com/p/68327602
[26] https://www.jiqizhixin.com/articles/2019-12-09-16
[27] https://blog.csdn.net/qq_42189083/article/details/104413886
[28] https://cloud.tencent.com/developer/article/1580364
[29] https://zhuanlan.zhihu.com/p/113380840
[30] https://arxiv.org/pdf/1910.13461.pdf
[31] https://www.mdeditor.tw/pl/pLHV
[32] https://zhuanlan.zhihu.com/p/90173832


更多阅读




#投 稿 通 道#

 让你的论文被更多人看到 



如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。


总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 


PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得技术干货。我们的目的只有一个,让知识真正流动起来。


📝 来稿标准:

• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向) 

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接 

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志


📬 投稿邮箱:

• 投稿邮箱:hr@paperweekly.site 

• 所有文章配图,请单独在附件中发送 

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通



🔍


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧



关于PaperWeekly


PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存