BERT 解读:双向 Transformer 预训练如何重塑 NLP
BERT 用掩码语言建模预训练深度双向 Transformer 编码器,只加一层即可微调,把 GLUE 推到 80.5%,横扫 11 项 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 证明了语言理解的钥匙是深度双向预训练,而不是更大的任务专用模型。