Transformers documentation

Процессоры

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Процессоры

Мультимодальные модели требуют преобразователь, способный обрабатывать входные данные, сочетающие более одной модальности. В зависимости от входной модальности процессору необходимо преобразовать текст в массив тензоров, изображения — в пиксельные значения, а аудио — в массив тензоров с корректной частотой дискретизации.

Например, PaliGemma — это мультимодальная модель, использующая процессор изображений SigLIP и токенизатор Llama. Класс ProcessorMixin объединяет оба этих типа препроцессоров, предоставляя единый класс процессора для мультимодальной модели.

Вызовите from_pretrained(), чтобы загрузить процессор. Передайте процессору тип входных данных, чтобы получить ожидаемые входные данные модели, идентификаторы входных токенов и пиксельные значения.

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 cat standing?"
url = "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/pipeline-cat-chonk.jpeg"
image = Image.open(requests.get(url, stream=True).raw)

inputs = processor(text=prompt, images=image, return_tensors="pt")
inputs

В этом руководстве описан класс процессора и способы предобработки мультимодальных входных данных.

Классы процессоров

All processors inherit from the ProcessorMixin class which provides methods like from_pretrained(), save_pretrained(), and push_to_hub() for loading, saving, and sharing processors to the Hub.

Существует два способа загрузить процессор: с помощью AutoProcessor и с помощью класса процессора, специфичного для конкретной модели.

AutoProcessor
процессор, специфичный для модели

API AutoClass предоставляет простой интерфейс для загрузки процессоров без необходимости явно указывать конкретный класс модели, к которому они относятся.

Используйте from_pretrained() для загрузки процессора.

from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("google/paligemma-3b-pt-224")

Сохранение и загрузка процессора

save_pretrained() записывает конфигурацию процессора в единый файл processor_config.json. Токенизатор и шаблон чата сохраняются в отдельных файлах.

from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("llava-hf/llava-onevision-qwen2-0.5b-ov-hf")
processor.save_pretrained("./llava-onevision")
llava-onevision/
├── chat_template.jinja
├── processor_config.json
├── tokenizer.json
└── tokenizer_config.json

Каждый субпроцессор, за исключением токенизатора, вложен в processor_config.json под именем своего атрибута, например image_processor, video_processor или feature_extractor. Настройки, относящиеся к самому процессору, такие как image_token, находятся на верхнем уровне. Пример ниже сокращён.

{
  "image_processor": {
    "image_processor_type": "LlavaOnevisionImageProcessor",
    "do_resize": true,
    "size": {"height": 384, "width": 384},
    "image_mean": [0.5, 0.5, 0.5]
  },
  "image_token": "<image>",
  "processor_class": "LlavaOnevisionProcessor",
  "video_processor": {
    "video_processor_type": "LlavaOnevisionVideoProcessor",
    "do_resize": true,
    "size": {"height": 384, "width": 384},
    "image_mean": [0.5, 0.5, 0.5]
  },
  "video_token": "<video>"
}

Остальные файлы сохраняются отдельно.

  • Токенизатор записывает свои стандартные файлы, такие как tokenizer.json и tokenizer_config.json. Если у процессора есть второй токенизатор, он сохраняется в подпапку, названную по имени его атрибута, например decoder_tokenizer/.
  • Шаблон чата сохраняется в chat_template.jinja. Если у процессора несколько шаблонов чата, шаблон default помещается в chat_template.jinja, а остальные — в папку chat_templates/.

При загрузке процессора с помощью from_pretrained() каждый субпроцессор сначала ищет свой вложенный ключ в файле processor_config.json. Если ключ отсутствует, используется отдельный файл. Изображательные процессоры и извлекатели признаков читают preprocessor_config.json, а видеопроцессоры читают video_preprocessor_config.json, а затем preprocessor_config.json. Старые контрольные точки, в которых каждый субпроцессор хранится в собственном файле, по-прежнему загружаются таким образом.

Вложенная конфигурация имеет приоритет над отдельным файлом. Если в контрольной точке присутствуют оба варианта, редактирование preprocessor_config.json или video_preprocessor_config.json не даст результата. Вместо этого отредактируйте вложенный элемент в processor_config.json.

Предобработка

Процессоры выполняют предобработку мультимодальных входных данных, приводя их к ожидаемому формату Transformers. Процессор может обрабатывать различные комбинации модальностей входных данных, например, текст и аудио или текст и изображение.

Задачи автоматического распознавания речи (ASR) требуют процессора, способного обрабатывать текстовые и аудиовходные данные. Загрузите набор данных и посмотрите на столбцы audio и text (остальные столбцы, которые не нужны, можно удалить).

from datasets import load_dataset

dataset = load_dataset("keithito/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'

Не забудьте пересэмплировать частоту дискретизации, чтобы она соответствовала частоте дискретизации, требуемой предобученными моделями.

from datasets import Audio

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 для предобработки набора данных. Процессор возвращает input_features для столбца audio и labels для текстового столбца.

prepare_dataset(dataset[0])
Update on GitHub