IT 论文精读 · PAPER 10
Devlin 等 · Google AI Language · NAACL 2019
2018 年,Google 一队人提出了 BERT:先让模型把维基百科和上万本书「裸读」一遍、自学语言,再针对每个具体任务(判断评论好评差评、回答问题……)花很小的功夫「补个课」就能上岗——一口气刷新了 11 项语言理解任务的纪录,有的还超过了人类。今天所有大模型(包括 ChatGPT)都遵循的「先预训练、再调教」的路子,就是被这篇论文在语言领域彻底带火的。2019 年起,你每一次 Google 搜索背后都跑着它。
教机器「读懂」语言,最自然的功课是接龙:给它半句话,让它猜下一个词。但接龙有个天生的别扭——只准看左边、不准看右边,像拿一张纸挡着后文读书。可人理解一个词,明明是两头一起看的:「他走进__把钱存了进去」,空里是「银行」,答案的线索在右边的「存钱」里;只看左边的「他走进」,猜什么都有可能。当时最强的模型就这么别扭着:要么只从左往右读,要么把「从左读一遍」和「从右读一遍」两个各自挡着半边的模型硬拼在一起——始终没有一个模型能真正同时看两边。
BERT 的解法妙在换题型:别玩接龙了,玩完形填空。把一句话随机挖掉几个词,让模型猜被挖掉的是什么。要猜对空里的词,模型必须左右两边一起看——这道题天生就逼它双向理解。而且这种练习题不要钱:随便一段文字,挖几个空,就是一道自带标准答案的题。维基百科加上万本书,就是几十亿道免费练习题,不需要任何人来批改。做题、对答案、改错,重复几十亿遍,模型就把词义、语法、常识一点点「吸」了进去。
光会填空还不能干活。BERT 的第二个点子是把学习拆成两段,就像人的培养:先花大成本读一次「通识大学」(在海量文本上做完形填空,练出通用的语言底子——这一步只需做一次),然后每个岗位只需一次「岗前速成」:拿几千条带标注的例子,把同一个底子稍微调一调,几个小时就能上岗。以前每个任务都得从零培养一个「文盲」,费时费力还学不好;现在人人都从「大学毕业生」起步。一次昂贵的自学,无数次廉价的上岗——这买卖太划算了。
BERT 一出,11 项语言理解任务全线破纪录,整个领域几乎在一年内全面转向「预训练 + 微调」的范式;Google 把它装进了搜索引擎,去理解你搜的那句话到底想问什么。也说句诚实的:BERT 是个「阅读理解型」选手,擅长读懂、不擅长写作——后来能聊天能写文章的 GPT 路线走的是另一条路,规模大了之后风头盖过了它;但「先预训练再调教」这个范式,正是从它这里成为全行业共识的。
把「接龙」换成「完形填空」,模型就能左右两边一起看地读几十亿句话、免费自学出语言底子;之后每个任务只需在这个底子上「岗前速成」一下。先读大学、再岗前培训——这个范式从 BERT 起统治了整个 AI。
想看挖空的具体玩法、模型结构和实验数字? → 切到精读版
BERT 用「掩码语言模型」(masked language model,完形填空式的自监督任务)在无标注文本上预训练一个深度双向的 Transformer 编码器,再针对每个下游任务只加一层输出、整体微调(fine-tuning),一举刷新 11 项 NLP 任务纪录(GLUE 提升 7.7 个百分点、SQuAD 问答超过人类水平),把「预训练 + 微调」确立为 NLP 的统治范式。
作者是 Jacob Devlin、Ming-Wei Chang、Kenton Lee、Kristina Toutanova,来自 Google AI Language;2018 年 10 月放出,发表于 NAACL 2019 并获最佳论文。它上承 Transformer(2017,提供架构)、ELMo 与 GPT-1(2018,提供「预训练语言模型再迁移」的雏形),下启 RoBERTa、ALBERT、DistilBERT 等庞大家族,并与 GPT 系的「生成式」路线分庭抗礼,成为 NLP「预训练时代」的分水岭。
2018 年初,NLP 界已经隐约看到方向:与其为每个任务从零训练小模型,不如先在无标注大语料上预训练语言模型、再迁移。但两个先行者各有硬伤:
那为什么不干脆训一个双向的?因为「预测下一个词」这道题与双向天然矛盾:自注意力允许每个位置看到全句,多层堆叠后,每个词都能经由别的词「绕道看见自己」——预测任务瞬间变成抄答案,模型什么也学不到。不是没人想双向,是旧题型不允许双向。这就是真正的卡点:想要深度双向的表示,必须先换一道不会泄漏答案的训练题。
BERT 借了语言学里 1953 年就有的老练习——完形填空(Cloze task):把输入句子里随机 15% 的 token 挖掉(换成特殊符号 [MASK]),让模型根据剩下的全部上下文预测被挖掉的词。这一换,泄题问题不存在了——答案已经被挖走,看遍全句也抄不到;而要猜对,模型恰恰必须融合左右两边的线索。双向不再是禁忌,反而成了必需。
还有个精细的补丁。[MASK] 这个符号只在预训练时出现,微调和实际使用时输入里根本没有它——模型若只学会「盯着 [MASK] 干活」,一到真实任务就水土不服(预训练-微调失配)。所以对选中的 15% 位置,BERT 并不总放 [MASK]:80% 换成 [MASK]、10% 换成随机词、10% 保留原词——但都要求预测原词。这样模型永远不知道哪个位置可信、哪个被动了手脚,只好对每一个位置都维护一份高质量的上下文表示,而不是只伺候 [MASK]。
完形填空练的是词级理解,但问答、推理这类任务要理解两个句子的关系。于是预训练时再加一道判断题:给模型一对句子,50% 是语料里真实相邻的两句、50% 是随机凑的,让它判断「B 是不是 A 的下一句」。(诚实注:这道题后来被证明作用有限,见「局限」。)
BERT 的架构就是 Transformer 编码器原样堆叠:BERT-Base 12 层、约 1.1 亿参数(刻意与 GPT-1 同规模以便公平对比);BERT-Large 24 层、约 3.4 亿参数。输入设计让「一切理解任务」都能塞进同一个模型:每句开头加特殊符号 [CLS],句子之间用 [SEP] 隔开;每个 token 的输入向量 = 词向量 + 段落向量(标记属于句 A 还是句 B)+ 位置向量 三者相加。预训练完,[CLS] 位置的输出向量就是「整段话的摘要表示」,拿它接一层分类器就能做分类;问答则拿每个 token 的输出预测「答案从哪个词开始、到哪个词结束」。
微调便宜得惊人:不冻结、不重构,把预训练好的整个模型连同新加的一层输出头一起,在任务数据上再训 2–4 轮(epoch)即可——论文里所有任务的微调在单块 TPU 上不到 1 小时。预训练用了 BooksCorpus(8 亿词)加英文维基百科(25 亿词),这份大成本只花一次,之后所有任务共享。
为什么这样设计有效?可以这么理解:完形填空逼模型内化了词义消歧、句法结构、乃至一部分世界常识——这些正是几乎所有语言理解任务的公共地基。微调不过是在坚实地基上盖一间小房,自然又快又稳;而以前的做法等于每盖一间房都从打地基开始。
2018 年 10 月放榜时,BERT 在 11 项 NLP 任务上全部刷新纪录。代表性数字:GLUE 综合得分 80.5%,比之前最好成绩绝对提升 7.7 个百分点(这个榜以前是零点几分地涨的);其中自然语言推理 MultiNLI 达 86.7%(+4.6)。SQuAD v1.1 阅读理解 F1 达 93.2 分(衡量答案与标准答案重合度的指标),超过人类标注者的 91.2;SQuAD v2.0 上 F1 83.1(+5.1)。消融实验同样有说服力:把 MLM 换回「从左往右」的传统目标,GLUE 全线掉分,SQuAD 问答暴跌约 10 分 F1——「深度双向」正是涨分的主力;而且 Large 全面强于 Base,预示「更大还会更好」。
BERT 是 NLP 的「ImageNet 时刻」:此前视觉界早已习惯「ImageNet 预训练 + 微调」,而 NLP 直到 BERT 才真正拥有了自己的通用底座。此后几年,「拿 BERT 微调」成了几乎所有语言理解任务的默认起手式,衍生出庞大家族:RoBERTa(训得更久更好)、ALBERT(参数共享减重)、DistilBERT(蒸馏小型化)、多语言 mBERT,以及中文的各种变体。2019 年 Google 宣布将 BERT 用于搜索排序,称其为「搜索史上最大的跃进之一」。更深远的是范式本身:「在无标注数据上自监督预训练大模型、再对齐到具体任务」——今天的 GPT、Claude 全都站在这条路线上;只是把「微调」换成了更大规模的指令对齐。encoder 双向架构本身也没退场:今天检索系统、向量数据库里的 embedding 模型,大多仍是 BERT 的直系后代。
① 一句话:用完形填空(MLM)预训练深度双向 Transformer 编码器,再逐任务加一层输出头微调,11 项任务全破纪录。
② 痛点:「预测下一个词」的旧题型与双向天然矛盾(多层注意力会让词绕道看见自己、抄到答案),所以 GPT-1 只能单向、ELMo 只能两个单向浅拼。
③ 核心机制:挖掉 15% 的词让模型猜——答案被挖走就无从作弊,而猜对必须融合左右上下文,双向从禁忌变成必需。
④ 细节补丁:被选位置 80% 换 [MASK]、10% 换随机词、10% 保留原词,缓解「[MASK] 只在训练时出现」的失配。
⑤ 范式:预训练一次(33 亿词、大成本)+ 每任务微调(小数据、单 TPU 不到 1 小时);[CLS] 输出当整句表示,架构不换、只加薄输出头。
⑥ 结果:GLUE 80.5%(+7.7)、SQuAD v1.1 F1 93.2 超人类;消融证明双向是涨分主力。
⑦ 影响:NLP 的 ImageNet 时刻,「预训练 + 微调」成统治范式;进了 Google 搜索;今天的检索 embedding 模型多是它的后代。
⑧ 局限:NSP 被证明没用、原版欠训练(RoBERTa)、MLM 低效(ELECTRA)、掩码独立假设(XLNet)、不会生成(后被 GPT 路线反超)、输入限 512 token。