作者:Mike Lewis, Yinhan Liu, Naman Goyal, Marjan Ghazvininejad, Abdelrahman Mohamed, Omer Levy, Ves Stoyanov, Luke Zettlemoyer
时间:2019
一、完整代码
这里我们使用python代码进行实现
# 完整代码在这里 # 这里感觉在输出端实现就好了,下次有时间在弄;
二、论文解读
BART论文名字为Denoising Sequence-to-Sequence Pre-training for Natural Language...
,在这里有两个名词要考虑,一个是Sequence-to-Sequence
,一个是Pre-training
;前者的架构较为出名的有RNN
和Transformer
,后者的架构较为出名的有Bert
,GPT
;但是这里要注意的是BART
是一个Transformer
架构;
其于Transformer
不同的地方只有一个,就是input
;毫无疑问,这就是一篇水文;
2.1 模型架构
模型架构就是Transformer
;
论文在水的时候,在画图故意不用Transformer
来进行对比,而是用Bert
和GPT
来对比,很贼;
2.2 输入端
BART
在输入端中采取的措施:
下面我们对其依次介绍:
Token Masking
这里采取的方式和BERT
一样,使用随机的mask来regularization;
Token Deletion
这里采取的方式是随机删除一些token,注意是删除而不是使用掩码,是从源头删除,掩码的长度会改变;
Text Infilling
这里采取的方式是填充,有删除就有填充,这很好理解;
Sentence Permutation
这里是通过标点符号来切割sentences,然后对sentences进行排序,再来训练;
Document Rotation
这里就相当于说是随机打乱,没有一点规律;
2.3 微调
微调不同任务采取不同的措施,论文中的图片还挺形象的,如下所示:
Sequence Classification Tasks
这里使用transformer
的decoder
中隐藏层的最后一层进行文本分类,就相当于BERT
中的[cls]
的效果,至于为什么是最后一个,因为解码器是单向的,而最后一个是最后的输出,其是自回归模型与前面的信息进行了充分的交互;
Token Classification Tasks
看起来高大上,其本质就是在后面弄一层dense
层,然后继续词的预测;这里写成classification
真有意思…
Sequence Generation Tasks
和GPT
一样,无需解释;
Machine Translation
这个就更不用说了,这就是transformer
本来的任务;
2.4 结果
使用了消融实验,结果如下所示:
不同模型之间的不同如下所示:
其中我们可以看到,BART
的效果和RoBERTa
和XLNet
的效果差不多;
其中我们可以看到,在文本总结上效果挺好的;
三、过程实现
这里感觉在输出端实现就好了,下次有时间在弄;
四、整体总结
论文好水,就是几个regularization
结合在一起;