BERT核心认识
- BERT 全称是
Bidirectional Encoder Representations from Transformers。 - 它的本质是: 基于 Transformer Encoder 的双向预训练语言模型。
- 它的重要性在于: 先用大规模语料预训练, 再针对下游任务微调, 几乎重塑了 NLP 的主流范式。
BERT为什么强
- 传统语言模型多是单向建模, 只能看左边或右边。
- BERT通过双向上下文建模, 一个词可以同时利用前后语义。
- Transformer 又擅长并行计算和建模长距离依赖, 所以 BERT 在理解类任务上很强。
BERT架构
BERT可以粗看成 3 层:
- Embedding层
- Transformer Encoder层
- 任务输出层
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% 保持原词不变
- 80% 替换成
这样设计的原因:
- 只用
[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 时代之前的重要过渡方案
学这篇时最该记住的点
- BERT =
Transformer Encoder + 双向预训练 - 两个经典预训练任务:
MLM + NSP - BERT 的关键问题: 大、慢、
[MASK]带来分布偏差 - 后续模型的改进主线:
- 要么降参数, 如 ALBERT
- 要么改训练策略, 如 RoBERTa
- 要么修正 MLM 缺陷, 如 MacBERT
- 要么改遮掩单位, 如 SpanBERT