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

用 MLM 与 NSP 把双向 Transformer 预训练推向主流,重塑了 NLP 从预训练到下游微调的默认范式。

年份与会议

2018 · NAACL

作者

Jacob Devlin、Ming-Wei Chang、Kenton Lee、Kristina Toutanova

主题

预训练

阅读时长

约 1 分钟

收录时间

2018/10/11

标签

原文链接

https://arxiv.org/abs/1810.04805

为什么 BERT 是 NLP 时代的分水岭

在 BERT 之前,很多 NLP 系统仍然是“任务一个模型”的思路:情感分类一套网络,命名实体识别一套网络,问答又是一套网络。即便开始出现预训练语言模型,主流方式也更偏向单向语言建模,也就是从左到右预测下一个 token。

BERT 的历史意义在于,它把两个观念推成了行业默认:

  1. 先做大规模通用预训练,再用少量任务数据微调,是更高效的能力获取方式。
  2. 对很多理解类任务而言,双向上下文比单向上下文更自然,也更强。

从今天回头看,BERT 不只是“一篇效果很好的论文”,而是让整个 NLP 工业栈从特征工程时代,彻底进入了统一预训练表示时代。

背景:单向语言模型为什么不够

如果模型只能从左往右读句子,那么某个词的表示只能利用左侧上下文。可在很多理解任务里,词义往往依赖两边共同决定。

例如在句子“他去银行开会”和“他在河岸边散步”里,“银行/岸边”附近词汇会共同影响理解。对于实体识别、问答、文本匹配等任务来说,模型如果不能同时看见前后文,就很难得到最自然的语义表示。

BERT 的核心切入点正是这里:能不能让 Transformer encoder 在预训练阶段就学会“双向读上下文”?

核心方法一:Masked Language Modeling

BERT 最出名的设计,就是 MLM(Masked Language Modeling)。做法很简单:

  1. 从输入句子中随机选出一部分 token。
  2. 把这些 token 遮住,或替换成其他形式。
  3. 让模型根据剩余上下文去预测原来的 token。

它解决了一个关键矛盾:

  • 如果继续做传统自回归训练,模型就只能单向看上下文。
  • 如果想双向看上下文,又不能把目标词直接暴露给模型。

MLM 通过“挖空再填回去”的方式,让模型能够利用左右两侧信息,同时保留明确的训练目标。

这也是 BERT 和 GPT 路线最根本的分叉之一:

  • GPT 更擅长生成,因为它天然是自回归训练。
  • BERT 更擅长理解,因为它天然是双向编码。

核心方法二:Next Sentence Prediction

论文中的另一个训练目标是 NSP(Next Sentence Prediction)。作者会给模型两句话,要求判断第二句是不是第一句的真实后续。

这个目标的设计动机很直接:很多下游任务不只是句内理解,还涉及句间关系,例如:

  • 自然语言推理
  • 问答中的上下文对应
  • 句对匹配与排序

NSP 希望让模型在预训练阶段就学到一定的句间连贯性知识。虽然之后 RoBERTa 等工作对 NSP 的必要性提出了质疑,但在 BERT 原始设计里,它反映了一个重要思路:预训练目标不只是词级预测,还可以尝试引入更高层次的结构信号。

核心方法三:统一的微调范式

BERT 另一项真正改变产业界的设计,不在预训练本身,而在“几乎所有下游任务都能用同一个骨架微调”。

做法通常是:

  1. 先用海量通用语料完成预训练。
  2. 在任务输入前后按模板拼接文本。
  3. 根据任务类型,在 [CLS] 表示或 token 级表示上接一个很轻量的任务头。
  4. 用任务数据整体微调模型参数。

这意味着工程团队不再需要为每个 NLP 任务重新设计一整套模型结构。模型底座统一后,数据、评测和部署流程也变得更标准化。

从产品和研究视角看,BERT 最重要的价值之一就是:它把“统一底座 + 少量适配”的工作方式大规模验证成功了。

为什么 Transformer encoder 特别适合 BERT

BERT 使用的是纯 encoder 结构,而不是完整的 encoder-decoder,也不是 decoder-only。原因在于:

  • 编码器天然适合理解任务,因为每个 token 都可以双向看上下文。
  • 不需要像生成模型那样加 causal mask。
  • 对分类、抽取、匹配、检索等任务来说,encoder 表示通常更直接。

