最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的、完整的知识结构体系,
以下是要写的文章,本文是这个系列的第十六篇:
Transformer最早出来是为了解决机器翻译问题,因而Transformer模型分为两部分,Encoder和Decoder。Bert模型使用了Encoder部分,而GPT模型使用了Decoder部分,分别得到了很好的预训练模型。
而本文所解说的Bart,则返本溯源,重新拾起了Encoder-Decoder并用的结构,即seq2seq结构
Bert,GPT和Bart的对比如下,可以看到,Bart是在Encoder中输入被损坏的句子,然后在Decoder中去还原。这样做的好处在于相对于Bert中单一的数据损坏方式,Bart更灵活。
在Bert中,数据是按照15%的概率采样出来替换成特殊标记[MASK],当然,里面还有一个8:1:1的分配,在这里就不细说了,感兴趣可以去Bert那一篇细看。
而在Bart中,数据的处理就多种多样了。如下,可以是类似Bert的Mask方式,可以是删除,可以是颠倒顺序,可以是多个词语替换为一个[MASK]。
其中,词语删除和多个词语替换为一个[MASK]等方式会改变句子的长度,这点是Bert做不到的。
这样的数据复原方式,使得Bart会在生成问题上很有优势,实验也表明了这点,另外,Bart可以在判别任务上也达到和Roberta相近的结果。
在GLUE数据集上的结果如下,Bart可以达到和Roberta相近的结果。
在Summarization数据集上的结果如下:
在Abstractive QA上的结果如下:
可以看到,Bart这种方式在生成问题上效果很好。