BERT(Bidirectional Encoder Representations from Transformers)是Google于2018年提出的预训练语言模型,通过双向上下文建模显著提升了自然语言处理任务的性能。以下是对BERT架构的详细解析:
1. 核心架构
BERT基于Transformer的编码器(Encoder)构建,核心是多层自注意力机制(Self-Attention)和前馈神经网络(Feed-Forward Network)的堆叠。
1.1 Transformer编码器层
- 自注意力机制(Self-Attention):
每个词通过Query、Key、Value向量计算与其他词的关联权重,捕捉双向上下文依赖关系。 - 多头注意力(Multi-Head Attention):将注意力拆分为多个子空间(如12个头),并行学习不同语义模式。
- 前馈神经网络(FFN):
每个注意力层后接两层全连接层(中间层通常扩大4倍,如768→3072→768),通过非线性激活(如GELU)增强表达能力。 - 残差连接与层归一化:
每个子层(注意力、FFN)后应用残差连接(Residual Connection)和层归一化(LayerNorm),缓解梯度消失。
2. 输入表示
BERT的输入由词嵌入(Token Embeddings)、段落嵌入(Segment Embeddings)和位置嵌入(Position Embeddings)三部分相加构成:
1. Token Embeddings:
- 使用WordPiece分词(解决未登录词问题,如“playing”拆分为“play”+“##ing”)。
- 特殊标记:[CLS]
(分类任务)、[SEP]
(分隔句子)、[MASK]
(掩码)。
2. Segment Embeddings:
区分两个句子(如问答对),用0和1标记不同段落。
3. Position Embeddings:
学习式位置编码(非Transformer的正弦函数),支持最长512个token。
输入示例:
[CLS] Paris is the capital of France. [SEP] It is located in Europe. [SEP]
3. 预训练任务
BERT通过无监督预训练学习通用语言表示,包含两个关键任务:
3.1 掩码语言模型(Masked Language Model, MLM)
- 随机掩盖输入中15%的token(其中80%替换为
[MASK]
,10%替换为随机词,10%保持不变)。 - 模型通过上下文预测被掩盖的词,实现双向语义理解。
3.2 下一句预测(Next Sentence Prediction, NSP)
- 输入两个句子A和B,预测B是否是A的下一句。
- 训练数据中50%为连续句子,50%为随机选取的句子。
注:后续研究(如RoBERTa)发现NSP任务贡献有限,部分模型已弃用。
4. 模型参数
- BERT-base:12层Transformer编码器,12个注意力头,隐藏层维度768(参数量约110M)。
- BERT-large:24层,16个注意力头,隐藏层维度1024(参数量约340M)。
5. 微调(Fine-tuning)
预训练后,BERT可通过少量任务相关数据微调,适应不同下游任务:
- 文本分类:取[CLS]
标记的输出向量接分类器。
- 问答(QA):输出答案在文本中的起止位置。
- 序列标注(如NER):对每个token的输出向量进行分类。
6. 优缺点分析
优点
- 双向上下文建模:克服了GPT等单向模型的局限。
- 通用性强:适用于多种NLP任务,减少任务特定结构设计。
- 迁移学习高效:预训练模型可通过微调快速适配新任务。
缺点
- 计算资源消耗大:预训练需大规模算力。
- 长文本处理受限:最大输入长度通常为512 token。
- 预训练与微调不一致:
[MASK]
标记在微调时不存在,可能影响性能(后续模型如RoBERTa优化了MLM策略)。
7. 关键变体与演进
- RoBERTa:移除NSP,动态掩码,更大批次训练。
- ALBERT:参数共享(减少参数量),句序预测(SOP)替代NSP。
- DistilBERT:知识蒸馏压缩模型,保持90%性能,体积减小40%。
- 跨语言模型(mBERT):多语言联合预训练,支持跨语言迁移。
8. 应用场景
- 文本分类、情感分析
- 问答系统(如SQuAD)
- 命名实体识别(NER)
- 语义相似度计算
- 机器阅读理解
总结
BERT通过Transformer编码器和双向预训练任务,革新了NLP领域,成为迁移学习的里程碑。尽管后续模型在效率或性能上有所提升,BERT的核心思想(双向上下文、预训练-微调范式)仍是现代语言模型的基础。