Apidog

منصة تطوير API تعاونية متكاملة

تصميم API

توثيق API

تصحيح أخطاء API

محاكاة API

اختبار API الآلي

Qwen2.5-Omni-7B: صغير ولكن قوي

INEZA FELIN-MICHEL

INEZA FELIN-MICHEL

Updated on مايو 1, 2025

يتطور مجال الذكاء الاصطناعي بسرعة، دافعًا حدود ما يمكن للآلات إدراكه وفهمه وتوليده. وتتميز قفزة كبيرة في هذا التطور بتقديم نموذج Qwen2.5-Omni-7B، وهو نموذج متعدد الوسائط رائد وشامل تم تطويره بواسطة فريق Qwen. يمثل هذا النموذج تحولًا نموذجيًا، حيث يتجاوز التفاعلات المرتكزة على النصوص ليشمل تجربة شاملة حقًا لجميع الوسائط. فهو يعالج بسلاسة مجموعة متنوعة من المدخلات - النصوص والصور والصوت والفيديو - بينما يولد في نفس الوقت استجابات بصيغ نصية وكلام طبيعي، وغالبًا ما يكون ذلك بطريقة بث مباشر في الوقت الفعلي. يتعمق هذا المقال في التفاصيل الفنية ومعايير الأداء والتطبيقات العملية لنموذج Qwen2.5-Omni-7B الرائد.

💡
هل تريد أداة رائعة لاختبار واجهات برمجة التطبيقات (API) تقوم بإنشاء توثيق جميل لواجهات برمجة التطبيقات؟

هل تريد منصة متكاملة وشاملة لفريق المطورين الخاص بك للعمل معًا بأقصى قدر من الإنتاجية؟

Apidog يلبي جميع متطلباتك، ويحل محل Postman بسعر معقول أكثر بكثير!
button

ما هو Qwen2.5-Omni-7B؟ ولماذا هو جيد جدًا؟

في جوهره، يستخدم نموذج Qwen2.5-Omni-7B بنية شاملة جديدة تُعرف باسم "المفكر-المتحدث" (Thinker-Talker). تهدف فلسفة التصميم هذه إلى إنشاء نظام موحد قادر على الإدراك الشامل والتوليد التعبيري عبر وسائط متعددة.

مكون "المفكر" (Thinker) مسؤول عن معالجة وفهم النسيج الغني للمدخلات متعددة الوسائط. وهو يدمج مشفرات متخصصة لأنواع مختلفة من البيانات:

  • النص: يستفيد من وحدات فهم اللغة المتقدمة القائمة على المحولات (transformer)، ومن المرجح أنها تبني على الأسس القوية لسلسلة Qwen2.
  • الرؤية (الصور وإطارات الفيديو): يدمج محولات الرؤية (ViTs) أو بنيات مشابهة لاستخراج الميزات المكانية من الصور والميزات الزمنية من إطارات الفيديو.
  • الصوت: يستخدم مشفرات صوتية مصممة لمعالجة الأشكال الموجية الخام أو الأطياف (spectrograms)، لالتقاط الميزات الصوتية وأنماط الكلام والأصوات البيئية والعناصر الموسيقية.

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

مكون "المتحدث" (Talker) يتعامل مع توليد المخرجات. وهو يتكون من:

  • مفكك النص (Text Decoder): مفكك نموذج لغوي قوي يولد استجابات نصية بناءً على الفهم المدمج متعدد الوسائط من المفكر.
  • مركب الكلام (Speech Synthesizer): وحدة تحويل النص إلى كلام (TTS) مدمجة قادرة على توليد كلام يبدو طبيعيًا في الوقت الفعلي. من المرجح أن تستخدم هذه الوحدة مُرمّزات صوتية عصبية متطورة وتقنيات تضمين المتحدث للسماح بمخرجات صوتية مختلفة (مثل 'Chelsie' و 'Ethan').

تعني الطبيعة الشاملة أن العملية بأكملها، من الإدراك إلى التوليد، تحدث ضمن نموذج واحد موحد، مما يقلل من زمن الاستجابة ويسمح بتفاعلات سلسة ومتدفقة حيث يمكن أن تبدأ الاستجابات قبل معالجة المدخلات بالكامل.

إذًا، لماذا يعتبر Qwen2.5-Omni-7B مميزًا جدًا؟

