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.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

プロセッサ

マルチモーダルモデルには、複数のモダリティを組み合わせた入力を処理できるプリプロセッサが必要です。入力モダリティに応じて、プロセッサはテキストをテンソルの配列に変換し、画像をピクセル値に変換し、オーディオを適切なサンプリングレートを持つテンソルの配列に変換する必要があります。

例えば、PaliGemma は、SigLIP 画像プロセッサと Llama トークナイザを使用するビジョン言語モデルです。ProcessorMixin クラスはこれら 2 つのプリプロセッサタイプをラップし、マルチモーダルモデルに対して単一かつ統合されたプロセッサクラスを提供します。

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 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.

プロセッサを読み込む方法には2つあります。AutoProcessorを使用する方法と、モデル固有のプロセッサクラスを使用する方法です。

AutoProcessor
モデル固有のプロセッサ

AutoClass API は、特定のモデルクラスを直接指定せずにプロセッサを読み込むためのシンプルなインターフェースを提供します。

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

トークナイザ以外のすべてのサブプロセッサは、image_processor、video_processor、feature_extractor などの属性名をキーとして、processor_config.json の中にネストされています。プロセッサ自体に属する設定(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 のような通常どおりのファイルを出力します。プロセッサーに2番目のトークナイザーがある場合、その属性名に由来するサブフォルダー(例: 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内のネストされたエントリを編集してください。

前処理

Processorsは、マルチモーダルな入力を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 関数を適用して、データセットの前処理を行います。プロセッサは、audio 列に対して input_features を、テキスト列に対して labels を返します。

prepare_dataset(dataset[0])
Update on GitHub