BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

作者: Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova 年份: 2019 会议: NAACL 分类: 网络架构

论文笔记:BERT

元信息

项目内容
机构Google AI Language
日期October 2018 (arXiv), June 2019 (NAACL)
链接arXiv
对比基线OpenAI GPT, ELMo, ULMFiT

一句话总结

提出 BERT,通过 Masked Language Model 和 Next Sentence Prediction 两个预训练任务实现深度双向 Transformer 预训练,在 11 项 NLU 任务上刷新 SOTA,开创了 “pre-train + fine-tune” 范式

核心贡献

深度双向预训练: 不同于 OpenAI GPT 的单向(left-to-right)和 ELMo 的浅层双向(独立训练两个方向再拼接),BERT 通过 Masked Language Model 使 Transformer encoder 的每一层都能同时利用左右上下文

统一的 pre-train + fine-tune 框架: 预训练模型仅需添加一个输出层即可 fine-tune 到各种下游任务(分类、问答、标注等),无需针对任务设计特定架构

大规模实验验证: 在 GLUE、SQuAD v1.1/v2.0、SWAG 等 11 项任务上全面超越当时 SOTA,部分任务超越人类水平

问题背景

要解决的问题

语言模型预训练已被证明对下游 NLU 任务有效(ELMo, OpenAI GPT, ULMFiT),但如何更充分地利用无标注文本中的双向上下文信息,是一个关键而未解决的问题

现有方法的局限

OpenAI GPT: 使用单向(left-to-right)语言模型,每个 token 只能 attend to 左侧上下文,这严重限制了对需要理解完整上下文的任务(如问答、自然语言推理)的建模能力

ELMo: 分别训练 left-to-right 和 right-to-left 两个独立 LSTM,然后在特征层面拼接,本质上是”浅层双向”——两个方向的表示在各自计算时无法互相参考

Feature-based 方法: ELMo 将预训练表示作为固定特征拼接到下游模型,需要针对每个任务设计不同架构

本文的动机

标准语言模型(autoregressive LM)本质上只能单向建模,因为双向会导致”信息泄漏”——每个词可以间接”看到”自己

Cloze task(完形填空)启发,提出 Masked Language Model:随机 mask 输入的部分 token,训练模型预测被 mask 的原始 token,从而天然实现双向上下文融合

额外添加 Next Sentence Prediction 任务,显式建模句对关系,增强对下游句对任务的适应性

方法详解

模型架构

BERT 使用多层 Transformer encoder(与 Attention Is All You Need 的 encoder 部分相同):

  • BERT-Base: L=12L=12 层, H=768H=768 隐藏维度, A=12A=12 注意力头, 参数量 110M
  • BERT-Large: L=24L=24 层, H=1024H=1024 隐藏维度, A=16A=16 注意力头, 参数量 340M
  • 输入表示: Token Embedding + Segment Embedding + Position Embedding 三者相加
  • 特殊 token: [CLS] 置于序列开头(用于分类任务),[SEP] 分隔两个句子
  • 分词: WordPiece tokenizer, 30000 token 词表

核心模块

模块1: Masked Language Model (MLM)

设计动机: 标准 LM 只能单向,为实现深度双向预训练,需要一种不会导致信息泄漏的训练目标

具体实现:

  • 随机选择输入序列中 15% 的 token 进行处理
  • 被选中的 token 中:80% 替换为 [MASK]10% 替换为随机 token,10% 保持不变
  • 模型预测这些位置的原始 token(仅计算被选中位置的交叉熵损失)

设计考量:

  • 如果 100% 使用 [MASK],则 fine-tuning 时输入中没有 [MASK],造成 pre-train/fine-tune 不匹配
  • 10% 随机替换迫使模型保持对所有输入 token 的分布式表示(不能仅依赖非 [MASK] 位置)
  • 10% 不变保持与真实输入的一致性

模块2: Next Sentence Prediction (NSP)

设计动机: 许多下游任务(QA, NLI)需要理解句对关系,而 MLM 主要建模 token 级别的上下文

