库的设计理念
🤗 Transformers 是一个面向以下用户的库:
- 希望使用、研究或扩展大型 Transformer 模型的机器学习研究人员和教育工作者。
- 希望微调这些模型或将其用于生产环境的实践者,或两者兼而有之。
- 只需下载预训练模型并将其用于解决特定机器学习任务的工程师。
该库的设计考虑了两个主要目标:
- 尽可能简单易用且快速。
- 我们严格限制了用户需要学习的抽象层级,实际上,几乎没有抽象,每个模型只需要三个标准类:配置、模型和一个预处理类(分词器 用于 NLP,图像处理器 用于视觉,特征提取器 用于音频,以及处理器 用于多模态输入)。
- 所有这些类都可以通过一个通用的
from_pretrained()
方法以简单统一的方式从预训练实例初始化,该方法会(如果需要)下载、缓存并加载相关的类实例和关联数据(配置的超参数、分词器的词汇表和模型的权重)来自 Hugging Face Hub 上提供的预训练检查点或您自己保存的检查点。Hugging Face Hub - 在这些三个基础类之上,该库提供了两个 API:pipeline() 用于快速使用模型对给定任务进行推理,以及 Trainer 用于快速训练或微调 PyTorch 模型(所有 TensorFlow 模型都与
Keras.fit
兼容)。 - 因此,该库**不是**一个用于构建神经网络的模块化工具箱。如果您想扩展或构建库,只需使用常规的 Python、PyTorch、TensorFlow、Keras 模块并继承库的基础类以重用模型加载和保存等功能。如果您想了解更多关于我们模型编码理念的信息,请查看我们的 重复你自己 博客文章。
- 提供最先进的模型,其性能尽可能接近原始模型。
- 我们为每种架构至少提供一个示例,该示例重现了该架构的官方作者提供的结果。
- 代码通常尽可能接近原始代码库,这意味着一些 PyTorch 代码由于转换为 TensorFlow 代码而可能不像预期的那样“PyTorch 式”,反之亦然。
其他一些目标:
尽可能一致地公开模型的内部结构。
- 我们使用单个 API 访问所有隐藏状态和注意力权重。
- 预处理类和基本模型 API 已标准化,以便轻松地在模型之间切换。
整合一些有前景的工具,用于微调和研究这些模型。
- 一种简单一致的方法,用于向词汇表和嵌入中添加新标记以进行微调。
- 简单的方法来掩盖和修剪 Transformer 的注意力头。
轻松地在 PyTorch、TensorFlow 2.0 和 Flax 之间切换,允许使用一个框架进行训练,使用另一个框架进行推理。
核心概念
该库围绕每个模型的三种类型的类构建:
- **模型类** 可以是 PyTorch 模型 (torch.nn.Module)、Keras 模型 (tf.keras.Model) 或 JAX/Flax 模型 (flax.linen.Module),它们可以使用库中提供的预训练权重。
- **配置类** 存储构建模型所需的超参数(例如层数和隐藏层大小)。您并不总是需要自己实例化它们。特别是,如果您使用的是没有任何修改的预训练模型,则创建模型将自动处理配置的实例化(它是模型的一部分)。
- **预处理类** 将原始数据转换为模型可以接受的格式。分词器 存储每个模型的词汇表,并提供将字符串编码和解码为一系列标记嵌入索引的方法,以馈送到模型。图像处理器 预处理视觉输入,特征提取器 预处理音频输入,而 处理器 处理多模态输入。
所有这些类都可以从预训练实例实例化、保存在本地并在 Hub 上共享,使用三种方法:
from_pretrained()
允许您从预训练版本实例化模型、配置和预处理类,这些版本要么由库本身提供(受支持的模型可以在 模型 Hub 上找到),要么由用户保存在本地(或服务器上)。save_pretrained()
允许您将模型、配置和预处理类保存在本地,以便可以使用from_pretrained()
重新加载。push_to_hub()
允许您将模型、配置和预处理类共享到 Hub,以便每个人都可以轻松访问。