BERT与预训练模型家族精简版

BERT核心认识

  • BERT 全称是 Bidirectional Encoder Representations from Transformers
  • 它的本质是: 基于 Transformer Encoder 的双向预训练语言模型。
  • 它的重要性在于: 先用大规模语料预训练, 再针对下游任务微调, 几乎重塑了 NLP 的主流范式。

BERT为什么强

  • 传统语言模型多是单向建模, 只能看左边或右边。
  • BERT通过双向上下文建模, 一个词可以同时利用前后语义。
  • Transformer 又擅长并行计算和建模长距离依赖, 所以 BERT 在理解类任务上很强。

BERT架构

BERT可以粗看成 3 层:

  1. Embedding层
  2. Transformer Encoder层
  3. 任务输出层

1. Embedding层

BERT 的输入表示 = 3种向量相加:

  • Token Embedding: 当前词或字本身
  • Segment Embedding: 区分句子 A / 句子 B
  • Position Embedding: 表示位置信息

2. Transformer Encoder层

  • BERT只保留了 Transformer 的 Encoder 部分。
  • 这一层负责提取上下文语义信息。
  • 多层堆叠后, 每个 token 都能获得更强的上下文表示。

3. 任务输出层

  • 分类任务: 常取 [CLS] 的最终向量做分类。
  • 序列标注任务: 取每个 token 的输出向量分别预测标签。
  • 问答任务: 基于输出向量预测答案的起止位置。

BERT的两个预训练任务

1. MLM: Masked Language Model

核心思想: 随机遮住一部分词, 让模型根据上下文把它猜出来。

  • 训练时随机选择 15% 的 token 参与预测。
  • 这 15% 里的处理方式不是全都替换成 [MASK], 而是:
    • 80% 替换成 [MASK]
    • 10% 替换成随机词
    • 10% 保持原词不变

这样设计的原因:

  • 只用 [MASK] 会让预训练和微调阶段分布不一致。
  • 加入随机词, 可以防止模型偷看当前位置本身。
  • 保留少量原词, 可以让模型继续看到真实语言分布。

2. NSP: Next Sentence Prediction

核心思想: 给模型两个句子 A 和 B, 判断 B 是否真的是 A 的下一句。

  • 50% 是真实相邻句
  • 50% 是随机句子

NSP 的目标是让模型学习句间关系, 适合问答、自然语言推断这类任务。
不过后续很多研究发现: NSP 并不是最优设计, 甚至可能拖累效果。

BERT的优缺点

优点

  • 真正把双向上下文建模做强了。
  • 预训练 + 微调范式通用性强。
  • 在分类、匹配、阅读理解、序列标注等任务上都很好用。

缺点

  • 参数量大, 训练和推理成本高。
  • MLM 只预测少量 token, 训练利用率不高, 收敛偏慢。
  • [MASK] 只在预训练出现, 会带来训练和应用阶段的不一致。
  • 原始中文 BERT 更偏字级建模, 对部分词级语义不够友好。

BERT为什么用80/10/10

这组比例的本质目标是: 既让模型学会根据上下文猜词, 又别让输入分布偏得太厉害。

  • 80% -> [MASK]: 强迫模型根据上下文推断
  • 10% -> 随机词: 防止模型机械记忆当前位置
  • 10% -> 原词: 保留真实文本分布

一句话理解: 这是在“制造训练难度”和“保留真实语言面貌”之间做平衡。

BERT如何处理长文本

BERT 的最大输入长度通常是 512。

所以长文本常见处理方式只有一个核心思想: 截断或切块。

  • head-only: 保留开头
  • tail-only: 保留结尾
  • head + tail: 同时保留头尾关键信息

实际任务里怎么选, 取决于关键信息更可能出现在开头、结尾, 还是两头。

预训练模型家族速览

ALBERT

关键词: 轻量化

它对 BERT 的主要改进:

  • 词嵌入因式分解: 降低 embedding 参数量
  • 跨层参数共享: 大幅减少模型参数
  • 去掉 NSP, 改成 SOP

重点理解: ALBERT 的目标不是改架构方向, 而是在尽量保留效果的前提下降低参数规模。

RoBERTa

关键词: 把BERT训练得更充分

它的主要改进:

  • 更多训练数据
  • 更大的 batch size
  • 训练更久
  • 去掉 NSP
  • 使用动态 masking

重点理解: RoBERTa 说明了一个事实, BERT 很多提升空间其实来自“训练策略优化”, 不一定非要改模型结构。

MacBERT

关键词: 更适合中文

它的主要改进:

  • 用更合理的 MLM 策略替代原始 [MASK]
  • 更倾向于用相似词替换, 减轻预训练和微调不一致
  • 去掉 NSP, 改为 SOP

重点理解: MacBERT 本质是在修正 BERT 原始 MLM 的 exposure bias 问题。

SpanBERT

关键词: 遮一段, 不只遮一个词

它的主要改进:

  • 不再只随机 mask 单个 token, 而是 mask 连续 span
  • 加入 SBO 任务, 强化对片段边界和内部信息的建模

重点理解: SpanBERT 对抽取式问答这类和“连续片段”强相关的任务更友好。

BERT、ELMo、GPT怎么区分

三者最核心的区别, 就看“特征提取器”和“语言建模方向”。

模型 核心结构 建模方式 特点
BERT Transformer Encoder 双向 擅长理解
GPT Transformer Decoder 单向 擅长生成
ELMo 双向 LSTM 本质上是两个单向模型再融合 比较早期

可以直接记成:

  • BERT 更偏“理解”
  • GPT 更偏“生成”
  • ELMo 是 Transformer 时代之前的重要过渡方案

学这篇时最该记住的点

  1. BERT = Transformer Encoder + 双向预训练
  2. 两个经典预训练任务: MLM + NSP
  3. BERT 的关键问题: 大、慢、[MASK] 带来分布偏差
  4. 后续模型的改进主线:
    • 要么降参数, 如 ALBERT
    • 要么改训练策略, 如 RoBERTa
    • 要么修正 MLM 缺陷, 如 MacBERT
    • 要么改遮掩单位, 如 SpanBERT