共计 1828 个字符,预计需要花费 5 分钟才能阅读完成。
BERT 预训练基础
BERT(Bidirectional Encoder Representations from Transformers)通过掩码语言建模(MLM)和下一句预测(NSP)任务进行预训练,其核心突破在于双向上下文建模。典型应用场景包括:

- 文本分类(情感分析 / 新闻分类)
- 序列标注(命名实体识别)
- 问答系统(SQuAD 基准)
- 文本相似度计算
三大核心输出解析
1. 词向量表示(Token Embeddings)
BERT 最后一层输出的 768/1024 维向量(取决于是 base/large 版本),与传统 Word2Vec 的关键差异:
- 动态特性:”bank” 在 ”river bank” 和 ”bank account” 中会得到不同向量
- 子词处理:通过 WordPiece 分词解决 OOV 问题
- 上下文感知:包含左右双向的语义信息
from transformers import BertTokenizer, BertModel
import torch
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
inputs = tokenizer("Hello world!", return_tensors="pt")
with torch.no_grad():
outputs = model(**inputs)
# 获取最后一层隐藏状态(序列长度×768)last_hidden_states = outputs.last_hidden_state
2. 注意力权重矩阵
12/16 层(base/large)×12/16 个注意力头组成的四维张量,可用于:
- 可解释性分析:可视化特定词对的注意力分数
- 语法结构发现:捕捉长距离依赖关系
- 领域适配:筛选重要的注意力头进行微调
# 获取第 0 层的所有注意力头权重
# shape: [batch_size, num_heads, sequence_length, sequence_length]
attentions = outputs.attentions[0]
# 可视化第一个样本的第一个注意力头
import matplotlib.pyplot as plt
plt.matshow(attentions[0][0].numpy())
plt.title("Attention Head 1")
plt.show()
3. [CLS]句向量
句子开头特殊标记的聚合表征,但原始 BERT 的 [CLS] 需要配合微调才能有效使用。改进方案包括:
- 最后一层平均池化
- 前四层 concat+ 降维
- 使用 SBERT 的 Siamese 结构
结果应用场景对比
| 输出类型 | 适用任务 | 使用建议 |
|---|---|---|
| 词向量 | NER/ 词性标注 | 结合 CRF/BiLSTM 使用 |
| 注意力权重 | 关系抽取 / 文本蕴含 | 选择相关层和注意力头 |
| 句向量 | 文本分类 / 聚类 | 建议进行微调或后期处理 |
生产环境实践指南
长文本处理策略
- 滑动窗口法:512token 为窗口,128token 为步长
- 关键句抽取:先用 [CLS] 分数筛选重要句子
- 层次化建模:先处理段落再聚合文档
性能优化技巧
- 使用
fp16加速推理:model.half() # 转换为半精度 - 批量处理时动态 padding:
from transformers import DataCollatorWithPadding collator = DataCollatorWithPadding(tokenizer) - 使用 ONNX Runtime 加速:
python -m transformers.onnx --model=bert-base-cased onnx/bert
常见错误排查
- 维度不匹配:检查
hidden_size与下游模型是否一致 - OOM 问题:减小
max_seq_length或启用梯度检查点 - NaN 损失:检查输入是否包含特殊字符或异常值
开放式思考题
- 词向量质量评估:除了下游任务指标,能否直接从向量空间结构判断质量?
- 层间差异:浅层偏向语法特征、深层侧重语义特征的现象说明了什么?
- 轻量化方案:知识蒸馏、参数共享、量化等方法中,哪种最适合实时推理场景?
扩展建议
对于希望深入研究的开发者,建议:
- 分析不同预训练语料(Wikipedia vs. BookCorpus)的影响
- 尝试可视化各层的注意力模式差异
- 对比 BERT 与 RoBERTa、ALBERT 等变体的输出特性
通过合理利用 BERT 的多维度输出,可以显著提升各类 NLP 任务的效果,但需要注意不同输出结果的适用场景和优化方法。
正文完
