Transformers 库介绍
Transformers 是由 Hugging Face 公司开发的开源 Python 库,主要用于处理基于 Transformer 架构的预训练模型。该库自 2018 年推出以来,已成为自然语言处理 (NLP)、计算机视觉 (CV)、音频处理、多模态任务等领域的事实标准工具。它支持数千个预训练模型(如 BERT、GPT、T5、ViT 等),并提供易用的 API 来加载、微调和部署这些模型。Transformers 库的核心理念是“模型即服务”,允许开发者快速访问 Hugging Face Model Hub 中的模型,而无需从头训练。
截至 2025 年,该库的最新版本(假设基于我的知识更新,大约在 v4.40+)支持 PyTorch、TensorFlow 和 JAX 后端,兼容 CPU/GPU/TPU 等硬件。它强调社区驱动,用户可以轻松上传和分享自定义模型。Transformers 的优势包括:
- 易用性:从安装到推理只需几行代码。
- 兼容性:支持多种框架和任务。
- 社区支持:Hugging Face Hub 上有超过 500,000 个模型和数据集。
- 扩展性:适用于研究、生产环境和边缘设备。
该库不限于 NLP,还扩展到视觉(如 Vision Transformer)、音频(如 Whisper)和多模态(如 CLIP)模型。
Transformers 的主要组成
Transformers 库由多个模块和组件构成,这些组件协同工作,提供从数据预处理到模型训练的全流程支持。下面我用表格形式列出主要组成及其功能、示例类/函数,便于比较:
组件名称 | 描述 | 主要功能 | 示例类/函数 |
---|---|---|---|
Models | 核心组件,提供各种 Transformer 架构的预训练模型实现。支持编码器(如 BERT)、解码器(如 GPT)和编码器-解码器(如 T5)模型。 | 加载预训练权重、进行前向传播、自定义层。支持自动类(AutoModel)来根据模型名称动态加载。 | BertModel , GPT2Model , T5ForConditionalGeneration , AutoModelForSequenceClassification |
Tokenizers | 用于文本预处理,将输入文本转换为模型可处理的 token ID、注意力掩码等。支持多种分词算法(如 WordPiece、BPE、SentencePiece)。 | 分词、编码/解码、特殊 token 处理。快速 tokenizer 使用 Rust 后端,提高效率。 | BertTokenizer , GPT2Tokenizer , AutoTokenizer |
Pipelines | 高层抽象 API,用于快速进行常见任务的推理,无需手动构建模型。支持零样本学习。 | 端到端任务如分类、生成、问答。自动处理 tokenizer 和 model。 | pipeline("text-classification") , pipeline("question-answering") , pipeline("summarization") |
Trainer | 训练和评估组件,简化模型微调过程。集成分布式训练、混合精度等。 | 训练循环、评估指标、超参数搜索。与 Datasets 库无缝集成。 | Trainer , TrainingArguments |
Configurations | 模型配置类,存储超参数如隐藏层大小、注意力头数。 | 初始化模型时使用,支持从预训练加载或自定义。 | BertConfig , AutoConfig |
Processors | 数据处理组件,主要用于特定任务如语音识别或图像分类的预处理。 | 特征提取、归一化。与 tokenizer 类似,但针对非文本模态。 | Wav2Vec2Processor , ViTImageProcessor |
Optimizers & Schedulers | 优化器和学习率调度器,集成于 Trainer 中。 | 自定义优化策略,如 AdamW、线性调度。 | AdamW , get_linear_schedule_with_warmup |
Generation Utilities | 生成相关工具,用于文本生成任务。 | 控制生成如 beam search、top-k sampling。 | generate() , GreedySearchDecoderOnlyOutput |
其他辅助模块 | 如回调(Callbacks)、钩子(Hooks)和集成(如与 PEFT 的参数高效微调)。 | 监控训练、自定义行为。 | EarlyStoppingCallback , PEFT 集成 |
这些组件是模块化的,可以独立使用或组合。例如,Models 和 Tokenizers 是基础,而 Pipelines 是为初学者设计的快捷方式。Transformers 还与 Hugging Face 的其他库(如 Datasets、Accelerate、PEFT)紧密集成,形成生态系统。
如何使用 Transformers
使用 Transformers 库非常简单,以下是逐步指南。假设你有 Python 环境(推荐 3.8+),并使用 PyTorch 或 TensorFlow 作为后端。
1. 安装
通过 pip 安装核心库:
pip install transformers
如果需要特定后端或额外功能:
- PyTorch:
pip install transformers[torch]
- TensorFlow:
pip install transformers[tf]
- 完整安装(包括 tokenizers、sentencepiece 等):
pip install transformers[sentencepiece,torch]
对于数据集支持,额外安装 datasets
:pip install datasets
。
2. 基本使用示例
Transformers 支持“从 Hub 加载”的模式,直接从 Hugging Face Model Hub 下载模型。
示例 1: 使用 Pipeline 进行文本分类(零代码模型构建)
from transformers import pipeline
# 加载情感分析 pipeline(默认使用 distilbert-base-uncased-finetuned-sst-2-english 模型)
classifier = pipeline("sentiment-analysis")
# 推理
result = classifier("I love using Transformers library!")
print(result) # 输出: [{'label': 'POSITIVE', 'score': 0.9998}]
示例 2: 手动加载模型和 tokenizer(更灵活)
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# 指定模型名称(从 Hub 自动下载)
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
# 准备输入
text = "Transformers are amazing for NLP tasks."
inputs = tokenizer(text, return_tensors="pt") # 返回 PyTorch 张量
# 推理
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
prediction = torch.argmax(logits, dim=-1).item()
label = model.config.id2label[prediction]
print(f"Label: {label}") # 输出: Label: POSITIVE
示例 3: 模型微调(使用 Trainer)
假设你有数据集(如从 Datasets 库加载),用于二分类任务。
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset
# 加载数据集
dataset = load_dataset("glue", "mrpc") # 示例数据集
# 加载 tokenizer 和模型
model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
# 预处理函数
def preprocess(examples):
return tokenizer(examples["sentence1"], examples["sentence2"], truncation=True, padding="max_length")
tokenized_dataset = dataset.map(preprocess, batched=True)
# 训练参数
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=8,
evaluation_strategy="epoch",
save_strategy="epoch",
load_best_model_at_end=True,
)
# Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_dataset["train"],
eval_dataset=tokenized_dataset["validation"],
)
# 开始训练
trainer.train()
# 保存模型
trainer.save_model("./fine_tuned_model")
示例 4: 生成任务(如文本生成)
from transformers import pipeline
generator = pipeline("text-generation", model="gpt2")
result = generator("Once upon a time,", max_length=50, num_return_sequences=1)
print(result[0]["generated_text"])
3. 高级使用提示
- 多模态:对于图像,使用
AutoImageProcessor
和AutoModelForImageClassification
。 - 自定义:继承基类如
PreTrainedModel
来构建新模型。 - 部署:使用
torchscript
导出模型,或集成到 FastAPI/Gradio 中。 - 性能优化:启用
torch.compile()
或使用 Accelerate 库进行分布式训练。 - 常见错误处理:确保输入形状匹配;如果模型太大,使用
device_map="auto"
自动分配到多 GPU。 - 资源:参考官方文档(https://huggingface.co/docs/transformers),或 Model Hub 搜索特定模型。
通过这些组件和示例,你可以从简单推理到复杂微调轻松上手。