赞
踩
Paper地址arxiv.org/pdf/1910.13461.pdf
Code地址github.com/huggingface/transformers/blob/master/tests/test_modeling_bart.py
BART使用了标准的seq2seq tranformer结构。BART-base使用了6层的encoder和decoder, BART-large使用了12层的encoder和decoder。BART的模型结构与BERT类似,不同点在于:
(1)decoder部分基于encoder的输出节点在每一层增加了cross-attention(类似于tranformer的seq2seq模型);
(2)BERT的词预测之前使用了前馈网络,而BART没有。总的来讲,在同等规模下,BART比BERT多了10%的参数。
BART的预训练是在于破坏原文档然后优化重构loss,通过交叉熵来计算decoder输出与原文档的差异。极端情况下,当原文档信息全部丢失时,BART相当于语言模型。
图1 BART预训练方式
BART采用了多种方式破坏原文档,即采用了多种Noise.
对于序列分类(文本分类)任务,encoder和decoder部分都用相同的输入,将deocoder最后一个节点用于多类别线性分类器中。此方法与BERT的CLS token较为类似;区别在于,BART在decoder部分最后增加了一个token,如此,便可获得来自完整输入的解码信息。(见图) - 思考:此方法,在inference上会更耗时吗
图2 BART在文本分类上finetune的方式
对于序列标注任务,同样是在decoder和encoder采用相同的文本输入,以decoder的隐藏节点输出用于预测每个节点的类别。
由于BART的模型框架本身就采用了自回归方式,因而在finetune序列生成任务时,可直接在encoder部分输入原始文本,decoder部分用于预测待生成的文本。
BART预训练模型同样也可用于将其它语言翻译为英文(BART的预训练模型是基于英语来训练的)。
先前的研究工作已经表明,在机器翻译中,encoder部分融合预训练模型能带来较大的效果提升,然后在decoder部分却受到限制。本文本表明在仅仅在encoder更换部分参数,就可利用到整个BART模型(包括encoder和decoder)。
更准确地说,本文替换encoder的embedding layer的参数为随机初始化所得(因输入语言不再是预训练模型采用的英语)。然后,整个finetue阶段便可分为两步:1)先冻结BART的大部分参数,仅仅更新encoder部分的randomly initialized encoder和BART positional embeddings,以及输入到BART的第一层self-attention映射矩阵。2)更新BART的全部参数,这一步,仅需迭代几次即可。
图3 BART机器翻译finetune的模型结构
表1 不同的预训练方式对比
表1表明,基于消融实验,上述所采用的噪声处理方式基本上相比之前的模型,在准确率上都有一定的提升。
表2 SQuAD和GLUE任务上实验结果
表2表明,BART在SQuAD和GLUE上的效果堪比RoBERTa和XLNET,在部分任务上效果最优,也说明了采用单向编码器并不会降低判别任务上的效果。
表3 文本摘要上实验结果
表3表明,BART在摘要提取效果都有明显提升,也再次表明,预训任务与下流任务尽可能接近时,下游任务会达到更好的效果。
BART通过重构带有噪声的文本,不仅能在判别任务达到与RoBERTa持平的效果,甚至可在生成任务上达到SOTA.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。