具体实现:

  • 构造句对 (A, B):50% 的情况 B 是 A 的真实下一句(IsNext),50% 的情况 B 是随机采样的句子(NotNext
  • 使用 [CLS] token 的最终表示进行二分类

效果: 在 QA 和 NLI 任务上带来显著提升

模块3: Fine-tuning 策略

设计动机: 使预训练模型尽可能简单地适配各种下游任务

具体实现:

  • 单句分类 (SST-2, CoLA): [CLS] 表示 → 线性分类器
  • 句对分类 (MNLI, QQP, MRPC): [CLS] + Sentence A + [SEP] + Sentence B + [SEP][CLS] 表示 → 线性分类器
  • 问答 (SQuAD): [CLS] + Question + [SEP] + Passage + [SEP] → 每个 passage token 预测 start/end 概率
  • 序列标注 (NER): 每个 token 表示 → 分类器

统一性: 所有任务共享同一个预训练模型,仅替换最后的输出层

关键公式

公式1: MLM 损失

LMLM=iMlogP(xix~)\mathcal{L}_\text{MLM} = -\sum_{i \in \mathcal{M}} \log P(x_i \mid \tilde{x})

含义: 仅对被 mask 的位置计算负对数似然,x~\tilde{x} 是经过 mask 处理后的输入序列

符号说明:

  • M\mathcal{M}: 被选中 mask 的位置集合(约占 15%)
  • xix_i: 原始 token
  • x~\tilde{x}: mask 后的输入(80% [MASK] + 10% random + 10% unchanged)

公式2: NSP 损失

LNSP=[ylogP(IsNextC)+(1y)logP(NotNextC)]\mathcal{L}_\text{NSP} = -\left[y \log P(\text{IsNext} \mid C) + (1-y) \log P(\text{NotNext} \mid C)\right]

含义: 基于 [CLS] 表示 CC 的二分类交叉熵损失

符号说明:

  • C=hidden[CLS]C = \text{hidden}_{[\text{CLS}]}: [CLS] token 的最终隐藏状态
  • y{0,1}y \in \{0, 1\}: 是否为真实下一句

公式3: 总预训练损失

L=LMLM+LNSP\mathcal{L} = \mathcal{L}_\text{MLM} + \mathcal{L}_\text{NSP}

含义: 两个任务的损失直接相加,联合优化

公式4: 输入表示

Einput=Etoken+Esegment+Eposition\mathbf{E}_\text{input} = \mathbf{E}_\text{token} + \mathbf{E}_\text{segment} + \mathbf{E}_\text{position}

含义: 输入由三种 embedding 逐元素相加构成

符号说明:

  • Etoken\mathbf{E}_\text{token}: WordPiece token embedding
  • Esegment\mathbf{E}_\text{segment}: 句子 A/B 的段落 embedding(EA\mathbf{E}_AEB\mathbf{E}_B
  • Eposition\mathbf{E}_\text{position}: 学习的位置 embedding(与 Transformer 的正弦编码不同)

公式5: 问答 span 预测

Pstart(i)=eSTijeSTj,Pend(i)=eETijeETjP_\text{start}(i) = \frac{e^{S \cdot T_i}}{\sum_j e^{S \cdot T_j}}, \quad P_\text{end}(i) = \frac{e^{E \cdot T_i}}{\sum_j e^{E \cdot T_j}}

含义: 每个 passage token 位置的 start/end 概率通过可学习向量 S,ES, E 与 token 表示 TiT_i 的点积计算

符号说明:

  • S,ERHS, E \in \mathbb{R}^H: start 和 end 的可学习投影向量
  • TiRHT_i \in \mathbb{R}^H: 第 ii 个 token 的最终隐藏表示

实验结果

预训练细节

项目BERT-BaseBERT-Large
层数1224
隐藏维度7681024
注意力头数1216
参数量110M340M
预训练数据BooksCorpus (800M 词) + English Wikipedia (2500M 词)
Batch Size256 序列
序列长度512 tokens
训练步数1M 步 (约 40 epochs)
优化器Adam, lr=1e-4, warmup=10000 步
硬件4 Cloud TPUs (Base) / 16 Cloud TPUs (Large)
训练时间4 天 (Base) / 4 天 (Large)

GLUE Benchmark 结果

任务指标BERT-BaseBERT-Large前 SOTA人类
MNLIAcc84.686.780.6
QQPF171.272.166.1
QNLIAcc90.592.7
SST-2Acc93.594.9
CoLAMCC52.160.535.0
STS-BCorr85.887.6
MRPCF188.989.3
RTEAcc66.470.161.7
GLUE 平均79.682.187.1

BERT-Large 在所有任务上超越前 SOTA,GLUE 总分 80.5(提交时排行榜第一)

SQuAD 结果

任务模型EMF1
SQuAD v1.1BERT-Large87.493.2
SQuAD v1.1前 SOTA84.190.9
SQuAD v1.1人类82.391.2
SQuAD v2.0BERT-Large83.186.2
SQuAD v2.0前 SOTA73.777.0

BERT 在 SQuAD v1.1 上 F1 超越人类水平 (93.2 vs 91.2)

SQuAD v2.0(含不可回答问题)上大幅领先前 SOTA (+9.4 F1)

消融实验

变体MNLISQuAD F1
BERT-Base84.488.5
去掉 NSP83.986.5
单向 LTR (类 GPT)82.187.7
加 BiLSTM (在 LTR 上)82.187.9

NSP 很重要: 去掉 NSP 在 QNLI/MNLI/SQuAD 上都显著下降

双向性至关重要: LTR 模型在 MNLI 上降 2.3, SQuAD 上降 0.8;加 BiLSTM 无法弥补

局限性

预训练-微调不匹配: [MASK] token 只出现在预训练阶段,fine-tuning 时输入中无 [MASK],导致分布偏移(后续 RoBERTa、XLNet 等工作针对此改进)

MLM 效率低: 每个 batch 仅 15% 的 token 参与损失计算,相比 autoregressive LM 的 100% token 利用率,需要更多训练步数才能收敛

独立性假设: MLM 假设被 mask 的 token 之间互相独立(给定未 mask 的 token),忽略了 mask token 之间的依赖关系

序列长度限制: 最长 512 tokens,限制了对长文档的处理能力

NSP 任务过于简单: 后续研究(RoBERTa、ALBERT)发现 NSP 效果有争议,随机采样的负例太容易区分

仅适用于 NLU: BERT 的 encoder-only 架构无法直接用于生成任务

相关概念

Masked Language Model

Next Sentence Prediction

Transformer

Self-Attention

Transfer Learning

Fine-tuning

ELMo

GPT

GLUE

SQuAD

WordPiece

RoBERTa

速查卡片

BERT (Bidirectional Encoder Representations from Transformers)

  • 核心: MLM + NSP 预训练实现深度双向 Transformer encoder,统一的 pre-train + fine-tune 范式
  • 方法: 随机 mask 15% token(80/10/10 策略)+ 50% 随机负例的句对预测 → fine-tune 仅加输出层
  • 结果: GLUE 80.5, SQuAD v1.1 F1 93.2(超人类),SQuAD v2.0 F1 86.2(+9.4 over SOTA)
  • 影响: 开创 NLP pre-train + fine-tune 范式,催生 RoBERTa/ALBERT/SpanBERT/DeBERTa 等后续工作

笔记创建时间: 2026-04-03