Seq2Seq 预训练语言模型:BART和T5

自回归(autoregressive)语言模型,如GPT,采用从左向右单向解码的方式,适用于自然语言生成(NLG)任务。非自回归(non-autoregressive)语言模型,如BERT,每个时刻的输出都可以充分利用双向信息,适用于自然语言理解(NLU)任务,但是在NLG上表现不佳。如何利用两者的优点,打造一个既能适用于NLU任务,又能适用于NLG任务的语言模型?

背景:语言模型的结构

Transformers最早用于机器翻译任务,是一个Encoder-Decoder模型(如左图),其各模块被广泛应用于最近的语言模型。

  • BERT使用它的Encoder(如左图下方)。
  • GPT使用Decoder(如中间图,或左图上方)。
  • UniLM将通过修改attention mask,将Encoder和Decoder结合,这种方式称作Prefix LM(如右图),结构上还是只使用了Encoder。BART和T5的结构则又回到了最原始的Transformers结构。

图中方块代表序列中的元素,线代表attention。深色的线代表全可见attention,浅色的线代表因果掩码(causal masking),即当前时刻只能看见之前的元素,不能看见未来的元素。

Attention的掩码矩阵如图所示:


  • 左图:完全可见矩阵,模型输出可以看见任意时刻的输入。Transformers 的 Encoder,BERT 用的就是这种掩码。
  • 中图:因果掩码矩阵,模型输出只能看见当前时刻之前的输入(黑色部分),这样可以防止未来的输入干预当前输出的结果。Transformers 的 Decoder,GPT 等单向语言模型使用的就是这种掩码。
  • 右图:带有前缀的因果掩码矩阵,前缀部分和完全可见矩阵一样,输出能够看见前缀任意时刻的输入,超过前缀范围使用因果掩码。UniLM采用这种掩码。

BART和T5

两个工作都是在2019年的10月发表在Arxiv上的。BART由Facebook提出,T5由Google提出。两者都不约而同地采用了Transformers原始结构,在预训练时都使用类似的Span级别去噪目标函数(受SpanBERT启发),但是两者还是有一些差别的:

动机

  • BART想要统一BERT和GPT,从一开始就确定了使用Transformers的原始结构。BART探究了各种目标函数的有效性,即对输入加各种类型的噪声,在输出时将其还原。BART在NLU任务上保持了和RoBerta差不多的前提下,在多个NLG任务中取得了SOTA成绩。论文算上参考文献总共长度10页。
  • T5其实是一篇关于语言模型的Survey,其思路是从头开始,找出语言模型的最优结构,在尝试了多种结构之后发现Seq2Seq结构是最好的,然后从模型的目标函数,数据集,训练时间,模型大小,多任务学习,等角度做了大量的实验,确定方向之后扩大模型规模,最终在多个NLU和NLG任务中达到了SOTA水平。此外,这个工作还产出了一个干净的大规模英文预料:C4。论文算上参考文献长达67页。

预训练任务

BART的预训练任务是将带噪声的输入还原。如下图所示,输入为ABCDE,在AB中插入一个span长度为0的mask,再将CD替换为mask,最终得到加噪输入的A_B_E。模型的目标是将其还原为ABCDE。

BART最终使用Text Infilling + Sentence permutation,其中Text Infilling起到了最主要的作用,其实就是Span级别的mask,只不过这里允许span长度为0,span的长度服从泊松分布,lambda = 3,总共mask30%的字符。Sentence permutation提升不大,之所以使用是作者假设模型规模提升后这个任务会有用。




T5使用两种任务,分为无监督和有监督。其中无监督任务也是Span级别的mask,不过输出不需要还原整句,只需要输出mask掉的tokens就可以,总共mask15%字符。有监督任务提升不大,这里不展开说明。



除了这种任务,T5还尝试了其他的任务类型,如下表所示。


这些任务可以,分为三类:前缀语言模型任务(Prefix language modeling),BERT风格任务(BERT-style之所以叫bert风格,是因为bert没有decoder,这里的decoder输出原句,和BART类似),打乱还原任务(Deshuffling)。这三个类型中,BERT风格效果最好。


然后尝试化简任务,前两行是输出原句的(类似BART),后两行是不需要输出原句的。这里的对比其实不太公平,后两个都是span的,前两个确是token级别的。这也是BART可能超越T5的一个因素。作者解释之所以继续沿着Replace corrupted spans探索是因为:1. 不需要输出原句,训练速度快。2. Drop corrupted tokens 这个任务和GLUE的下游任务CoLA类似导致分数虚高(60.04,而baseline才53.84),在SGLUE中其实分数很低。



微调

BART的微调方式如下图:

  • 左边是分类任务的微调方式,输入将会同时送入Encoder和Decoder,最终使用最后一个输出为文本表示。
  • 右边是翻译任务的微调方式,由于翻译任务的词表可能和模型词表不同,所以这里使用一个新的小型Encoder替换BART中的Embedding。



T5的微调方式如下图:

无论是分类任务,还是生成任务,全都视为生成式任务。


一些其他的细节

位置编码:

Transformers使用Position Encoding,使用sinusoidal函数

BERT和BART都换成了可学习的绝对位置嵌入

T5改成了相对位置嵌入(relative position embeddings)

激活函数:

Transformer最开始使用ReLU,BERT和GPT都使用GELU,BART也同样采用GELU,不过T5还是使用了最初的ReLU。

实验

T5的实验并没有直接和BERT这种只有encoder的模型比较,因为实验要完成一些生成任务,这种任务BERT无法完成的。

BART和T5发布的时间接近,论文中没有互相比较,不过我们可以从相同的任务中比较BART和T5。

训练数据

模型学习到的Token数量可以这样计算:Batchsize * seqlength * steps

BART: 8000 * 512 * 500 000

T5: 2048 * 512 * 1000 000

BART的训练数据是T5的两倍

模型大小

BART-large:12encoder, 12decoder, 1024hidden

T5-base:12encoder, 12decoder, 768 hidden, 220M parameters(2x bert-base)

T5-large: 24encoder, 24decoder, 1024hidden, 770M parameters

T5-large的模型大小是BART-large的两倍。

综合训练时间和模型大小,T5-large和BART-large可以互相比较,但是由于细节的实现上还有很多不同,这里仅作参考。

T5 vs BART

对于理解任务,将两篇论文中实验结果整理为下表:

对于生成任务,两个模型都在CNN/DailyMail上进行了实验

综合比较来看,BART稍微好一些,尤其是在理解任务上。不过由于T5发布的模型比较大,参数量最多达到了11B,所以在GLUE和SuperGLUE上长期霸榜。

参考资料

BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

arxiv.org/abs/1910.1346

Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

arxiv.org/abs/1910.1068

编辑于 2022-02-10 19:35