橙研所· 方法论 × Agent 拆解
AI 科普 · Paper Reading

AI圣经05 《BERT:让机器学会「完形填空」,预训练范式登场》

过去我们默认,AI 读一句话就像我们读字幕——从左到右,一个词一个词往下扫。2018 年,一个叫 BERT 的模型偏要反着来:它把句子里的词随机挖掉一些,逼自己同时看左右两边、把空填回去。就靠这一招「完形填空」,它一口气刷新了 11 项语言任务的纪录,也立起了今天几乎所有大模型都在用的「预训练 + 微调」范式。

AI圣经05 BERT 让机器学会「完形填空」 封面
📚 AI 圣经 · 系列导览这是「AI 圣经」系列第 05 篇。我会带你逐篇精读撑起今天所有大模型的 21 篇经典论文,分 5 个阶段层层递进(本篇已高亮): 本篇论文:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》· Devlin, Chang, Lee, Toutanova 2018。地址 arXiv:1810.04805(arxiv.org/abs/1810.04805)。其余各篇论文地址,随当期文章给出。
📩 回复「AI圣经05」,领取本篇论文 PDF。

太长不读在 BERT 之前,让 AI「读懂」语言有个隐形的天花板:主流模型只能从左往右单向地读,因为标准的「猜下一个词」训练法,一旦允许双向,要猜的词就能偷看到自己——等于考试时答案写在题面上。BERT(2018)的破解办法简单得像小学语文题:把句子里 15% 的词随机挖空,让模型靠左右两边的上下文把它们填回来(这叫「掩码语言模型」MLM)。这一遮,「偷看自己」的问题没了,机器第一次能同时看一个词的前后文去理解它。再配上「判断两句话是不是上下句」的小任务,BERT 在海量文本上预训练出一套通用的语言理解能力,之后换任何具体任务,只要接一个小输出层微调一下就能用。结果:一套模型刷新 11 项 NLP 任务纪录,GLUE 总分冲到 80.5%(论文 p1)。从此,「先预训练、再微调」成了 NLP 的标准打法。

上篇回顾 · 先答一题上一篇 word2vec,我们说它第一次把「词」变成了机器能算的向量。但它留了个死结:它给每个词发一个固定的向量——「bank」无论出现在「河岸(river bank)」还是「银行账户(bank account)」里,都是同一串数字。可这两个 bank 意思天差地别。那么问题来了:怎么让同一个词,在不同的句子里,拥有不同的向量?这一篇 BERT,给的就是这个问题的答案——而它的地基,正是更早的 P01《Attention Is All You Need》那个 Transformer。

01单向的牢笼:AI 读句子,为什么「只能从左往右看」?

BERT 论文 第1页 · 标题与摘要
论文原文 · 第 1 页:标题 + 摘要(门面页)——开篇即点出「深度双向预训练」刷新 11 项 NLP 任务 SOTA。

先说一个你可能没意识到的限制。

2018 年前后,让 AI 学语言的主流办法叫「语言模型」,任务很朴素:看着前面的词,猜下一个词。「今天天气真」——猜「好」。这种「接龙」式训练有个天然方向:从左往右。同期的 GPT 就是这么干的,它只能看一个词左边的上下文。

但这里藏着一个对「理解」很要命的问题:很多时候,你得看一个词后面是什么,才知道它什么意思。看「他把钱存进了银行」,你要读到「钱」和「存」才能确定「银行」不是「河岸」;而单向模型读到「银行」时,后半句还没来,它只能半盲地猜。人读句子从来是两头一起看的,单向的机器却被绑住了一只手。

那为什么不干脆让模型双向地读、前后文一起看呢?这正是当年卡住所有人的地方。如果还用「猜下一个词」那套训练法、却允许双向——模型在猜某个词时,就能透过双向的连接间接看到这个词自己(论文 p4 §3.1)。这等于考试时把答案直接印在了题面上:模型会「作弊」,学不到真东西。

所以在 BERT 出现前,业界要么像 GPT 那样老老实实单向,要么像 ELMo 那样训练一个从左往右、再训练一个从右往左,最后把两个浅浅地拼起来——但那不是真正的「同时双向」,更像两只半盲的眼睛各看一半再凑数。深度的、真正的双向理解,一直是个没解开的结。

02完形填空:BERT 的破壁一招

