【Transformer-Hugging Face 05/10】 使用 AutoClass 加载预训练实例

目录

  • 一、说明
  • 二、自动分词器
  • 三、自动图像处理器
  • 四、自动特征提取器
  • 五、自动处理器
  • 六、自动模型
  • 七、在TensorFlow中
  • 八、自动骨干网

一、说明

   由于有如此多不同的 Transformer 架构,为您的检查点创建一个架构可能具有挑战性。作为 Transformers 核心理念的一部分,使库易于、简单且灵活地使用,它会AutoClass从给定的检查点自动推断并加载正确的架构。该from_pretrained()方法可让您快速加载任何架构的预训练模型,因此您无需投入时间和资源从头开始训练模型。生成这种类型的与检查点无关的代码意味着,如果您的代码适用于一个检查点,那么它将适用于另一个检查点 - 只要它经过针对类似任务的训练 - 即使架构不同。

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

   在本教程中,您将学习:

  • 加载预训练的分词器。
  • 加载预训练的图像处理器
  • 加载预训练的特征提取器。
  • 加载预训练的处理器。
  • 加载预训练模型。
  • 加载模型作为骨干。

二、自动分词器

   几乎每个 NLP 任务都以分词器开始。分词器将您的输入转换为模型可以处理的格式。

   使用AutoTokenizer.from_pretrained()加载分词器:

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 ]}

三、自动图像处理器

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

from transformers import AutoImageProcessor
image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")

四、自动特征提取器

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

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

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

五、自动处理器

   多模式任务需要一个结合了两种类型预处理工具的处理器。例如,LayoutLMV2模型需要一个图像处理器来处理图像,需要一个分词器来处理文本;处理器将两者结合在一起。

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

from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")

六、自动模型

   这些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_tf 和 from_flax kwargs 在 PyTorch 架构中加载,以避免此问题。

   TensorFlow 和 Flax 检查点不受影响,并且可以使用from_tf和from_flaxkwargs加载到 PyTorch 架构中来from_pretrained规避此问题。

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

七、在TensorFlow中

   最后,这些TFAutoModelFor类允许您加载给定任务的预训练模型(有关可用任务的完整列表,请参阅此处)。例如,使用 T F A u t o M o d e l F o r S e q u e n c e C l a s s i f i c a t i o n . f r o m p r e t r a i n e d ( ) TFAutoModelForSequenceClassification.from_pretrained() TFAutoModelForSequenceClassification.frompretrained()
   加载序列分类模型:

from transformers import TFAutoModelForSequenceClassification

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

   轻松重用相同的检查点来加载不同任务的架构:

from transformers import TFAutoModelForTokenClassification

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

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

八、自动骨干网

   AutoBackbone允许您使用预训练模型作为主干,并获取特征图作为模型不同阶段的输出。下面您可以看到如何从Swin检查点获取特征图。

使用管道运行推

from transformers import AutoImageProcessor, AutoBackbone
import torch
from PIL import Image
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")
model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(0,))

inputs = processor(image, return_tensors="pt")
outputs = model(**inputs)
feature_maps = outputs.feature_maps
list(feature_maps[-1].shape)

[1, 96, 56, 56]

你可能感兴趣的:(NLP高级和ChatGPT,人工智能,transformer,深度学习,人工智能)