NLP学习笔记12:预训练模型——从 BERT 到 GPT 与 T5
作者:Ye Shun
日期:2026-04-19
一、前言
如果说早期 NLP 模型更像“为某一个任务单独训练一个模型”,
那么预训练模型的出现,改变了整个自然语言处理的工作方式。
它的核心变化在于:
- 先用海量通用语料学习语言规律
- 再把已经学到的能力迁移到具体任务上
这种模式通常被概括为:
- 预训练(Pre-training)
- 微调(Fine-tuning)
也正是因为这种范式,NLP 才真正进入了“通用语言模型”时代。
今天我们常见的很多强模型,例如:
- BERT
- RoBERTa
- GPT
- T5
- BART
本质上都建立在预训练思想之上。
这篇笔记将围绕以下几个问题展开:
- 什么是预训练模型
- 为什么它比传统 NLP 方法更强
- 预训练模型的发展经历了哪些阶段
- BERT、GPT、T5 分别代表什么架构思路
- 常见预训练任务有哪些
- 如何在实际任务中使用预训练模型
二、什么是预训练模型
预训练模型(Pre-trained Models)指的是:
先在大规模通用文本数据上进行训练,学习语言的通用表示能力,再在具体任务上进行微调的模型。
这个思路的关键,不是“从零开始学某个任务”,而是:
- 先学习语言本身
- 再适配具体任务
例如,一个模型可能先在海量新闻、网页、书籍和百科文本上学习:
- 词语之间的关系
- 句子结构
- 上下文依赖
- 语义表达规律
然后再把这种能力迁移到:
- 情感分析
- 命名实体识别
- 问答系统
- 文本摘要
- 文本生成
这就是预训练模型的核心价值。
三、预训练模型为什么重要
在预训练模型出现之前,传统 NLP 模型通常存在几个明显问题:
- 每个任务都要单独设计特征
- 需要较多标注数据
- 泛化能力有限
- 不同任务之间难以复用
而预训练模型带来的变化非常大:
1. 减少对标注数据的依赖
标注数据获取往往昂贵,而预训练模型已经提前学到了大量语言知识,因此在下游任务中通常只需要较少标注样本,就能取得不错效果。
2. 降低特征工程成本
过去很多任务要人工设计:
- n-gram 特征
- 词性特征
- 句法特征
- 词典特征
而预训练模型往往可以自动学习这些更高层次的表示。
3. 提高跨任务迁移能力
同一个预训练模型,只需替换输出层或稍作微调,就可以用于很多不同任务。
4. 显著提升开发效率
现在我们做很多 NLP 任务时,第一步不再是“自己设计模型”,而是:
- 选择一个合适的预训练模型
- 在此基础上微调或直接推理
四、传统方法与预训练模型的对比
| 特征 | 传统 NLP 模型 | 预训练模型 |
|---|---|---|
| 数据需求 | 需要较多标注数据 | 少量标注数据也可取得较好效果 |
| 训练方式 | 从零开始训练 | 预训练 + 微调 |
| 特征来源 | 依赖人工特征工程 | 自动学习表示 |
| 泛化能力 | 多为任务特定 | 具有较强迁移能力 |
| 开发效率 | 相对较低 | 相对更高 |
简单来说,预训练模型让我们从“任务中心”转向了“语言能力中心”。
五、预训练模型的发展历程
预训练思想不是一夜之间成熟的,而是经历了几个阶段。
1. 词向量时代
代表模型包括:
- Word2Vec
- GloVe
- FastText
这个阶段的主要贡献是:
- 把词表示成低维稠密向量
- 让模型具备一定语义表示能力
例如:
- “国王”和“王后”在向量空间里是接近的
- “中国”和“北京”也会形成一定关系
但这一阶段仍有明显局限:
- 词向量是静态的
- 同一个词在不同上下文中的表示相同
- 无法很好处理一词多义
例如“苹果”:
- 在“我喜欢吃苹果”中指水果
- 在“苹果发布了新手机”中指公司
静态词向量无法区分这两种含义。
2. 上下文感知表示阶段
代表模型包括:
- ELMo
- ULMFiT
这一阶段的突破是:
- 词表示开始依赖上下文
- 同一个词在不同句子中会有不同表示
这使模型开始真正具备“动态理解上下文”的能力。
不过这一阶段虽然重要,但真正把预训练推向主流的,是 Transformer 架构的出现。
3. Transformer 预训练阶段
从 BERT、GPT 开始,预训练模型进入高速发展阶段。
这个阶段的几个关键特征是:
- 基于 Transformer 架构
- 可以在更大规模语料上训练
- 更适合迁移学习
- 在多个任务上取得显著提升
这也是现代预训练模型的主流形态。
六、三类主流预训练模型架构
从整体架构来看,预训练模型大致可以分为三类。
1. Encoder 架构:BERT 系列
典型代表:
- BERT
- RoBERTa
- ALBERT
- DeBERTa
这类模型通常只使用 Transformer 的Encoder部分。
特点:
- 双向建模上下文
- 擅长理解类任务
- 特别适合分类、序列标注、抽取式问答等任务
例如:
- 文本分类
- 情感分析
- 命名实体识别
- 句子匹配
可以把 BERT 理解为:
一个更擅长“读懂文本”的预训练模型
2. Decoder 架构:GPT 系列
典型代表:
- GPT
- GPT-2
- GPT-3
- GPT-4 及其后续生成模型
这类模型通常只使用 Transformer 的Decoder部分,采用自回归方式建模:
- 根据前面的 token 预测下一个 token
特点:
- 单向生成
- 擅长续写和生成
- 更适合开放式文本生成任务
例如:
- 内容创作
- 对话生成
- 代码生成
- 长文本续写
可以把 GPT 理解为:
一个更擅长“持续生成文本”的预训练模型
3. Encoder-Decoder 架构:T5 / BART
典型代表:
- T5
- BART
这类模型同时包含:
- 编码器
- 解码器
它们特别适合序列到序列任务,例如:
- 机器翻译
- 文本摘要
- 改写
- 问答生成
可以把这类模型理解为:
既能理解输入,又能高质量生成输出的模型
七、常见预训练任务
预训练模型之所以强,不只是模型大,更重要的是它们在预训练阶段做了非常关键的任务设计。
1. 语言模型(Language Modeling, LM)
最经典的预训练任务之一是:
- 根据前文预测下一个词
公式可以写作:
P(wt∣w1,w2,...,wt−1)P(w_t \mid w_1, w_2, ..., w_{t-1})P(wt∣w1,w2,...,wt−1)
这种方式最典型的代表就是 GPT 系列。
例如:
- 输入:“预训练模型真的很”
- 输出预测:“强”
2. 掩码语言模型(Masked Language Model, MLM)
MLM 是 BERT 的经典训练方式。
做法是:
- 随机遮住句子中的一部分 token
- 让模型根据上下文恢复它们
例如:
- 原句:“预训练模型很强大”
- 输入:“预训练 [MASK] 很强大”
- 目标:“模型”
MLM 的优点是:
- 可以同时利用左右上下文
3. 下一句预测(NSP)
BERT 原始版本还设计了Next Sentence Prediction:
- 输入两个句子
- 判断它们是否在原文中相邻
例如:
正样本:
- 句子 A:“预训练模型很强大”
- 句子 B:“它们能够迁移到很多任务中”
负样本:
- 句子 A:“预训练模型很强大”
- 句子 B:“今天下午天气不错”
这个任务的目标是帮助模型学习句间关系。
4. 其他预训练任务
随着模型发展,研究者也提出了更多任务,例如:
- RTD(Replaced Token Detection):判断一个 token 是否被替换过
- SOP(Sentence Order Prediction):判断句子顺序是否正确
- Span Corruption:遮住一段连续文本再恢复
- Denoising Autoencoding:对被破坏的文本进行重建
这些任务的核心目标都一致:
- 让模型在大规模数据中学会语言结构和语义规律
八、BERT、GPT、T5 的典型区别
这是一个非常常见、也非常重要的问题。
| 模型 | 架构 | 建模方式 | 更擅长的任务 |
|---|---|---|---|
| BERT | Encoder | 双向理解 | 分类、NER、匹配、抽取 |
| GPT | Decoder | 自回归生成 | 对话、写作、续写、代码生成 |
| T5 | Encoder-Decoder | 输入到输出转换 | 翻译、摘要、问答、改写 |
如果用一句话概括:
- BERT 更像阅读理解高手
- GPT 更像连续写作高手
- T5 更像输入输出转换高手
九、如何使用预训练模型
现在最常见的实践方式,是借助 Hugging Face Transformers。
1. 直接调用 pipeline
对于很多常见任务,我们甚至不需要手动搭模型,直接用pipeline就可以快速体验:
fromtransformersimportpipeline classifier=pipeline("sentiment-analysis")result=classifier("预训练模型真是太棒了!")print(result)这种方式适合:
- 教学演示
- 快速验证思路
- 小规模原型开发
2. 加载预训练模型并微调
如果要做正式任务,一般会:
- 加载预训练模型
- 准备任务数据集
- 添加任务输出层
- 进行微调训练
例如:
fromtransformersimportBertForSequenceClassification,Trainer model=BertForSequenceClassification.from_pretrained("bert-base-chinese")# 训练数据和参数略trainer=Trainer(model=model,args=training_args,train_dataset=train_dataset)trainer.train()这就是最典型的“预训练 + 微调”流程。
十、常见应用场景
预训练模型几乎已经覆盖了现代 NLP 的大多数核心任务。
1. 文本分类
例如:
- 情感分析
- 垃圾邮件检测
- 新闻分类
- 意图识别
2. 序列标注
例如:
- 命名实体识别
- 词性标注
- 信息抽取
3. 问答系统
例如:
- 抽取式问答
- 阅读理解
- 开放域问答
4. 文本生成
例如:
- 文本摘要
- 对话系统
- 文案生成
- 代码补全
5. 文本匹配与相似度
例如:
- 句子相似度
- 语义检索
- 问题匹配
十一、实践中的一些建议
预训练模型虽然强大,但在实际使用中仍然有不少工程细节需要注意。
1. 模型选择要与任务匹配
一般来说:
- 分类与理解类任务优先考虑 BERT 类模型
- 生成类任务优先考虑 GPT 类模型
- 序列到序列转换任务优先考虑 T5 / BART
2. 资源受限时优先考虑轻量模型
如果显存或计算资源有限,可以考虑:
- DistilBERT
- TinyBERT
- ALBERT
- MiniLM
这些模型虽然更小,但在很多任务上依然有不错表现。
3. 微调时学习率通常要小
因为预训练模型已经学到了较好的参数,微调阶段如果学习率过大,容易破坏已有知识。
常见起点通常在:
2e-53e-55e-5
4. 注意输入长度限制
很多模型默认有最大长度,例如:
- 128
- 256
- 512
文本过长时需要:
- 截断
- 分段
- 滑窗
- 使用适合长文本的模型
5. 训练时注意过拟合
尤其在小数据集上微调时,可以结合:
- 验证集监控
- Early Stopping
- 权重衰减
- Dropout
十二、预训练模型带来的更深层变化
预训练模型真正改变的,不只是模型效果。
它改变的是我们做 NLP 的思路:
过去更多是:
- 围绕任务设计模型
现在更多是:
- 围绕通用模型适配任务
这种转变影响非常深远,因为它让 NLP 从“任务分散优化”走向了“统一能力平台”。
后来更进一步的发展是:
- 大语言模型
- 指令微调
- 对齐训练
- 多模态预训练
这些都可以看作是预训练思想的自然延伸。
十三、未来发展方向
预训练模型仍在快速演进,常见的发展方向包括:
1. 更大规模
模型参数、训练语料和上下文长度都在不断增长。
2. 多模态融合
不仅处理文本,还结合:
- 图像
- 音频
- 视频
- 结构化数据
3. 更高效的训练与推理
例如:
- 模型蒸馏
- 量化
- 稀疏化
- 参数高效微调(PEFT)
4. 领域适应
越来越多模型开始针对垂直领域做预训练,例如:
- 医疗
- 法律
- 金融
- 科研
5. 伦理与安全
预训练模型能力越强,越需要关注:
- 偏见问题
- 幻觉问题
- 毒性输出
- 数据合规
十四、总结
预训练模型是现代 NLP 最重要的基础技术之一。
它的核心思想可以概括为:
- 先在大规模数据上学习通用语言能力
- 再把这种能力迁移到具体任务
从发展路径来看,大致经历了:
- 静态词向量阶段
- 上下文感知表示阶段
- Transformer 预训练阶段
从模型类型来看,又可以分为:
- BERT 类 Encoder 模型
- GPT 类 Decoder 模型
- T5/BART 类 Encoder-Decoder 模型
理解预训练模型的重要性在于:
- 它几乎是现代 NLP 的共同基础
- 很多下游任务本质上都建立在预训练能力之上
- 它也是理解大语言模型的重要前置知识
如果前面的词向量、RNN、Attention、Transformer 是在学习“模型结构”,
那么预训练模型这一章,真正告诉我们的是:
为什么现代 NLP 不再从零开始,而是从通用语言能力出发。
十五、参考学习方向
如果你想继续往下写,这篇后面很自然可以接:
- BERT 预训练细节解析
- GPT 自回归生成机制
- T5:Text-to-Text 统一框架
- 参数高效微调(LoRA / Adapter)
- 大语言模型与传统预训练模型的关系