使用 AutoClass 加载预训练实例

由于存在许多不同的 Transformer 架构,为您的检查点(checkpoint)创建一个可能是具有挑战性的任务。简单且灵活易用是 🤗 Transformers 核心理念的一部分,🤗 Transformers 中提供了 AutoClass 自动推断并加载给定检查点的对应架构。from_pretrained() 方法让您可以快速加载任何架构的预训练模型,而不必花费时间和资源从头开始训练模型。此类与检查点无关的代码意味着,如果您的代码适用于一个检查点,只要它是为类似任务训练的,就可以适用于另一个检查点,即使架构不同。

请记住,架构指的是模型的骨架,而检查点则是给定架构的权重。例如, BERT 是一个架构,而 bert-base-uncased 是一个检查点。模型是一个通用术语,可以指架构或检查点。

在本教程中,您将学习:

  • 加载预训练的 tokenizer。

  • 加载预训练的图像处理器。

  • 加载预训练的特征提取器。

  • 加载预训练的处理器。

  • 加载预训练的模型。

AutoTokenizer

几乎每个 NLP 任务都是以 tokenizer 开始的。Tokenizer 将输入转换为模型可处理的格式。

使用 AutoTokenizer.from_pretrained() 加载一个 tokenizer:

>>> from transformers import AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

然后按如下示例令牌化您的输入:

>>> sequence = "In a hole in the ground there lived a hobbit."
>>> print(tokenizer(sequence))
{'input_ids': [101, 1999, 1037, 4920, 1999, 1996, 2598, 2045, 2973, 1037, 7570, 10322, 4183, 1012, 102],
'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

AutoImageProcessor

对于视觉任务,图像处理器将图像处理为正确的输入格式:

>>> from transformers import AutoImageProcessor

>>> image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")

AutoFeatureExtractor

对于音频任务,特征提取器将音频信号处理为正确的输入格式。

使用 AutoFeatureExtractor.from_pretrained() 加载一个特征提取器:

>>> from transformers import AutoFeatureExtractor

>>> feature_extractor = AutoFeatureExtractor.from_pretrained(
...     "ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition"
... )

AutoProcessor

多模态任务需要一个处理器来结合两种类型的预处理工具。例如, LayoutLMV2 模型需要一个图像处理器来处理图像,以及一个 tokenizer 来处理文本。处理器将它们两者结合在一起。

使用 AutoProcessor.from_pretrained() 加载一个处理器:

>>> from transformers import AutoProcessor

>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")

AutoModel

Pytorch
Hide Pytorch content

最后,AutoModelFor 类让您可以加载给定任务的预训练模型(可在 此处 查看可用任务的完整列表)。例如,使用 AutoModelForSequenceClassification.from_pretrained() 加载序列分类模型:

>>> from transformers import AutoModelForSequenceClassification

>>> model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")

轻松地重复使用同一检查点以加载不同任务的架构:

>>> from transformers import AutoModelForTokenClassification

>>> model = AutoModelForTokenClassification.from_pretrained("distilbert-base-uncased")

对于 PyTorch 模型,from_pretrained() 方法调用了 torch.load(),该方法内部使用 pickle 并已知存在不安全性。通常情况下,永远不要加载可能来自不受信任的来源或可能被篡改的模型。对于托管在 Hugging Face Hub 上的公共模型,此安全风险在一定程度上得到缓解,每次提交时都会 扫描恶意软件 。请查阅 Hub 文档 以了解使用 GPG 进行 签名提交验证 等最佳实践。

TensorFlow 和 Flax 检查点不受影响,并且可以通过 from_pretrained 方法的 from_tffrom_flax kwargs 在 PyTorch 架构中加载。

通常,我们建议使用 AutoTokenizer 类和 AutoModelFor 类加载预训练的模型实例。这样可以确保每次加载正确的架构。在下一个 教程 中,了解如何使用新加载的 tokenizer、图像处理器、特征提取器和处理器对数据集进行预处理以进行微调。

TensorFlow
Hide TensorFlow content

最后,TFAutoModelFor 类让您可以加载给定任务的预训练模型(可在 此处 查看可用任务的完整列表)。例如,使用 TFAutoModelForSequenceClassification.from_pretrained() 加载序列分类模型:

>>> from transformers import TFAutoModelForSequenceClassification

>>> model = TFAutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")

轻松地重复使用同一检查点以加载不同任务的架构:

>>> from transformers import TFAutoModelForTokenClassification

>>> model = TFAutoModelForTokenClassification.from_pretrained("distilbert-base-uncased")

通常,我们建议使用 AutoTokenizer 类和 TFAutoModelFor 类加载预训练的模型实例。这样可以确保每次加载正确的架构。在下一个 教程 中,了解如何使用新加载的 tokenizer、图像处理器、特征提取器和处理器对数据集进行预处理以进行微调。