BERT vs GPT:两大 LLM 流派的本质区别
都是 Transformer,为啥一个做"理解"一个做"生成"?两者的训练目标差一个根本性的设计选择。
L3-08 我们看到 Transformer 有三种架构:Encoder-Only(BERT)、Decoder-Only(GPT)、Encoder-Decoder(T5)。
这一篇专门讲 BERT vs GPT——它们是 NLP 领域的两大宗派,长期对峙,最后……GPT 流派完胜。
理解这个故事,你能看懂为什么”ChatGPT” 不叫”ChatBERT”。
第一站:相同点
- 都基于 Transformer
- 都用 大规模预训练 + 小规模微调 的范式
- 训练数据都是 海量互联网文本
- 都用 自注意力作为核心
差别在哪?训练目标 + 注意力遮罩。
第二站:BERT(Encoder-Only)
2018 年发布
Google 在 2018 年 10 月发布 BERT(Bidirectional Encoder Representations from Transformers)。当时是 NLP 界的核爆。
训练目标:填空(MLM)
Masked Language Modeling(MLM) — 把句子里随机 15% 的词替换成 [MASK],让模型猜:
原句: "I love eating apples at the park"
遮蔽: "I love [MASK] apples at the [MASK]"
任务: 猜 [MASK] = "eating" / "park"
要做到这个,模型必须 同时看左右上下文—— “apples at the ___“——可能是 park / store / market “love [MASK] apples”——可能是 eating / picking / growing 两个上下文一结合,才能精确猜出。
注意力遮罩:双向
每个位置可以看所有其它位置(前后都行)——这就是”Bidirectional”的意思。
"I love [MASK] apples at the park"
↓
任意位置可以看任意其它位置
优点:每个 token 都有完整的上下文理解。 缺点:不能生成文本——你想”续写”的话,它没法判断”该写什么”,因为它训练时就靠”看到所有词”才能猜。
适合的任务
- 文本分类(情感分析、垃圾邮件):用 [CLS] token 的输出
- 命名实体识别(NER):每个 token 标签
- 抽取式问答(在原文中划出答案)
- 句子嵌入(搜索、检索)
BERT 的爆发
2018-2020 年,BERT 及其变种(RoBERTa、ALBERT、DistilBERT、ELECTRA)几乎统治了所有 NLP 任务的 SOTA 榜单。
第三站:GPT(Decoder-Only)
2018-2020 年的”小弟”
OpenAI 同年(2018)发了 GPT-1,但当时没人在意——效果不如 BERT。
GPT-2(2019)开始引起注意。 GPT-3(2020)让所有人惊了。 ChatGPT(2022)改变了世界。
训练目标:预测下一个
Causal Language Modeling(CLM) —— 给前面的词,猜下一个:
"I love eating" → 下一个是 "apples"?"pizza"?"meat"?
"I love eating apples" → 下一个是 "at"?"and"?"."?
...
非常简单——没有 mask 操作,就是顺着读,猜下一个。
注意力遮罩:因果(单向)
每个位置只能看自己和前面:
"I love eating apples at the park"
0 1 2 3 4 5 6
位置 0 只能看 0
位置 1 只能看 0-1
位置 2 只能看 0-1-2
...
位置 6 能看 0-6 所有
这叫因果遮罩(Causal Mask)——模拟”边生成边看”。生成时第 N 个词必然在第 N+1 个之前出现,所以训练时也要这样。
适合的任务
- 文本生成(写文章、对话、代码):天然支持
- 续写补全(GitHub Copilot):天然
- 对话(ChatGPT):天然
- 翻译:用 prompt “Translate to Chinese: …”
- ……几乎所有 NLP 任务:通过 in-context learning
一个核心优势:In-Context Learning
GPT-3 让所有人震惊的事——你不用微调,只要在 prompt 里给几个例子,模型就能学:
英文转中文:
hello → 你好
goodbye → 再见
thank you → ???
模型自己猜出来”谢谢”。这就是 few-shot learning 或 in-context learning。
BERT 做不到这件事——它没”生成”的能力。
第四站:决战时刻
到 2020-2022 年,两派的关系:
| 维度 | BERT | GPT |
|---|---|---|
| 学术影响 | 极大 | 极大 |
| 下游任务表现 | 在”理解”任务上略强 | 在”生成”任务上完胜 |
| 生态 | 微调一个 BERT 是 NLP 标配 | API 调用 GPT-3 是新兴 |
| 应用 | 搜索、分类、抽取 | 写作助手、客服、Chat |
学术界更喜欢 BERT 一段时间,因为论文容易发(微调跑 benchmark)。
但 2022 年 ChatGPT 出来后,游戏结束了。
第五站:为什么 GPT 赢了
原因 1:通用性
预测下一个词是个”几乎能解决所有 NLP 任务”的目标——
- 翻译?“Translate: A → B”
- 分类?“This text is: [positive/negative]”
- 问答?“Q: … A: …”
- 总结?“Summarize: …”
所有任务都能套进”生成”的框架。BERT 做这些需要专门微调。
原因 2:规模化
GPT 的训练目标允许它吃任何文本——不需要标注,互联网就是数据。 BERT 也是无监督,但 MLM 让训练效率略低。
结果:当数据/参数规模上去后,GPT 比 BERT 学得更全面。
原因 3:对话天然
ChatGPT 之所以引爆,因为对话是 GPT 架构的”自然形态”。 BERT 上做对话需要复杂的工程。
原因 4:In-Context Learning 是降维打击
不需要微调就能完成任务——这让 LLM 从”工具”变成”通用助手”。BERT 永远做不到。
第六站:今天的格局
| 路径 | 用什么 |
|---|---|
| 聊天 / 写作 / 创作 | GPT 系(GPT-4, Claude, Gemini, Llama) |
| 搜索引擎重排 | BERT 系 |
| 句子嵌入 | BERT 系(如 sentence-transformers) |
| 结构化抽取 | BERT 系 |
| 翻译 | 转向 GPT 系(Encoder-Decoder 在退役) |
| 跨模态 | GPT 系(GPT-4V, Claude 3.5) |
BERT 没死——它在搜索、嵌入、抽取这些场景仍是首选。但风头确实被 GPT 抢光了。
第七站:可能的复兴?
历史经常反转——
近年有些研究发现:
- BERT 类模型在某些 reasoning 任务上仍然强(需要双向上下文理解)
- 多模态领域有混合架构(图像 encoder + 文本 decoder)
- Embedding 模型几乎全是 Encoder-Only 架构
预言:未来可能不再是”BERT vs GPT”,而是根据任务混合——理解端用 Encoder,生成端用 Decoder。
第八站:用代码体验
用 BERT 做文本分类
from transformers import pipeline
classifier = pipeline("sentiment-analysis") # 默认是 BERT 微调版
result = classifier("I love this product!")
print(result)
# [{'label': 'POSITIVE', 'score': 0.999}]
用 GPT 做对话
from transformers import pipeline
generator = pipeline("text-generation", model="gpt2")
result = generator("The future of AI is", max_length=50)
print(result[0]['generated_text'])
一句话总结
BERT = 看完整句子做理解,GPT = 一边读一边猜做生成。
在”通用性”和”对话”这两个用户需求的胜利里,GPT 完胜。 但 BERT 在”嵌入”和”理解”任务上仍然不可替代。
2026 年的真实情况:
- 绝大多数面向用户的产品 = Decoder-Only LLM(GPT 系)
- 搜索/检索后端的核心组件 = BERT 系
- 完整系统 = 两者结合(如 RAG 用 BERT 做检索,用 GPT 做生成)
学好 BERT 不是因为它能撑你的下一个项目——是因为整个 NLP 历史里有它一半。
下一步推荐:L4 路径——把 BERT/GPT 用起来做应用。
读到这里说明你认真在学 🎯
订阅每周精选 —— 下一篇新文章 / 新可视化第一时间送到邮箱。
讨论区
· 用 GitHub 账号登录评论src/components/Comments.astro 顶部填入
仓库 ID 和分类 ID(见组件注释里的配置步骤)。