第6章:Transformer与注意力机制
BERT
1. BERT概述
BERT(Bidirectional Encoder Representations from Transformers)是由Google在2018年提出的基于Transformer架构的预训练语言模型。其核心创新在于双向上下文编码,通过联合学习文本的左右上下文信息,显著提升了自然语言处理任务的性能。
2. 核心架构
- 基础模型:基于Transformer的编码器堆叠(通常为12或24层)。
- 输入表示:
- Token Embeddings:将单词或子词(WordPiece)转换为向量。
- Segment Embeddings:区分句子对(如问答任务中的问题和答案)。
- Position Embeddings:编码单词的位置信息。
- 预训练任务:
- Masked Language Model (MLM):随机遮蔽15%的输入词,预测被遮蔽的词。
- Next Sentence Prediction (NSP):判断两个句子是否为上下文关系。
3. 关键特性
- 双向性:与单向模型(如GPT)不同,BERT同时利用左右上下文信息。
- 迁移学习:通过大规模预训练(如Wikipedia、BookCorpus数据),可微调适配下游任务(分类、问答等)。
- 上下文敏感:同一词在不同语境下具有动态表示(如“苹果”在水果vs.公司场景中的不同含义)。
4. 变体与改进
- RoBERTa:优化训练策略(更长时间、更大批次、移除NSP任务)。
- ALBERT:通过参数共享降低计算开销。
- DistilBERT:知识蒸馏压缩模型,保留90%性能但体积减小40%。
5. 应用场景
- 文本分类:情感分析、垃圾邮件检测。
- 命名实体识别(NER):识别文本中的人名、地点等实体。
- 问答系统:如SQuAD数据集上的阅读理解任务。
- 句子相似度计算:语义匹配或 paraphrase 检测。
6. 代码示例(PyTorch)
from transformers import BertTokenizer, BertModel
# 加载预训练模型和分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
# 输入处理
inputs = tokenizer("Hello, BERT!", return_tensors="pt")
outputs = model(**inputs)
# 获取最后一层隐藏状态
last_hidden_states = outputs.last_hidden_state
7. 局限性
- 计算资源需求:预训练需要大量GPU/TPU资源。
- 长文本处理:受限于Transformer的注意力机制(通常最大512 tokens)。
- 实时性挑战:大模型推理延迟较高,需优化部署方案。
8. 延伸阅读
- 原始论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
- Hugging Face Transformers库:文档与示例
---
**注**:如需进一步扩展,可增加以下内容:
1. **与其他模型对比**(如BERT vs. GPT的架构差异)。
2. **微调实战案例**(基于特定数据集的完整流程)。
3. **可视化注意力权重**的工具与方法。