Pre-trained Model 之 BART基础总结

39 阅读3分钟

BART

BART(Bidirectional and Auto-regressive Transformer)

论文地址:BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension

代码地址:github.com/huggingface…

中文BART模型:huggingface.co/uer/bart-ba…

BART的核心思想

image-20241120211350386

结合了BERT和GPT两种模型的思路,不仅具有双向编码的优势,也具有单向自回归编码的优势。

它能够适用于非常广泛的下游任务,不限于预测和生成。

BART的预训练

第一步:通过任意噪声函数(能够制造破坏文档结构的任何方法)来破坏文章结构;

例如:

  1. 随机打乱原文句子的顺序;
  2. 随机将文中的连续小片段(几个字或词)用一个【mask】代替;(Text infilling是BART的核心
    1. 连续小片段的长度(包括0)通过泊松分布采样,不是完全随机;
    2. 此举强制模型对整个句子长度进行更多推理,并对输入进行更大范围的转换。

      forcing the model to reason more about overall sentence length and make longer range transformations to the input.

第二步:训练一个seq2seq模型将结构已经破坏了的文章进行重构,使文章变回原来的样子;

BART模型

BART实现了一个seq2seq模型,输入是通过原始文档派生出来的被损坏的文档,经过一个双向编码器和一个自回归解码器后生成的输出。对于预训练,就是优化输出与源文档的负逻辑似然函数。

架构

BART使用了标准的seq2seq transformer架构,并:

  1. 激活函数:用GeLU替换ReLU;
  2. 使用N(0,0.02)初始化参数;
  3. Model_{base}使用编解码器各6层,Model_{large}使用编解码器各12层;
    1. 每层解码器和编码器最后一个隐藏层使用交叉注意力机制。
    2. BART在单词预测前没有使用额外的FFN;
    3. BART参数比同等大小的BERT多了大约10%;
预训练

破坏文档,优化重建损失——解码器输出和原始文档之间的交叉熵

文档加噪声的几种方式

image-20241120213142322

  1. Token Masking:同BERT
  2. Token Deletion:训练模型注意到哪些位置有缺失;
  3. Text Infilling:训练模型注意到那些位置缺失了多少token(序列长度信息在生成式任务中一般是不会提供给模型的);
  4. Sentence Permutation:训练模型注意到句子顺序;
  5. Document Rotation:随机选择文档中一个词作为开头,将前面的词挪到后面,训练模型识别文档的头部;

Fine-tuning BART

image-20241120224202115

用于下游任务:

Sequence Classification Tasks(序列分类任务)

相同的序列被同时作为输入喂给编码器和解码器,把最后一层解码器的最后一个隐层状态(类似BERT的CLS)送到一个多分类器去(图3.a)。

Token Classification Tasks (token级别分类任务)

Token级别的分类任务有实体识别、阅读理解、问答等,均为抽取式。输入同上,但输出使用的是最后一层decoder的每一个隐层状态来分类token;

Sequence Generation Tasks(序列生成任务)

BART天然支持序列生成任务,如抽象问答任务和摘要任务(生成式)。

Machine Translate(机器翻译)

将BART的encoder嵌入层替换为一个新的随机初始化encoder,该模型是端到端训练的,它训练新的encoder将外文单词映射到BART的输入中,此时BART是原来encoder和decoder构成的一个整体(图3.b)

结论

BART在判别性任务上和RoBERTa实现了相似的性能。在文本生成任务上有新的突破。

Document Rotation 和Sentence Permutation的方式在单独使用时表现不佳。二使用Token Deletion 和Token Masking的效果比较好,其中,在生成任务上,删除的方式大体上要优于掩码的方式。

双向编码的机制有利于SQuAD这样的抽取式任务。