1. 预训练语言模型概述
预训练语言模型(Pre-trained Language Models, PLMs)已经成为现代自然语言处理(NLP)领域的基石技术。这些模型通过在大量文本数据上进行自监督学习,能够捕捉语言的深层次统计规律和语义特征。不同于传统的监督学习需要针对每个任务单独训练模型,预训练模型通过"预训练+微调"的范式,显著提升了NLP任务的性能和效率。
1.1 预训练模型的核心价值
预训练模型的核心价值在于其能够学习通用的语言表示。这种表示可以理解为对语言知识的编码,包括但不限于:
- 词汇级别的语义信息(词义、多义词)
- 句法结构(语法规则、依存关系)
- 上下文关联(指代消解、语义连贯)
- 领域知识(特定领域的术语和概念)
这种通用表示通过两种主要方式发挥作用:
- 作为特征提取器:将预训练模型的输出作为下游任务的输入特征
- 通过微调:在预训练模型的基础上,针对特定任务进行参数调整
提示:选择预训练模型时,需要考虑任务类型(理解型还是生成型)、计算资源限制以及领域适配性等因素。
1.2 主流预训练模型分类
当前主流的预训练模型可以按照架构和训练目标分为三大类:
-
仅编码器模型(Encoder-only):
- 代表:BERT、RoBERTa、ALBERT
- 特点:擅长理解任务(分类、实体识别等)
- 训练目标:掩码语言建模(MLM)、下一句预测(NSP)
-
仅解码器模型(Decoder-only):
- 代表:GPT系列、BLOOM
- 特点:擅长生成任务(文本续写、对话等)
- 训练目标:自回归语言建模
-
编码器-解码器模型(Encoder-Decoder):
- 代表:T5、BART
- 特点:擅长序列到序列任务(翻译、摘要等)
- 训练目标:跨度破坏重构(Span Corruption)
这三种架构各有优势,BERT在理解任务上表现优异,GPT在生成任务上独树一帜,而T5则在统一多种NLP任务方面展现出强大潜力。
2. BERT深度解析
BERT(Bidirectional Encoder Representations from Transformers)由Google在2018年提出,彻底改变了NLP领域的研究范式。其核心创新在于通过双向Transformer编码器捕捉上下文信息。
2.1 BERT架构细节
BERT的基础架构是基于Transformer的编码器堆叠。标准BERT有两个版本:
| 模型 | 层数(L) | 隐藏层大小(H) | 注意力头数(A) | 总参数量 |
|---|---|---|---|---|
| BERT-Base | 12 | 768 | 12 | ~1.1亿 |
| BERT-Large | 24 | 1024 | 16 | ~3.4亿 |
每层Transformer包含:
- 多头自注意力机制(Multi-head Self-attention)
- 前馈神经网络(Feed-forward Network)
- 层归一化(Layer Normalization)
- 残差连接(Residual Connection)
在实际应用中,BERT-Base已经能够提供相当不错的性能,而BERT-Large则在资源允许的情况下可以带来更优的表现。
2.2 BERT输入表示
BERT的输入表示是一个精心设计的组合,由三种嵌入向量逐元素相加而成:
code复制Input_embedding = Token_embedding + Position_embedding + Segment_embedding
-
Token嵌入:
- 将每个词/子词映射到固定维度的向量空间
- 使用WordPiece分词器,词汇表约30,000个token
- 对未登录词(OOV)进行子词拆分
-
位置嵌入:
- 表示token在序列中的绝对位置
- 使用可学习的位置向量,最大支持512个token
- 不同于原始Transformer的正弦位置编码
-
片段嵌入:
- 用于区分句子对中的不同句子
- 对于单句输入,所有token使用相同的片段嵌入
- 对于句子对(如问答任务),第一句用"句子A"嵌入,第二句用"句子B"嵌入
2.3 BERT特殊token详解
BERT引入了几个关键的特殊token,它们在模型处理中扮演重要角色:
-
[CLS](Classification):
- 位于每个输入序列的开头
- 在分类任务中,其对应的输出向量常被用作整个序列的表示
- 通过一个额外的分类层实现下游任务
-
[SEP](Separator):
- 用于分隔不同的句子
- 在句子对任务中标记句子边界
- 在单句输入中也需添加在末尾
-
[MASK]:
- 仅在预训练阶段使用
- 用于掩码语言建模任务
- 在微调阶段不应出现
-
[PAD]:
- 用于填充序列至固定长度
- 对应的注意力会被屏蔽
-
[UNK]:
- 表示未知词
- 当遇到词表外的token时使用
2.4 BERT预训练任务
BERT通过两个精心设计的预训练任务学习语言表示:
2.4.1 掩码语言模型(MLM)
MLM任务类似于"完形填空",随机掩盖输入中的部分token,让模型预测被掩盖的内容。具体实现细节:
-
随机选择15%的token进行掩盖处理
- 80%概率替换为[MASK]
- 10%概率替换为随机token
- 10%概率保持原token不变
-
使用交叉熵损失函数计算预测损失
-
全词掩码(WWM)改进:当选中一个子词时,掩盖整个词的所有子词
MLM任务使BERT能够学习深层次的上下文相关表示,但存在预训练-微调不一致的问题(微调时没有[MASK]token)。
2.4.2 下一句预测(NSP)
NSP任务旨在让模型理解句子间关系:
- 构造句子对(A,B),其中:
- 50%情况下B是A的真实下一句
- 50%情况下B是随机选择的句子
- 使用[CLS]位置的输出进行二分类
- 损失函数为二元交叉熵
后续研究发现NSP任务的有效性存在争议,RoBERTa等模型移除了该任务。
2.5 BERT实践技巧
在实际使用BERT时,有几个关键技巧值得注意:
-
层级特征选择:
- 底层特征:更多包含词法、语法信息
- 高层特征:更多包含语义、语境信息
- 对于不同任务,可以尝试:
- 仅使用最后一层
- 最后几层拼接/平均
- 所有层加权组合
-
微调策略:
- 学习率设置:通常比预训练时小1-2个数量级
- 分层学习率:底层使用较小学习率,高层使用较大学习率
- 早停法:防止过拟合
-
计算优化:
- 梯度累积:在batch size受限时模拟大批量训练
- 混合精度训练:减少显存占用,加速训练
- 知识蒸馏:训练小型化学生模型
注意:BERT的最大输入长度为512个token,对于长文档需要采用分段处理或使用专门的长文本模型(如Longformer)。
3. GPT全面剖析
GPT(Generative Pre-trained Transformer)系列模型由OpenAI提出,开创了基于自回归Transformer的大规模语言模型先河。
3.1 GPT架构演进
GPT模型完全基于Transformer解码器构建,采用自回归方式生成文本。其发展经历了几个关键阶段:
-
GPT-1(2018):
- 1.17亿参数
- 基于BooksCorpus(约7,000本书)训练
- 引入"预训练+有监督微调"范式
-
GPT-2(2019):
- 15亿参数
- 更大更高质量的数据集(WebText)
- 展示零样本学习能力
- 因"太强大"而最初未完全开源
-
GPT-3(2020):
- 1750亿参数
- 引入上下文学习(In-context Learning)
- 少样本/零样本性能显著提升
- 商业化API服务
-
后续发展:
- ChatGPT(基于GPT-3.5/GPT-4)
- 加入人类反馈强化学习(RLHF)
- 多模态能力扩展
3.2 GPT核心架构
GPT使用标准的Transformer解码器结构,但有以下关键特点:
-
单向注意力:
- 每个token只能关注前面的token
- 通过注意力掩码实现
- 与BERT的双向注意力形成对比
-
位置前馈:
- 使用可学习的位置嵌入
- 与BERT类似但训练方式不同
-
层归一化位置:
- 前置层归一化(Pre-LN)
- 相比原始Transformer的后置LN更稳定
GPT的训练目标是标准的自回归语言建模,即最大化序列的似然:
L(θ) = Σ log P(x_t | x_<t; θ)
3.3 GPT微调与提示工程
随着GPT模型的发展,其使用方法也经历了演变:
-
有监督微调(GPT-1):
- 在预训练后针对特定任务微调
- 需要标注数据
- 任务特定头部结构
-
零样本学习(GPT-2):
- 直接通过自然语言指令使用模型
- 无需参数更新
- 依赖模型规模和预训练质量
-
上下文学习(GPT-3):
- 在输入中提供少量示例
- 模型通过示例理解任务
- 表现接近有监督微调
对于不同任务类型,GPT的输入构造方式各异:
- 分类任务:添加起始和提取标记
- 蕴含任务:用分隔符拼接前提和假设
- 相似度任务:双向拼接并综合结果
- 多选题任务:分别拼接每个选项
3.4 GPT实践要点
使用GPT模型时需要注意以下关键点:
-
生成控制:
- 温度(Temperature):控制生成多样性
- Top-k/top-p采样:平衡生成质量和多样性
- 重复惩罚:避免重复内容
-
提示设计:
- 明确任务指令
- 提供清晰示例
- 结构化输出要求
- 迭代优化提示
-
计算考量:
- 生成长度影响计算成本
- 大模型需要分布式推理
- 内存带宽是主要瓶颈
提示:对于中文任务,建议使用专门的中文GPT模型(如CPM、PanGu-α等)或进行额外的中文数据微调。
4. T5技术详解
T5(Text-to-Text Transfer Transformer)由Google提出,采用"文本到文本"的统一框架处理各类NLP任务。
4.1 T5核心思想
T5的核心创新在于将所有NLP任务都转化为文本到文本的转换问题:
- 输入:任务描述 + 输入文本
- 输出:目标文本
例如:
- 翻译:输入"translate English to German: Hello world",输出"Hallo Welt"
- 分类:输入"cola sentence: The book is interesting",输出"acceptable"
- 摘要:输入"summarize: long article text...",输出"summary text..."
这种统一框架简化了模型设计和使用流程,使单个模型能够处理多种任务。
4.2 T5模型架构
T5采用标准的编码器-解码器Transformer结构,但有以下几个关键特点:
-
相对位置编码:
- 使用基于分桶的相对位置偏置
- 近距离精确编码,远距离粗略编码
- 参数在所有层间共享
-
跨度破坏预训练:
- 随机选择文本跨度(span)进行掩盖
- 使用唯一的哨兵token标记每个跨度
- 解码器重构被掩盖的原始文本
-
任务前缀:
- 在输入前添加任务描述前缀
- 如"translate English to German:"
- 指导模型选择适当的行为
4.3 T5与BERT/GPT对比
T5与BERT和GPT在多个维度存在差异:
| 特性 | BERT | GPT | T5 |
|---|---|---|---|
| 架构 | 编码器 | 解码器 | 编码器-解码器 |
| 注意力 | 双向 | 单向 | 编码器双向,解码器单向 |
| 预训练目标 | MLM+NSP | 自回归LM | 跨度破坏重构 |
| 典型任务 | 理解类 | 生成类 | 序列到序列 |
| 输入输出 | 单一文本 | 单一文本 | 文本对 |
| 多任务处理 | 需微调 | 需提示 | 原生支持 |
4.4 T5实践应用
使用T5模型时需要注意以下要点:
-
任务前缀设计:
- 保持与预训练时一致
- 清晰明确的任务描述
- 多语言任务添加语言标识
-
生成控制:
- 束搜索(Beam Search)参数调整
- 长度惩罚设置
- 避免重复生成
-
微调策略:
- 多任务联合训练
- 渐进式任务难度
- 平衡不同任务的数据量
T5特别适合需要灵活输入输出的复杂任务,如:
- 问答系统
- 对话生成
- 文本改写
- 多语言翻译
5. 模型选择与应用建议
面对BERT、GPT和T5这三种主流预训练模型,如何根据实际需求做出合适选择?
5.1 任务类型考量
-
理解型任务(分类、实体识别、相似度计算等):
- 优先考虑BERT或其变体
- 对计算资源要求相对较低
- 微调数据需求适中
-
生成型任务(文本续写、对话、创作等):
- GPT系列是自然选择
- 需要更多计算资源
- 提示工程至关重要
-
序列到序列任务(翻译、摘要、问答等):
- T5设计初衷就是为此类任务
- 统一框架简化流程
- 多任务学习潜力大
5.2 资源与成本评估
-
计算资源:
- BERT-Base可在单个GPU上微调
- GPT-2中等规模模型需要多GPU
- T5-large及以上需要TPU/多GPU节点
-
数据需求:
- BERT:数千标注样本可得到不错结果
- GPT:零样本/少样本可能,但微调仍需数据
- T5:多任务数据联合训练效果最佳
-
推理延迟:
- BERT:前向传播快,适合实时系统
- GPT:自回归生成导致延迟随输出长度增加
- T5:编码器-解码器结构计算量较大
5.3 领域适配策略
-
通用领域:
- 直接使用预训练模型
- 可能只需少量微调
-
专业领域:
- 继续预训练(Domain-adaptive PT)
- 领域词汇扩展
- 知识注入(如实体链接)
-
多语言场景:
- 使用多语言BERT(mBERT)
- 或专门的语言模型
- 注意语言不平衡问题
5.4 未来发展趋势
-
模型规模化:
- 参数数量持续增长
- 稀疏专家模型(MoE)
- 更高效的训练方法
-
多模态融合:
- 文本与视觉、语音结合
- 统一的多模态表示
- 跨模态生成能力
-
推理能力提升:
- 链式思考(Chain-of-Thought)
- 程序辅助推理
- 外部知识整合
-
效率优化:
- 模型压缩技术
- 稀疏化与量化
- 硬件感知架构设计
在实际项目中,我通常会先从小规模BERT实验开始,快速验证想法可行性,然后再根据具体需求考虑是否升级到更大模型或切换架构类型。对于生成任务,GPT-3级别的模型虽然强大,但成本和可控性是需要慎重考虑的因素。T5在需要灵活处理多种任务类型的场景下表现出色,特别是当这些任务可以统一为文本转换形式时。