语言模型 · Transformer

BERT 解读:双向 Transformer 预训练如何重塑 NLP

BERT 用掩码语言建模预训练深度双向 Transformer 编码器,只加一层即可微调,把 GLUE 推到 80.5%,横扫 11 项 NLP 任务。

BERT 解读:双向 Transformer 预训练如何重塑 NLP

快速答案

BERT 是一个深度双向 Transformer 编码器,在无标注文本上用掩码语言建模预训练,之后只需加一个输出层就能微调成具体任务模型。2018 年这篇论文一次性刷新了 11 项 NLP 任务的 SOTA:GLUE 80.5%(绝对提升 7.7 个点)、MultiNLI 86.7%(+4.6)、SQuAD v1.1 测试集 F1 93.2(+1.5)、SQuAD v2.0 测试集 F1 83.1(+5.1)。它真正留下的不是某个分数,而是那套配方——预训练一次,到处微调。

为什么单向模型不够用

早期语言模型只能从一个方向读文本。要表示「我去了银行」里的「银行」,从左到右的模型只看到「我去了」,看不到后面用来消歧的词。有些系统把分别训练的左到右、右到左模型拼接起来,但那只是浅层补丁:两半在同一层里从不互相条件化。对问答这类答案跨度依赖左右两侧词语的任务,单向习惯白白丢掉了有用信号。BERT 的核心主张就是:表示必须从第一层起就深度双向。

掩码语言建模

不能直接让 Transformer 在预测下一个词时双向注意——那样每个词会间接「看到自己」。BERT 的解法是全文最巧妙的一步:随机遮住 15% 的输入 token,让模型用左右两侧上下文把它们还原。因为目标 token 被藏起来了,双向注意才变得安全。第二个目标是下一句预测,训练模型判断一句是否真的接在另一句之后,本意是帮助推理、问答这类句对任务。

两个目标都跑在纯无标注文本上(BooksCorpus 加英文维基百科),预训练不需要人工标注。产出的是一个通用编码器,下游任务只在上面加一个轻量分类器或跨度预测层。

关键结果

亮点是覆盖面,而非单点夺冠。BERT-large 报告 GLUE 80.5%,比此前最好成绩绝对高出 7.7 个点,外加 MultiNLI 86.7%、SQuAD v1.1 测试 F1 93.2、SQuAD v2.0 测试 F1 83.1,共 11 项任务,且无需为每个任务改架构。论文里的消融实验和分数同样重要:把掩码目标换成单向目标,准确率明显下滑,这是双向性(而非单纯堆规模)驱动提升的最干净证据。

我的判断:下一句预测是最弱的一环,后续工作(尤其是 RoBERTa)证明可以去掉它、把训练拉长,反而效果更好。真正经久的思想是掩码预训练加微调。

为什么重要

BERT 把 NLP 从「每个任务设计一个模型」变成「预训练一个 backbone,再低成本适配」。这套范式如今支撑着搜索排序、问答、生物医学与法律文本挖掘,以及一整个编码器家族(RoBERTa、ALBERT、DeBERTa 及各类领域变体)。它还把预训练目标本身变成一等研究问题:模型在见到标签之前,究竟该先学会什么?

局限与存疑

BERT 是编码器,不是生成器:它做分类、排序、抽取,却写不出流畅的长答案,这也是后来领域转向解码器式大模型做生成的原因。小数据上微调可能不稳定,整个预训练-微调流程也很吃算力。掩码 token 还带来训练与推理的不一致——掩码只在预训练出现,微调时从不出现。需要生成或少样本提示就别选 BERT;需要一个强且微调便宜的理解模型,它和它的后代至今仍很难被超越。

常见问题

BERT 到底是什么?

BERT(Bidirectional Encoder Representations from Transformers)是一个 Transformer 编码器,在无标注文本上用掩码语言建模预训练,目的是微调成分类、推理、问答等理解任务上的 SOTA 模型。

BERT 和 GPT 有什么区别?

GPT 是面向生成的从左到右解码器;BERT 是面向理解的双向编码器。BERT 在每一层都同时看左右上下文,有利于分类和跨度抽取,但不像 GPT 那样产出自由文本。

BERT 为什么要用掩码语言建模?

掩码让 BERT 能双向训练又不会泄露 token 自身身份。遮住 15% 的 token 并用两侧上下文预测它们,模型学到的是基于整句、而非仅前缀的深层表示。

2026 年 BERT 还值得用吗?

理解类任务依然值得。生成式大模型在对话和写作上取代了 BERT,但 BERT 家族编码器在检索、排序、分类上仍被广泛使用,因为微调便宜、推理快。

一句话:BERT 证明了语言理解的钥匙是深度双向预训练,而不是更大的任务专用模型。

来源:arXiv:1810.04805