论文BERT基本信息
- 论文标题:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- 作者:Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova(Google AI Language)
- 发表会议:NAACL-HLT 2019
- 核心贡献:首次提出深度双向 Transformer 预训练框架,通过掩码语言模型与下一句预测两个自监督任务,在 11 项 NLP 基准任务上刷新当时最优记录,奠定了预训练语言模型的主流范式。
一、研究背景与动机
1.1 预训练语言表示的两大范式
在 BERT 出现之前,预训练语言表示主要分为两条技术路线:
- 基于特征(Feature-based):代表为 ELMo,使用双向 LSTM 提取上下文特征,将预训练得到的嵌入作为额外特征输入到任务特定模型中。其双向性是 "浅层拼接"—— 分别训练正向和反向 LSTM,再将结果拼接,并非真正的深度双向。
- 基于微调(Fine-tuning):代表为 OpenAI GPT,使用 Transformer 解码器结构,仅需在预训练模型上添加输出层即可端到端微调。但 GPT 是单向语言模型,只能利用左侧上下文,对需要双向理解的任务(如问答、完形填空)存在天然缺陷。
1.2 核心问题
标准语言模型只能从左到右(或从右到左)单向训练,无法同时利用左右两侧的上下文信息,限制了模型对深层语义的理解能力。
BERT 的核心目标:设计一种能够在所有层同时利用左右上下文的深度双向预训练模型,并保持微调范式的简洁性。
二、模型方法(详细)
2.1 整体架构
BERT 的主体是多层 Transformer 编码器,完全沿用《Attention is All You Need》中提出的编码器结构,仅在层数、隐藏维度等超参数上做了缩放。
整体框架分为两个阶段:
- 预训练(Pre-training):在大规模无标注语料上,通过两个自监督任务(MLM + NSP)联合训练,学习通用语言表示。
- 微调(Fine-tuning):针对具体下游任务,在预训练模型基础上添加少量任务特定输出层,端到端微调全部参数。
2.2 输入表示
BERT 的输入可以是单个句子或句子对,每个输入 token 的嵌入由三部分相加得到:
三种嵌入向量逐元素相加:
- Token Embedding:使用 WordPiece 分词,词表大小 30,000。将每个子词映射为对应维度的向量。
- Segment Embedding:区分两个句子。句子 A 的所有 token 使用向量EA,句子 B 的所有 token 使用向量EB。单句输入时全部使用EA。
- Position Embedding:可学习的位置编码,最大支持序列长度 512。与 Transformer 原论文的正弦位置编码不同,BERT 直接让模型从数据中学习位置信息。
两个特殊 Token 的设计:
[CLS]:置于序列开头,其最终隐藏状态作为整句 / 句子对的聚合表示,用于分类任务。[SEP]:分隔符,用于分隔两个句子,同时放在序列末尾。
输入示例(句子对):
plaintext
[CLS] 我 爱 自然 语言 处理 [SEP] BERT 很 强大 [SEP]2.3 预训练任务一:掩码语言模型(Masked LM, MLM)
MLM 是实现深度双向的核心机制,也是 BERT 最关键的创新。
基本思想
随机遮蔽输入序列中的部分 token,让模型根据上下文预测被遮蔽的原始单词。由于被遮蔽的位置可以同时看到左右所有上下文,模型被迫学习双向语义表示。
具体策略
随机选择输入序列中15% 的 token作为预测目标,对这些被选中的 token 按以下三种方式处理:
- 80% 概率:替换为特殊标记
[MASK]- 例:
my dog is hairy→my dog is [MASK]
- 例:
- 10% 概率:替换为词表中一个随机单词
- 例:
my dog is hairy→my dog is apple
- 例:
- 10% 概率:保持原单词不变
- 例:
my dog is hairy→my dog is hairy
- 例:
设计意图
- 80% 替换为 [MASK]:制造预测任务,迫使模型利用上下文推理。
- 10% 替换为随机词:增加任务难度,迫使模型更深入地理解语义,而非简单记忆。
- 10% 保持不变:缓解预训练与微调的分布差异 —— 微调阶段输入中不存在
[MASK]标记,保持一定比例的原词能让模型学到更鲁棒的表示。
损失计算
仅在被遮蔽的 15% token 位置计算交叉熵损失,其余 85% 的 token 只提供上下文信息,不参与损失计算。这区别于去噪自编码器(需要重构全部输入),训练效率更高。
2.4 预训练任务二:下一句预测(Next Sentence Prediction, NSP)
设计动机
许多下游任务(如问答、自然语言推理)需要理解两个句子之间的关系,而标准语言模型只建模单句内部的序列依赖。NSP 任务让模型学习句子级别的连贯性判断。
具体实现
构造句子对 (A, B) 作为输入:
- 正样本(50%):B 是 A 在原文中的真实下一句,标签为
IsNext - 负样本(50%):B 是从语料库中随机抽取的无关句子,标签为
NotNext
使用[CLS]位置的最终隐藏状态输入二分类器,预测两个句子是否连续。
示例
plaintext
正样本: A: 我今天去图书馆看书 B: 借了三本关于深度学习的书 标签: IsNext 负样本: A: 我今天去图书馆看书 B: 明天的气温会下降五度 标签: NotNext2.5 预训练过程细节
- 训练语料:BooksCorpus(8 亿词)+ 英文维基百科(25 亿词),共约 33 亿词。
- 序列长度:预训练时最大序列长度为 128(90% 步数)和 512(10% 步数)。先训练短序列加速收敛,再训练长序列学习位置信息。
- 优化器:Adam,学习率 1e-4,β₁=0.9,β₂=0.999,权重衰减 0.01。
- 训练步数:BERT-base 训练 100 万步,batch size=256。
- 激活函数:GELU(高斯误差线性单元),而非 ReLU。
2.6 两种标准模型配置
表格
| 模型 | 层数 (L) | 隐藏维度 (H) | 注意力头数 (A) | 参数总量 |
|---|---|---|---|---|
| BERT-base | 12 | 768 | 12 | 110M |
| BERT-large | 24 | 1024 | 16 | 340M |
BERT-base 的参数量与 GPT 相当,便于公平对比;BERT-large 用于追求最优性能。
三、微调方法
BERT 的微调极其简洁:针对不同下游任务,只需修改输入格式和输出层,模型主体完全复用。
3.1 单句分类任务
- 输入:
[CLS] + 句子 + [SEP] - 输出:
[CLS]位置的向量接入全连接层 + softmax,输出类别概率 - 代表任务:情感分析、主题分类
3.2 句子对分类 / 推理任务
- 输入:
[CLS] + 句子A + [SEP] + 句子B + [SEP] - 输出:
[CLS]位置向量做分类 - 代表任务:自然语言推理(MNLI)、释义判断(MRPC)
3.3 抽取式问答任务
- 输入:
[CLS] + 问题 + [SEP] + 段落 + [SEP] - 输出:在段落 token 上预测答案的起始位置和结束位置两个概率分布
- 代表任务:SQuAD
3.4 序列标注任务
- 输入:
[CLS] + 句子 + [SEP] - 输出:每个 token 位置的隐藏状态分别接入分类器,预测对应标签
- 代表任务:命名实体识别(NER)
四、主要实验结果
BERT 在 11 项 NLP 任务上全面刷新当时的 SOTA:
- GLUE 基准:综合得分 80.5%,相对提升 7.7 个百分点
- MultiNLI:准确率 86.7%,相对提升 4.6 个百分点
- SQuAD v1.1:测试集 F1=93.2,超越人类表现
- SQuAD v2.0:测试集 F1=83.1
- SWAG:准确率 86.3%
核心结论:模型规模增大持续带来性能提升,即使参数达到 3.4 亿,性能仍未饱和。这为后续更大规模模型的探索提供了实证依据。
五、关键消融实验
5.1 预训练任务的影响
表格
| 配置 | MLM | NSP | MNLI 准确率 |
|---|---|---|---|
| BERT-base | ✓ | ✓ | 84.4% |
| 无 NSP | ✓ | ✗ | 83.7% |
| 左到右 LM(类似 GPT) | ✗ | ✓ | 77.5% |
结论:
- MLM 带来的双向性是性能提升的主要来源,比单向 LM 高出近 7 个点。
- NSP 也有一定贡献(+0.7%),但后续研究(如 RoBERTa)发现 NSP 的作用有限甚至可能有害。
5.2 模型深度的影响
随着层数从 2 层增加到 24 层,各项任务性能持续单调提升,证明深层 Transformer 在语言理解任务上的有效性。
5.3 基于特征 vs 微调
即使将 BERT 作为特征提取器使用(冻结参数,只取某层输出作为特征),性能也显著优于 ELMo,说明 BERT 学到的表示本身质量极高。
六、总结与思考
核心贡献
- 证明了深度双向预训练的巨大价值,彻底改变了 NLP 领域的技术路线。
- 统一了预训练 - 微调范式,大幅降低了下游任务的适配成本,无需针对每个任务设计复杂架构。
- 实证了模型缩放的有效性,为后续大语言模型的发展奠定了基础。
局限性
- 预训练与微调的分布差异:
[MASK]标记只在预训练出现,微调时不存在,尽管有 10%/10% 策略缓解,仍存在分布鸿沟。 - NSP 任务设计粗糙:后续研究表明随机抽取负样本过于简单,模型可能仅靠主题匹配就能完成任务,并未真正学到推理能力。
- MLM 训练效率较低:每步只有 15% 的 token 被预测,收敛速度慢于自回归语言模型。
历史地位
BERT 是 NLP 领域的里程碑式工作,它标志着 NLP 正式进入 "预训练大模型 + 微调" 的新时代。后续的 RoBERTa、ALBERT、ERNIE、GPT-2/3 等工作均在不同维度上延续和改进了 BERT 的框架。