「论文阅读」BERT 是怎么把预训练做成通用的

BERT 的预训练和微调流程示意
BERT 想解决什么
GPT(2018 年 OpenAI)是单向语言模型,从左到右预测下一个词。这对生成任务很自然,但对理解任务(分类、问答、推理)不够理想——理解一个词需要同时看它左边和右边的上下文。
ELMo 虽然是双向的,但它是分开训练两个单向 LSTM 然后拼起来,不是真正的"双向 Transformer"。BERT 用了 Masked Language Model(MLM),真正做到了双向。
预训练任务一:MLM
随机遮盖输入中 15% 的 token,让模型预测被遮盖的词。具体操作:
- 80% 的时候替换成 [MASK]
- 10% 的时候替换成随机词
- 10% 的时候保持不变
不全换成 [MASK] 的原因是:下游任务时输入里没有 [MASK],如果只见过 [MASK] 会有 train/test mismatch 的问题。

BERT base 和 BERT large 的参数对比
预训练任务二:NSP
Next Sentence Prediction,让模型判断句子 B 是不是句子 A 的下一句。50% 是真实的下一句,50% 是随机从语料库里抽的。
后来 RoBERTa 证明 NSP 其实没什么用,甚至有时候有害,去掉反而更好。BERT 原作者承认这个设计可能过于简单,任务太容易让模型学不到有用的句间关系。
BERT 论文精读 by 李沐(B站)
Fine-tuning 的统一性
BERT 最大的工程价值是:几乎所有 NLP 任务都可以用同一套 fine-tuning 框架:
- 分类任务:取 [CLS] token 的输出接一个线性层
- 序列标注(NER):取每个 token 的输出接线性层
- 问答(SQuAD):预测答案的起止位置
- 句子对任务(NLI):把两句话拼接,[CLS] 接线性层
在 11 个 NLP 任务上,BERT 都刷了当时的 SOTA,有的任务提升幅度超过 10 个百分点,震惊了整个社区。

BERT 在各 NLP benchmark 上的结果(论文 Table 1)
局限和后继
BERT 的主要局限是:MLM 每次只预测 15% 的 token,训练效率不如自回归模型;输入长度固定在 512 个 token;推理速度比轻量模型慢很多。这些问题在后续的 ALBERT、DistilBERT、RoBERTa、Longformer 里分别被不同程度地解决。