在文本理解任务(Natural Language Understanding)上,预训练模型已经取得了质的飞跃,语言模型预训练+下游任务fine-tune基本上已经成为标配。
很多人曾经尝试将 BERT 等预训练语言模型应用于文本生成任务(Natural Language Generation),然而结果并不理想。究其原因,是在于预训练阶段和下游任务阶段的差异。
BART这篇文章提出的是一种符合生成任务的预训练方法,BART的全称是Bidirectional and Auto-Regressive Transformers,顾名思义,就是兼具上下文语境信息和自回归特性的Transformer。那么它的细节和效果如何呢,就让我们一起来看看吧
论文名称:《BART: Denoising Sequence-to-Sequence Pre-training for NaturalLanguage Generation, Translation, and Comprehension》
论文链接:https://arxiv.org/pdf/1910.13461.pdf
1. 从GPT,BERT到BART
GPT:是一种 Auto-Regressive(自回归)的语言模型。它也可以看作是Transformer model的Decoder部分,它的优化目标就是标准的语言模型目标:序列中所有token的联合概率。GPT采用的是自然序列中的从左到右(或者从右到左)的因式分解。
BERT:是一种Auto-Encoding(自编码)的语言模型。它也可以看作是Transformer model的Encoder部分,在输入端随机使用一种特殊的[MASK]token来替换序列中的token,这也可以看作是一种noise,所以BERT也叫Masked Language Model。
表1. GPT和BERT的对比
BART:吸收了 BERT 的 bidirectional encoder 和 GPT 的 left-to-right decoder 各自的特点;是建立在标准的 seq2seq Transformer model 的基础之上,这使得它比 BERT 更适合文本生成的场景;此外,相比GPT也多了双向上下文语境信息。在生成任务上获得进步的同时,它也可以在一些文本理解类任务上取得SOTA。
图1. BERT、GPT和BART对比
1.1. 关于BART的讨论
Loss Function 就是重构损失, 也就是decoder的输出和原文ground truth之间的交叉熵。
BART 的结构在上图中已经很明确了:就是一个BERT+GPT的结构;但是不同之处在于(也是作者通篇在强调的),相对于BERT中单一的noise类型(只有简单地用[MASK] token进行替换这一种noise),BART在encoder端尝试了多种noise。其原因和目的也很简单:
BERT的这种简单替换导致的是encoder端的输入携带了有关序列结构的一些信息(比如序列的长度等信息),而这些信息在文本生成任务中一般是不会提供给模型的。
BART采用更加多样的noise,意图是破坏掉这些有关序列结构的信息,防止模型去“依赖”这样的信息。
1.2. BART中的多种Noise
Token Masking: 就是BERT的方法----随机将token替换成[MASK]。
Token Deletion: 随机删去token。
Text Infilling: 随机将一段连续的token(称作span)替换成一个[MASK],span的长度服从 的泊松分布。注意span长度为0就相当于插入一个[MASK]。
Sentence Permutation: 将一个document的句子打乱。
Document Rotation: 从document序列中随机选择一个token,然后使得该token作为document的开头。
表2. 不同noise及其作用
注意这里不同的noising变换方式还可以组合。
2. BART在下游任务上的应用
2.1. Sequence Classification Task
将该序列同时输入给encoder端和decoder端,然后取decoder最后一个token对应的final hidden state作为label,输入给一个线性多分类器。
图2. BART用于序列分类任务
注意在序列的最后要加一个token,保证seq2seq模型输出的label包含序列中每一个token的信息,这是因为decoder的输入是right-shifted的,不这样做的话label将不包含最后一个token的信息。
2.2. Token Classification Task
这一类问题意思是,将序列的所有token都看作独立的选项,序列长度为M,那么选项的个数就是M,在序列的所有token中选择k个。属于这类的经典问题有SQuAD,即answer endpoint classification。
将该序列同时输入给encoder端和decoder端,使用decoder的final hidden states作为每个token的向量表征,该向量表征作为分类问题的输入,输入到分类系统中去。
2.3. Sequence Generation Task
由于BART本身就是在sequence-to-sequence的基础上构建并且预训练的,它天然比较适合做序列生成的任务,比如概括性的问答,文本摘要,机器翻译等。
2.4. Machine Translation
具体的做法是将BART的encoder端的embedding层替换成randomly initialized encoder,新的encoder也可以用不同的vocabulary。
通过新加的Encoder,我们可以将新的语言映射到BART能解码到English(假设BART是在English的语料上进行的预训练)的空间。具体的finetune过程分两阶段:
第一步只更新randomly initialized encoder + BART positional embedding + BART的encoder第一层的self-attention 输入映射矩阵。
第二步更新全部参数,但是只训练很少的几轮。
图3. BART用于机器翻译
3. 实验1: 不同预训练目标的比较
论文对不同的pretrain objective,在多个下游任务上进行了比较严谨详尽的实验对比。模型结构: Transformer-base。
不同的Pre-train Objective有:
GPT: (Auto-Regressive) Language model
XLNET: Permuted Language Model
BERT: Masked Language Model
UniLM: Multitask Masked Language Model
MASS: Masked Seq-to-Seq
对比实验涉及的下游任务有:
SQuAD: 将context和question连在一起输入Encoder和Decoder,输出的是context中的span。
MNLI: 将2个句子连在一起输入Encoder和Decoder(中间加上[EOS]表示隔开),模型输出的是两个句子之间的关系,是典型的序列分类问题。
ELI5: 抽象的问答,将context和question连在一起输入,模型输出抽象摘要文本。
XSum: 新闻摘要生成任务
ConvAI2: 对话生成任务
CNN/DM:摘要生成任务
3.1 结论
不同预训练方法各有千秋,在不同下游任务上的效果差异很大:比如说Language Model在ELI5任务上最好,但是在SQuAD任务上是最差的。
BART预训练中的Token Masking作用很关键:Token Masking包括Token Masking,Token Deletion,Text Infilling。从表中可以看出,只做Document Rotation / Sentence Shuffling的预训练模型效果很差。另外,Deletion比Masking效果好。
Left-to-Right Pretraining会提升生成任务的效果:和Masked Language Model和Permuted Language Model相比,包含Left-to-Right预训练的模型在生成任务上表现更好。
Masked Language Model和Permuted Language Model相比于包含Left-to-Right Auto-regressive Pre-training的模型,在生成任务上明显表现要差一些
双向的encoder对于SQuAD任务很重要
ELI5任务上单纯的Language Model (Left-to-Right AR Language Model)表现最好,一个可能的解释是该任务的输出和输入关系不大,因此BART没有优势。
预训练目标不是唯一的重要因素,比如表中的Permuted Language Model的效果不如XLNet,作者提到,可能的原因有XLNet中有一些结构上的改进(比如relative-position embedding和segment-level recurrence)
4. 实验2: 大规模实验
实验发现,在discriminative任务(NLU)上和RoBERTa/XLNet效果持平,在生成任务上显著高于BERT, UniLM, XLNet, RoBERTa等模型
4.1. Discriminative Tasks
BART并没有因为单向的decoder而影响在文本理解类任务上的效果:
4.2. Generation Tasks
BART得益于单向的decoder,在三大类生成任务上效果拔群:
摘要生成:
摘要任务上的对比
对话生成:
对话生成任务上的对比
抽象问答
抽象问答任务上的对比
4.3. 翻译
全部0条评论
快来发表一下你的评论吧 !