02 Transformers 之 了解 Transformers
Transformers开源库已成为机器学习领域的重要工具。该库基于PyTorch、TensorFlow和JAX框架,提供Transformer模型的核心实现(如Self-Attention、Encoder/Decoder)和丰富的预训练模型(BERT、GPT等)。主要特点包括:简化模型推理的Pipeline接口、支持分布式训练的Trainer工具、高效文本生成功能。Transformers库覆盖
文章目录
Hugging Face 是一家专注于 NLP 的公司,最初以开发聊天机器人起家,后来转向开源 NLP 工具和模型开发维护。该公司提供了 Transformers 开源库。
- 实现了
Transformer模型架构的核心模块(如Self-Attention、Encoder、Decoder); - 支持加载和微调预训练模型(如
BERT、GPT、T5); - 提供了基于
Transformer的预训练模型,用户可以直接下载和使用; - 提供了大量
NLP数据集,方便用户训练和评估Transformer模型; - 提供了高效的文本分词工具,支持
Transformer模型的分词需求; - 简化了
Transformer模型的分布式训练和部署。
设计原则
Transformers 为机器学习开发人员和研究人员而设计,主要设计原则如下:
-
快速易用
每个模型仅由三个主要类(配置,模型和预处理器)实现,可以通过
Pipeline应用模型进行推理;通过Trainer训练模型。 -
预训练模型
训练时使用预训练模型来减少”碳足迹“、计算成本和时间,而不是训练一个全新的模型。每个预训练模型都尽可能接近原始模型,并提供最先进(
state-of-the-art,SoTA)的性能。
项目地址
- 官网:
https://huggingface.co/transformers github:https://github.com/huggingface/transformers
项目定位
Transformers 是一个开源库
Transformers 是基于 PyTorch, TensorFlow 和 JAX 打造的领先的机器学习工具。Transformers 提供了可以轻松下载和训练的先进的预训练模型的 API 和工具. 使用预训练模型可以减少计算消耗和碳排放, 并且节省从头训练所需要的时间和资源. 这些模型支持不同模态中的常见任务,比如:
-
自然语言处理: 文本分类, 命名实体识别, 问答, 语言建模, 摘要, 翻译, 填空和文本生成等。
-
机器视觉: 图像分类, 目标检测和语义分割等。
-
音频: 自动语音识别和音频分类等。
-
多模态: 表格问答, 光学字符识别, 从扫描文档提取信息, 视频分类和视觉问答等
Transformers 支持在 PyTorch, TensorFlow 和 JAX 上的互操作性. 这给在模型的每个阶段使用不同的框架带来了灵活性; 在一个框架中使用几行代码训练一个模型, 然后在另一个框架中加载它并进行推理. 模型也可以被导出为 ONNX 和 TorchScript 格式, 用于在生产环境中部署。
Transformers 是语言模型
所有支持 Transformer 的模型(如 GPT、BERT、T5 等)都被训练为语言模型。这意味着它们已经以自我监督的方式接受了大量原始文本的训练。自监督学习是一种从模型输入中自动计算目标的训练类型。这意味着不需要人类给数据贴上标签!
这种类型的模型基于对它所训练的语言的统计理解,但它对于特定的实际任务不太有用。正因为如此,一般的预训练模型会经历一个称为迁移学习 或 微调 的过程。在这个过程中,模型以一种监督的方式进行微调;换句话说,在给定的任务上使用人工注释的标签。
Transformers 是大模型
除了少数极端的(如DistilBERT),实现更好性能的一般策略都是通过增加模型的大小以及预训练的数据量来实现的;不幸的是,训练一个模型,尤其是一个大模型,需要大量的数据。这在时间消耗和计算资源方面变得非常昂贵。甚至造成环境影响。
对于一个庞大模型项目,如果每次想要训练一个模型,它都需要从头开始的。这将导致巨大的、不必要的成本浪费!所以,共享训练好的权重并在已经训练好的权重的基础上进行构建可以减少社区的总体计算成本和碳足迹。
顺便说一下,您可以通过几个工具评估模型训练的碳足迹。例如集成在 Transformers 的 ML CO2 Impact 或 Code Carbon 。
技术特点
Transformers 采用目前最佳技术、最前沿(state-of-the-art,SoTA)的预训练模型来完成推理或训练。其主要特点如下:
- Pipeline:简单和优化的推理类。许多如文本生成、图像分割、自动语音合成、文档文档等机器学习任务类都是
Pipeline的子类;Pipeline既是特定任务类的基类,同时也是特定任务类的容器,生成Pipeline实例时,只要通过task参数传入特定任务类的任务标识就可以完成特定任务的功能(换句话说就是返回的是指定特定任务的实例)。在Transformers中提到的Pipelines并不是具体的类,而是任务类的通称。 - Trainer:一个多功能的训练器,在训练(支持分布式训练)
PyTorch模型时提供如mixed precision(混合精度)训练、torch.compile(可以加快训练速度并减少计算开销)、FlashAttention(一种加速注意力计算并减少内存占用的方法)的支持。 - Generate:使用大语言模型(
large language models,LLMs),可视化语言模型(vision language models,VLMs)快速生成文本。支持流和多种解码策略。
资源镜像
在 AI 开发的时候很多时候会从Hugging Face下载模型和数据,但无法直接访问或者速度特别缓慢!这里提供一些国内的镜像方便使用。
如果是下载模型,可以通过访问 Gitee 站点的子域 http://ai.gitee.com,进入后通过查询所需的模型,然后在下载对应的模型。
另外,可以访问 HF-Mirror(https://hf-mirror.com/)站点。 HF-Mirror 是用于镜像 [Hugging Face Hub]域名。只要将域名改成镜像域名,用法和以往一样。下面简单介绍如何使用。
-
网页下载
进入镜像站点的模型主页的
Files and Version中下载文件。 -
使用
huggingface-clihuggingface-cli是Hugging Face官方提供的命令行工具,自带完善的下载功能。首先安装依赖:pip install -U huggingface_hub然后设置环境变量。Linux环境下:
export HF_ENDPOINT=https://hf-mirror.comWindows环境下使用PowerShell进入:
$env:HF_ENDPOINT = "https://hf-mirror.com"之后就可以下载模型和数据集了:
# 下载模型 huggingface-cli download --resume-download gpt2 --local-dir gpt2 # 下载数据集 huggingface-cli download --resume-download gpt2 --local-dir gpt2 -
使用环境变量
非侵入式,能解决大部分情况。
huggingface工具链会获取HF_ENDPOINT环境变量来确定下载文件所用的网址,所以可以使用通过设置变量来解决。HF_ENDPOINT=https://hf-mirror.com python your_script.py
术语解释
- 当前最佳最前沿水平(
State-of-the-Art,SoTA) 模型并不是确定的模型,而是统称,即指的是在不同领域、不同环境里公认的当前最佳、最前沿水平的模型。 Pythorch是一个由Facebook的人工智能研究团队开发的开源的机器学习库,主要用于进行计算机视觉(CV)、自然语言处理(NLP)、语音识别等领域的研究和开发。PyTorch以其灵活性和易用性而闻名,特别适合于深度学习研究和开发。Torch:是PyTorch库的核心模块,提供了以下关键功能:张量(Tensors)、数学运算、数据类型转换、随机数生成、线性代数运算、自动微分、存储和序列化、多GPU支持、神经网络层与优化器等,详细介绍参见《附录一:Torch介绍》TensorFlow是一个由谷歌人工智能团队谷歌大脑开发和维护,基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习算法的编程实现,其前身是谷歌的神经网络算法库DistBelief。Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究。Python语言下提供四个不同版本:CPU版本(tensorflow)、包含GPU加速的版本(tensorflow-gpu),以及它们的每日编译版本(tf-nightly、tf-nightly-gpu)。JAX是一个TensorFlow的简化库,它结合了Autograd和XLA,专门用于高性能机器学习研究。凭借Autograd,JAX可以求导循环、分支、递归和闭包函数,并且它可以进行三阶求导;支持自动模式反向求导(反向传播)和正向求导,且二者可以任何顺序任意组合。得力于XLA,可以在GPU和TPU上编译和运行NumPy程序。默认情况下,编译发生在底层,库调用实时编译和执行。但是JAX还允许使用单一函数API jit将 Python 函数及时编译为XLA优化的内核。编译和自动求导可以任意组合,因此可以在Python环境下实现复杂的算法并获得最大的性能。
应用赋能
Transformers 库在自然语言理解、计算机视觉、音频以及多模态模型应用提供了大量的应用;在大语言模型肆虐的今天,Tranformers 库也提供了完美的支持。
在自然语言理解领域,提供了文本分类、零样本文本分类、命名实体识别(token 分类)、词性标注(token 分类)、问答、表格问答、自动摘要、翻译、文生文以及文本生成等能力。
在计算机视觉领域,提供了图像分类、零样本图像分类、对象检测、零样本对象检测、图像分割、图生图、关键点检测、深度估计、绝对深度估计和视频分类等应用。
在音频领域,提供有自动语音识别,音频分类、零样本音频分类、语音合成等功能。
在多模态领域,可以处理文档问答、可视化问答、零样本可视化问答、文本特征提取、图像特征提取、音频特征提取、图像描述生成(看图说话)、图片转文本(从图片中提取文字)、图片文本转文本(根据图片以及提示生成自然语言)以及蒙版生成等能力。
支持模型
下表展示 Transformers 库对这些模型的支持情况:
| 模型名称 | Tokenizer | Tokenizer fast | PyTorch | TensorFlow | Flax |
|---|---|---|---|---|---|
ALBERT |
✅ | ✅ | ✅ | ✅ | ✅ |
AltCLIP |
❌ | ❌ | ✅ | ❌ | ❌ |
Audio Spectrogram Transformer |
❌ | ❌ | ✅ | ❌ | ❌ |
BART |
✅ | ✅ | ✅ | ✅ | ✅ |
BEiT |
❌ | ❌ | ✅ | ❌ | ✅ |
BERT |
✅ | ✅ | ✅ | ✅ | ✅ |
Bert Generation |
✅ | ❌ | ✅ | ❌ | ❌ |
BigBird |
✅ | ✅ | ✅ | ❌ | ✅ |
BigBird-Pegasus |
❌ | ❌ | ✅ | ❌ | ❌ |
BioGpt |
✅ | ❌ | ✅ | ❌ | ❌ |
BiT |
❌ | ❌ | ✅ | ❌ | ❌ |
Blenderbot |
✅ | ✅ | ✅ | ✅ | ✅ |
BlenderbotSmall |
✅ | ✅ | ✅ | ✅ | ✅ |
BLIP |
❌ | ❌ | ✅ | ❌ | ❌ |
BLOOM |
❌ | ✅ | ✅ | ❌ | ❌ |
CamemBERT |
✅ | ✅ | ✅ | ✅ | ❌ |
CANINE |
✅ | ❌ | ✅ | ❌ | ❌ |
Chinese-CLIP |
❌ | ❌ | ✅ | ❌ | ❌ |
CLIP |
✅ | ✅ | ✅ | ✅ | ✅ |
CLIPSeg |
❌ | ❌ | ✅ | ❌ | ❌ |
CodeGen |
✅ | ✅ | ✅ | ❌ | ❌ |
Conditional DETR |
❌ | ❌ | ✅ | ❌ | ❌ |
ConvBERT |
✅ | ✅ | ✅ | ✅ | ❌ |
ConvNeXT |
❌ | ❌ | ✅ | ✅ | ❌ |
CTRL |
✅ | ❌ | ✅ | ✅ | ❌ |
CvT |
❌ | ❌ | ✅ | ✅ | ❌ |
Data2VecAudio |
❌ | ❌ | ✅ | ❌ | ❌ |
Data2VecText |
❌ | ❌ | ✅ | ❌ | ❌ |
Data2VecVision |
❌ | ❌ | ✅ | ✅ | ❌ |
DeBERTa |
✅ | ✅ | ✅ | ✅ | ❌ |
DeBERTa-v2 |
✅ | ✅ | ✅ | ✅ | ❌ |
Decision Transformer |
❌ | ❌ | ✅ | ❌ | ❌ |
Deformable DETR |
❌ | ❌ | ✅ | ❌ | ❌ |
DeiT |
❌ | ❌ | ✅ | ✅ | ❌ |
DETR |
❌ | ❌ | ✅ | ❌ | ❌ |
DiNAT |
❌ | ❌ | ✅ | ❌ | ❌ |
DistilBERT |
✅ | ✅ | ✅ | ✅ | ✅ |
DonutSwin |
❌ | ❌ | ✅ | ❌ | ❌ |
DPR |
✅ | ✅ | ✅ | ✅ | ❌ |
DPT |
❌ | ❌ | ✅ | ❌ | ❌ |
ELECTRA |
✅ | ✅ | ✅ | ✅ | ✅ |
Encoder decoder |
❌ | ❌ | ✅ | ✅ | ✅ |
ERNIE |
❌ | ❌ | ✅ | ❌ | ❌ |
ESM |
✅ | ❌ | ✅ | ✅ | ❌ |
FairSeq Machine-Translation |
✅ | ❌ | ✅ | ❌ | ❌ |
FlauBERT |
✅ | ❌ | ✅ | ✅ | ❌ |
FLAVA |
❌ | ❌ | ✅ | ❌ | ❌ |
FNet |
✅ | ✅ | ✅ | ❌ | ❌ |
Funnel Transformer |
✅ | ✅ | ✅ | ✅ | ❌ |
GIT |
❌ | ❌ | ✅ | ❌ | ❌ |
GLPN |
❌ | ❌ | ✅ | ❌ | ❌ |
GPT Neo |
❌ | ❌ | ✅ | ❌ | ✅ |
GPT NeoX |
❌ | ✅ | ✅ | ❌ | ❌ |
GPT NeoX Japanese |
✅ | ❌ | ✅ | ❌ | ❌ |
GPT-J |
❌ | ❌ | ✅ | ✅ | ✅ |
GPT-Sw3 |
✅ | ✅ | ✅ | ✅ | ✅ |
GroupViT |
❌ | ❌ | ✅ | ✅ | ❌ |
Hubert |
❌ | ❌ | ✅ | ✅ | ❌ |
I-BERT |
❌ | ❌ | ✅ | ❌ | ❌ |
ImageGPT |
❌ | ❌ | ✅ | ❌ | ❌ |
Jukebox |
✅ | ❌ | ✅ | ❌ | ❌ |
LayoutLM |
✅ | ✅ | ✅ | ✅ | ❌ |
LayoutLMv2 |
✅ | ✅ | ✅ | ❌ | ❌ |
LayoutLMv3 |
✅ | ✅ | ✅ | ✅ | ❌ |
LED |
✅ | ✅ | ✅ | ✅ | ❌ |
LeViT |
❌ | ❌ | ✅ | ❌ | ❌ |
LiLT |
❌ | ❌ | ✅ | ❌ | ❌ |
Longformer |
✅ | ✅ | ✅ | ✅ | ❌ |
LongT5 |
❌ | ❌ | ✅ | ❌ | ✅ |
LUKE |
✅ | ❌ | ✅ | ❌ | ❌ |
LXMERT |
✅ | ✅ | ✅ | ✅ | ❌ |
M-CTC-T |
❌ | ❌ | ✅ | ❌ | ❌ |
M2M100 |
✅ | ❌ | ✅ | ❌ | ❌ |
Marian |
✅ | ❌ | ✅ | ✅ | ✅ |
MarkupLM |
✅ | ✅ | ✅ | ❌ | ❌ |
Mask2Former |
❌ | ❌ | ✅ | ❌ | ❌ |
MaskFormer |
❌ | ❌ | ✅ | ❌ | ❌ |
MaskFormerSwin |
❌ | ❌ | ❌ | ❌ | ❌ |
mBART |
✅ | ✅ | ✅ | ✅ | ✅ |
Megatron-BERT |
❌ | ❌ | ✅ | ❌ | ❌ |
MobileBERT |
✅ | ✅ | ✅ | ✅ | ❌ |
MobileNetV1 |
❌ | ❌ | ✅ | ❌ | ❌ |
MobileNetV2 |
❌ | ❌ | ✅ | ❌ | ❌ |
MobileViT |
❌ | ❌ | ✅ | ✅ | ❌ |
MPNet |
✅ | ✅ | ✅ | ✅ | ❌ |
MT5 |
✅ | ✅ | ✅ | ✅ | ✅ |
MVP |
✅ | ✅ | ✅ | ❌ | ❌ |
NAT |
❌ | ❌ | ✅ | ❌ | ❌ |
Nezha |
❌ | ❌ | ✅ | ❌ | ❌ |
Nyströmformer |
❌ | ❌ | ✅ | ❌ | ❌ |
OpenAI GPT |
✅ | ✅ | ✅ | ✅ | ❌ |
OpenAI GPT-2 |
✅ | ✅ | ✅ | ✅ | ✅ |
OPT |
❌ | ❌ | ✅ | ✅ | ✅ |
OWL-ViT |
❌ | ❌ | ✅ | ❌ | ❌ |
Pegasus |
✅ | ✅ | ✅ | ✅ | ✅ |
PEGASUS-X |
❌ | ❌ | ✅ | ❌ | ❌ |
Perceiver |
✅ | ❌ | ✅ | ❌ | ❌ |
PLBart |
✅ | ❌ | ✅ | ❌ | ❌ |
PoolFormer |
❌ | ❌ | ✅ | ❌ | ❌ |
ProphetNet |
✅ | ❌ | ✅ | ❌ | ❌ |
QDQBert |
❌ | ❌ | ✅ | ❌ | ❌ |
RAG |
✅ | ❌ | ✅ | ✅ | ❌ |
REALM |
✅ | ✅ | ✅ | ❌ | ❌ |
Reformer |
✅ | ✅ | ✅ | ❌ | ❌ |
RegNet |
❌ | ❌ | ✅ | ✅ | ✅ |
RemBERT |
✅ | ✅ | ✅ | ✅ | ❌ |
ResNet |
❌ | ❌ | ✅ | ✅ | ❌ |
RetriBERT |
✅ | ✅ | ✅ | ❌ | ❌ |
RoBERTa |
✅ | ✅ | ✅ | ✅ | ✅ |
RoBERTa-PreLayerNorm |
❌ | ❌ | ✅ | ✅ | ✅ |
RoCBert |
✅ | ❌ | ✅ | ❌ | ❌ |
RoFormer |
✅ | ✅ | ✅ | ✅ | ✅ |
SegFormer |
❌ | ❌ | ✅ | ✅ | ❌ |
SEW |
❌ | ❌ | ✅ | ❌ | ❌ |
SEW-D |
❌ | ❌ | ✅ | ❌ | ❌ |
Speech Encoder decoder |
❌ | ❌ | ✅ | ❌ | ✅ |
Speech2Text |
✅ | ❌ | ✅ | ✅ | ❌ |
Speech2Text2 |
✅ | ❌ | ❌ | ❌ | ❌ |
Splinter |
✅ | ✅ | ✅ | ❌ | ❌ |
SqueezeBERT |
✅ | ✅ | ✅ | ❌ | ❌ |
Swin Transformer |
❌ | ❌ | ✅ | ✅ | ❌ |
Swin Transformer V2 |
❌ | ❌ | ✅ | ❌ | ❌ |
Swin2SR |
❌ | ❌ | ✅ | ❌ | ❌ |
SwitchTransformers |
❌ | ❌ | ✅ | ❌ | ❌ |
T5 |
✅ | ✅ | ✅ | ✅ | ✅ |
Table Transformer |
❌ | ❌ | ✅ | ❌ | ❌ |
TAPAS |
✅ | ❌ | ✅ | ✅ | ❌ |
Time Series Transformer |
❌ | ❌ | ✅ | ❌ | ❌ |
TimeSformer |
❌ | ❌ | ✅ | ❌ | ❌ |
Trajectory Transformer |
❌ | ❌ | ✅ | ❌ | ❌ |
Transformer-XL |
✅ | ❌ | ✅ | ✅ | ❌ |
TrOCR |
❌ | ❌ | ✅ | ❌ | ❌ |
UniSpeech |
❌ | ❌ | ✅ | ❌ | ❌ |
UniSpeechSat |
❌ | ❌ | ✅ | ❌ | ❌ |
UPerNet |
❌ | ❌ | ✅ | ❌ | ❌ |
VAN |
❌ | ❌ | ✅ | ❌ | ❌ |
VideoMAE |
❌ | ❌ | ✅ | ❌ | ❌ |
ViLT |
❌ | ❌ | ✅ | ❌ | ❌ |
Vision Encoder decoder |
❌ | ❌ | ✅ | ✅ | ✅ |
VisionTextDualEncoder |
❌ | ❌ | ✅ | ❌ | ✅ |
VisualBERT |
❌ | ❌ | ✅ | ❌ | ❌ |
ViT |
❌ | ❌ | ✅ | ✅ | ✅ |
ViT Hybrid |
❌ | ❌ | ✅ | ❌ | ❌ |
ViTMAE |
❌ | ❌ | ✅ | ✅ | ❌ |
ViTMSN |
❌ | ❌ | ✅ | ❌ | ❌ |
Wav2Vec2 |
✅ | ❌ | ✅ | ✅ | ✅ |
Wav2Vec2-Conformer |
❌ | ❌ | ✅ | ❌ | ❌ |
WavLM |
❌ | ❌ | ✅ | ❌ | ❌ |
Whisper |
✅ | ❌ | ✅ | ✅ | ❌ |
X-CLIP |
❌ | ❌ | ✅ | ❌ | ❌ |
XGLM |
✅ | ✅ | ✅ | ✅ | ✅ |
XLM |
✅ | ❌ | ✅ | ✅ | ❌ |
XLM-ProphetNet |
✅ | ❌ | ✅ | ❌ | ❌ |
XLM-RoBERTa |
✅ | ✅ | ✅ | ✅ | ✅ |
XLM-RoBERTa-XL |
❌ | ❌ | ✅ | ❌ | ❌ |
XLNet |
✅ | ✅ | ✅ | ✅ | ❌ |
YOLOS |
❌ | ❌ | ✅ | ❌ | ❌ |
YOSO |
❌ | ❌ | ✅ | ❌ | ❌ |
更多推荐


所有评论(0)