这也让我们更容易理解后续模型分工:

  • encoder-only 模型偏理解与表示学习。
  • decoder-only 模型偏生成与续写。
  • encoder-decoder 模型更适合输入输出结构差异明显的任务。

因此,BERT 并不是“比 GPT 更先进”的终点,而是现代大模型家族中一条非常清晰的分支起点。

实验结果为什么震动了整个领域

BERT 发布后,在多个经典 NLP 基准上刷新了当时最优结果,尤其在以下类型任务上表现非常强:

  • GLUE 等通用语言理解任务
  • SQuAD 等阅读理解任务
  • 命名实体识别、句对分类等需要细粒度语义表示的任务

更重要的是,它不是靠为某个任务特制结构取胜,而是靠一套统一预训练表示,在多个任务上同时表现优秀。这让研究社区第一次强烈感受到:大规模通用预训练确实能够作为“语言理解底座”。

BERT 带来的方法论变化

从方法论上看,BERT 至少改变了三件事:

1. 预训练成为默认起点

之后做 NLP,几乎不再有人从随机初始化开始训练任务模型。大家默认先拿一个预训练底座,再做微调或继续预训练。

2. 数据规模与模型规模的价值被重新认识

BERT 让研究者更强烈地意识到:即使目标任务数据有限,只要通用预训练足够强,下游能力也会显著受益。这为后来更大规模的 GPT、T5、PaLM、LLaMA 铺平了认知道路。

3. 表示学习成为中心问题

在 BERT 之后,很多工作不再只问“这个任务该怎么做”,而是问“能否学到一个足够通用的文本表示,再把任务头做得尽量轻”。

局限:为什么后来大家没有继续沿着原始 BERT 一直放大

虽然 BERT 影响巨大,但它也有明显边界:

  • MLM 训练存在预训练与推理的不一致:训练时看到 mask,真实使用时没有。
  • NSP 的收益并不稳定,后续研究发现它未必必要。
  • encoder-only 模型不擅长开放式生成,这限制了它在聊天、写作、代码补全等任务中的应用空间。
  • 全量微调在模型变大后成本很高,后来催生了 Adapter、LoRA 等参数高效方法。

这也是为什么 BERT 在“理解类任务”中长期重要,但在通用生成式 AI 时代,主舞台逐渐转向 GPT 路线。

后续影响:BERT 催生了什么

BERT 之后,围绕它迅速分化出大量工作:

  • RoBERTa:重新审视 BERT 的训练配方,弱化 NSP,强化数据与训练策略。
  • ALBERT:通过参数共享和分解降低成本。
  • DistilBERT:做更轻量的蒸馏版本。
  • Sentence-BERT:把 BERT 表示更好地用于检索与语义匹配。
  • 各类领域版 BERT:BioBERT、FinBERT、LegalBERT 等,把预训练底座迁移到专业领域。

从更长远的视角看,BERT 的真正遗产不是某个单点指标,而是“预训练底座”这件事本身。今天即便许多产品主要使用 decoder-only 大模型,embedding、reranker、分类器等组件里,BERT 思路仍然活得很好。

阅读这篇论文时最该抓住什么

如果你现在读 BERT,最值得抓住的不是具体分数,而是下面四点:

  1. 为什么双向上下文对理解任务关键。
  2. MLM 为什么能让模型同时看到左右信息。
  3. 预训练 + 微调为什么显著提升了工程复用性。
  4. BERT 为什么强,但又为什么没有直接成为今天聊天大模型的主流底座。

把这四点想清楚,你再回头看 GPT、T5、LoRA、检索模型时,会更容易看懂它们各自站在什么位置。

延伸阅读

  • 想理解 BERT 所依赖的底层架构,建议先看 Attention Is All You Need
  • 想从训练角度理解为什么“统一底座”会成为趋势,可以继续读 大模型训练流水线总览
  • 如果你更关注后来生成式路线为何压过了 encoder-only 路线,可以把这篇与后续 GPT 路线放在一起读。

相关内容

沿着相近主题继续阅读,加深对方法边界与实践场景的理解。