最近在生成相关论文时,经常看到使用BART(Bidirectional and Auto-Regressive Transformers,双向自回归变压器)模型作为基线比较,或在BART模型上进行修改。因此,回顾一波BART模型,做一下分享。
论文地址:Paper
代码地址:Github
如果说BERT模型是仅使用Transformer-Encoder结构的预训练语言模型,GPT模型是仅使用Transformer-Decoder结构的预训练语言模型,那么BART模型就是使用Transformer模型整体结构的预训练语言模型,如图1所示;使其在自然语言理解任务上表现没有下降,并且在自然语言生成任务上有明显的提高。
BART模型在预训练时,首先使用多种噪声对原始文本进行破坏,然后通过seq2seq模型重建原始文本。
Model Architecture
BART模型使用标准的Transformer结构,但参考GPT模型,将原有ReLU激活函数变成了GeLUs函数,并且初始化参数服从 。
Pre-training
BART模型的预训练是对原始文本破坏再重建,因此损失函数为decoder的输出与原始文本的交叉熵。BART模型共介绍了5种破坏原始文本的噪声方法,如图2所示。
Token Masking
Token掩码,与BERT模型策略一致,随机抽取token,并用[MASK]标记进行替换。
Token Deletion
Token删除,从输入中随机删除token,与掩码不同,该策略为了让模型学习哪些位置缺少输入信息。
Text Infilling
文本填充,随机挑选一个文本片段(文本片段的长度符合λ = 3的泊松分布),并且使用一个[MASK]标记进行替换。当片段长度为0时,相当于在原始位置插入一个[MASK]标记。与SpanBERT模型不同的是,SpanBERT模型是使用片段长度个数的[MASK]标记进行替换。
Sentence Permutation
句子排序,将文本按照句号进行分割,生成句子序列,然后将句子之间的顺序随机打乱。
Document Rotation
文档旋转,随机选择一个token,然后将文本进行旋转,即以选择token作为文本的开头。该策略让模型学习文本的开头。
Fine-tuning
该部分主要介绍BART模型,如何应用在自然语言理解和自然语言生成的下游任务中,如图3所示。
Sequence Classification Tasks
对于序列分类任务,将相同的输入,输入到encoder和decoder中,最后将decoder的最后一个隐藏节点作为输出,输入到分类层(全连接层)中,获取最终的分类的结果。其中,decoder的最后一个隐藏节点是一个特殊标记,相当于BERT模型中的[CLS]。
Token Classification Tasks
对于Token分类任务,例如,机器阅读理解、信息抽取等,将完整的输入,输入到encoder和decoder中,将decoder最后一层的所有隐藏节点作为每个token的模型表示,再对每个token的表示进行分类,最终得到结果输出。
Sequence Generation Tasks
由于BART模型是在Seq2Seq模型结构下的的预训练模型,本身就拥有自回归解码器,因此可以直接对生成任务进行微调。将源文本输入到encoder中,将待生成的目标文本输入到decoder中,进行自回归生成。
Machine Translation
由于预训练过程是用同语言进行训练的,但是机器翻译是由一种语言翻译成另一种语言,因此BART模型在进行机器翻译任务时,将encoder的Embedding层进行随机初始化,即更换字典,重新训练另一种语言的表征。
在微调过程中,首先冻结原始BART模型的大部分参数,仅训练随机初始化的Embedding、BART模型位置嵌入和BART模型编码器第一层与Embedding连接的self-attention参数;然后再对模型的所有参数进行少量地训练。
Result
对多种噪声策略进行比较分析,结果如表1所示,Text Infilling策略在多个任务上,都达到了最优的效果,而Document Rotation策略和Sentence Shuffling策略效果较差。
虽然单独使用Sentence Shuffling策略时较差,并且Text Infilling策略和Sentence Shuffling策略的组合也仅仅在CNN/DM数据上取得了较好的效果,但是作者认为,在更大的预训练模型中可以从该策略上学的更好。
因此,BART模型最终使用了Text Infilling策略和Sentence Shuffling策略的组合,其中屏蔽每个文本中30%的token,并排列所有的句子。
在自然语言理解任务上的效果分析,如表2所示,BART模型在部分任务上取得了较好的效果,并且其他任务上没有明显的下降。
在生成任务上的结果,如表3、4和5所示,在文本摘要(CNN/DM、XSum)、对话(ConvAI2)、摘要式QA(ELI5)任务上的效果均有显著低提高。在
在翻译任务上的结果分析,如表6所示,在WMT’16 RO-EN数据上也是有所提高,
总结
文章开始也说了“BART模型就是Transformer模型Encoder-Decoder结构的预训练语言模型”,但是个人觉得扰乱策略是可圈可点的,思路很正,不过实验结果看来还是有些理想化了,真正有效地只有Text Infilling策略。
很多论文在中文数据集上实验,都说自己训练了一个中文BART模型,再进行下游实验。开源模型如下:uer/bart-base-chinese-cluecorpussmall · Hugging Face。
真心感谢,BERT、GPT等模型开源的小伙伴们~~~
喜欢的的同学们,记得点赞,关注,转发哟!!!