文章目录
- BART介绍
- 下游任务 fine tune
BART介绍
我最近在看自动文摘相关的预训练模型,BART模型是2019-2020左右提出来的,首先介绍下它的基本情况。
论文:https://arxiv.org/abs/1910.13461
github:
- fairseq例子:https://github.com/pytorch/fairseq/tree/master/examples/bart
- 模型文件:https://github.com/pytorch/fairseq/blob/master/fairseq/models/bart/model.py
BART 采用了一个标准的 Seq2Seq Transformer 结构,类似 GPT 将 ReLU 激活函数替换为 GeLUs。对于基线模型,采用了一个 6 层的编码和解码器,更大的模型采用了 12 层的结构。相比于 BERT 的架构主要有以下两点不同:
- 解码器的每一层叠加了对编码器最后一个隐含层的注意力。
- BERT 在预测之前采用了一个前馈的网络,而 BART 没有。
BART 采用了最小化破坏后的文档和原始文档之间的重构误差的方式进行预训练。不同于其他的一些去噪自编码器,BART 可以使用任意类型的文档破坏方式。极端情况下,当源文档的所有信息均丢失时,BART 就等价与一个语言模型。BART 中采用的文本破坏方式有:字符遮罩,字符删除,文本填充,句子重排,文档旋转。
主要是在encoder训练部分引入了噪声(5种):
- Token Masking 和BERT (Devlin et al., 2019)一样, 随机把token变为 [MASK].
- Token Deletion 随机删除token,为了让模型学习哪些位置缺少输入信息。
- Text Infilling 文本填充,随机挑选一个文本片段用一个[MASK]替换。当片段长度为0时,相当于在原始位置插入一个[MASK]标记。与SpanBERT模型不同的是,SpanBERT模型是使用片段长度个数的[MASK]标记进行替换。
- Sentence Permutation 句子排序,将句子之间的顺序随机打乱。
- Document Rotation 文档旋转,随机选择一个token,然后将文本进行旋转,即以选择token作为文本的开头。该策略让模型学习文本的开头。
下游任务 fine tune
在下游任务上,论文分别针对文本分类(序列到标签)问题和机器翻译(序列到序列)问题进行了介绍。
【未完待续】
- cnndm的finetune:https://github.com/pytorch/fairseq/blob/master/examples/bart/README.summarization.md