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

المعالجات

تتطلب النماذج متعددة الوسائط معالجًا مسبقًا قادرًا على التعامل مع مدخلات تجمع بين أكثر من نمط واحد. اعتمادًا على نمط المدخلات، يحتاج المعالج إلى تحويل النص إلى مصفوفة من المتجهات (tensors)، والصور إلى قيم البكسل، والصوت إلى مصفوفة من المتجهات بمعدل أخذ عينات صحيح.

على سبيل المثال، 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
المعالج الخاص بالنموذج

توفر واجهة 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

كل معالج فرعي باستثناء المعرّف الرمزي (tokenizer) يكون متداخلاً داخل 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) ملفاتّه المعتادة، مثل tokenizer.json وtokenizer_config.json. وإذا كان المعالج (processor) يحتوي على مُجزِّئ رموز ثانٍ، فيُحفظ في مجلد فرعي يحمل اسم خاصيّته، مثل 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