正在翻开……

完形填空学出来的理解:BERT

Devlin, Chang, Lee, Toutanova · Google AI Language · 2018 · arXiv:1810.04805

这篇论文满页都是缩写——BERT、MLM、NSP、GLUE、SQuAD。你一个都不用记。你只需要会做一件事:小学语文的完形填空。因为这篇论文的全部主张就一句话:让机器做几十亿道完形填空,它就能学会理解语言。听起来太便宜了,对吧?但 2018 年,这个便宜办法横扫了 11 项任务,还在阅读理解上第一次超过了人类。我们来看看它凭什么。

你先做一道

规则只有一条:我挖掉句子里的一个词,你把它填回来。就下面这句,凭直觉,点一个你认为该填的词

挖掉了一个词 · 点下面的候选词,把它填回去

三种考法:单向、作弊、挖空

当时预训练语言模型的标准考法(GPT-1 用的就是它)叫"猜下一个词":从左往右读,每读一个词就猜下一个是什么。这个考法有个天生的规矩——不许偷看后面,就像你写故事时不可能先看到自己还没写的下一句。规矩很合理,但代价你马上能看到。点下面三个按钮,让同一道题接受三种考法:

同一道题 · 三种考法 · 柱子 = 模型给每个候选词的把握

看考法①的柱子:领先的是"书"——不怪它,"她把__递给我"确实递什么都行,而唯一能定案的线索"雨"在空格右边,单向模型永远够不着。那干脆让它双向看?考法②告诉你会发生什么:句子里"伞"字明晃晃摆着,模型抄了个满分——看得见答案的考试,考不出任何东西。这就是双向和"猜下一个词"的死结:要么看不见线索,要么看得见答案。

Devlin 的解法不是改学生,是改考卷:把答案从卷子上挖掉。挖掉之后,随便你往两边看——反正答案不在卷面上,看得越全,猜得越准。考法③里,"伞"的把握飙到 87%,两条绿线一左一右,就是你在第一节里眼睛走过的路线。这个考法在论文里叫 Masked Language Model「挖空猜词」,简称 MLM——名字记不记无所谓,你已经亲手考过三遍了。

等等,同年的 ELMo 不是也自称"双向"吗?

ELMo(2018 年初)的做法是训练两个各自独立的单向模型——一个从左往右读,一个从右往左读——读完把两份笔记拼在一起。论文管这叫"浅层拼接":两只眼睛各看半边,事后合并记录,但在"看"的那一刻,左右线索从来没有机会互相印证。你在第一节填"伞"时不是这样的——你是同时握着"递给"和"雨"两条线索才锁死答案的。BERT 的双向是每一层里每个词都同时看两边(论文标题里 deep bidirectional 的"deep"就是在跟 ELMo 划清界限),而让这件事变得合法的,正是上面那个"挖空"。

挖多少个坑,是门手艺

好,考法定了。下一个问题立刻来了:一篇文章,挖几个坑合适?这就像腌咸菜放盐——放少了没味道,放多了齁死人。挖得太少,机器读完一整篇只做了一两道题,电费白烧;挖得太多,坑挨着坑,线索本身也被挖掉了,谁都猜不出来。拖动滑块,改变挖坑的比例,看这段话变成什么样:

拖动滑块 · 深色方块 = 被挖掉的词 · 红色方块 = 线索不足、猜不出的坑

注意两根小表的关系:往右拖,"这一遍能学多少"一路涨,但"每个坑的线索"一路跌——拖过 50%,满页红方块,连你也猜不出那些坑里原来是什么了。往左拖到 3%,线索充足得很,可一整遍语料才学这么一点,训练成本翻着倍地涨。坑的数量买信号,坑的稀疏买线索,两头都要就只能折中——论文选了 15%,此后几年整个领域都跟着抄这个数。

挖掉的坑里填什么?(论文里最容易被忽略的小心机)

被选中的 15% 里,其实只有 80% 真的换成 [MASK] 记号,10% 换成一个随机词,10% 原样不动。为什么搞这么复杂?因为 [MASK] 这个记号只在训练时存在——等模型毕业上岗(做分类、问答)时,输入里根本没有 [MASK]。如果训练时它只在看到 [MASK] 的地方才认真,上岗后就全程摸鱼了。掺入随机词和原词,等于告诉它:任何一个词都可能是错的,每个位置都得保持怀疑。训练和上岗的落差,论文用一手"掺沙子"补上了。

词级别的完形填空练成了。但很多真正的任务——问答、推理——考的不是词,是句子和句子的关系。BERT 还得上第二门课。

第二门课:这是下一句吗

第二门课叫 Next Sentence Prediction「下一句判断」,简称 NSP,考法也便宜:给两句话,判断第二句是不是真的跟在第一句后面(训练时一半是真的,一半从语料库里随机抽)。你先来考考自己——第一句还是我们那句伞,逐个点开三个候选,投出你的判断,再看模型怎么判:

先投你的判断,再看模型的 · 三个候选都判完,有个真相等着你

理解派与生成派:两条大路分岔了

读到这你可能会问:GPT 不也预训练吗,凭什么 BERT 非要双向?现在你有资格看清这个分岔了。它不是谁高级谁落后,是两张考卷,考出两种视野,各自付了各自的代价。下面是同一句话在两种模型里的样子——点任意一个词,看它在两边分别"看得见"谁:

拿活儿来派:
点一个词 · 上排 GPT(单向解码器)· 下排 BERT(双向编码器)· 连线 = 看得见