يتميز نموذج Qwen2.5-Omni-7B بالعديد من الميزات التقنية الرئيسية:

  • الإدراك والتوليد الشامل للوسائط: على عكس النماذج المتخصصة لوسائط فردية، تم تصميم Qwen2.5-Omni-7B بشكل أساسي للمدخلات المدمجة. يمكنه تحليل مقطع فيديو، والاستماع إلى مساره الصوتي، وقراءة التعليمات النصية المصاحبة، وتوليد استجابة تجمع المعلومات من جميع هذه المصادر، مع إخراج النص والصوت المنطوق.
  • التفاعل المتدفق في الوقت الفعلي: تدعم بنية المفكر-المتحدث معالجة المدخلات على دفعات وتوليد المخرجات فورًا. يسهل ذلك التطبيقات التفاعلية حقًا مثل المساعدين الصوتيين الذين يمكنهم الاستجابة في منتصف الجملة أو أدوات تحليل الفيديو التي تقدم تعليقًا أثناء تطور الأحداث.
  • تركيب الكلام عالي الدقة: تهدف وحدة TTS المدمجة إلى الطبيعية والقوة، وقد تم تقييمها بشكل إيجابي مقارنة بأنظمة TTS الأخرى المتدفقة وغير المتدفقة (مثل استخدام SEED-TTS-eval). تتعامل مع النصوص المعقدة وتحافظ على اتساق المتحدث حيثما ينطبق ذلك.
  • الأداء التنافسي عبر الوسائط: تظهر المعايير أن نموذج Qwen2.5-Omni-7B يؤدي بقوة عبر مهام متنوعة. يتجاوز نموذج Qwen2-Audio المتخصص في بعض مهام الصوت ويحقق أداءً يضاهي نموذج Qwen2.5-VL-7B المتخصص في الرؤية واللغة في مهام الرؤية، مما يدل على قوته المتوازنة عبر جميع الوسائط. تسلط نتائجه المتطورة على OmniBench الضوء على كفاءته في دمج وسائط متعددة.
  • اتباع تعليمات الكلام بفعالية: قدرة بارزة هي قدرته على فهم وتنفيذ التعليمات التي يتم تسليمها عبر الكلام بفعالية مماثلة لتعليمات النص. تم التحقق من ذلك من خلال معايير مثل MMLU و GSM8K التي تم إجراؤها باستخدام مدخلات الكلام، مما يعرض إمكاناته للتشغيل بدون استخدام اليدين والتحكم الصوتي.

فيما يلي معايير الأداء لـ Qwen2.5-Omni

تؤكد التقييمات الكمية على قدرات نموذج Qwen2.5-Omni-7B. عبر مجموعة واسعة من المعايير، يظهر كفاءة:

من الوسائط المتعددة إلى النص: على OmniBench، يحقق نموذج 7B درجة متوسطة رائعة تبلغ 56.13%، متفوقًا بشكل كبير على نماذج مثل Gemini-1.5-Pro (42.91%) والنماذج المتخصصة متعددة الوسائط في المهام التي تتضمن الاستدلال المدمج للصور والصوت والنص.

من الصوت إلى النص:

  • التعرف التلقائي على الكلام (ASR): على Librispeech test-clean/test-other، يحقق معدلات خطأ في الكلمات (WERs) تبلغ 1.8/3.4، منافسًا لـ Whisper-large-v3 (1.8/3.6) و Qwen2-Audio (1.6/3.6). على Common Voice 15 (en/zh)، يحقق أعلى الدرجات 7.6/5.2 WER.
  • الكلام إلى ترجمة نصية (S2TT): على CoVoST2 (en->de / zh->en)، يحقق درجات BLEU تبلغ 30.2/29.4، مما يدل على قدرات قوية في ترجمة الكلام.
  • فهم الصوت: على MMAU، يسجل متوسط 65.60%، متفوقًا في مهام الاستدلال المتعلقة بالصوت والموسيقى والكلام. على VoiceBench (متوسط)، يصل إلى 74.12، مما يشير إلى أداء قوي في معايير المحادثة المعقدة القائمة على الصوت.

من الصورة إلى النص: يظهر نموذج Qwen2.5-Omni-7B أداءً يضاهي نموذج Qwen2.5-VL-7B المخصص في معايير الرؤية واللغة مثل MMMU (59.2 مقابل 58.6)، و MMBench-V1.1-EN (81.8 مقابل 82.6)، و MMStar (64.0 مقابل 63.9)، و TextVQA (84.4 مقابل 84.9). كما يتفوق في مهام التأسيس (grounding) مثل RefCOCO/+/g.

من الفيديو (بدون صوت) إلى النص: على معايير مثل Video-MME (بدون ترجمة) و MVBench، يحقق درجات تبلغ 64.3 و 70.3 على التوالي، مما يدل على فهم قوي للفيديو حتى بدون إشارات صوتية مصاحبة في هذه الاختبارات المحددة.

