哲学
🤗 Transformers 是一个为以下目的而构建的有主见的库:
- 寻求使用、研究或扩展大规模Transformer模型的机器学习研究人员和教育工作者。
- 希望微调这些模型或在生产环境中使用它们,或两者兼而有之的实践者。
- 工程师们只想下载一个预训练模型并用它来解决给定的机器学习任务。
该库在设计时有两个明确的目标:
- 尽可能简单和快速使用:
- 我们强烈限制了需要学习的面向用户的抽象数量,事实上,几乎没有抽象,只需要使用每个模型的三个标准类:configuration、models和一个预处理类(NLP的tokenizer,视觉的image processor,音频的feature extractor,以及多模态输入的processor)。
- 所有这些类都可以通过使用一个通用的
from_pretrained()
方法从预训练实例中以简单且统一的方式进行初始化,该方法会下载(如果需要)、缓存并加载相关的类实例和关联数据(配置的超参数、分词器的词汇表和模型的权重),这些数据来自Hugging Face Hub上提供的预训练检查点或你自己保存的检查点。 - 在这三个基类之上,库提供了两个API:pipeline()用于快速使用模型进行给定任务的推理,以及Trainer用于快速训练或微调PyTorch模型(所有TensorFlow模型都与
Keras.fit
兼容)。 - 因此,这个库并不是一个用于神经网络的模块化工具箱。如果你想扩展或基于这个库进行构建,只需使用常规的Python、PyTorch、TensorFlow、Keras模块,并从库的基类继承以重用模型加载和保存等功能。如果你想了解更多关于我们模型编码哲学的信息,请查看我们的Repeat Yourself博客文章。
- 提供最先进的模型,其性能尽可能接近原始模型:
- 我们为每种架构提供至少一个示例,该示例重现了该架构官方作者提供的结果。
- 代码通常尽可能接近原始代码库,这意味着一些PyTorch代码可能不像它本应那样pytorchic,因为它是从TensorFlow代码转换而来的,反之亦然。
其他几个目标:
尽可能一致地暴露模型的内部结构:
- We give access, using a single API, to the full hidden-states and attention weights.
- The preprocessing classes and base model APIs are standardized to easily switch between models.
结合主观选择的有前途的工具来微调和研究这些模型:
- A simple and consistent way to add new tokens to the vocabulary and embeddings for fine-tuning.
- Simple ways to mask and prune Transformer heads.
轻松在PyTorch、TensorFlow 2.0和Flax之间切换,允许使用一个框架进行训练,使用另一个框架进行推理。
主要概念
该库围绕每种模型的三种类型类构建:
- 模型类 可以是 PyTorch 模型 (torch.nn.Module)、Keras 模型 (tf.keras.Model) 或 JAX/Flax 模型 (flax.linen.Module),这些模型与库中提供的预训练权重兼容。
- 配置类 存储构建模型所需的超参数(例如层数和隐藏大小)。你并不总是需要自己实例化这些类。特别是,如果你使用的是未经任何修改的预训练模型,创建模型时会自动处理配置的实例化(这是模型的一部分)。
- 预处理类将原始数据转换为模型接受的格式。tokenizer存储每个模型的词汇表,并提供将字符串编码和解码为嵌入索引列表的方法,以供模型使用。Image processors预处理视觉输入,feature extractors预处理音频输入,而processor处理多模态输入。
所有这些类都可以从预训练的实例中实例化,保存在本地,并通过三种方法在Hub上共享:
from_pretrained()
允许你从预训练版本实例化模型、配置和预处理类,这些预训练版本可以由库本身提供(支持的模型可以在Model Hub上找到)或由用户本地(或在服务器上)存储。save_pretrained()
允许您将模型、配置和预处理类保存到本地,以便可以使用from_pretrained()
重新加载。push_to_hub()
允许你将模型、配置和预处理类分享到 Hub,这样每个人都可以轻松访问。