Transformers 文档
理念
加入 Hugging Face 社区
并获得增强的文档体验
开始使用
理念
🤗 Transformers 是一个面向以下用户的精选库:
- 希望使用、研究或扩展大型 Transformers 模型的机器学习研究人员和教育工作者。
- 希望微调这些模型或在生产中部署它们的实践者,或两者兼而有之。
- 只想下载预训练模型并用它来解决给定机器学习任务的工程师。
该库的设计考虑了两个重要目标:
- 尽可能地易用和快速
- 我们严格限制了用户需要学习的抽象数量。实际上,几乎没有抽象,只需要三个标准类来使用每个模型:配置、模型和预处理类(用于 NLP 的分词器,用于视觉的图像处理器,用于音频的特征提取器,以及用于多模态输入的处理器)。
- 所有这些类都可以通过使用通用的
from_pretrained()
方法从预训练实例中以简单统一的方式进行初始化。该方法会从 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()
允许您从预训练版本实例化模型、配置和预处理类,这些版本可以由库本身提供(支持的模型可以在 模型中心 上找到)或由用户本地(或在服务器上)存储。save_pretrained()
允许您在本地保存模型、配置和预处理类,以便可以使用from_pretrained()
重新加载。push_to_hub()
允许您将模型、配置和预处理类共享到 Hub,以便所有人都可以轻松访问。