تحويل النص إلى كلام (TTS) بدون تدريب مسبق (Zero-shot): تم تقييمه على SEED-TTS-eval، يُظهر الإصدار المُعدّل باستخدام التعلم المعزز (RL) معدل خطأ منخفض في الكلمات (WER) (1.42/2.32/6.54 للصينية/الإنجليزية/الصعبة) وتشابهًا عاليًا للمتحدث (0.754/0.641/0.752)، مما يشير إلى توليد صوت عالي الجودة ومتسق.

من النص إلى النص: بينما هو متعدد الوسائط بشكل أساسي، تظل قدراته النصية فقط قوية. على MMLU-redux يسجل 71.0، وعلى GSM8K 88.7، وعلى HumanEval 78.7، متخلفًا بشكل عام عن نموذج Qwen2.5-7B النصي المتخصص ولكنه يقارن جيدًا بالنماذج الأخرى بحجم 7-8 مليار معلمة مثل Llama3.1-8B.

Okay, I understand. Apologies for the previous format. I will rewrite the section starting from the implementation details, integrating the code examples more naturally into a flowing article format.


تشغيل نموذج Qwen2.5-Omni-7B: التنفيذ العملي

يتطلب الانتقال من القدرات النظرية إلى التطبيق العملي فهم كيفية التفاعل مع نموذج Qwen2.5-Omni-7B برمجياً. الأدوات الأساسية لذلك هي مكتبة transformers من Hugging Face، المعززة بتكاملات Qwen المحددة، وحزمة qwen-omni-utils المفيدة لتبسيط التعامل مع المدخلات متعددة الوسائط.

تبدأ الرحلة بإعداد البيئة. تأكد من توفر المكتبات الأساسية، بما في ذلك transformers، و accelerate (للمعالجة الفعالة على وحدات معالجة رسوميات متعددة ودقة مختلطة)، و torch، و soundfile (لإدخال/إخراج الصوت)، وحزمة qwen-omni-utils الحاسمة. يوصى بشدة بتثبيت الإصدار التجريبي المحدد من transformers الذي يتضمن دعم بنية Qwen2.5-Omni واستخدام الإضافة [decord] لحزمة qwen-omni-utils لمعالجة الفيديو بشكل أسرع:

# Recommended installation
pip install transformers accelerate torch soundfile qwen-omni-utils[decord] -U
# Install the specific transformers version with Qwen2.5-Omni support
pip install git+https://github.com/huggingface/transformers@v4.51.3-Qwen2.5-Omni-preview

بمجرد أن تصبح البيئة جاهزة، فإن تحميل النموذج والمعالج المقابل له هو الخطوة التالية. لإدارة الموارد الحاسوبية الكبيرة المطلوبة، وخاصة VRAM، يُنصح بشدة باستخدام دقة bfloat16 (`torch_dtype=torch.bfloat16` أو `"auto"`) وتمكين Flash Attention 2 (`attn_implementation="flash_attention_2"`). تعمل Flash Attention 2 على تحسين آلية الانتباه، مما يقلل من استهلاك الذاكرة ويزيد السرعة على الأجهزة المتوافقة (بنية NVIDIA Ampere أو أحدث). وسيطة `device_map="auto"` توزع طبقات النموذج بذكاء عبر وحدات معالجة الرسوميات المتاحة.

import torch
import soundfile as sf
from transformers import Qwen2_5OmniForConditionalGeneration, Qwen2_5OmniProcessor
from qwen_omni_utils import process_mm_info

# Define model identifier and load components
model_path = "Qwen/Qwen2.5-Omni-7B"

print("Loading model and processor...")
model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    model_path,
    torch_dtype=torch.bfloat16, # Use BF16 for memory efficiency
    device_map="auto",         # Distribute model across available GPUs
    attn_implementation="flash_attention_2" # Enable Flash Attention 2
)
processor = Qwen2_5OmniProcessor.from_pretrained(model_path)
print("Model and processor loaded successfully.")

مع تحميل النموذج، يمكننا استكشاف قدراته من خلال أمثلة تحاكي كتب الطهي (cookbooks) المقدمة.

فهم الصوت الشامل باستخدام نموذج Qwen2.5-Omni-7B

يوضح الملف cookbooks/universal_audio_understanding.ipynb براعة النموذج في التعامل مع مهام صوتية متنوعة. لنتناول أولاً التعرف التلقائي على الكلام (ASR).

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

# Prepare conversation for ASR using a sample audio URL
audio_url_asr = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/hello.wav"

