خلاصه
- Qwen3-Omni یک مدل هوش مصنوعی چندوجهی جدیده که همزمان با متن، تصویر، صدا و ویدیو کار میکنه.
- میتونه مثل یک دستیار هوشمند، جوابها رو هم به صورت متن و هم به صورت گفتار طبیعی و کاملا لحظهای بهمون بده.
- معماریش خیلی پیشرفتهست؛ از AuT (برای پردازش صدا با ۲۰ میلیون ساعت داده) و MoE (برای سرعت بالا و پردازش همزمان) استفاده میکنه.
- نکته جالبش اینه که تو حالتهای تکرسانهای (مثل فقط متن یا فقط تصویر) هم کیفیتش اصلا کم نشده و عملکردش عالیه.
- این مدل در بیشتر بنچمارکهای صوتی و تصویری از رقبا، حتی مدلهای بزرگی مثل Gemini 2.5 Pro و GPT-4o، بهتر عمل کرده و صدرنشینه.
- قابلیت چندزبانگی هم داره؛ از ۱۱۹ زبان متنی، ۱۹ زبان ورودی گفتاری و ۱۰ زبان خروجی گفتاری پشتیبانی میکنه.
- میشه ازش برای کارهای مختلفی مثل تشخیص گفتار، ترجمه، تحلیل موسیقی، OCR، پاسخ به سوالات تصویری/ویدیویی و حتی کارهای ایجنتمانند استفاده کرد.
- برای نصب و اجراش، ابزارهایی مثل Hugging Face و vLLM (که برای استنتاج توصیه میشه) در دسترس هستن.
- میتونیم رفتار مدل رو با پرامپتهای سیستمی شخصیسازی کنیم و حتی صدای خروجی رو هم تغییر بدیم.
خب Qwen3-Omni یک مدل پایه چندوجهی که میتونه همزمان با متن، عکس، صدا و ویدیو کار کنه. این مدل به صورت کاملا بومی و سرتاسری (end-to-end) طراحی شده و جالبه که میتونه جوابها رو به صورت زنده و در لحظه (real-time streaming) هم به شکل متن و هم به شکل گفتار طبیعی به شما تحویل بده. یعنی همزمان که داره فکر میکنه، میتونه باهاتون حرف بزنه. بیاین یکم عمیقتر ببینیم داستان این مدل چیه و چه چیزهایی توی چنته داره.
معماری و طراحی خلاقانه پشت صحنه
برای اینکه بفهمیم این مدل چطوری کار میکنه، باید به ساختار و معماریش یک نگاهی بندازیم. چند تا نکته کلیدی توی طراحیش وجود داره که اونو از بقیه متمایز میکنه.
- AuT (Audio Transformer): بخش انکودر صوتی این مدل از یک معماری به اسم AuT استفاده میکنه. این بخش روی ۲۰ میلیون ساعت داده صوتی تمرین داده شده. این حجم عظیم از داده باعث میشه که قابلیت خیلی قدرتمندی برای درک و نمایندگی کلی صداها داشته باشه.
- MoE (Mixture of Experts): هم بخش «متفکر» (Thinker) و هم بخش «سخنگو» (Talker) این مدل از معماری MoE بهره میبرن. این ساختار کمک میکنه که مدل بتونه همزمان به درخواستهای زیادی جواب بده (high concurrency) و سرعت استنتاج یا همون جواب دادنش خیلی بالا باشه.
- Multi-Codebook: بخش سخنگوی مدل از یک طرح خودرگرسیو چندکدبوکی استفاده میکنه. به این صورت که «سخنگو» در هر مرحله یک فریم کدک تولید میکنه و یک ماژول دیگه به اسم MTP بقیه کدبوکهای باقیمونده رو میسازه.
- بدون افت کیفیت بین حالتهای مختلف: یکی از نکات مهم اینه که در مراحل اولیه پیشآموزش متنی، دادههای تکحالتی (مثلن فقط متن) با دادههای چندحالتی (مثلن متن و عکس) ترکیب شدن. نتیجه این کار این شده که عملکرد مدل توی همه حالتها در یک سطح باقی بمونه و افت نکنه. یعنی وقتی داره با صدا کار میکنه، تواناییش توی درک متن کم نمیشه و در عین حال، قابلیتهای چندوجهی اون به شکل قابل توجهی بهتر شده.
تواناییهای برجسته در گفتگو و دستورپذیری
گفته شده که Qwen3-Omni توی کارهایی مثل تشخیص گفتار و دنبال کردن دستورالعملها، عملکردی در سطح مدل Gemini-2.5-Pro داره. این یعنی میتونه خیلی خوب حرف شما رو بفهمه و کاری که ازش میخواین رو انجام بده.
همچنین به خاطر کاهش زیاد تاخیر (latency) در کل فرآیند، از انکودرها گرفته تا بخشهای متفکر، سخنگو و Code2Wav، این مدل میتونه به صورت کاملا جریانی (fully streaming) خروجی تولید کنه. این قابلیت امکان استریم کردن از همون اولین فریم کدک رو فراهم میکنه که تجربه تعامل صوتی و تصویری رو خیلی سریع و زنده میکنه.
ویژگیهای کلیدی Qwen3-Omni
این مدل چند تا ویژگی اساسی داره که خوبه بدونیم:
- عملکرد پیشرفته در همه حالتها: همونطور که گفته شد، به لطف پیشآموزش اولیه مبتنی بر متن و آموزش ترکیبی چندوجهی، این مدل به صورت بومی از چند رسانه پشتیبانی میکنه. در حالی که نتایج خیلی خوبی در زمینه صدا و صدا-ویدیو به دست آورده، عملکردش در حالتهای تکرسانهای مثل متن و تصویر هم هیچ افتی نکرده. این مدل در ۲۲ تا از ۳۶ بنچمارک صوتی/ویدیویی به بالاترین سطح عملکرد (SOTA) رسیده و در ۳۲ تا از ۳۶ بنچمارک، در بین مدلهای متنباز بهترین عملکرد (open-source SOTA) رو داشته. عملکردش در تشخیص گفتار (ASR)، درک صوتی و مکالمه صوتی هم با Gemini 2.5 Pro قابل مقایسه است.
- چندزبانه بودن: این مدل از ۱۱۹ زبان متنی، ۱۹ زبان برای ورودی گفتاری و ۱۰ زبان برای خروجی گفتاری پشتیبانی میکنه.
- زبانهای ورودی گفتاری: انگلیسی، چینی، کرهای، ژاپنی، آلمانی، روسی، ایتالیایی، فرانسوی، اسپانیایی، پرتغالی، مالایی، هلندی، اندونزیایی، ترکی، ویتنامی، کانتونی، عربی و اردو.
- زبانهای خروجی گفتاری: انگلیسی، چینی، فرانسوی، آلمانی، روسی، ایتالیایی، اسپانیایی، پرتغالی، ژاپنی و کرهای.
- معماری جدید: همونطور که اشاره شد، طراحی مبتنی بر MoE برای Thinker–Talker با پیشآموزش AuT برای نمایش کلی قوی، به علاوه طراحی multi-codebook که تاخیر رو به حداقل میرسونه، از ویژگیهای معماری این مدله.
- تعامل صوتی/ویدیویی در لحظه: با تاخیر کم و به صورت استریم، مکالمهای طبیعی رو ممکن میکنه و بلافاصله جواب متنی یا گفتاری میده.
- کنترل انعطافپذیر: میشه رفتار مدل رو از طریق پرامپتهای سیستمی (system prompts) شخصیسازی کرد تا کنترل دقیقتری روی اون داشت و راحتتر تطبیقش داد.
- مدل کپشننویس صوتی دقیق: یک مدل به اسم Qwen3-Omni-30B-A3B-Captioner هم به صورت متنباز منتشر شده. این مدل یک ابزار عمومی برای کپشننویسی صوتی با جزئیات بالا و توهم (hallucination) پایینه که جای خالیش در جامعه متنباز حس میشد.
این مدل به چه دردی میخوره؟ (سناریوهای کاربردی)
Qwen3-Omni طیف گستردهای از کاربردهای چندوجهی رو پوشش میده که شامل وظایف مختلفی در حوزههای صوتی، تصویری، ویدیویی و صوتی-تصویری میشه. در ادامه یک لیست از کارهایی که میشه باهاش انجام داد رو میبینید:
دستهبندی | کاربرد | توضیحات |
---|---|---|
صوتی | تشخیص گفتار | تشخیص گفتار برای زبانهای مختلف و فایلهای صوتی طولانی. |
ترجمه گفتار | ترجمه گفتار به متن (Speech-to-Text) و گفتار به گفتار (Speech-to-Speech). | |
تحلیل موسیقی | تحلیل و درک دقیق هر نوع موسیقی، شامل سبک، ژانر، ریتم و غیره. | |
تحلیل صدا | توصیف و تحلیل افکتهای صوتی مختلف و سیگنالهای صوتی. | |
کپشن صوتی | نوشتن کپشن و توصیف دقیق برای هر نوع ورودی صوتی. | |
تحلیل صوتی ترکیبی | تحلیل محتوای صوتی ترکیبی مثل گفتار، موسیقی و صداهای محیطی. | |
بصری | OCR | خواندن متن از روی تصاویر پیچیده. |
مکانیابی اشیا | تشخیص و مکانیابی هدف در تصاویر. | |
پرسش و پاسخ تصویری | جواب دادن به هر سوالی در مورد هر تصویری. | |
ریاضیات تصویری | حل مسائل ریاضی پیچیده در تصاویر که تواناییهای مدل Thinking رو نشون میده. | |
ویدیویی | توصیف ویدیو | توصیف دقیق محتوای یک ویدیو. |
ناوبری ویدیویی | تولید دستورات ناوبری از روی ویدیوهای اول شخص در حال حرکت. | |
تشخیص تغییر صحنه | تحلیل تغییرات صحنه در ویدیوها. | |
صوتی-بصری | پرسش و پاسخ صوتی-بصری | پاسخ به سوالات دلخواه در سناریوهای صوتی-بصری که توانایی مدل در همترازی زمانی بین صدا و تصویر رو نشون میده. |
تعامل صوتی-بصری | ارتباط تعاملی با مدل با استفاده از ورودیهای صوتی-بصری، از جمله مشخص کردن وظایف از طریق صدا. | |
گفتگوی صوتی-بصری | گفتگوی محاورهای با مدل با ورودیهای صوتی-بصری که قابلیتهای اون در چت معمولی و رفتار دستیارگونه رو نشون میده. | |
ایجنت | فراخوانی تابع با صدا | استفاده از ورودی صوتی برای اجرای فراخوانی تابع (function calls) که رفتارهای ایجنتمانند رو ممکن میکنه. |
فاینتیون | Omni Captioner | معرفی و نمایش قابلیتهای مدل Qwen3-Omni-30B-A3B-Captioner که یک مدل فاینتیون شده بر اساس مدل اصلیه و توانایی تعمیمپذیری قوی مدل پایه Qwen3-Omni رو نشون میده. |
مدلهای مختلف Qwen3-Omni
چند نسخه مختلف از این مدل وجود داره که هر کدوم برای کار خاصی طراحی شدن. شما میتونین بر اساس نیازتون یکی رو انتخاب و دانلود کنین:
اسم مدل | توضیحات |
---|---|
Qwen3-Omni-30B-A3B-Instruct | مدل Instruct که هم بخش thinker و هم talker رو داره. از ورودی صوتی، ویدیویی و متنی پشتیبانی میکنه و خروجی صوتی و متنی میده. |
Qwen3-Omni-30B-A3B-Thinking | مدل Thinking که فقط بخش thinker رو داره. به قابلیت استدلال زنجیرهای (chain-of-thought) مجهزه. از ورودی صوتی، ویدیویی و متنی پشتیبانی میکنه و خروجی متنی میده. |
Qwen3-Omni-30B-A3B-Captioner | یک مدل فاینتیون شده برای نوشتن کپشن صوتی دقیق که از مدل Instruct مشتق شده. برای هر ورودی صوتی، کپشنهای باجزئیات و با توهم کم تولید میکنه. این مدل بخش thinker رو داره و از ورودی صوتی و خروجی متنی پشتیبانی میکنه. |
بر اساس آمار، این مدلها در ماه گذشته ۱,۶۹۲ بار دانلود شدن.
راهنمای نصب و راهاندازی
دانلود وزنهای مدل
موقع لود کردن مدل در Hugging Face Transformers یا vLLM، وزنها به صورت خودکار دانلود میشن. اما اگه محیط شما برای دانلود حین اجرا مناسب نیست، میتونین از دستورات زیر برای دانلود دستی استفاده کنین:
# دانلود از طریق ModelScope (برای کاربران در چین توصیه میشه)
pip install -U modelscope
modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Instruct --local_dir ./Qwen3-Omni-30B-A3B-Instruct
modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Thinking --local_dir ./Qwen3-Omni-30B-A3B-Thinking
modelscope download --model Qwen/Qwen3-Omni-30B-A3B-Captioner --local_dir ./Qwen3-Omni-30B-A3B-Captioner
# دانلود از طریق Hugging Face
pip install -U "huggingface_hub[cli]"
huggingface-cli download Qwen/Qwen3-Omni-30B-A3B-Instruct --local-dir ./Qwen3-Omni-30B-A3B-Instruct
huggingface-cli download Qwen/Qwen3-Omni-30B-A3B-Thinking --local-dir ./Qwen3-Omni-30B-A3B-Thinking
huggingface-cli download Qwen/Qwen3-Omni-30B-A3B-Captioner --local-dir ./Qwen3-Omni-30B-A3B-Captioner
نصب پیشنیازها
کد Hugging Face Transformers برای Qwen3-Omni با موفقیت ادغام شده اما هنوز بسته PyPI اون منتشر نشده. برای همین باید اون رو از سورس نصب کنین. خیلی توصیه میشه که یک محیط پایتون جدید بسازین تا با محیط فعلیتون تداخل پیدا نکنه.
# اگه از قبل transformers رو نصب دارین، اول حذفش کنین یا یک محیط پایتون جدید بسازین
# pip uninstall transformers
pip install git+https://github.com/huggingface/transformers
pip install accelerate
یک ابزاری هم ارائه شده که کمک میکنه ورودیهای صوتی و تصویری مختلف رو راحتتر مدیریت کنین و تجربهای شبیه به API داشته باشین. این ابزار از base64، URL و ورودیهای درهمتنیده صوتی، تصویری و ویدیویی پشتیبانی میکنه. حواستون باشه که ffmpeg
هم روی سیستمتون نصب باشه.
pip install qwen-omni-utils -U
همچنین، توصیه میشه که موقع اجرا با Hugging Face Transformers از FlashAttention 2 استفاده کنین تا مصرف حافظه GPU کمتر بشه. البته اگه بیشتر از vLLM برای استنتاج استفاده میکنین، این نصب ضروری نیست چون vLLM خودش FlashAttention 2 رو داره.
pip install -U flash-attn --no-build-isolation
برای استفاده از FlashAttention 2 سختافزارتون هم باید باهاش سازگار باشه و مدل هم باید با دقت torch.float16
یا torch.bfloat16
لود بشه.
چطور از مدل استفاده کنیم: یک مثال ساده
اینجا یک تکه کد هست که نشون میده چطوری میشه از Qwen3-Omni با transformers
و qwen_omni_utils
استفاده کرد:
import soundfile as sf
from transformers import Qwen3OmniMoeForConditionalGeneration, Qwen3OmniMoeProcessor
from qwen_omni_utils import process_mm_info
MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Instruct"
# MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Thinking"
model = Qwen3OmniMoeForConditionalGeneration.from_pretrained(
MODEL_PATH,
dtype="auto",
device_map="auto",
attn_implementation="flash_attention_2",
)
processor = Qwen3OmniMoeProcessor.from_pretrained(MODEL_PATH)
conversation = [
{
"role": "user",
"content": [
{"type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cars.jpg"},
{"type": "audio", "audio": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen3-Omni/demo/cough.wav"},
{"type": "text", "text": "What can you see and hear? Answer in one short sentence."}
],
},
]
# مشخص میکنیم که آیا از صدای داخل ویدیو استفاده بشه یا نه
USE_AUDIO_IN_VIDEO = True
# آمادهسازی برای استنتاج
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversation, use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = processor(text=text,
audio=audios,
images=images,
videos=videos,
return_tensors="pt",
padding=True,
use_audio_in_video=USE_AUDIO_IN_VIDEO)
inputs = inputs.to(model.device).to(model.dtype)
# استنتاج: تولید خروجی متنی و صوتی
text_ids, audio = model.generate(**inputs,
speaker="Ethan",
thinker_return_dict_in_generate=True,
use_audio_in_video=USE_AUDIO_IN_VIDEO)
text = processor.batch_decode(text_ids.sequences[:, inputs["input_ids"].shape[1] :],
skip_special_tokens=True,
clean_up_tokenization_spaces=False)
print(text)
if audio is not None:
sf.write(
"output.wav",
audio.reshape(-1).detach().cpu().numpy(),
samplerate=24000,
)
استفادههای پیشرفتهتر
استنتاج دستهای (Batch Inference)
مدل میتونه ورودیهای ترکیبی از انواع مختلف مثل متن، عکس، صدا و ویدیو رو به صورت دستهای پردازش کنه، البته به شرطی که return_audio=False
تنظیم شده باشه. کد زیر یک نمونه از این کاره:
# ... (بخش لود کردن مدل و پردازنده مثل کد قبلی)
model.disable_talker() # غیرفعال کردن بخش سخنگو برای پردازش دستهای
# مکالمه فقط با عکس
conversation1 = [{"role": "user", "content": [{"type": "image", "image": "https://.../cars.jpg"}, {"type": "text", "text": "What can you see...?"}]}]
# مکالمه فقط با صدا
conversation2 = [{"role": "user", "content": [{"type": "audio", "audio": "https://.../cough.wav"}, {"type": "text", "text": "What can you hear...?"}]}]
# مکالمه فقط متنی با پرامپت سیستمی
conversation3 = [{"role": "system", "content": [{"type": "text", "text": "You are Qwen-Omni."}]}, {"role": "user", "content": "Who are you?"}]
# مکالمه با رسانه ترکیبی
conversation4 = [{"role": "user", "content": [{"type": "image", "image": "https://.../cars.jpg"}, {"type": "audio", "audio": "https://.../cough.wav"}, {"type": "text", "text": "What can you see and hear...?"}]}]
conversations = [conversation1, conversation2, conversation3, conversation4]
# آمادهسازی و پردازش دستهای
text = processor.apply_chat_template(conversations, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversations, use_audio_in_video=True)
inputs = processor(text=text, audio=audios, images=images, videos=videos, return_tensors="pt", padding=True, use_audio_in_video=True)
inputs = inputs.to(model.device).to(model.dtype)
# استنتاج دستهای از خروجی صوتی پشتیبانی نمیکنه
text_ids, audio = model.generate(**inputs, return_audio=False, thinker_return_dict_in_generate=True, use_audio_in_video=True)
text = processor.batch_decode(text_ids.sequences[:, inputs["input_ids"].shape[1] :], skip_special_tokens=True, clean_up_tokenization_spaces=False)
print(text)
فعال یا غیرفعال کردن خروجی صوتی
مدل هم خروجی متنی و هم صوتی میده. اگه به خروجی صوتی نیازی ندارین، میتونین بعد از راهاندازی مدل، تابع model.disable_talker()
رو فراخوانی کنین. این کار حدود ۱۰ گیگابایت از حافظه GPU رو آزاد میکنه، اما بعدش دیگه نمیتونین return_audio
رو در تابع generate
روی True
بذارین.
برای انعطاف بیشتر، توصیه میشه موقع فراخوانی تابع generate
تصمیم بگیرین که خروجی صوتی میخواین یا نه. اگه return_audio
روی False
تنظیم بشه، مدل فقط خروجی متنی برمیگردونه که باعث میشه جوابهای متنی سریعتر تولید بشن.
تغییر نوع صدای خروجی
Qwen3-Omni این قابلیت رو داره که صدای خروجی رو تغییر بده. چکپوینت Qwen/Qwen3-Omni-30B-A3B-Instruct
از سه نوع صدای مختلف پشتیبانی میکنه:
نوع صدا | جنسیت | توضیحات |
---|---|---|
Ethan | مرد | صدایی روشن و شاداب با انرژی زیاد و حسی گرم و صمیمی. |
Chelsie | زن | صدایی شیرین و مخملی که گرمای ملایم و شفافیت درخشانی داره. |
Aiden | مرد | صدایی گرم و آرام آمریکایی با جذابیتی ملایم و پسرانه. |
برای مشخص کردن نوع صدا، میشه از پارامتر speaker
در تابع generate
استفاده کرد. اگه این پارامتر مشخص نشه، به صورت پیشفرض از صدای Ethan
استفاده میشه.
text_ids, audio = model.generate(..., speaker="Ethan")
text_ids, audio = model.generate(..., speaker="Chelsie")
text_ids, audio = model.generate(..., speaker="Aiden")
استفاده از vLLM برای استنتاج (روش پیشنهادی)
خیلی توصیه میشه که برای استنتاج و دیپلوی مدلهای سری Qwen3-Omni از vLLM استفاده کنین. چون کدها هنوز در مرحله پول ریکوئست هستن، باید vLLM رو از سورس نصب کنین. باز هم پیشنهاد میشه که یک محیط پایتون جدید بسازین.
git clone -b qwen3_omni https://github.com/wangxiongts/vllm.git
cd vllm
pip install -r requirements/build.txt
pip install -r requirements/cuda.txt
export VLLM_PRECOMPILED_WHEEL_LOCATION=https://wheels.vllm.ai/a5dd03c1ebc5e4f56f3c9d3dc0436e9c582c978f/vllm-0.9.2-cp38-abi3-manylinux1_x86_64.whl
VLLM_USE_PRECOMPILED=1 pip install -e . -v --no-build-isolation
# بقیه نصبها مثل transformers, accelerate, qwen-omni-utils و flash-attn
در ادامه یک نمونه کد ساده برای اجرای Qwen3-Omni با vLLM آورده شده:
import os
import torch
from vllm import LLM, SamplingParams
from transformers import Qwen3OmniMoeProcessor
from qwen_omni_utils import process_mm_info
if __name__ == '__main__':
os.environ['VLLM_USE_V1'] = '0' # موتور نسخه ۱ vLLM هنوز پشتیبانی نمیشه
MODEL_PATH = "Qwen/Qwen3-Omni-30B-A3B-Instruct"
llm = LLM(
model=MODEL_PATH, trust_remote_code=True, gpu_memory_utilization=0.95,
tensor_parallel_size=torch.cuda.device_count(),
limit_mm_per_prompt={'image': 3, 'video': 3, 'audio': 3},
max_num_seqs=8,
max_model_len=32768,
seed=1234,
)
sampling_params = SamplingParams(temperature=0.6, top_p=0.95, top_k=20, max_tokens=16384)
processor = Qwen3OmniMoeProcessor.from_pretrained(MODEL_PATH)
messages = [{"role": "user", "content": [{"type": "video", "video": "https://.../draw.mp4"}]}]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
audios, images, videos = process_mm_info(messages, use_audio_in_video=True)
inputs = {
'prompt': text,
'multi_modal_data': {},
"mm_processor_kwargs": {"use_audio_in_video": True},
}
if images is not None: inputs['multi_modal_data']['image'] = images
if videos is not None: inputs['multi_modal_data']['video'] = videos
if audios is not None: inputs['multi_modal_data']['audio'] = audios
outputs = llm.generate([inputs], sampling_params=sampling_params)
print(outputs[0].outputs[0].text)
استفاده از vLLM برای استنتاج دستهای هم خیلی سریعه و به شما کمک میکنه حجم زیادی از داده رو پردازش کنین. سرویس vLLM serve
در حال حاضر فقط از مدل thinker پشتیبانی میکنه.
نکات فنی و بهترین شیوهها
نیازمندیهای حافظه
جدول زیر حداقل حافظه مورد نیاز تئوریک برای استنتاج با transformers
و دقت BF16 رو نشون میده. این تستها با attn_implementation="flash_attention_2"
انجام شدن.
مدل | دقت | ویدیوی ۱۵ ثانیه | ویدیوی ۳۰ ثانیه | ویدیوی ۶۰ ثانیه | ویدیوی ۱۲۰ ثانیه |
---|---|---|---|---|---|
Qwen3-Omni-30B-A3B-Instruct | BF16 | ۷۸.۸۵ GB | ۸۸.۵۲ GB | ۱۰۷.۷۴ GB | ۱۴۴.۸۱ GB |
Qwen3-Omni-30B-A3B-Thinking | BF16 | ۶۸.۷۴ GB | ۷۷.۷۹ GB | ۹۵.۷۶ GB | ۱۳۱.۶۵ GB |
استفاده از پرامپت سیستمی
موقع استفاده از مدل برای تعامل صوتی-بصری (مثلن یک ویدیو به عنوان ورودی و یک سوال صوتی)، توصیه میشه از پرامپت سیستمی زیر استفاده کنین. این کار به مدل کمک میکنه قابلیت استدلال خودش رو حفظ کنه و بهتر در نقش یک دستیار هوشمند قرار بگیره.
user_system_prompt = "You are Qwen-Omni, a smart voice assistant created by Alibaba Qwen."
message = {
"role": "system",
"content": [
{"type": "text", "text": f"{user_system_prompt} You are a virtual voice assistant..."} # ادامه متن پرامپت
]
}
نکتهای برای مدل Thinking
مدل Qwen3-Omni-30B-A3B-Thinking
در اصل برای درک و تعامل با ورودیهای چندوجهی طراحی شده. برای گرفتن بهترین نتیجه، توصیه میشه که در هر دور از گفتگو، کنار ورودی چندرسانهای، یک دستورالعمل متنی یا توضیح وظیفه هم بهش بدین. این کار به شفاف شدن نیت شما کمک میکنه و توانایی استدلال مدل رو به شکل قابل توجهی افزایش میده.
مدیریت صدای داخل ویدیو
معمولا ویدیوهایی که کاربر میده، خودشون صدا دارن (مثل صدای صحبت یا اتفاقات داخل ویدیو). این اطلاعات به مدل کمک میکنه تجربه تعاملی بهتری ارائه بده. شما میتونین با پارامتر use_audio_in_video
مشخص کنین که آیا از صدای ویدیو استفاده بشه یا نه. نکته مهم اینه که در طول یک مکالمه چند مرحلهای، این پارامتر باید به صورت یکسان در تمام مراحل تنظیم بشه، وگرنه ممکنه نتایج غیرمنتظرهای بگیرین.
عملکرد مدل در بنچمارکها
Qwen3-Omni در حالتهای متنی و بصری، عملکرد خودش رو در سطح مدلهای تکحالته هماندازه از سری Qwen حفظ کرده و افتی نداشته. همونطور که قبلا گفته شد، در بین ۳۶ بنچمارک صوتی و صوتی-بصری، در ۳۲ تا از اونها بهترین عملکرد در بین مدلهای متنباز و در ۲۲ تا از اونها بهترین عملکرد کلی رو به دست آورده و از سیستمهای قدرتمند متنبسته مثل Gemini 2.5 Pro و GPT-4o هم بهتر عمل کرده.
در ادامه جداول عملکرد این مدل در بنچمارکهای مختلف رو میبینید.
عملکرد متن به متن (Text -> Text)
مدل Instruct | MMLU | GPQA | AIME25 | ZebraLogic | MultiPL-E | IFEval | Creative Writing v3 | WritingBench | BFCL-v3 | MultiIF | PolyMATH |
---|---|---|---|---|---|---|---|---|---|---|---|
GPT-4o-0327 | ۹۱.۳ | ۶۶.۹ | ۲۶.۷ | ۵۲.۶ | ۸۲.۷ | ۸۳.۹ | ۸۴.۹ | ۷۵.۵ | ۶۶.۵ | ۷۰.۴ | ۲۵.۵ |
Qwen3-Omni-30B-A3B-Instruct | ۸۶.۶ | ۶۹.۶ | ۶۵.۰ | ۷۶.۰ | ۸۱.۴ | ۸۱.۰ | ۸۰.۶ | ۸۲.۶ | ۶۴.۴ | ۶۴.۰ | ۳۷.۹ |
Qwen3-Omni-Flash-Instruct | ۸۶.۸ | ۶۹.۷ | ۶۵.۹ | ۷۶.۱ | ۸۱.۵ | ۸۱.۷ | ۸۱.۸ | ۸۳.۰ | ۶۵.۰ | ۶۴.۷ | ۳۹.۳ |
مدل Thinking | MMLU | GPQA | AIME25 | LiveBench | MultiPL-E | IFEval | Arena-Hard v2 | Creative Writing v3 | WritingBench | BFCL-v3 | MultiIF | PolyMATH |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Gemini-2.5-Flash Thinking | ۹۲.۱ | ۸۲.۸ | ۷۲.۰ | ۷۴.۳ | ۸۴.۵ | ۸۹.۸ | ۵۶.۷ | ۸۵.۰ | ۸۳.۹ | ۶۸.۶ | ۷۴.۴ | ۴۹.۸ |
Qwen3-Omni-30B-A3B-Thinking | ۸۸.۸ | ۷۳.۱ | ۷۳.۷ | ۷۱.۸ | ۸۰.۶ | ۸۵.۱ | ۵۵.۱ | ۸۲.۵ | ۸۵.۵ | ۶۳.۲ | ۷۲.۹ | ۴۷.۱ |
Qwen3-Omni-Flash-Thinking | ۸۹.۷ | ۷۳.۱ | ۷۴.۰ | ۷۰.۳ | ۸۱.۰ | ۸۵.۲ | ۵۷.۸ | ۸۳.۶ | ۸۵.۹ | ۶۴.۵ | ۷۳.۲ | ۴۸.۷ |
عملکرد صدا به متن (Audio -> Text)
در این بخش، نتایج مربوط به تشخیص گفتار (ASR)، درک گفتار (VoiceBench) و تحلیل موسیقی آورده شده. (مقدار کمتر در ASR بهتر است)
مدل | Wenetspeech (net/meeting) | Librispeech (clean/other) | CV15 (en/zh) | Fleurs (en/zh) | Fleurs-avg (19 lang) | MIR-1K | Opencpop-test | S2TT (en2xx/xx2en) | S2TT (zh2xx/xx2zh) |
---|---|---|---|---|---|---|---|---|---|
Gemini-2.5-Pro | ۱۴.۴۳ / ۱۳.۴۷ | ۲.۸۹ / ۳.۵۶ | ۷.۶۱ / ۸.۰۰ | ۳.۳۲ / ۲.۷۱ | ۵.۵۵ | ۹.۸۵ | ۶.۴۹ | ۳۹.۲۵ / ۳۵.۴۱ | ۲۶.۶۳ / ۳۷.۵۰ |
Qwen3-Omni-30B-A3B-Instruct | ۴.۶۹ / ۵.۸۹ | ۱.۲۲ / ۲.۴۸ | ۶.۰۵ / ۴.۳۱ | ۲.۷۲ / ۲.۲۰ | ۵.۳۳ | ۵.۹۰ | ۱.۵۴ | ۳۷.۵۰ / ۳۱.۰۸ | ۲۵.۱۷ / ۳۳.۱۳ |
Qwen3-Omni-Flash-Instruct | ۴.۶۲ / ۵.۷۵ | ۱.۲۷ / ۲.۴۴ | ۵.۹۴ / ۴.۲۸ | ۲.۷۴ / ۲.۱۹ | ۵.۳۱ | ۵.۸۵ | ۲.۰۲ | ۳۶.۲۲ / ۳۰.۷۱ | ۲۵.۱۰ / ۳۱.۱۹ |
مدل | VoiceBench Overall | MMAU | MMSU (Reasoning) | RUL-MuchoMusic | GTZAN Acc. | MTG Genre F1 | MTG Mood/Theme F1 | MTG Instrument F1 | MTG Top50 F1 | MagnaTagATune F1 |
---|---|---|---|---|---|---|---|---|---|---|
Gemini-2.5-Pro | ۸۹.۶ | ۷۷.۴ | ۷۷.۷ | ۴۹.۴ | ۸۱.۰ | ۳۲.۶ | ۱۴.۱ | ۳۳.۰ | ۲۶.۱ | ۲۸.۱ |
Qwen3-Omni-30B-A3B-Instruct | ۸۵.۵ | ۷۷.۵ | ۶۹.۰ | ۵۲.۰ | ۹۳.۰ | ۳۹.۰ | ۲۱.۰ | ۴۰.۵ | ۳۶.۷ | ۴۴.۳ |
Qwen3-Omni-30B-A3B-Thinking | ۸۸.۸ | ۷۵.۴ | ۷۰.۲ | – | – | – | – | – | – | – |
Qwen3-Omni-Flash-Instruct | ۸۵.۶ | ۷۷.۶ | ۶۹.۱ | ۵۲.۱ | ۹۳.۱ | ۳۹.۵ | ۲۱.۷ | ۴۰.۷ | ۳۶.۹ | ۴۶.۸ |
Qwen3-Omni-Flash-Thinking | ۸۹.۵ | ۷۶.۵ | ۷۱.۳ | – | – | – | – | – | – | – |
عملکرد تصویر به متن (Vision -> Text)
مدل Instruct | MMStar | HallusionBench | MM-MT-Bench | MMMU_val | MMMU_pro | MathVista_mini | MathVision_full | AI2D | ChartQA_test | CountBench | Video-MME | LVBench | MLVU |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
GPT4-o | ۶۴.۷ | ۵۵.۰ | ۷.۷ | ۶۹.۱ | ۵۱.۹ | ۶۳.۸ | ۳۰.۴ | ۸۴.۶ | ۸۶.۷ | ۸۷.۹ | ۷۱.۹ | ۳۰.۸ | ۶۴.۶ |
Qwen3-Omni-30B-A3B-Instruct | ۶۸.۵ | ۵۹.۷ | ۷.۴ | ۶۹.۱ | ۵۷.۰ | ۷۵.۹ | ۵۶.۳ | ۸۵.۲ | ۸۶.۸ | ۹۰.۰ | ۷۰.۵ | ۵۰.۲ | ۷۵.۲ |
Qwen3-Omni-Flash-Instruct | ۶۹.۳ | ۵۸.۵ | ۷.۶ | ۶۹.۸ | ۵۷.۶ | ۷۷.۴ | ۵۸.۳ | ۸۶.۴ | ۸۷.۱ | ۹۰.۰ | ۷۱.۴ | ۵۱.۱ | ۷۵.۷ |
مدل Thinking | MMStar | HallusionBench | MM-MT-Bench | MMMU_val | MMMU_pro | MathVista_mini | MathVision_full | AI2D_test | ChartQA_test | CountBench | Video-MME | LVBench | MLVU |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Gemini-2.5-flash-thinking | ۷۵.۵ | ۶۱.۱ | ۷.۸ | ۷۶.۹ | ۶۵.۸ | ۷۷.۶ | ۶۲.۳ | ۸۸.۶ | – | ۸۸.۶ | ۷۹.۶ | ۶۴.۵ | ۸۲.۱ |
Qwen3-Omni-30B-A3B-Thinking | ۷۴.۹ | ۶۲.۸ | ۸.۰ | ۷۵.۶ | ۶۰.۵ | ۸۰.۰ | ۶۲.۹ | ۸۶.۱ | ۸۹.۵ | ۸۸.۶ | ۶۹.۷ | ۴۹.۰ | ۷۲.۹ |
Qwen3-Omni-Flash-Thinking | ۷۵.۵ | ۶۳.۴ | ۸.۰ | ۷۵.۰ | ۶۰.۸ | ۸۱.۲ | ۶۳.۸ | ۸۶.۸ | ۸۹.۳ | ۹۲.۵ | ۶۹.۸ | ۴۹.۵ | ۷۳.۹ |
عملکرد صوتی-بصری به متن (AudioVisual -> Text)
مدل Instruct | WorldSense |
---|---|
Gemini-2.5-Flash | ۵۰.۹ |
Qwen3-Omni-30B-A3B-Instruct | ۵۴.۰ |
Qwen3-Omni-Flash-Instruct | ۵۴.۱ |
مدل Thinking | DailyOmni | VideoHolmes |
---|---|---|
Gemini-2.5-Flash-Thinking | ۷۲.۷ | ۴۹.۵ |
Qwen3-Omni-30B-A3B-Thinking | ۷۵.۸ | ۵۷.۳ |
Qwen3-Omni-Flash-Thinking | ۷۶.۲ | ۵۷.۳ |
تولید گفتار (Speech Generation)
نتایج زیر نشاندهنده عملکرد مدل در تولید گفتار به صورت Zero-shot (بدون نمونه قبلی)، چندزبانه و بینازبانه است.
مدل | SEED test-zh | SEED test-en |
---|---|---|
Qwen3-Omni-30B-A3B | ۱.۰۷ | ۱.۳۹ |
CosyVoice 3 | ۰.۷۱ | ۱.۴۵ |
زبان (تولید چندزبانه) | سازگاری محتوا (Qwen3) | شباهت گوینده (Qwen3) |
---|---|---|
چینی | ۰.۷۱۶ | ۰.۷۷۲ |
انگلیسی | ۱.۰۶۹ | ۰.۷۷۳ |
آلمانی | ۰.۷۷۷ | ۰.۷۳۸ |
ژاپنی | ۳.۶۳۱ | ۰.۷۶۳ |
کرهای | ۱.۶۷۰ | ۰.۷۷۸ |
زبان (تولید بینازبانه) | Qwen3-Omni-30B-A3B | CosyVoice3 |
---|---|---|
en-to-zh | ۵.۳۷ | ۵.۰۹ |
ja-to-zh | ۳.۳۲ | ۳.۰۵ |
zh-to-en | ۲.۷۶ | ۲.۹۸ |
zh-to-ja | ۸.۲۹ | ۷.۰۸ |
جزئیات ارزیابی
برای اینکه نتایج بنچمارکها قابل تکرار باشن، چند نکته در مورد نحوه ارزیابی وجود داره:
- استراتژی دیکود کردن: برای مدلهای Instruct از دیکود حریصانه (greedy) بدون نمونهبرداری استفاده شده. برای مدلهای Thinking، پارامترهای دیکود از فایل
generation_config.json
برداشته میشن. - فرمتبندی: بیشتر بنچمارکها فرمت ChatML خودشون رو برای جاسازی سوال دارن. همچنین، تمام دادههای ویدیویی با
fps=2
ارزیابی شدن. - پرامپتهای پیشفرض: برای بنچمارکهایی که پرامپت ندارن، از پرامپتهای زیر استفاده شده:
- پرامپت سیستمی: برای هیچکدوم از بنچمارکهای ارزیابی، پرامپت سیستمی تنظیم نشده.
- ترتیب ورودی: سوال یا پرامپت به عنوان متن کاربر وارد میشه و معمولا بعد از دادههای چندرسانهای در دنباله قرار میگیره.
دیدگاهتان را بنویسید