点句子开头的"她"试试——GPT 那排一条线都没有,句首的词在单向世界里是个瞎子;再点句尾,GPT 反而看得和 BERT 一样全。再点图下面三个活儿,看每一单该派给谁:判断和抽取,线索散在全句,双向通吃;唯独"接着往下写",未来还不存在,想偷看也没得看——单向反而是唯一合法的姿势。这解释了两派的分工:生成派(GPT)永远站在句尾往外写,"只看左边"对它不是缺陷,是写作的物理定律——你没法参考自己还没写出来的字。理解派(BERT)面对的是已经写完的句子,判断、抽取、分类,全句摊在桌上,凭什么只看一半?但特权有账单:BERT 训练时人人偷看全句,它这辈子都学不会一个词一个词地往外吐——你没法让 BERT 给你讲故事。双向是理解的特权,单向是生成的代价,两条大路从 2018 年分岔,一直通到今天。

一个底座,换帽子上岗

还差最后一块。会做完形填空,谁雇你?没有一个老板的需求叫"填空"。论文的第二个主张补上了这块:填空只是练内功的方式——先用 33 亿词的无标注文本(维基百科加书籍语料)把底座练厚,这叫预训练「pre-training」;然后针对每个具体任务,在底座头顶接一个小帽子,用那个任务的几万条标注数据轻轻调几个小时,这叫微调「fine-tuning」。点下面四个任务,看同一个底座怎么换帽子,以及换完帽子的成绩单:

左 = 同一个预训练底座 + 可更换的任务小帽 · 右 = 该任务成绩对比(数据取自原论文摘要)

四顶帽子小得可怜——一层分类头、两个指针探头——真正的本事全在那个从不更换的绿色底座里。看问答 SQuAD 1.1 那格:虚线是人类的成绩 91.2,BERT 划到了 93.2 上面。机器第一次在一项严肃的阅读理解基准上超过人,靠的不是为问答特制的什么机关,是几十亿道完形填空攒下的内功,加一顶几小时调好的帽子。零件在这一刻全部咬合:双向的视野(第 2 节)× 15% 的坑(第 3 节)× 33 亿词的语料,练出一个底座;底座 + 小帽 = 十一项纪录。"先大量自学,再少量专精"——这个范式从这篇论文开始普及。

"横扫 11 项"里的 GLUE,到底是哪九项?

GLUE 是九张卷子合订成的一场"语言理解高考",九项平均分就是上图第一格那个数。九张卷子长这样:

卷子考什么一句话版本
CoLA语法这句话是不是人话?
SST-2情感这条影评在夸还是在骂?
MRPC / QQP改写这两句话是不是一个意思?
STS-B相似度这两句像到几分(打分制)?
MNLI / QNLI / RTE推理由第一句能不能推出第二句?
WNLI指代句子里的"它"指谁?

注意最后一行——指代消解,正是《注意力》那篇文章里 it→animal 的连线游戏。九张卷子没有一张考"写作":GLUE 从头到尾都是理解派的考场,这也是 BERT 的双向底座在这里如鱼得水的原因。11 项 = GLUE 九项 + SQuAD 问答 + SWAG 常识选择。

终局:跟它比一场完形填空

你已经懂了它的全部原理,最后来一场公平对决。还是那个雨天,这次挖了三个坑,三个坑各选一个词,选满自动揭晓——我们的玩具模型(词表只有这几个候选,概率是教学近似)会同时交卷。提示:有一个坑,光靠"哪个词眼熟"是会掉进去的:

第①空
第②空
第③空
三个坑各选一个词 · 选满自动揭晓 · 玩具词表,概率为教学近似

一道填空题的后来

回想你这一路亲手做过的事:你填对了那把伞,然后看着单向模型在同一道题上把"书"排到第一;你见过双向不挖空的满分作弊,拧过挖坑比例的两个极端,识破了一句混进来的气象百科,点亮过"她"在两种架构里判若两人的视野,最后在第③空赢了(或者陪它一起输给了)那句"右肩"的回声。BERT 的全部秘密,你不是读到的,是出来的。

三个你可能正想抬的杠(我们直说)

"[MASK] 训练时有、上岗时没有,这不精神分裂吗?"——是真问题,论文自己也承认。第 3 节折叠里那手 80/10/10 的"掺沙子"只是缓解,不是根治;后来 ELECTRA 等工作换了考法(不猜挖掉的词,改判"哪个词被人换过")就是冲这条缝来的。

"15% 是算出来的还是拍脑袋?"——经验值,论文没有给推导。你在滑块上感受到的那对矛盾(信号 vs 线索)是真实的,但 15% 只是那年的手感;后来有工作发现模型更大时,挖得更狠一些也扛得住。

"NSP 呢?"——第 4 节已经当场坦白了:你亲手看着它被"话题像"骗过,一年后 RoBERTa 删掉它,成绩没掉。两大预训练任务,一个改写了历史,一个成了历史。

2018 年 10 月这篇论文放出后,理解派的大路迅速铺满了整个工业界:你每一次搜索时搜索引擎对查询词的理解、垃圾邮件的拦截、语义检索里把句子变成向量的那一步,底下大多站着 BERT 或它的后代。而它学习的方式——先在无标注的海量文本里自学内功,再用少量标注专精一项——后来也成了生成派巨型模型的地基。两条大路在分岔多年后,共用着同一个起点:把词挖掉,或者把下一个词遮住,让模型自己把世界补全。

如果你还没读过这两篇:《注意力,就是你所需要的一切》讲 BERT 躯干里那套喊话大厅本身;GPT-3 那篇《语言模型是少样本学习者》讲分岔的另一条路走到极端会发生什么——单向的生成派不接帽子、不微调,靠把模型变大一千倍直接开口说话。读完那篇再回头看第 5 节那两排连线,你会看见今天的整个 AI 版图。