conversation_asr = [
    {
        "role": "system",
        "content": [{"type": "text", "text": "You are Qwen, a virtual human..."}] # Standard system prompt
    },
    {
        "role": "user",
        "content": [
            {"type": "audio", "audio": audio_url_asr},
            {"type": "text", "text": "Please provide the transcript for this audio."}
        ]
    }
]

# Process multimodal info. Note: use_audio_in_video is False here.
USE_AUDIO_IN_VIDEO_FLAG = False
print("Processing ASR input...")
text_prompt_asr = processor.apply_chat_template(conversation_asr, add_generation_prompt=True, tokenize=False)
audios_asr, images_asr, videos_asr = process_mm_info(conversation_asr, use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG)

# Prepare final model inputs using the processor
inputs_asr = processor(
    text=text_prompt_asr,
    audio=audios_asr, images=images_asr, videos=videos_asr, # Pass processed modalities
    return_tensors="pt", padding=True,
    use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG # Consistent flag setting
)
# Move inputs to the correct device and data type
inputs_asr = inputs_asr.to(model.device).to(model.dtype)
print("ASR input ready for generation.")

تتعامل أداة process_mm_info مع تحميل ومعالجة عنوان URL الصوتي. يقوم processor بعد ذلك بدمج موجه النص المميز مع ميزات الصوت المعالجة، مما ينشئ موترات المدخلات (input tensors). لاحظ أن علامة use_audio_in_video يتم تعيينها باستمرار على False نظرًا لعدم وجود فيديو.

لتوليد النسخ، نستدعي طريقة model.generate. لسرعة أكبر في التعرف التلقائي على الكلام، نضبط return_audio=False.

print("Generating ASR transcription...")
with torch.no_grad(): # Disable gradient calculations for inference
    text_ids_asr = model.generate(
        **inputs_asr,
        use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG,
        return_audio=False, # Only need text output
        max_new_tokens=512  # Limit output length
    )

