大模型论文:BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension
摘要
本文提出了 BART,一种用于预训练序列到序列模型(sequence-to-sequence models)的去噪自编码器(denoising autoencoder)。BART 的训练方式包括两步:
- 使用任意噪声函数对文本进行扰动(corrupt);
- 学习一个模型来重建原始文本。
BART 使用的是一种基于 Transformer 的神经机器翻译架构,尽管这种结构很简洁,但它可以被看作是对以下模型的泛化:
- BERT(双向编码器)、
- GPT(左到右的解码器)、
- 许多更近期的预训练方案
本文评估了多种噪声策略,发现最优的方案是在原始句子中随机打乱顺序,并使用一种新颖的文本填充机制,该机制将文本中的连续片段用一个单一的 mask token 替换。BART 在文本生成任务中表现尤其出色,同时也适用于阅读理解任务。它在使用与 RoBERTa 相当的训练资源时,在 GLUE 和 SQuAD 上达到了相似的效果。同时,在摘要、问答、对话生成等多种抽象生成任务中也取得了新 SOTA(最先进)成果,ROUGE 得分提升高达 6 分。此外,BART 还在机器翻译任务中提供了 1.1 BLEU 的提升(采用仅对目标语言预训练的反向翻译系统)。本文还报告了一些消融实验,这些实验复现了 BART 框架中其它预训练方案,以更好地分析哪些因素对最终任务性能影响最大。
- 总结:BART是一个结合了 BERT 和 GPT 优点的预训练模型:像 BERT 一样编码输入(使用双向注意力),又像 GPT 一样解码输出(使用自回归左到右生成),被设计为一个 去噪自编码器,能有效学习如何从损坏的文本中恢复信息
模型背景
-
自监督学习方法(Self-supervised methods)在自然语言处理(NLP)的广泛任务中取得了显著成功,最成功的策略通常是掩码语言模型(masked language models),这些模型是去噪自编码器(denoising autoencoders),训练目标是重建那些其中部分词语被随机遮蔽(masked)的文本
-
一些研究表明,通过优化被遮蔽词的分布、预测遮蔽词的顺序、以及替代遮蔽词时所利用的上下文范围,可以取得更好的效果。然而,这些方法通常专注于特定类型的下游任务(例如跨度预测、文本生成等),这在一定程度上限制了它们的通用性。即这些方法只能在特定的任务上表现良好,比如BERT的掩码方式导致其在文本生成上效果不好
-
因此,本文提出了 BART,它是一种结合了双向 Transformer和 自回归 Transformer 的预训练模型。BART 是一种建立在序列到序列模型(sequence-to-sequence model)基础上的去噪自编码器,适用于非常广泛的下游任务,它的预训练分为两个阶段:
-
使用任意噪声函数(arbitrary noising function)对文本进行扰动;
-
训练一个序列到序列(sequence-to-sequence model)模型来重建原始文本
-
-
BART的一个关键优势在于其高度灵活的加噪方式(noising flexibility):可以对原始文本应用任意的转换,包括改变文本长度
-
本文评估了多种加噪方法,发现效果最好的包括:
- 随机打乱原始句子的顺序;
- 使用一种新颖的in-filling(填充)机制:将任意长度的文本片段(包括长度为零的情况)用一个单一的掩码标记(mask token)替换。
BART模型详解
-
BART 是一种基于Transformer架构的去噪自动编码器,它将损坏的文档映射到它派生的原始文档
-
BART模型是在Transformer架构的改动:
-
将原始的 ReLU 激活函数 修改为 GeLU(Gaussian Error Linear Unit)激活函数,GeLU 在 GPT 和 BERT 中表现更好,有更平滑的梯度
-
将所有模型参数初始化为服从 正态分布 N(0, 0.02),这是从 BERT 和 GPT 的经验出发。较小的方差可以防止在训练初期产生过大的激活值,从而稳定模型
-
-
在模型规模方面:
- BART-Base 模型使用 6 层编码器(encoder)和 6 层解码器(decoder)
- BART-Large 模型则使用 12 层编码器和 12 层解码器
-
其整体架构与 BERT 非常相近,但有以下两个主要区别:
-
BART 的解码器中的每一层都会额外执行一个 跨注意力(cross-attention)机制,作用于编码器最终隐藏层的输出(这与标准 Transformer 的 encoder-decoder 模式一致)
-
BERT 在进行词预测(word prediction)之前,使用了一个 额外的前馈神经网络(feed-forward network),而 BART 没有这一步骤
-
-
总体而言,在参数数量方面,BART 比同等规模的 BERT 多出约 10% 的参数量
BART预训练
-
BART 的训练方式是对文档进行破坏(加噪),然后优化一个重建损失函数——即解码器输出与原始文档之间的交叉熵(cross-entropy)
-
与其他去噪自编码器不同,BART 并不依赖于特定的噪声策略,而是允许对文档应用任意类型的破坏操作。在极端情况下,如果输入中所有与源文本有关的信息都丢失了,BART 也就相当于一个标准语言模型
-
本文提出了五种扰动加噪方式
1. Token Masking(词级遮蔽)
仿照 BERT(Devlin et al., 2019),从输入中随机采样一些 token,然后将它们替换为
[MASK]
。🔍 解释:
- 与 BERT 一样,让模型学会从上下文推断被遮盖的词语。
- 示例:
原句:The cat sat on the mat.
遮盖后:The [MASK] sat on the [MASK].
2. Token Deletion(词级删除)
随机从输入中删除某些 token。
与 Token Masking 不同,这要求模型推断哪些位置缺失了内容。🔍 解释:
- 删除词使得上下文变得更“缺失”,模型更难推理具体位置和内容。
- 示例:
原句:The cat sat on the mat.
删除后:The sat the.
→ 模型需恢复出 “cat”, “on”, “mat” 的位置和内容。
3. Text Infilling(文本填充)
从文本中采样多个片段(spans),片段长度服从 Poisson 分布(λ=3),每个片段被一个
[MASK]
替换。长度为 0 的片段相当于插入[MASK]
。🔍 灵感来源:
- 受 SpanBERT 启发(Joshi et al., 2019),但不同于 SpanBERT 用多个 mask 替换,BART 用一个
[MASK]
替换整个 span。
🔍 意义:
- 训练模型不仅预测内容,还预测缺失片段的长度,增强模型推理跨句长距离依赖能力。
- 示例:
原句:The quick brown fox jumps over the lazy dog.
变成:The quick [MASK] the lazy dog.
4. Sentence Permutation(句子打乱)
将文档按句号划分为多个句子,再随机打乱这些句子的顺序。
🔍 目的:
-
强化模型理解全局语义结构的能力,而不是仅靠局部上下文。
-
示例:
原句:
The sun is shining.
Birds are singing.
Flowers are blooming.
打乱后顺序可能是 2 → 1 → 3。
5. Document Rotation(文档旋转)
随机选择一个 token,将它作为文档的新起点,文本旋转排列。
🔍 目的:
- 训练模型理解文档的“逻辑开头”,从而学习整体结构的判定能力。
- 示例:
原句:The cat sat on the mat and licked its paw.
旋转起点选在 “mat”:
mat and licked its paw. The cat sat on the
BART微调
-
序列分类任务(Sequence Classification Tasks):对于序列分类任务,将相同的输入送入编码器和解码器,然后取解码器中最后一个 token 的最终隐藏状态,并输入一个新的多类别线性分类器中进行分类。这种方法类似于 BERT 中的
[CLS]
token 机制,但会在末尾添加一个额外 token,使得该位置的表示可以访问输入中所有的解码器状态 -
Token 级别分类任务(Token Classification Tasks):对于 token 分类任务(如 SQuAD 中的答案终点分类),将完整文档输入编码器和解码器,然后使用解码器每个词位置的顶层隐藏状态,作为每个 token 的语义表示,用于预测该 token 的分类标签
-
序列生成任务(Sequence Generation Tasks):由于 BART 具备自回归解码器,它可以直接被用于序列生成任务的微调,例如抽象式问答与摘要生成。在这些任务中,输出序列由输入处理后生成,类似于 BART 的预训练任务
-
机器翻译任务(Machine Translation):探索使用 BART 来改进翻译为英语的机器翻译解码器。之前的研究表明使用预训练编码器可以提升性能,但在解码器中引入预训练语言模型的尝试有限。本文展示了使用整个 BART 模型(包括编码器和解码器)作为一个整体的预训练解码器的可能性
微调任务类型 输入内容 解码方式 用途示例 序列分类 输入+结尾token → encoder+decoder decoder 最后一位输出 情感分类、新闻主题 token 分类 完整输入 → encoder+decoder decoder 每个词位置输出 SQuAD、命名实体识别 序列生成 输入序列 → decoder 自回归生成 标准生成流程 问答、摘要 机器翻译 外语输入 → 经过新编码器 → BART 解码器生成英文 BART 被视为“预训练的语言解码器” Romanian→English 翻译
BART、BERT和GPT对比
- 下图是对BART、BERT和GPT三个模型的简单对比
- 这个图展示了三种典型的预训练模型架构:BERT、GPT 和 BART。每种架构都采用不同的输入处理方式、上下文建模方式以及在下游任务中的适用性。下面将按图中 a)、b)、c) 三个部分分别详细解释其结构、优缺点。
🧩 图 a):BERT —— 双向编码器(Bidirectional Encoder)
🔧 结构说明:
- 输入文本中的部分 token 被随机替换为
[MASK]
。 - 该模型通过一个双向 Transformer 编码器来编码整个句子,能同时看到左侧和右侧上下文。
- 每个被 mask 的位置是独立预测的,即每个词的预测不考虑其它 mask 词的预测结果。
🧠 特点:
优点 | 缺点 |
---|---|
能利用全局上下文(左+右)来进行理解 | 不适合生成任务,因为预测的是 mask 位置,而不是逐步生成序列 |
📌 示例:
原始文本:The cat sat on the mat
加噪后输入:The [MASK] sat on the [MASK]
目标输出:cat
和 mat
分别填回 mask 位置
🧩 图 b):GPT —— 自回归解码器(Autoregressive Decoder)
🔧 结构说明:
- 输入序列从左到右依次输入(例如
<s> A B C D
) - 通过一个**自回归的解码器(decoder-only transformer)**来预测下一个 token
- 只能看到左边的上下文,不能访问右边的信息
🧠 特点:
优点 | 缺点 |
---|---|
非常适合文本生成(如写文章、聊天) | 无法捕捉双向信息,不适合理解任务如问答或阅读理解 |
📌 示例:
输入:<s> The cat sat on
目标输出:the
→ mat
即根据左侧内容,预测下一个词。
🧩 图 c):BART —— 编码器-解码器结构(Bidirectional Encoder + Autoregressive Decoder)
🔧 结构说明:
- 编码器使用双向 Transformer,可以利用左右上下文理解输入
- 解码器使用自回归 Transformer,从左到右生成输出
- 输入经过任意噪声处理(如删除、乱序、遮盖)
- 解码器目标是还原原始、干净的文本序列
🧠 特点:
优点 | 举例说明 |
---|---|
同时适合理解和生成任务,结构灵活、适用面广 | 既可以用于 SQuAD(理解任务),也可用于 XSum(摘要生成) |
编码器输入可以加噪,自由控制难度 | 训练阶段可以掩盖或打乱输入,提高模型鲁棒性 |
📌 示例:
原始文本:The cat sat on the mat
加噪输入:The [MASK] on [MASK]
编码器处理带噪文本,解码器目标输出:The cat sat on the mat
🎯 三者对比总结:
模型 | 架构 | 输入处理 | 适合任务类型 | 能否生成文本 |
---|---|---|---|---|
BERT | 双向编码器 | 随机遮盖 | 理解任务(如分类、问答) | ❌ |
GPT | 单向解码器 | 左到右输入 | 生成任务(如对话、写作) | ✅ |
BART | 编码器 + 解码器 | 任意加噪 | 同时支持理解与生成任务 | ✅ |