Skip to content

BERT架构

BERT(Bidirectional Encoder Representations from Transforms)= 只取 Transformer 的编码器,用「完形填空」的方式做大规模自监督预训练。它是 Encoder-only 范式的代表,主攻「理解」。

1. 整体形态

输入: [CLS] 我 喜欢 深度 学习 [SEP]
        │  (WordPiece 子词 + 段嵌入 + 位置嵌入)

   ┌─────────────────────┐
   │  Transformer Encoder │  × 12(base) / 24(large)
   │  双向自注意力 + FFN    │     d_model=768/1024, h=12/16
   └─────────┬───────────┘

   每个位置得到一个富含上下文的向量


   [CLS] 向量 → 分类;  各位置向量 → 序列标注 / 抽取 / 检索
  • base:12 层、768 维、12 头、约 110M 参数。
  • large:24 层、1024 维、16 头、约 340M 参数。

2. 输入 = 三种嵌入相加

BERT 的输入表示是三张嵌入表逐元素相加

Token 嵌入(WordPiece 子词)
   + 段嵌入(Segment, 区分句子A/B)
   + 位置嵌入(可学习, 上限 512)
   ───────────────────────────
   = 送入 Encoder 的最终向量

两个特殊符号:

  • [CLS]:句首聚合符号,它的最终向量常被用作整句表示(分类任务)。
  • [SEP]:分隔符,分隔句子、标记结尾。

3. 预训练任务一:MLM(掩码语言模型)

这就是「完形填空」:随机遮住 15% 的词,让模型根据双向上下文预测被遮住的是什么。

原句:   我 喜欢 深度 学习
遮住:   我 [MASK] 深度 学习      →  让模型还原"喜欢"

细节(并非全用 [MASK]):被选中的 token 中

  • 80% → 替换成 [MASK]
  • 10% → 替换成随机词
  • 10% → 保持原词

这样做是为了缓解「预训练见到 [MASK]、微调/推理见不到」的分布不一致。

为什么 MLM 必须用双向 Encoder? 还原一个词需要同时利用左右文,这正是编码器的强项,也是解码器(单向)做不到的。

4. 预训练任务二:NSP(下一句预测)

给两个句子,判断「B 是不是 A 的下一句」(二分类)。目的是让 [CLS] 向量学到句子间关系。(后续 RoBERTa 等工作发现 NSP 收益有限,常被去掉,这里了解即可。)

5. 下游怎么用:预训练 + 微调

   预训练好的 BERT(通用语言理解)
          │  在头部加一个很小的任务网络, 全模型端到端微调

  ┌───────────────┬────────────────┬───────────────┬──────────────┐
  │ 句子分类       │ 句对分类/相似度  │ 序列标注(NER)  │ 抽取式问答(SQuAD)│
  │ 用 [CLS] 向量  │ 用 [CLS] 向量   │ 用每个词向量   │ 预测答案起止位置 │
  └───────────────┴────────────────┴───────────────┴──────────────┘
python
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tok = AutoTokenizer.from_pretrained("bert-base-chinese")
model = AutoModelForSequenceClassification.from_pretrained(
    "bert-base-chinese", num_labels=2)
enc = tok("这部电影太精彩了!", return_tensors="pt")
logits = model(**enc).logits          # [1, 2] 情感二分类

6. BERT 的强项与局限

强项局限
理解类任务登顶(分类、NER、问答抽取、检索)不擅长自由生成(它没学过逐词续写)
双向上下文,表示质量高输入最长 512,长文受限
一个预训练模型适配众多下游微调会改动全部权重,多任务成本高(→ 催生日后 PEFT/LoRA)

7. 家族成员速览

  • RoBERTa:更大语料、去掉 NSP、更久训练。
  • DistilBERT:知识蒸馏,更小更快。
  • ALBERT:参数共享,省内存。
  • 中文bert-base-chinesehfl/ 系列(MacBERT、RoBERTa-wwm)。

小结

  • BERT = Transformer Encoder + MLM/NSP 自监督预训练。
  • 输入是 token + 段 + 位置三嵌入相加,[CLS]/[SEP] 打头尾。
  • 双向注意力让它极擅长「理解」,靠预训练+微调适配下游。
  • 不擅长生成——那是下一页 GPT 的主场。

下一步

看 Decoder-only 如何靠「续写」统一天下 → GPT架构