Transformers documentation

Çok Modlu Üretim

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

Çok Modlu Üretim

Çok modlu (her şeyden her şeye) modeller, çeşitli türlerdeki girdi verilerini (ör. metin, görüntü, ses veya video) işleyebilen ve bu modlardan herhangi birinde çıktı üretebilen dil modelleridir. Geleneksel tek modlu veya sabit modlu modellerin aksine, girdi ve çıktının esnek kombinasyonlarına olanak tanır ve tek bir sistemin geniş bir görev yelpazesini ele almasını sağlar: metinden görüntüye üretimden sese metne transkripsiyona, görüntü altyazılamaya, video anlama ve benzeri. Bu görev, görüntü-metinden metne göreviyle birçok benzerlik paylaşır, ancak daha geniş bir girdi ve çıktı modu yelpazesini destekler.

Bu kılavuzda, any-to-any modellerine kısa bir genel bakış sunuyor ve bunların Transformers ile çıkarım (inference) için nasıl kullanılacağını gösteriyoruz. Genellikle yalnızca görme ve dil görevleriyle sınırlı olan Vision LLM'lerin aksine, omni-modal modeller girdi olarak herhangi bir modalite kombinasyonunu (ör. metin, görüntü, ses, video) kabul edebilir ve metin veya görüntü gibi farklı modalitelerde çıktı üretebilir.

Bağımlılıkları kurarak başlayalım:

pip install -q transformers accelerate flash_attn

Modeli ve işlemciyi başlatalım.

from transformers import AutoProcessor, AutoModelForMultimodalLM, infer_device
import torch

device = torch.device(infer_device())
model = AutoModelForMultimodalLM.from_pretrained(
    "Qwen/Qwen2.5-Omni-3B",
    dtype=torch.bfloat16,
    attn_implementation="flash_attention_2",
).to(device)

processor = AutoProcessor.from_pretrained("Qwen/Qwen2.5-Omni-3B")

Bu modeller, modallar arası konuşmaları yapılandırmak için genellikle bir söyleşim şablonu içerir. Girdiler, tek bir turda görsel, metin, ses veya diğer desteklenen biçimlerin karışımını içerebilir. Çıktılar da yapılandırmaya bağlı olarak değişebilir (ör. metin üretimi veya ses üretimi).

Aşağıda, “metin + ses” girdisi sağlanıp metin yanıtı istenen bir örnek yer almaktadır.

messages = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "url": "https://huggingface.co/datasets/raushan-testing-hf/audio-test/resolve/main/f2641_0_throatclearing.wav"},
            {"type": "text", "text": "What do you hear in this audio?"},
        ]
    },
]

Şimdi, çıktıyı görüntü girdileriyle birlikte ön işlemek için işleyicilerin apply_chat_template() yöntemini çağıracağız.

inputs = processor.apply_chat_template(
    messages,
    tokenize=True,
    return_dict=True,
    return_tensors="pt",
    add_generation_prompt=True,
)

Artık ön işlenmiş girdileri modele iletebiliriz.

with torch.no_grad():
    generated_ids = model.generate(**inputs, max_new_tokens=100)
generated_texts = processor.batch_decode(generated_ids, skip_special_tokens=True)
print(generated_texts)

Pipeline

Başlamak için en hızlı yol Pipeline API'sini kullanmaktır. "any-to-any" görevini ve kullanmak istediğiniz modeli belirtin.

from transformers import pipeline
pipe = pipeline("any-to-any", model="mistralai/Voxtral-Mini-3B-2507")

Aşağıdaki örnek, metin girdilerini biçimlendirmek için sohbet şablonlarını kullanır ve ses modunu çok modlu veri olarak kullanır.

messages = [
     {
         "role": "user",
         "content": [
             {
                 "type": "audio",
                 "url": "https://huggingface.co/datasets/raushan-testing-hf/audio-test/resolve/main/glass-breaking-151256.mp3",
             },
             {"type": "text", "text": "What do you hear in this audio?"},
         ],
     },
 ]

Sohbet şablonu biçimlendirilmiş metni ve görüntüyü Pipeline nesnesine iletin ve üretilen çıktıdan girdiyi kaldırmak için return_full_text=False değerini ayarlayın.

outputs = pipe(text=messages, max_new_tokens=20, return_full_text=False)
outputs[0]["generated_text"]

Any-to-any pipeline, any-to-any modellerle ses veya görüntü üretmeyi de destekler. Bunun için generation_mode parametresini ayarlamanız gerekir. Video örnekleme oranını istediğiniz FPS değerine ayarlamayı unutmayın; aksi halde video örnekleme yapılmadan tamamen yüklenir. Aşağıda örnek bir kod bulunmaktadır:

import soundfile as sf
pipe = pipeline("any-to-any", model="Qwen/Qwen2.5-Omni-3B")
messages = [
    {
        "role": "user",
        "content": [
            {"type": "video", "path": "https://huggingface.co/datasets/raushan-testing-hf/videos-test/resolve/main/Cooking_cake.mp4"},
            {"type": "text", "text": "Describe this video."},
        ],
    },
]
output = pipe(text=messages, fps=1, load_audio_from_video=True, max_new_tokens=20, generation_mode="audio")
sf.write("generated_audio.wav", out[0]["generated_audio"])
Update on GitHub