BERT
概述
BERT(Bidirectional Encoder Representations from Transformers)是由Google在2018年提出的基于Transformer架构的预训练语言模型。其核心创新在于双向上下文建模,通过掩码语言模型(MLM)和下一句预测(NSP)任务进行预训练,显著提升了自然语言处理任务的性能。
核心特点
- 双向Transformer结构
与传统单向语言模型(如GPT)不同,BERT通过同时编码左右上下文信息,实现对文本的深层理解。 - 预训练-微调范式
- 预训练阶段:在大规模无标注语料上训练通用语言表示
- 微调阶段:通过少量标注数据适配下游任务
- 多任务学习
- 掩码语言模型(MLM):随机遮盖15%的token进行预测
- 下一句预测(NSP):判断两个句子是否连续
模型架构
| 配置 | BERT-Base | BERT-Large |
|---|---|---|
| 隐藏层维度 | 768 | 1024 |
| Transformer层数 | 12 | 24 |
| 注意力头数 | 12 | 16 |
| 参数量 | 110M | 340M |
关键技术
- WordPiece分词
解决OOV(Out-of-Vocabulary)问题,将单词拆分为子词单元# 示例:"unhappiness" → ["un", "##happi", "##ness"] - 位置编码
通过绝对位置嵌入保留序列顺序信息 - 注意力掩码
处理变长输入时屏蔽填充token的影响
应用场景
- 文本分类(情感分析、主题分类)
- 命名实体识别(NER)
- 问答系统(SQuAD基准)
- 文本摘要
- 语义相似度计算
变体与改进
- RoBERTa:优化训练策略(更大批次/更长训练)
- ALBERT:参数共享降低计算量
- DistilBERT:知识蒸馏压缩模型
- 领域适配版本:
- BioBERT(生物医学)
- SciBERT(科学文献)
代码示例(HuggingFace实现)
from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained('bert-base-uncased')
inputs = tokenizer("Hello world!", return_tensors="pt")
outputs = model(**inputs)
性能对比
在GLUE基准测试中的典型表现:
| 模型 | 准确率(avg) |
|---|---|
| BERT-Base | 80.5% |
| BERT-Large | 82.5% |
| 人类基线 | 87.1% |
局限性
- 计算资源消耗大
- 对长文本处理效率低(最大512token限制)
- 预训练与微调阶段的目标差异
创新启示:BERT的成功证明了大规模预训练+领域微调范式的有效性,推动了"预训练大模型+下游适配"的研究范式变革。
该内容包含技术细节、架构说明、实践指导和前沿发展,可作为教材或技术参考书的完整章节内容。需要扩展时可增加:
1. 具体任务的微调案例
2. 不同变体的架构对比图
3. 训练过程的优化技巧