Transformers 文档
处理器
并获得增强的文档体验
开始使用
处理器
多模态模型需要一个预处理器,能够处理结合了多种模态的输入。根据输入模态的不同,处理器需要将文本转换为张量数组,将图像转换为像素值,并将音频转换为具有正确采样率的张量数组。
例如,PaliGemma 是一个视觉-语言模型,它使用了 SigLIP 图像处理器和 Llama 分词器。ProcessorMixin 类封装了这两种预处理器类型,为多模态模型提供了一个单一且统一的处理器类。
调用 from_pretrained() 来加载处理器。将输入类型传递给处理器以生成预期的模型输入、输入 ID 和像素值。
from transformers import AutoProcessor, PaliGemmaForConditionalGeneration
from PIL import Image
import requests
processor = AutoProcessor.from_pretrained("google/paligemma-3b-pt-224")
prompt = "answer en Where is the cow standing?"
url = "https://huggingface.co/gv-hf/PaliGemma-test-224px-hf/resolve/main/cow_beach_1.png"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(text=prompt, images=image, return_tensors="pt")
inputs
本指南介绍了处理器类以及如何预处理多模态输入。
处理器类
所有处理器都继承自 ProcessorMixin 类,该类提供了诸如 from_pretrained(), save_pretrained(), 和 push_to_hub() 等方法,用于加载、保存处理器以及将处理器共享到 Hub。
加载处理器有两种方法,一种是使用 AutoProcessor,另一种是使用特定于模型的处理器类。
AutoClass API 提供了一个简单的接口来加载处理器,而无需直接指定其所属的特定模型类。
使用 from_pretrained() 加载处理器。
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("google/paligemma-3b-pt-224")
预处理
处理器将多模态输入预处理为预期的 Transformers 格式。处理器可以处理几种输入模态的组合,例如文本和音频,或文本和图像。
自动语音识别 (ASR) 任务需要一个可以处理文本和音频输入的处理器。加载一个数据集,并查看 audio
和 text
列(您可以删除不需要的其他列)。
from datasets import load_dataset
dataset = load_dataset("lj_speech", split="train")
dataset = dataset.map(remove_columns=["file", "id", "normalized_text"])
dataset[0]["audio"]
{'array': array([-7.3242188e-04, -7.6293945e-04, -6.4086914e-04, ...,
7.3242188e-04, 2.1362305e-04, 6.1035156e-05], dtype=float32),
'path': '/root/.cache/huggingface/datasets/downloads/extracted/917ece08c95cf0c4115e45294e3cd0dee724a1165b7fc11798369308a465bd26/LJSpeech-1.1/wavs/LJ001-0001.wav',
'sampling_rate': 22050}
dataset[0]["text"]
'Printing, in the only sense with which we are at present concerned, differs from most if not from all the arts and crafts represented in the Exhibition'
请记住重新采样采样率以匹配预训练模型所需的采样率。
dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))
加载处理器并将音频 array
和 text
列传递给它。
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("openai/whisper-tiny")
def prepare_dataset(example):
audio = example["audio"]
example.update(processor(audio=audio["array"], text=example["text"], sampling_rate=16000))
return example
应用 prepare_dataset
函数来预处理数据集。处理器为 audio
列返回 input_features
,为文本列返回 labels
。
prepare_dataset(dataset[0])