Skip to content

BERT(仅编码器)

一句话 TL;DR:第一个证明"在大语料上预训练 + 下游微调"范式可行的模型。它只用 Transformer 的编码器,靠双向注意力和掩码语言模型预训练任务,在 11 项 NLP 理解任务上同时刷新 SOTA,是 2018-2020 年 NLP 的事实标准。


L1 · 一句话点破

BERT 的本质是:一个仅编码器的 Transformer,通过"完形填空"式预训练(随机 mask 一些 token 让模型预测),学会生成富含双向上下文的 token 表示,再用少量标注数据微调到具体任务。

它确立了一个范式:预训练(无监督,大规模)+ 微调(有监督,小规模)。这个范式至今仍是 NLP 的主流,只是预训练目标从 BERT 的 MLM 演化成了 GPT 的自回归。

L2 · 通俗类比

想象训练一个语文老师:

  • 传统做法:每个任务(阅读理解、作文批改、情感分析)单独标数据、单独训模型,互不相通。
  • BERT 的做法:先让老师读海量文章,做大量"完形填空"练习(把文章里随机挖几个字,让他填回去)。这个过程不用人标注,文章本身就有答案。练完之后,老师对语言有了深层理解,再花少量时间专项训练某个具体任务,就能快速上手。

关键点:"完形填空"这个预训练任务,逼着老师必须读懂上下文才能填对--看一个孤立的字没法填,得看前后文。这就是 BERT 学到双向上下文表示的机制。

BERT 之所以重要,不是因为它架构多新颖(架构就是 Transformer 编码器),而是它把"预训练 + 微调"这套打法跑通了,证明了一次预训练可以服务无数下游任务。

L3 · 正经定义

BERT(Bidirectional Encoder Representations from Transformers) 是 Google 于 2018 年发表的预训练语言模型(Devlin et al., 2018)。它使用 Transformer 的编码器堆叠(BERT-base 12 层,BERT-large 24 层),通过两个预训练任务学习语言表示:

  1. 掩码语言模型(Masked Language Model, MLM):随机 mask 输入中 15% 的 token,让模型根据上下文预测被 mask 的 token。这是"完形填空"的正式名称。
  2. 下一句预测(Next Sentence Prediction, NSP):给两个句子,判断第二句是否是第一句的实际下一句。学习句间关系(后续 RoBERTa 发现 NSP 作用有限,去掉反而更好)。

预训练后,BERT 通过在顶部加一个轻量任务头(分类层、span 抽取层等),用少量标注数据微调到下游任务。下游任务包括:文本分类、命名实体识别(NER)、问答(SQuAD)、句对匹配等。

BERT-base 参数量 110M,BERT-large 340M。在发布时,BERT 在 11 项 GLUE/SQuAD 任务上同时刷新 SOTA,是 NLP 预训练时代的标志性事件。

参考资料

L4 · 原理深挖

4.1 MLM:为什么"完形填空"能让模型学到双向表示

这是 BERT 最核心的设计。对比两种预训练目标:

自回归语言模型(GPT 路线):给定前 $i-1$ 个 token,预测第 $i$ 个。模型只能从左到右看,是单向的。

掩码语言模型(BERT 路线):mask 掉一些 token,让模型用所有未被 mask 的 token(前后都算)预测被 mask 的。比如:

原句:The cat sat on the mat mask 后:The cat [MASK] on the mat 预测:[MASK] = sat

预测 sat 时,模型能看到前面的 The cat 和后面的 on the mat前后文都用上了。这就是"双向"的来源--不是架构的双向(编码器本来就是双向的),而是预训练目标迫使模型利用双向上下文

这个设计的代价:被 mask 的 token 之间不能互相参考(因为它们都是要被预测的),预训练和微调之间存在轻微的分布不一致(微调时没有 [MASK] token)。后续的改进(如 T5 的 span corruption、RoBERTa 的动态 mask)部分缓解了这个问题。

4.2 mask 策略的细节:为什么不是简单地把 15% 换成 [MASK]

BERT 的 mask 不是简单地选 15% 替换成 [MASK],而是有更精细的设计:

  • 选 15% 的 token 位置
  • 其中 80% 替换为 [MASK]
  • 10% 替换为随机 token
  • 10% 保持不变

为什么要这么麻烦?

  • 80% 用 [MASK]:标准的"挖空",模型明确知道这里要预测。
  • 10% 用随机 token:让模型不能依赖"[MASK] 这个特殊符号"来识别要预测的位置。微调时输入里没有 [MASK],这种训练让模型适应"任何位置都可能需要预测"。
  • 10% 保持不变:让模型学会"即使位置看起来正常,也要验证它是否合理"。这是一种正则化。

这个看似奇怪的设计,是为了缩小预训练和微调之间的分布差距。是 BERT 论文里被低估的工程细节。

4.3 NSP:为什么后来被证明没用

NSP(下一句预测)任务:输入句对 (A, B),让模型判断 B 是否是 A 的真实下一句。BERT 加这个任务的初衷是让模型学到句间关系,对问答、句对匹配等任务有帮助。

RoBERTa (Liu et al., 2019) 的研究发现:去掉 NSP,模型在多数任务上反而更好。原因分析:

  • NSP 任务太简单,模型容易学到捷径(如判断两个句子的主题是否一致),没真正学到"下一句"的逻辑关系。
  • NSP 占用了预训练的"额度",挤掉了本可以用于 MLM 的计算。

RoBERTa 去掉 NSP 后,配合更多数据、更大 batch、更长训练,全面超过 BERT。这成为后续编码器模型的共识:NSP 不必要

4.4 微调范式:为什么 BERT 能"一次预训练,万能微调"

