一、什么是预训练模型?
预训练模型(Pre-trained Model)是指在大规模语料(如维基百科、新闻语料、社交网络数据)上预先训练好的通用语言模型。它们捕捉了语言的语义、结构和上下文信息,可以迁移到下游任务,如分类、问答、翻译等。
二、预训练模型的两阶段流程
阶段 | 说明 |
---|---|
预训练阶段 | 使用无监督/自监督学习,在海量文本上学习语言规律 |
微调阶段 | 在小数据集上做具体任务(如情感分析) |
常见预训练任务:
-
Masked Language Modeling(BERT类)
-
Next Sentence Prediction
-
Causal Language Modeling(GPT类)
三、主流模型分类与代表
1. BERT 系列(双向编码器)
模型 | 发布机构 | 特点 |
---|---|---|
BERT | 双向 Transformer,掀起预训练热潮 | |
RoBERTa | 改进 BERT 训练策略,效果更强 | |
ALBERT | 参数共享 + 分解嵌入,提升效率 | |
Chinese-BERT | 哈工大 | 针对中文优化,包含拼音、部首等多信息 |
适用任务:文本分类、问答、句子对匹配、实体识别等
2. GPT 系列(单向生成器)
模型 | 发布机构 | 特点 |
---|---|---|
GPT | OpenAI | 单向语言建模,擅长文本生成 |
GPT-2 | OpenAI | 更强的生成能力,引发文本生成革命 |
GPT-3 / GPT-4 | OpenAI | 万能大模型,支持少样本/零样本学习 |
适用任务:文本生成、对话、摘要、代码生成等
3. T5 / mT5 系列(文本到文本)
模型 | 发布机构 | 特点 |
---|---|---|
T5 | 所有任务转为文本生成(Text-to-Text) | |
mT5 | 多语言版本,适用于跨语言任务 |
适用任务:翻译、摘要、分类、QA、多任务学习等
4. DeBERTa 系列(增强表示)
模型 | 发布机构 | 特点 |
---|---|---|
DeBERTa | Microsoft | 相对位置编码 + 解耦注意力,提升性能 |
DeBERTa-v3 | Microsoft | 更强表达力,广泛应用于工业级 NLP 系统 |
适用任务:分类、NLI、QA、实体识别等
5. ERNIE 系列(知识增强)
模型 | 发布机构 | 特点 |
---|---|---|
ERNIE | 百度 | 融合结构知识(如词义、实体) |
ERNIE 4.0 | 百度 | 多模态 + 中文表现优异 |
适用任务:中文语义理解、知识问答、跨模态任务等
6. XLNet(自回归结合自编码)
模型 | 发布机构 | 特点 |
---|---|---|
XLNet | 结合 BERT 和 GPT 优势,支持顺序建模 |
四、模型对比概览表
模型 | 模型类型 | 适用语言 | 参数量 | 特点 |
---|---|---|---|---|
BERT | 编码器 | 多语言 | 110M+ | 双向表示,稳健可靠 |
RoBERTa | 编码器 | 英语 | 125M+ | 更强的训练技巧 |
ALBERT | 编码器 | 英语 | 更小 | 更快更轻量 |
GPT-2 | 解码器 | 英语 | 117M+ | 优秀生成能力 |
GPT-3/4 | 解码器 | 多语言 | 175B+/1T+ | 万能模型,零样本学习 |
T5 | 编码器+解码器 | 英语 | 220M+ | 统一任务格式 |
DeBERTa | 编码器 | 多语言 | 180M+ | 表达力强,适合工业场景 |
mT5 | 编码器+解码器 | 多语言 | 数亿~十亿 | 跨语言任务首选 |
ERNIE | 编码器 | 中文 | 数亿 | 中文知识注入,提升语义理解 |
五、如何选择适合自己的预训练模型?
场景/任务 | 推荐模型 |
---|---|
中文分类、问答 | Chinese-BERT、RoFormer、ERNIE |
英文文本生成 | GPT-2、GPT-3、T5 |
多语言翻译 | mT5、XLM-R |
精度要求高 | DeBERTa-v3、RoBERTa-large |
轻量级部署 | ALBERT、TinyBERT、DistilBERT |
少样本训练 | T5、GPT-3、DeBERTa |
六、示例:使用 BERT 微调文本分类
from transformers import BertTokenizer, BertForSequenceClassification
from transformers import Trainer, TrainingArguments
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertForSequenceClassification.from_pretrained("bert-base-uncased")
inputs = tokenizer("This is a test sentence.", return_tensors="pt")
outputs = model(**inputs)
print(outputs.logits)
七、总结建议
建议方向 | 实践建议 |
---|---|
初学者 | 选择 BERT、RoBERTa 等结构清晰、资料丰富的模型 |
中文任务 | 使用 Chinese-BERT、ERNIE、RoFormer 等 |
多语言处理 | 选择 mBERT、mT5、XLM-R |
推理和逻辑任务 | 使用 DeBERTa、RoBERTa、T5 |
文本生成 | 使用 GPT 系列、T5 |