Transformers-Tutorials
Transformers-Tutorials 是一个基于 Hugging Face Transformers 库的开源实战教程集合,旨在通过具体的代码示例帮助开发者快速掌握各类 Transformer 模型的应用。它主要解决了初学者在面对复杂的预训练模型时,不知如何下手进行推理、微调或适配自定义数据集的痛点。
该资源库涵盖了音频分类(AST)、命名实体识别与多标签文本分类(BERT)、图像掩码建模(BEiT)、零样本图像分割(CLIPSeg)以及目标检测(Conditional DETR)等多个前沿领域的所有演示均以 PyTorch 实现,并提供了可直接在 Google Colab 中运行的 Notebook 链接,让用户无需配置本地环境即可立即体验。此外,它还特别推荐了 Hugging Face 的免费课程,帮助用户系统理解从 BERT 到 T5 等多种架构及整个生态系统。
Transformers-Tutorials 非常适合希望深入理解 Transformer 架构的 AI 开发者、研究人员以及正在学习深度学习的学生使用。无论你是想快速验证某个模型的效果,还是需要将先进技术应用到自己的项目中,这里提供的清晰代码和详细注释都能成为你得力的助手,让复杂的模型应用变得简单易懂。
使用场景
一家电商初创公司的算法团队急需构建一个能自动识别商品评论中品牌名称与负面情感的智能监控系统,以快速响应舆情。
没有 Transformers-Tutorials 时
- 团队成员面对 Hugging Face 庞大的模型库无从下手,需花费数天查阅零散文档才能理解 BERT 或 CANINE 等架构的输入输出格式。
- 在尝试微调模型进行多标签情感分类或命名实体识别(NER)时,因缺乏标准代码参考,频繁陷入数据预处理对齐和维度报错的调试泥潭。
- 想要复现论文中的先进模型(如 AST 音频分类或 CLIPSeg 图像分割)时,必须从头编写复杂的推理逻辑,开发周期被严重拉长。
- 缺乏针对自定义数据集(如特定气球检测或影评数据)的微调范例,导致团队在数据加载器和损失函数设计上反复试错。
使用 Transformers-Tutorials 后
- 直接复用仓库中现成的 BERT 多标签分类和 NER 微调脚本,团队在几小时内便跑通了基准模型,大幅降低了入门门槛。
- 参照详细的 Colab 笔记本步骤,快速解决了自定义数据集的格式转换问题,将原本需要数天的调试工作压缩至半天完成。
- 利用提供的 AST 音频分类和 CLIPSeg 零样本分割演示代码,成功将业务场景从纯文本扩展至音视频多模态分析,无需重新造轮子。
- 基于 Conditional DETR 在自定义物体检测上的微调案例,迅速完成了对特定商品瑕疵的检测模型部署,显著提升了迭代效率。
Transformers-Tutorials 通过提供高质量、可执行的端到端演示,将算法工程师从繁琐的代码搭建中解放出来,使其能专注于业务逻辑与模型优化。
运行环境要求
- 未说明
- 非绝对必需(部分演示支持 CPU),但微调大型模型(如 GPT-J-6B, Donut)建议使用 NVIDIA GPU
- 具体显存和 CUDA 版本取决于所选模型,Colab 环境通常可用
未说明(取决于具体模型,大型模型如 GPT-J-6B 需要大量内存)