# Decode the generated token IDs back to text
transcription = processor.batch_decode(text_ids_asr, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

print("\n--- Qwen2.5-Omni-7B Model: ASR Result ---")
print(f"Audio Source: {audio_url_asr}")
print(f"Generated Transcription: {transcription}")

بالإضافة إلى الكلام، يمكن للنموذج تحليل أصوات أخرى. لنجرب تحديد حدث صوتي، مثل السعال. العملية مشابهة، مع استبدال مصدر الصوت وتعديل موجه النص.

# Prepare conversation for sound analysis
sound_url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/cough.wav"

conversation_sound = [
    {"role": "system", "content": [{"type": "text", "text": "You are Qwen, a virtual human..."}]},
    {
        "role": "user",
        "content": [
            {"type": "audio", "audio": sound_url},
            {"type": "text", "text": "What specific sound event occurs in this audio clip?"}
        ]
    }
]

# Process input (similar steps as ASR)
print("\nProcessing sound analysis input...")
text_prompt_sound = processor.apply_chat_template(conversation_sound, add_generation_prompt=True, tokenize=False)
audios_sound, _, _ = process_mm_info(conversation_sound, use_audio_in_video=False) # No images/videos
inputs_sound = processor(text=text_prompt_sound, audio=audios_sound, return_tensors="pt", padding=True, use_audio_in_video=False)
inputs_sound = inputs_sound.to(model.device).to(model.dtype)
print("Sound analysis input ready.")

# Generate sound analysis (text only)
print("Generating sound analysis...")
with torch.no_grad():
    text_ids_sound = model.generate(**inputs_sound, return_audio=False, max_new_tokens=128)

# Decode and display the result
analysis_text = processor.batch_decode(text_ids_sound, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
print("\n--- Qwen2.5-Omni-7B Model: Sound Analysis Result ---")
print(f"Audio Source: {sound_url}")
print(f"Sound Analysis: {analysis_text}")

استخلاص معلومات الفيديو باستخدام نموذج Qwen2.5-Omni-7B

يركز كتاب الطهي cookbooks/video_information_extracting.ipynb على استخلاص الرؤى من تدفقات الفيديو، وهي مهمة يتألق فيها المعالجة السمعية البصرية المدمجة لنموذج Qwen2.5-Omni-7B.

هنا، الفرق الحاسم غالبًا ما يكون الحاجة إلى معالجة *كلاً* من الإطارات المرئية والمسار الصوتي للفيديو. يتم التحكم في ذلك بواسطة المعلمة use_audio_in_video، والتي يجب تعيينها على True أثناء كل من process_mm_info واستدعاء processor.

# Prepare conversation for video analysis using a sample video URL
video_url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/draw.mp4"

conversation_video = [
    {"role": "system", "content": [{"type": "text", "text": "You are Qwen, a virtual human..."}]},
    {
        "role": "user",
        "content": [
            {"type": "video", "video": video_url},
            # Prompt requiring integrated audio-visual understanding
            {"type": "text", "text": "Describe the actions in this video and mention any distinct sounds present."}
        ]
    }
]

# Process multimodal info, crucially enabling audio from video
USE_AUDIO_IN_VIDEO_FLAG = True # Enable audio track processing
print("\nProcessing video analysis input (with audio)...")
text_prompt_video = processor.apply_chat_template(conversation_video, add_generation_prompt=True, tokenize=False)

# process_mm_info handles video loading (using decord if installed)
audios_video, images_video, videos_video = process_mm_info(conversation_video, use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG)

# Prepare final model inputs
inputs_video = processor(
    text=text_prompt_video,
    audio=audios_video, images=images_video, videos=videos_video,
    return_tensors="pt", padding=True,
    use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG # MUST be True here as well
)
inputs_video = inputs_video.to(model.device).to(model.dtype)
print("Video input ready for generation.")

عند توليد الاستجابة لتحليل الفيديو، يمكننا طلب كل من الوصف النصي والإخراج الصوتي المركب باستخدام return_audio=True وتحديد speaker (المتحدث).

# Generate video analysis (requesting both text and audio output)
print("Generating video analysis (text and audio)...")
with torch.no_grad():
    text_ids_video, audio_output_video = model.generate(
        **inputs_video,
        use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG, # MUST be True here too
        return_audio=True,         # Request speech synthesis
        speaker="Ethan",           # Choose a voice (e.g., Ethan)
        max_new_tokens=512
    )

# Decode the text part of the response
video_analysis_text = processor.batch_decode(text_ids_video, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

print("\n--- Qwen2.5-Omni-7B Model: Video Analysis Result ---")
print(f"Video Source: {video_url}")
print(f"Generated Text Analysis: {video_analysis_text}")

# Save the generated audio response if it exists
if audio_output_video is not None:
    output_audio_path = "video_analysis_response.wav"
    sf.write(
        output_audio_path,
        audio_output_video.reshape(-1).detach().cpu().numpy(), # Reshape and move to CPU
        samplerate=24000, # Qwen Omni uses 24kHz
    )
    print(f"Generated audio response saved to: {output_audio_path}")
else:
    print("Audio response was not generated (check system prompt or flags).")

توضح هذه الأمثلة التفصيلية سير العمل الأساسي للتفاعل مع نموذج Qwen2.5-Omni-7B لمهام متعددة الوسائط متنوعة. من خلال هيكلة محادثة الإدخال بعناية، واستخدام الأدوات المساعدة المتوفرة، وضبط المعلمات بشكل صحيح مثل use_audio_in_video و return_audio، يمكن للمطورين تسخير قدرات الإدراك والتوليد الشاملة لهذا النموذج المتقدم. تذكر أن إدارة موارد وحدة معالجة الرسوميات (GPU) من خلال تقنيات مثل دقة BF16 و Flash Attention 2 غالبًا ما تكون ضرورية للتعامل مع المدخلات المعقدة مثل مقاطع الفيديو الأطول.

الخلاصة

يمثل نموذج Qwen2.5-Omni-7B تقدمًا كبيرًا في الذكاء الاصطناعي متعدد الوسائط. تحدد بنيته الشاملة، وميزاته المبتكرة مثل TMRoPE، وأداءه القوي في المعايير عبر مهام متنوعة، وقدرات التفاعل في الوقت الفعلي معيارًا جديدًا. من خلال دمج الإدراك والتوليد للنصوص والصور والصوت والفيديو بسلاسة، فإنه يفتح آفاقًا لتطبيقات ذكاء اصطناعي أكثر ثراءً وطبيعية وقدرة، بدءًا من المساعدين الافتراضيين المتطورين وأدوات تحليل المحتوى وصولاً إلى التجارب التعليمية الغامرة وحلول الوصول. مع نضوج النظام البيئي المحيط به، يستعد نموذج Qwen2.5-Omni-7B ليكون تقنية أساسية تدفع الموجة التالية من الأنظمة الذكية.

💡
هل تريد أداة رائعة لاختبار واجهات برمجة التطبيقات (API) تقوم بإنشاء توثيق جميل لواجهات برمجة التطبيقات؟

هل تريد منصة متكاملة وشاملة لفريق المطورين الخاص بك للعمل معًا بأقصى قدر من الإنتاجية؟

Apidog يلبي جميع متطلباتك، ويحل محل Postman بسعر معقول أكثر بكثير!
button