BERT 论文 第4页 · §3.1 Masked LM 与 NSP
论文原文 · 第 4 页(§3.1):Masked LM 与 NSP 的定义——被遮的 15% token,80% 换 [MASK]、10% 随机词、10% 不变。

BERT 解开这个结的办法,简单到有点好笑:既然「猜下一个词」会让模型偷看到自己,那就别猜下一个词了,改成做「完形填空」。

具体做法叫 掩码语言模型(Masked LM,MLM):训练时,随机把句子里 15% 的词盖住(换成一个特殊的 [MASK] 标记),然后让模型根据剩下没被盖住的左右两边的词,把盖住的词猜回来(论文 p4 §3.1)。

「他把钱存进了 [MASK]」→ 模型要靠「钱」「存进」这些两侧线索,填出「银行」。

你看,关键的转变发生了:因为被猜的那个词本身已经被盖掉了,模型再怎么双向连接,也偷看不到它自己——「作弊」的漏洞被堵死了。于是它终于可以放心地同时看一个词的前后文,去深度地理解它。困住业界的那个结,被一块 [MASK] 解开了。

这一招还顺手带来一个巨大的好处:它不需要任何人工标注。拿一篇普通文章,随机遮几个词,答案就是被遮掉的原词——文本自己就是标准答案。这种「自己出题自己改」的方式叫自监督,意味着互联网上所有的生文本都能拿来当训练材料,不用花钱请人标注。这正是后来「预训练」能越做越大的根本原因。

(一个工程细节,体现作者的讲究:被选中的词并非全换成 [MASK],而是 80% 换 [MASK]、10% 换成一个随机词、10% 保持不变——因为真正用模型时句子里并没有 [MASK] 这个标记,留点「不变」和「随机」是为了让模型别只盯着 [MASK] 干活,论文 p4。)

03不只填空,还要判断「下一句」

BERT 论文 第3页 · Figure 1 预训练+微调总览
论文原文 · 第 3 页(Figure 1):预训练 + 微调总览——同一套预训练参数,微调时只换上层即可适配各任务。

光会填词,还不够。很多任务——比如问答、判断两句话是不是矛盾——考的是句子和句子之间的关系,单看一句填空学不到。

所以 BERT 在预训练时还加了第二道题:下一句预测(Next Sentence Prediction,NSP)。做法是给模型两句话 A 和 B,让它判断 B 到底是不是 A 的真正下一句。训练时一半给真的上下句、一半把 B 换成语料里随机的一句(论文 p5 §3.1)。靠这道题,BERT 学会了从篇章层面理解「两句话搭不搭」。

而 BERT 能「同时看全句」的底气,来自它的骨架——它直接搬用了 P01《Attention Is All You Need》里 Transformer 的编码器(encoder)部分。编码器内部的自注意力是「全连接」的:句子里每一个词,都和其余每一个词直接建立联系、互相参考(这也正是它能天然双向的结构原因)。可以说,没有两年前那篇 Transformer,就没有今天这个能一眼看全句的 BERT——这是它站得最稳的那一层肩膀

把两道题合起来:BERT 一边做着海量的完形填空(学词),一边做着上下句判断(学句间关系),在 BooksCorpus 的 8 亿词 + 英文维基百科的 25 亿词(论文 p5)上反复训练,最终炼成一套「通用的语言理解力」。

04预训练 + 微调:炼一次,到处能用

BERT 论文 第5页 · Figure 2 输入表示
论文原文 · 第 5 页(Figure 2):输入表示 = token + segment + position 三类嵌入相加;§3.1 数据与配置。

那么,炼好的这套「语言理解力」,怎么用到千差万别的具体任务上?

这就是 BERT 真正改写游戏规则的地方——预训练 + 微调(pre-training + fine-tuning)两段式(论文 p3,Figure 1):

打个比方:预训练像是供一个人读完了大学、有了通识底子;微调则是上岗前花两天做岗前培训。底子是共享的、最贵的那部分只供一次;换岗位只需轻量培训。这跟 BERT 之前的做法形成鲜明对比——那时候,每个 NLP 任务几乎都要从零搭一个专用模型、各练各的,又费数据又费功夫。

BERT 放出了两个尺寸:BERT-BASE(1.1 亿参数)和 BERT-LARGE(3.4 亿参数)(论文 p3)。在当年,3.4 亿参数已是相当大的模型——而「越大越强」这件事,也在下一节的成绩单里露了头。

