从Transformer到大模型:主流预训练模型架构演进与Transformers库实战指南
目录
一、 引言:预训练与迁移学习范式
二、 Transformer:奠定基石的架构
三、 三大主流模型范式:编码器、解码器与编码器-解码器
四、 自编码模型(Encoder-Only):以BERT为核心
1. BERT
2. BERT的演进与变体
五、 自回归模型(Decoder-Only):从GPT到生成式AI
1. GPT系列
2. 其他重要自回归模型
六、 序列到序列模型(Encoder-Decoder):以T5为例
1. T5
2. BART
七、 预训练模型Transformers库选择与调用指南
1. 核心组件:AutoModel与Model Head
2. 如何选择模型?一张决策指南表
3. 调用实战:以文本分类为例
4. 选择建议
八、 总结与展望
一、 引言:预训练与迁移学习范式
在传统的自然语言处理(NLP)中,我们需要为每个下游任务(如情感分析、问答)从头训练一个模型,这严重依赖大量人工标注数据,成本高昂且知识难以复用。预训练+微调(Pre-training + Fine-tuning)范式的出现彻底改变了这一局面。
其核心思想是:首先在海量无标注文本数据上,通过自监督学习任务(如预测下一个词、填空)训练一个具有强大语言理解能力的基础模型;然后,将该模型在特定任务的少量标注数据上进行微调,即可快速适配到各种下游任务。这一范式大幅降低了数据需求,并催生了BERT、GPT等里程碑式的模型。
二、 Transformer:奠定基石的架构
发布时间:2017年(论文《Attention Is All You Need》)
核心功能:提出了一种完全基于自注意力机制的神经网络架构,用于处理序列数据,特别在机器翻译任务上取得了突破性成果。
架构详解: Transformer摒弃了传统的RNN和CNN结构,其核心是自注意力机制(Self-Attention)和多头注意力(Multi-Head Attention),能够高效地捕捉序列中的长距离依赖关系。
一个标准的Transformer由编码器(Encoder)和解码器(Decoder)堆叠而成:
- 编码器:负责理解输入序列。它由N个相同的层堆叠而成,每层包含一个多头自注意力子层和一个前馈神经网络子层,每个子层都使用残差连接和层归一化。
- 解码器:负责生成输出序列。它同样由N个相同的层堆叠而成,每层除了具有与编码器类似的两个子层外,还额外增加了一个交叉注意力(Cross-Attention)子层,用于关注编码器的输出。
输入表示: 模型的输入由三部分嵌入相加而成:词嵌入(Token Embedding)、位置编码(Positional Encoding)和段嵌入(Segment Embedding,用于区分句子对)。位置编码使用正弦/余弦函数生成,为模型提供序列顺序信息。
历史意义:Transformer的并行计算能力和强大的特征抽取能力,为后续所有大规模预训练模型提供了统一的架构基础。
三、 三大主流模型范式:编码器、解码器与编码器-解码器
基于Transformer的组件使用方式,衍生出三种主流架构范式:
| 范式 | 结构 | 注意力机制 | 代表模型 | 预训练目标 | 典型任务 |
|---|---|---|---|---|---|
| 自编码模型 | Encoder-Only | 双向注意力(能看到完整上下文) | BERT, RoBERTa, ALBERT | 掩码语言模型(MLM) | 文本分类、命名实体识别、问答 |
| 自回归模型 | Decoder-Only | 单向注意力(只能看到上文) | GPT系列, LLaMA | 因果语言模型(CLM) | 文本生成、对话系统 |
| 序列到序列模型 | Encoder-Decoder | 编码器双向,解码器单向+交叉注意力 | T5, BART | 去噪自编码(如Span Corruption) | 机器翻译、文本摘要 |
四、 自编码模型(Encoder-Only):以BERT为核心
1. BERT
- 发布时间:2018年10月(Google)
- 核心功能:通过双向Transformer编码器学习深度的上下文相关语义表示。
- 架构与创新:
- 双向上下文:与GPT的单向不同,BERT在编码每个词时同时利用其左侧和右侧的上下文信息。
- 预训练任务:
- 掩码语言模型(MLM):随机遮盖输入中15%的词元,让模型根据上下文进行预测。
- 下一句预测(NSP):判断两个句子是否是原文中的连续句,以学习句子间关系。
- 输入表示:由词嵌入、可学习的位置嵌入和段嵌入相加而成,并加入特殊标记
[CLS](用于分类任务)和[SEP](分隔句子)。
- 微调方式:对于分类任务,使用
[CLS]位置的输出向量接一个分类层;对于序列标注(如命名实体识别),使用每个词元位置的输出向量分别进行分类。
2. BERT的演进与变体
- RoBERTa (2019):对BERT进行了更鲁棒的优化。去除了NSP任务,使用了更多数据(160GB vs 16GB)、更大批次和更长训练时间,并采用动态掩码机制,性能显著提升。
- ALBERT (2019):专注于参数效率。通过因式分解嵌入参数化(将大的词嵌入矩阵分解为两个小矩阵)和跨层参数共享(所有Transformer层共享同一套参数)大幅减少模型参数,同时保持性能。
- XLNet (2019):针对BERT的MLM任务中
[MASK]符号在微调时不存在导致预训练-微调不一致的问题,提出了排列语言模型(PLM),通过随机排列序列顺序来实现双向上下文学习,属于广义自回归模型。
五、 自回归模型(Decoder-Only):从GPT到生成式AI
1. GPT系列
- GPT-1 (2018年6月):首个成功实践“预训练+微调”范式的自回归模型。使用Transformer解码器进行单向的生成式预训练,即根据前文预测下一个词元。
- GPT-2 (2019):参数规模扩大,并展示了强大的零样本学习(Zero-Shot)能力,即不经过微调也能完成多种任务。
- GPT-3 (2020):参数达到1750亿,进一步放大了模型的少样本学习(Few-Shot)能力,通过提示(Prompt)即可完成任务,引领了提示工程的风潮。
- 架构核心:始终是单向的Transformer解码器块(包含掩码自注意力),擅长生成连贯的文本。
2. 其他重要自回归模型
- LLaMA系列 (Meta):强调高效和开源,提供了多种参数规模的模型,推动了开源大模型社区的发展。
- 特点:这类模型是当前文本生成、对话系统的主流选择。
六、 序列到序列模型(Encoder-Decoder):以T5为例
1. T5
- 发布时间:2019年10月(Google)
- 核心功能与创新:提出“文本到文本”(Text-to-Text)的统一框架。所有NLP任务都被转化为:给定一段文本输入,生成一段文本输出的形式。例如,翻译任务的输入是“translate English to German: The house is wonderful.”,输出是“Das Haus ist wunderbar.”。
- 预训练任务:采用破坏跨度预测(Corrupted Span Prediction)。输入文本中的多个连续片段被替换为特殊的哨兵标记(如
<extra_id_0>),模型需要生成这些被破坏的片段内容。 - 优势:统一框架使得模型可以轻松处理分类、生成、摘要等多种任务,只需改变输入文本的格式。
2. BART
- 特点:结合了BERT的双向编码器和GPT的自回归解码器,预训练任务是去噪自编码器,即对输入文本进行多种噪声破坏(如删除、替换、打乱句子顺序),然后训练模型恢复原文,特别擅长文本生成和摘要任务。
七、 预训练模型Transformers库选择与调用指南
Hugging Face的transformers库已成为使用预训练模型的事实标准,它提供了统一的API来加载和调用数千种模型。
1. 核心组件:AutoModel与Model Head
库的设计核心是“一个模型骨干(Backbone)对应多个任务头(Model Head)”。
- 模型骨干:如
BertModel、GPT2Model,负责提取特征。 - 任务头:是连接在骨干后的特定层,用于适配不同任务。例如:
BertForSequenceClassification:用于文本分类(接在[CLS]输出后的线性层)。BertForTokenClassification:用于序列标注(接在每个词元输出后的线性层)。GPT2LMHeadModel:用于语言建模(在输出后接一个线性层映射到词表大小)。
2. 如何选择模型?一张决策指南表
根据你的任务类型和需求来选择模型架构:
| 你的任务是什么? | 推荐模型范式 | Hugging Face模型类示例 | 说明 |
|---|---|---|---|
| 文本分类、情感分析、句子对关系判断 | 自编码模型(Encoder-Only) | BertForSequenceClassification,RobertaForSequenceClassification | 利用[CLS]向量做句子级表示。 |
| 命名实体识别、词性标注、阅读理解(答案抽取) | 自编码模型(Encoder-Only) | BertForTokenClassification,BertForQuestionAnswering | 利用每个词元位置的输出做词级预测。 |
| 文本生成、对话、续写 | 自回归模型(Decoder-Only) | GPT2LMHeadModel,LlamaForCausalLM | 单向生成,是生成任务的首选。 |
| 机器翻译、文本摘要、问答(生成式) | 序列到序列模型(Encoder-Decoder) | T5ForConditionalGeneration,BartForConditionalGeneration | 输入文本,生成另一段文本。 |
| 通用特征提取、句子相似度计算 | 任意模型骨干 | AutoModel.from_pretrained(...) | 直接获取模型的隐藏状态输出,自行设计下游结构。 |
3. 调用实战:以文本分类为例
以下是一个使用transformers库加载BERT进行文本分类的简化代码流程:
from transformers import BertTokenizer, BertForSequenceClassification import torch # 1. 加载预训练的 tokenizer 和模型 tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2) # 2分类 # 2. 输入文本处理 texts = ["This movie is fantastic!", "The service was terrible."] inputs = tokenizer(texts, padding=True, truncation=True, return_tensors="pt") # 3. 前向传播,获取输出 outputs = model(**inputs) logits = outputs.logits # 形状为 [batch_size, num_labels] # 4. 计算预测结果 predictions = torch.argmax(logits, dim=-1) print(predictions) # tensor([1, 0]) 假设1为正面,0为负面微调训练:使用库中的Trainer类可以极大简化训练循环的编写。
4. 选择建议
- 追求SOTA性能:关注Hugging Face模型排行榜(Model Hub),选择在目标任务上评分高的模型。
- 平衡效果与效率:考虑
DistilBERT、TinyBERT等蒸馏模型,或ALBERT等参数高效模型。 - 部署环境受限:优先选择参数量小的模型,或使用量化技术。
八、 总结与展望
从Transformer的横空出世,到BERT、GPT、T5三大范式的确立,再到如今千亿参数大模型的涌现,预训练模型的发展史就是一部追求更强语言智能的历史。自编码模型擅长理解,自回归模型擅长生成,序列到序列模型则提供了统一的转换框架。
Hugging Face的transformers库如同一座桥梁,将这些复杂的模型以简洁、统一的方式呈现给开发者。掌握根据任务选择合适模型范式及对应库中类的能力,已成为现代NLP工程师的核心技能。
未来,模型架构可能会继续融合与创新(如Prefix Decoder的出现),训练方法将更高效(如强化学习对齐),而多模态(融合文本、图像、音频)将成为下一个主战场。理解并跟上这一浪潮,将帮助我们更好地利用AI解决现实世界中的复杂问题。