BERT 之前,每个 NLP 任务几乎都要从头设计架构、从头训练。BERT 改变了这一点:

海量无标注语料 ──[MLM 预训练]──> 通用 BERT 模型

                    ┌─────────────────┼─────────────────┐
                    ▼                 ▼                 ▼
              [加分类头]        [加 span 头]        [加 QA 头]
              文本分类          NER                问答
              (少量标注)      (少量标注)        (少量标注)
                    └─────────────────┴─────────────────┘
                              微调(更新全部参数)

每个下游任务只需:

  1. 在 BERT 顶部加一个轻量任务头(通常一层线性层)
  2. 用少量标注数据(几千到几万条)微调整个模型

这把 NLP 的开发成本从"每个任务训一个大模型"降到"预训练一次 + 微调多次"。BERT 之后,几乎所有 NLP 任务的最优解都是"预训练 + 微调"的变体。

4.5 BERT 的局限:为什么它最终被生成模型超越

BERT 在理解任务上长期领先,但 2020 年后逐渐被 GPT 系列追上并超越。原因:

  1. 无法生成:BERT 的 MLM 目标让它擅长"填空",不擅长"续写"。直接用 BERT 生成文本会出问题(因为 mask 位置独立预测,生成的 token 之间不连贯)。这把 BERT 锁死在理解任务上。

  2. Scaling 不如自回归:BERT 的 MLM 目标在 scaling 下的损失下降不如自回归平滑。同样的算力,GPT 路线的收益更可预测(scaling law)。

  3. In-context learning 缺失:GPT-3 发现大模型能通过 prompt 学习新任务,不需要微调。BERT 系列没有涌现出同等能力。

  4. 任务统一性:GPT 把所有任务统一成"预测下一个 token",BERT 需要为不同任务设计不同头。统一性在工程上优势巨大。

但 BERT 并没有死:在参数受限 + 纯理解任务的场景(如工业界的文本分类、NER),BERT 及其变体(RoBERTa、DeBERTa)仍是性价比最高的选择。

L5 · 沿革与坑

沿革

  • 2018 年 10 月:Google 发表 BERT,11 项 NLP 任务刷榜。它的灵感部分来自 GPT(预训练 + 微调)和 ELMo(上下文表示),但首次用双向 Transformer 编码器 + MLM预训练,把效果推到新高度。
  • 2019 年:BERT 系列爆发,衍生出 RoBERTa(去掉 NSP,更大数据)、ALBERT(参数共享,更小)、DistilBERT(蒸馏,更小更快)。
  • 2020 年:DeBERTa(微软)用解耦注意力进一步提升,长期占据 NLP 理解任务榜首。
  • 2020 年后:GPT-3 引领的生成大模型路线崛起,BERT 在通用大模型领域逐渐淡出,但在工业界理解任务中仍是主力。
  • 2024 年:编码器模型仍在演进,DeBERTa-v3、ModernBERT 等针对长文本、效率做优化。BERT 范式在理解任务上仍有生命力。

常见误解

  • 误解:BERT 是"双向 Transformer",GPT 是"单向 Transformer",所以 BERT 一定比 GPT 强。 ✅ 真相:双向确实更适合理解任务,但 GPT 的规模优势能压过这个架构差异。GPT-4 的理解能力远超任何 BERT 变体。架构决定的是"同等规模下的效率",不是"绝对能力"。

  • 误解:BERT 的 MLM 目标是"完形填空",所以 BERT 能做文本生成。 ✅ 真相:不能。MLM 是独立预测被 mask 的位置,不保证生成连贯性。直接用 BERT 续写文本会出现不连贯的输出。BERT 是为理解设计的,不是为生成。

  • 误解:预训练 + 微调就是 BERT 发明的。 ✅ 真相:预训练 + 微调范式在 CV 早就有了(ImageNet 预训练),NLP 里 ELMo、GPT 也早于 BERT 用了这个范式。BERT 的贡献是证明了双向编码器 + MLM 在这个范式下效果最好,并把范式推广成 NLP 标准。

  • 误解:BERT 已经过时了,没人用了。 ✅ 真相:在通用大模型(ChatGPT 类)领域确实式微,但在工业界的文本分类、NER、检索(如双塔编码器、cross-encoder reranker)等理解任务上,BERT 变体仍是性价比最高的选择。ModernBERT 等新版本仍在迭代。

面试怎么考

  1. "BERT 的预训练任务是什么?为什么这么设计?" --MLM + NSP。MLM 迫使模型利用双向上下文(见 4.1)。NSP 后被证明不必要(见 4.3)。
  2. "BERT 和 GPT 的核心区别?" --架构(编码器 vs 解码器)+ 注意力方向(双向 vs 单向)+ 预训练目标(MLM vs 自回归)+ 适合任务(理解 vs 生成)。
  3. "为什么 BERT 的 mask 不直接全换成 [MASK]?" --80/10/10 策略缩小预训练-微调分布差距(见 4.2)。
  4. "RoBERTa 相比 BERT 改了什么?" --去掉 NSP、动态 mask、更多数据、更大 batch、更长训练。
  5. "BERT 能做文本生成吗?为什么?" --不能。MLM 独立预测 mask 位置,不保证连贯性(见 4.5)。
  6. "为什么大模型时代 BERT 被超越了?" --无法生成 + scaling 不如自回归 + 缺 in-context learning + 任务统一性差(见 4.5)。

延伸阅读


上一篇:编码器-解码器 -- 三种变体的总览。下一篇:GPT / LLaMA -- 仅解码器路线,当今大模型的主流。

内容采用 CC BY-SA 4.0,代码采用 MIT。