05屠榜:11 项任务的硬证据

BERT 论文 第6页 · Table 1 GLUE 各任务成绩
论文原文 · 第 6 页(Table 1):GLUE 各任务成绩——BERT-LARGE 全面登顶,总分 80.5%。

「通用语言理解力」听着很虚,BERT 用一张成绩单把它砸实了。

它在 11 项主流 NLP 任务上全部刷新了当时的最好成绩(论文 p1 摘要)。几个最有代表性的数字(均来自论文,已逐项核对):

更关键的是论文做的「对照实验」:把双向的 MLM 换回单向,成绩明显下滑(论文 p4、p7)。这正面证明了——BERT 的厉害不只是因为模型大、数据多,而恰恰来自「双向」这件事本身。那块 [MASK] 撬动的「同时看前后文」,是真金白银的提升,不是锦上添花。同时 BERT-LARGE 全面强于 BASE,也给后来「把模型做得更大」埋下了伏笔。

06从 BERT 到今天:一个 Transformer,分出了「读者」和「作者」

BERT 论文 第7页 · SQuAD 结果与结论
论文原文 · 第 7 页:SQuAD 结果与结论段——双向带来的提升被对照实验反复证实。

退一步看 BERT 在这条系列长河里的位置,会看到一个很漂亮的分叉。

同样是 P01 那个 Transformer,BERT 拿走了它的编码器(encoder),GPT 拿走了它的解码器(decoder),于是走上了两条路:

砍掉编码器还是砍掉解码器,决定了这个模型是「读者」还是「作者」——这就是我们下一篇要展开的、整个「预训练范式」阶段的主线张力。(有意思的是,论时间,GPT-1 其实比 BERT 早几个月;BERT 某种程度上正是冲着「你单向,那我就做双向」去的一次回应。)

而 BERT 这一支的影响一直延续到今天:它把 word2vec 那种「一个词一个固定向量」的静态表示,升级成了「同一个词在不同句子里向量不同」的上下文相关表示;它的直系后代 RoBERTa、ALBERT 等继续打磨这套配方;今天你用的很多语义搜索、文本分类、向量检索,骨子里还流着 BERT 这一脉的血。

更长远地说,BERT 真正留下的遗产是那句话——「先在海量数据上预训练,再针对任务微调」。这套范式后来被 GPT 系列推到极致,最终长成了今天的大模型。BERT,是把这条路第一次走通、并证明它能「屠榜」的那个里程碑。

读完自测:先别往下翻,试着答

主动回忆一遍才记得住(这点「小难度」是故意的)。三问,想好再看答案:

答案1. 因为标准训练法是「猜下一个词」,一旦允许双向,被猜的词就能透过双向连接偷看到自己,等于答案印在题面上。BERT 改用完形填空(MLM):先把词遮掉再让模型靠左右上下文猜回——词本身被遮住,偷看不到自己,于是可以放心双向。2. MLM 让 BERT 学会在词的层面同时看前后文去理解一个词;NSP 让它在句子层面学会判断两句话是不是上下句、理解句间关系。3. 最贵的「通用语言理解力」只需预训练一次、可被所有任务共享;换任务只要接个小输出层、用少量数据微调,不必从零再训练一个专用模型——省数据、省算力,且效果更好。

一句话带走,和下一步

只记一句:BERT 用「完形填空」(遮词猜词的 MLM)绕开了「双向会偷看自己」的死结,第一次让机器能同时看一个词的前后文去理解它;再靠「预训练一次、到处微调」的两段式,一举刷新 11 项任务,把「预训练 + 微调」立成了 NLP 的标准范式。

从这一篇起,「AI 圣经」系列进入阶段二 · 预训练范式。BERT 拿着 Transformer 的编码器走通了「理解」这条路;下一站 P06,我们就去看它的镜像兄弟——GPT,是怎么拿着解码器,把「生成」这条路一直走到了今天的大模型。

想再深入一点荐读一个最优源:Jay Alammar 的图解博客《The Illustrated BERT》(jalammar.github.io),全程用图讲 MLM 和双向注意力,比论文好读得多。
互动钩子:你更看好「读者」BERT 这一支,还是「作者」GPT 那一支?欢迎在评论区聊聊。

← 返回 AI 圣经目录