BERT (Bidirectional Encoder Representations from Transformers)
BERT 是 Google 推出的双向 Transformer 编码器,通过预训练同时利用被遮蔽词语两侧的上下文来预测这些词语。本文介绍其工作原理、微调和变体。
BERT(来自 Transformer 的双向编码器表示)是一种 Transformer 编码器,它一次读取整个句子,并根据每个词左右两侧的词构建该词的表示。Google AI Language 的 Jacob Devlin、Ming-Wei Chang、Kenton Lee 和 Kristina Toutanova 于 2018 年 10 月推出了 BERT;他们的论文 BERT:用于语言理解的深度双向 Transformer 预训练获得了 NAACL 2019 最佳长论文奖。一个经过微调、仅增加一个输出层的预训练 BERT,在 11 项自然语言处理(NLP)任务上创下新的最先进成绩:GLUE 基准得分提升至 80.5%,绝对提升 7.7 个百分点;SQuAD v1.1 问答测试 F1 得分则达到 93.2。
BERT 如何进行预训练#
BERT-Base 由 12 个编码器层组成,隐藏状态维度为 768,具有 12 个注意力头,约有 1.1 亿个参数;BERT-Large 则有 24 层、1,024 维、16 个注意力头和 3.4 亿个参数。输入文本通过 WordPiece 分词拆分为 30,000 个词元的词汇表,每个序列以特殊的 [CLS] 词元开头,句子对中的两个片段则由 [SEP] 分隔。Google 使用 BooksCorpus(8 亿个词)和英文维基百科(25 亿个词),通过两个自监督目标对这两种规模的模型进行了预训练。
掩码语言建模(MLM)会选取 15% 的词元位置,其中 80% 替换为 [MASK],10% 替换为随机词元,另外 10% 保持不变;模型需要预测原始词元。BERT 的自注意力没有因果掩码,因此每次预测都能利用两侧的上下文,而从左到右的语言模型做不到这一点。下一句预测(NSP)会让每个片段有一半概率与其真实后续句配对,另一半概率与随机句子配对;基于 [CLS] 输出的分类器则学习区分这两种情况。
预训练检查点会保留其掩码词预测头,因此原始模型可以直接填补空白:
from transformers import pipeline
# BERT 根据空白两侧的词预测被掩码的词
fill = pipeline("fill-mask", model="bert-base-uncased")
for text in ["She went to the [MASK] to buy bread.", "She went to the [MASK] to see a doctor."]:
predictions = fill(text, top_k=3)
print(text, [(p["token_str"], round(p["score"], 2)) for p in predictions])两个句子只有空白之后的部分不同,而 BERT 的最高概率预测也随之从“market”(0.82)变为“hospital”(0.78)。从左到右读取的模型在两个句子中看到的都是“She went to the”,没有任何信息可以区分二者。
微调与应用#
微调会添加一个小型任务层,并使用带标签的样例训练所有权重;这种方法让迁移学习成为 NLP 中的默认做法。[CLS] 向量输入句子级分类器,例如情感分析;每个词元向量输入标注任务,例如命名实体识别(NER);而对词元计算的起始和结束分数则用于提取答案片段。
Google 表示,2019 年 10 月,BERT 开始用于美国 10% 的英语搜索;Google 举例说明了查询“2019 brazil traveler to usa need a visa”,BERT 能识别出“to”描述的是一名前往美国的巴西旅客。到 2020 年 10 月,BERT 已用于几乎所有英语查询。BERT 系列编码器还可生成嵌入,为语义搜索提供支持:Sentence-BERT 对 BERT 进行微调,将每个句子映射为一个向量,用于向量搜索;ColBERT为每个词元保留一个向量;而交叉编码器重排序器则在检索增强生成(RAG)流水线中为查询与文本段落配对打分。
在视觉语言检测中,Grounding DINO会先使用 BERT-base 编码器对文本提示进行编码,然后将其与图像区域匹配。Ultralytics Platform 托管 Grounding DINO,用于类别提示智能标注:它会将数据集的类别名称转换为可编辑边界框,以便训练 YOLO26检测器。掩码预测也扩展到了图像领域:视觉 Transformer(ViT)借用了 BERT 的 [CLS] token 进行分类;掩码自编码器(MAE)则通过隐藏 75% 的图像图块并重建它们来预训练图像编码器。
BERT 与 GPT 及后续编码器的对比#
GPT模型基于带因果掩码的 Transformer 解码器构建,因此会根据前面的词元预测下一个词元,适用于文本生成。BERT 会为每个输入词元输出一个向量,适用于分类、提取和检索,但没有内置的从左到右文本生成能力。拥有数十亿参数的大语言模型(LLM)可以通过提示处理许多相同的理解任务,但每次查询的成本可能是拥有 1.1 亿参数的编码器的许多倍。
后续编码器改进了这一方案。Meta 的 RoBERTa 移除了 NSP,在更大的批次上训练更长时间,使用约 160 GB 的文本,证明 BERT 的训练明显不足;Hugging Face 的 DistilBERT 则通过知识蒸馏将参数量减少 40%、运行速度提升 60%,同时保留 BERT 97% 的语言理解性能。由 Answer.AI 和 LightOn 于 2024 年 12 月发布的 ModernBERT,使用 2 万亿个词元进行训练,原生上下文长度为 8,192 个词元,是 BERT 512 个词元限制的 16 倍。










