Transformers documentation
İşleyiciler
İşleyiciler
Çok modlu modeller, birden fazla modaliteyi birleştiren girdileri işleyebilecek bir ön işleyici gerektirir. Girdi modalitesine bağlı olarak, bir işleyicinin metni tensör dizisine, görüntüleri piksel değerlerine ve sesleri doğru örneklem hızına sahip tensör dizisine dönüştürmesi gerekir.
Örneğin, PaliGemma, SigLIP görüntü işleyicisini ve Llama belirteçleyicisini kullanan bir görme-dil modelidir. ProcessorMixin sınıfı, bu iki ön işleyici türünü sarar ve çok modlu bir model için tek ve birleşik bir işleyici sınıfı sağlar.
İşleyiciyi yüklemek için from_pretrained() çağrın. İşleyiciye girdi türünü geçirerek beklenen model girdilerini, girdi kimliklerini ve piksel değerlerini üretin.
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")
inputsBu kılavuz, işlemci sınıfını ve çok modlu girdilerin nasıl ön işleneceğini açıklar.
İşleyici sınıfları
Tüm işlemciler, Hub'a işlemci yükleme, kaydetme ve paylaşma için from_pretrained(), save_pretrained() ve push_to_hub() gibi yöntemler sağlayan ProcessorMixin sınıfından devralır.
İşleyiciyi yüklemenin iki yolu vardır: AutoProcessor ile ve modele özgü işleyici sınıfı ile.
AutoClass API'si, ilgili model sınıfını doğrudan belirtmeden işlemcileri yüklemek için basit bir arayüz sunar.
Bir işlemci yüklemek için from_pretrained() kullanın.
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("google/paligemma-3b-pt-224")İşleyiciler de belirli bir önceden eğitilmiş çok modlu model sınıfıyla ilişkilendirilir. Bir işleyiciyi doğrudan model sınıfından from_pretrained() ile yükleyebilirsiniz.
from transformers import WhisperProcessor
processor = WhisperProcessor.from_pretrained("openai/whisper-tiny")İki ön işleyici türünü, WhisperTokenizerFast ve WhisperFeatureExtractor'i ayrı ayrı yükleyebilirsiniz.
from transformers import WhisperTokenizerFast, WhisperFeatureExtractor, WhisperProcessor
tokenizer = WhisperTokenizerFast.from_pretrained("openai/whisper-tiny")
feature_extractor = WhisperFeatureExtractor.from_pretrained("openai/whisper-tiny")
processor = WhisperProcessor(feature_extractor=feature_extractor, tokenizer=tokenizer)İşleyiciyi kaydetme ve yükleme
save_pretrained(), işleyicinin yapılandırmasını tek bir processor_config.json dosyasına yazar. Sözcük ayrıştırıcı ve sohbet şablonu kendi dosyalarında saklanır.
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
Tokenizer hariç her alt-işleyici, image_processor, video_processor veya feature_extractor gibi kendi öznitelik adının altında, processor_config.json içinde iç içe yer alır. İşleyicinin kendisine ait ayarlar, örneğin image_token, üst düzeyde bulunur. Aşağıdaki örnek kısaltılmıştır.
{
"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>"
}Diğer dosyalar ayrı olarak kaydedilir.
- Tokenizer,
tokenizer.jsonvetokenizer_config.jsongibi standart dosyalarını yazar. İşleyicinin (processor) ikinci bir tokenizer'ı varsa, bu, örneğindecoder_tokenizer/gibi, ilgili özniteliğinin adıyla adlandırılmış bir alt klasörde saklanır. - Sohbet şablonu
chat_template.jinjadosyasına kaydedilir. Bir işlemcinin birden çok sohbet şablonu varsa,defaultşablonuchat_template.jinjadosyasına, diğerleri isechat_templates/klasörüne yerleştirilir.
Bir işlemciyi from_pretrained() ile yüklediğinizde, her alt işlemci önce processor_config.json içindeki iç içe anahtarını arar. Anahtar orada yoksa bağımsız bir dosyaya geri döner. Görüntü işlemcileri ve özellik çıkarıcılar preprocessor_config.json dosyasını okur, video işlemciler ise video_preprocessor_config.json ve ardından preprocessor_config.json dosyalarını okur. Her alt işlemciyi kendi dosyasında saklayan eski denetim noktaları da bu şekilde yüklenmeye devam eder.
İç içe yapılandırma, bağımsız dosyaya göre önceliklidir. Bir kontrol noktasında her ikisi de varsa,
preprocessor_config.jsonveyavideo_preprocessor_config.jsondosyalarını düzenlemenin bir etkisi olmaz. Bunun yerineprocessor_config.jsoniçindeki iç içe girmiş girdiyi düzenleyin.
Ön işleme
Processors, çok modlu girdileri Transformers'in beklediği formata dönüştürmek için ön işleme yapar. Bir processor'un işleyebileceği girdi modalitelerinin birkaç kombinasyonu vardır; örneğin metin ve ses ya da metin ve görüntü.
Otomatik konuşma tanıma (ASR) görevleri, metin ve ses girdilerini işleyebilen bir işlemci gerektirir. Bir veri seti yükleyin ve audio ile text sütunlarını inceleyin (gerekli olmayan diğer sütunları kaldırabilirsiniz).
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'Ön eğitilmiş modellerin gerektirdiği örneklem hızıyla eşleşmesi için örneklem hızını yeniden örneklemeyi unutmayın.
from datasets import Audio
dataset = dataset.cast_column("audio", Audio(sampling_rate=16000))Bir işlemci yükleyin ve array ile text sütunlarını ona iletin.
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 exampleVeri setini ön işlemek için prepare_dataset fonksiyonunu uygulayın. İşleyici, audio sütunu için input_features ve metin sütunu için labels döndürür.
prepare_dataset(dataset[0])