0 0 votes
Article Rating

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]

对于数据集支持,额外安装 datasetspip 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. 高级使用提示

  • 多模态:对于图像,使用 AutoImageProcessorAutoModelForImageClassification
  • 自定义:继承基类如 PreTrainedModel 来构建新模型。
  • 部署:使用 torchscript 导出模型,或集成到 FastAPI/Gradio 中。
  • 性能优化:启用 torch.compile() 或使用 Accelerate 库进行分布式训练。
  • 常见错误处理:确保输入形状匹配;如果模型太大,使用 device_map="auto" 自动分配到多 GPU。
  • 资源:参考官方文档(https://huggingface.co/docs/transformers),或 Model Hub 搜索特定模型。

通过这些组件和示例,你可以从简单推理到复杂微调轻松上手。

Categories: Blog

Chris

Chris

Just me, need more info?

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x