快速开始
Transformers 教程
你好!
这个仓库包含了我使用 🤗 HuggingFace 的 Transformers 库制作的一些示例。目前,所有示例都是用 PyTorch 实现的。
注意:如果你对 HuggingFace 和/或 Transformers 还不熟悉,强烈建议你先观看我们的免费课程,它会介绍多种 Transformer 架构(如 BERT、GPT-2、T5、BART 等),以及 HuggingFace 生态系统中各个库的概览,包括 Transformers、Tokenizers、Datasets、Accelerate 和 hub。
关于 HuggingFace 计算机视觉生态系统的概述(2022年6月),请参考这篇 Notebook,并观看对应的视频。
Currently, it contains the following demos:
- Audio Spectrogram Transformer (paper):
- BERT (paper):
- BEiT (paper):
- CANINE (paper):
- CLIPSeg (paper):
- Conditional DETR (paper):
- ConvNeXT (paper):
- DINO (paper):
- DETR (paper):
- DPT (paper):
- Deformable DETR (paper):
- DiT (paper):
- Donut (paper):
- performing inference with Donut for document image classification
- fine-tuning Donut for document image classification
- performing inference with Donut for document visual question answering (DocVQA)
- performing inference with Donut for document parsing
- fine-tuning Donut for document parsing with PyTorch Lightning
- performing inference with Donut for document image classification
- GIT (paper):
- GLPN (paper):
- GPT-J-6B (repository):
- GroupViT (repository):
- ImageGPT (blog post):
- LUKE (paper):
- LayoutLM (paper):
- LayoutLMv2 (paper):
- fine-tuning
LayoutLMv2ForSequenceClassificationon RVL-CDIP - fine-tuning
LayoutLMv2ForTokenClassificationon FUNSD - fine-tuning
LayoutLMv2ForTokenClassificationon FUNSD using the 🤗 Trainer - performing inference with
LayoutLMv2ForTokenClassificationon FUNSD - true inference with
LayoutLMv2ForTokenClassification(when no labels are available) + Gradio demo - fine-tuning
LayoutLMv2ForTokenClassificationon CORD - fine-tuning
LayoutLMv2ForQuestionAnsweringon DOCVQA
- fine-tuning
- LayoutLMv3 (paper):
- fine-tuning
LayoutLMv3ForTokenClassificationon the FUNSD dataset
- fine-tuning
- LayoutXLM (paper):
- MarkupLM (paper):
- Mask2Former (paper):
- MaskFormer (paper):
- OneFormer (paper):
- Perceiver IO (paper):
- showcasing masked language modeling and image classification with the Perceiver
- fine-tuning the Perceiver for image classification
- fine-tuning the Perceiver for text classification
- predicting optical flow between a pair of images with
PerceiverForOpticalFlow - auto-encoding a video (images, audio, labels) with
PerceiverForMultimodalAutoencoding
- showcasing masked language modeling and image classification with the Perceiver
- SAM (paper):
- SegFormer (paper):
- T5 (paper):
- TAPAS (paper):
- fine-tuning
TapasForQuestionAnsweringon the Microsoft Sequential Question Answering (SQA) dataset - evaluating
TapasForSequenceClassificationon the Table Fact Checking (TabFact) dataset
- fine-tuning
- Table Transformer (paper):
- TrOCR (paper):
- UPerNet (paper):
- VideoMAE (paper):
- ViLT (paper):
- fine-tuning
ViLTfor visual question answering (VQA) - performing inference with
ViLTto illustrate visual question answering (VQA) - masked language modeling (MLM) with a pre-trained
ViLTmodel - performing inference with
ViLTfor image-text retrieval - performing inference with
ViLTto illustrate natural language for visual reasoning (NLVR)
- fine-tuning
- ViTMAE (paper):
- Vision Transformer (paper):
- X-CLIP (paper):
- YOLOS (paper):
… 更多内容即将发布!🤗
如果您对这些演示有任何疑问,请随时在此仓库中提交一个问题。
顺便说一下,我也是将以下算法添加到该库的主要贡献者:
- Google AI 的 TAbular PArSing (TAPAS)
- Google AI 的 Vision Transformer (ViT)
- Facebook AI 的 DINO
- Facebook AI 的 Data-efficient Image Transformers (DeiT)
- Studio Ousia 的 LUKE
- Facebook AI 的 DEtection TRansformers (DETR)
- Google AI 的 CANINE
- Microsoft Research 的 BEiT
- Microsoft Research 的 LayoutLMv2(以及 LayoutXLM)
- Microsoft Research 的 TrOCR
- NVIDIA 的 SegFormer
- OpenAI 的 ImageGPT
- Deepmind 的 Perceiver
- Facebook AI 的 MAE
- NAVER AI Lab 的 ViLT
- Facebook AI 的 ConvNeXT
- Microsoft Research 的 DiT
- KAIST 的 GLPN
- Intel Labs 的 DPT
- 华中科技大学 EIC 学院的 YOLOS
- Microsoft Research 的 TAPEX
- Microsoft Research 的 LayoutLMv3
- 南京大学多媒体计算组的 VideoMAE
- Microsoft Research 的 X-CLIP
- Microsoft Research 的 MarkupLM
所有这些项目都让我受益匪浅。我强烈建议大家也为这个库贡献自己的 AI 算法!
数据预处理
关于为 PyTorch 模型准备数据,有几种选择:
- 使用原生 PyTorch 数据集和数据加载器。这是为 PyTorch 模型准备数据的标准方法,即通过继承
torch.utils.data.Dataset类,并创建相应的DataLoader(一个 Python 生成器,允许循环遍历数据集中的每个样本)。在继承Dataset类时,需要实现三个方法:__init__、__len__(返回数据集的样本数量)和__getitem__(根据整数索引返回数据集中的一个样本)。以下是一个创建基本文本分类数据集的示例(假设有一个包含两列“text”和“label”的 CSV 文件):
from torch.utils.data import Dataset
class CustomTrainDataset(Dataset):
def __init__(self, df, tokenizer):
self.df = df
self.tokenizer = tokenizer
def __len__(self):
return len(self.df)
def __getitem__(self, idx):
# 获取样本
item = df.iloc[idx]
text = item['text']
label = item['label']
# 对文本进行编码
encoding = self.tokenizer(text, padding="max_length", max_length=128, truncation=True, return_tensors="pt")
# 去掉分词器自动添加的批次维度
encoding = {k:v.squeeze() for k,v in encoding.items()}
# 添加标签
encoding["label"] = torch.tensor(label)
return encoding
实例化数据集的方式如下:
from transformers import BertTokenizer
import pandas as pd
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
df = pd.read_csv("path_to_your_csv")
train_dataset = CustomTrainDataset(df=df, tokenizer=tokenizer)
访问数据集的第一个样本可以这样操作:
encoding = train_dataset[0]
实际上,通常会创建一个对应的 DataLoader 来从数据集中获取批次数据:
from torch.utils.data import DataLoader
train_dataloader = DataLoader(train_dataset, batch_size=4, shuffle=True)
我经常通过从数据加载器中取出第一个批次,打印张量的形状、将 input_ids 解码回文本等方式来检查数据是否正确创建。
batch = next(iter(train_dataloader))
for k,v in batch.items():
print(k, v.shape)
# 解码批次中第一个样本的 input_ids
print(tokenizer.decode(batch['input_ids'][0].tolist())
- HuggingFace Datasets。Datasets 是 HuggingFace 提供的一个库,能够以非常快速且节省内存的方式轻松加载和处理数据。它基于 Apache Arrow 构建,并具有诸如内存映射等强大功能,使得数据仅在需要时才会被加载到内存中。它与 HuggingFace hub 具有深度集成,因此可以轻松加载知名数据集,也可以将自己的数据集分享给社区。
以 Dataset 对象的形式加载自定义数据集的方法如下(可以通过 pip install datasets 安装):
from datasets import load_dataset
dataset = load_dataset('csv', data_files={'train': ['my_train_file_1.csv', 'my_train_file_2.csv'] 'test': 'my_test_file.csv'})
这里我加载的是本地的 CSV 文件,但该库也支持其他格式(包括 JSON、Parquet、txt),还可以直接从本地 Pandas 数据框或字典中加载数据。更多详细信息请参阅 文档。
训练框架
关于微调 Transformer 模型(或更一般地,PyTorch 模型),有几种选择:
- 使用原生 PyTorch。这是最基础的训练方式,需要用户手动编写训练循环。优点是调试起来非常方便,缺点则是需要自己实现训练过程,比如设置模型模式(
model.train()/model.eval())、管理设备分配(model.to(device))等。典型的 PyTorch 训练循环如下所示(灵感来自 这篇优秀的 PyTorch 入门教程):
import torch
from transformers import BertForSequenceClassification
# 实例化一个带有随机初始化分类头的预训练 BERT 模型
model = BertForSequenceClassification.from_pretrained("bert-base-uncased")
# 我在微调基于 Transformer 的模型时几乎总是使用 5e-5 的学习率
optimizer = torch.optim.Adam(model.parameters(), lr=5e-5)
# 如果有可用的 GPU,则将模型放到 GPU 上
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
for epoch in range(epochs):
model.train()
train_loss = 0.0
for batch in train_dataloader:
# 将批次数据放到指定设备上
batch = {k:v.to(device) for k,v in batch.items()}
# 前向传播
outputs = model(**batch)
loss = outputs.loss
train_loss += loss.item()
loss.backward()
optimizer.step()
optimizer.zero_grad()
print(f"第 {epoch} 个 epoch 后的训练损失: {train_loss/len(train_dataloader)}")
model.eval()
val_loss = 0.0
with torch.no_grad():
for batch in eval_dataloader:
# 将批次数据放到指定设备上
batch = {k:v.to(device) for k,v in batch.items()}
# 前向传播
outputs = model(**batch)
loss = outputs.logits
val_loss += loss.item()
print(f"第 {epoch} 个 epoch 后的验证损失: {val_loss/len(eval_dataloader)}")
PyTorch Lightning (PL)。PyTorch Lightning 是一个框架,它通过将训练循环抽象为一个
Trainer对象来自动化上述训练过程。用户不再需要自己编写训练循环,只需创建trainer = Trainer()并调用trainer.fit(model)即可。其优点是能够非常快速地开始训练模型(这也是“Lightning”名称的由来),因为所有与训练相关的代码都由Trainer对象处理。缺点则是调试模型可能会更加困难,因为训练和评估过程已经被抽象掉了。HuggingFace Trainer。HuggingFace 的 Trainer API 可以被视为类似于 PyTorch Lightning 的框架,因为它同样使用
Trainer对象来抽象训练过程。然而,与 PyTorch Lightning 不同的是,HuggingFace Trainer 并不是一个通用框架,而是专门为微调 HuggingFace Transformers 库中提供的基于 Transformer 的模型而设计的。此外,Trainer 还提供了一个名为Seq2SeqTrainer的扩展,用于编码器-解码器架构的模型,例如 BART、T5 和EncoderDecoderModel类。需要注意的是,Transformers 库中的所有 PyTorch 示例脚本 都使用了 Trainer。HuggingFace Accelerate:Accelerate 是一个新项目,旨在帮助那些仍然希望自行编写训练循环(如上文所示)的人,同时让这些循环能够在不同硬件环境下自动运行,例如多 GPU、TPU Pod、混合精度等。
引用
如果您在使用我的教程时有任何引用需求,请随时注明出处 :)
@misc{rogge2025transformerstutorials,
author = {Rogge, Niels},
title = {教程},
url = {[https://github.com/NielsRogge/tutorials](https://github.com/NielsRogge/Transformers-Tutorials)},
year = {2025}
}
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。