人工知能の分野は急速に進化しており、機械が知覚し、理解し、生成できるものの限界を押し広げています。この進化における大きな飛躍は、Qwenチームによって開発されたフラッグシップのエンドツーエンドマルチモーダルモデルであるQwen2.5-Omni-7Bモデルの導入によって示されています。このモデルは、テキスト中心のインタラクションを超え、真のオムニモーダル体験を受け入れるパラダイムシフトを象徴しています。テキスト、画像、音声、動画といった多様な入力をシームレスに処理しながら、テキスト形式と自然な音声形式の両方で応答を生成し、多くの場合、リアルタイムのストリーミング方式で行われます。この記事では、画期的なQwen2.5-Omni-7Bモデルの技術的な詳細、パフォーマンスベンチマーク、および実践的なアプリケーションについて深く掘り下げます。
最大限の生産性で開発チームが共同作業できる統合されたオールインワンプラットフォームをお探しですか?
Apidogは、お客様のあらゆる要望に応え、Postmanをはるかに手頃な価格で置き換えます!
Qwen2.5-Omni-7Bとは何か?そしてなぜそれが優れているのか?
Qwen2.5-Omni-7Bモデルの核となるのは、「Thinker-Talker」と呼ばれる斬新なエンドツーエンドアーキテクチャです。この設計思想は、複数のモダリティにわたる包括的な知覚と表現力豊かな生成の両方が可能な統一システムを構築することを目指しています。
「Thinker」コンポーネントは、マルチモーダル入力の豊かなタペストリーを処理し、理解する役割を担います。さまざまなデータタイプに対応する特殊なエンコーダーを統合しています。
- テキスト:Qwen2シリーズの堅牢な基盤の上に構築された可能性のある、高度なトランスフォーマーベースの言語理解モジュールを活用します。
- ビジョン(画像・動画フレーム):Vision Transformer (ViT) または類似のアーキテクチャを組み込み、画像から空間的特徴、動画フレームから時間的特徴を抽出します。
- オーディオ:生の波形やスペクトログラムを処理するように設計されたオーディオエンコーダーを利用し、音響的特徴、音声パターン、環境音、音楽要素を捉えます。

アーキテクチャ内の重要なイノベーションは、Time-aligned Multimodal RoPE (TMRoPE) です。Rotary Position Embedding (RoPE) のような標準的な位置エンコーディングは、テキストのようなシーケンシャルデータには優れていますが、マルチモーダルシナリオ、特に視覚フレームと音声ストリームを同期させる必要がある動画には適応が必要です。TMRoPEは、動画フレームのタイムスタンプを対応する音声セグメントに合わせることでこれを解決します。この同期により、モデルは視聴覚イベントの首尾一貫した時間的理解を構築でき、「動画でオブジェクトが落下したときにどのような音がする?」といった質問に答えることができます。
「Talker」コンポーネントは出力の生成を処理します。これは以下で構成されます。
- テキストデコーダー:Thinkerからの融合されたマルチモーダル理解に基づいてテキスト応答を生成する強力な言語モデルデコーダー。
- 音声シンセサイザー:リアルタイムで自然な音声生成が可能な統合されたテキスト読み上げ (TTS) モジュール。このモジュールは、高度なニューラルボコーダーと、おそらく異なる音声出力(「Chelsie」や「Ethan」など)を可能にする話者埋め込み技術を利用している可能性があります。
エンドツーエンドの性質とは、知覚から生成までのプロセス全体が単一の統一モデル内で発生することを意味し、レイテンシを最小限に抑え、入力が完全に処理される前に応答を開始できるシームレスなストリーミングインタラクションを可能にします。
では、なぜQwen2.5-Omni-7Bは特別なのか?
Qwen2.5-Omni-7Bモデルは、いくつかの主要な技術的特徴によって際立っています。
- オムニモーダルな知覚と生成:単一のモダリティに特化したモデルとは異なり、Qwen2.5-Omni-7Bは本質的に組み合わせた入力のために設計されています。動画を分析し、そのオーディオトラックを聞き、付随するテキスト指示を読み、これらすべてのソースからの情報を合成した応答を生成し、テキストと音声の両方で出力することができます。
- リアルタイムストリーミングインタラクション:Thinker-Talkerアーキテクチャは、チャンク化された入力処理と即時出力生成をサポートします。これにより、文の途中で応答できる音声アシスタントや、イベントが発生するにつれて解説を提供する動画分析ツールのような、真にインタラクティブなアプリケーションが可能になります。
- 高忠実度の音声合成:統合された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 (Avg) では74.12に達し、複雑な音声ベースの会話ベンチマークでの強力なパフォーマンスを示しています。
画像からテキストへ:Qwen2.5-Omni-7Bモデルは、MMMU (59.2 vs 58.6)、MMBench-V1.1-EN (81.8 vs 82.6)、MMStar (64.0 vs 63.9)、TextVQA (84.4 vs 84.9) といったビジョン言語ベンチマークで、専用のQwen2.5-VL-7Bモデルに匹敵するパフォーマンスを示しています。また、RefCOCO/+/gのようなグラウンディングタスクでも優れています。
動画(音声なし)からテキストへ:Video-MME (w/o sub) やMVBenchのようなベンチマークでは、それぞれ64.3および70.3のスコアを達成しており、これらの特定のテストでは付随する音声キューがなくても強力な動画理解を示しています。
ゼロショットTTS:SEED-TTS-evalで評価されたRLチューニングバージョンは、低いWER (zh/en/hardで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テキストモデルには劣るものの、Llama3.1-8Bのような他の7-8Bモデルと比較して良好です。
承知いたしました。前回のフォーマットについてお詫び申し上げます。実装の詳細から始まるセクションを、提供されたコード例をより自然な記事形式に統合して書き直します。
Qwen2.5-Omni-7Bモデルの実行:実践的な実装
理論的な能力から実践的なアプリケーションへの移行には、Qwen2.5-Omni-7Bモデルとプログラムでどのように対話するかを理解する必要があります。このための主要なツールは、特定のQwen統合で強化されたHugging Faceのtransformers
ライブラリと、合理化されたマルチモーダル入力処理のための便利なqwen-omni-utils
パッケージです。
まず環境をセットアップすることから始まります。transformers
、accelerate
(効率的なマルチGPUおよび混合精度処理用)、torch
、soundfile
(オーディオI/O用)、そして重要なqwen-omni-utils
を含むコアライブラリがインストールされていることを確認してください。Qwen2.5-Omniアーキテクチャサポートを含むtransformers
の特定のプレビューバージョンをインストールし、より高速な動画処理のためにqwen-omni-utils
の[decord]
エクストラを使用することを強く推奨します。
# 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"
引数は、利用可能なGPU全体にモデルレイヤーをインテリジェントに分散します。
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.")
モデルがロードされたら、提供されたクックブックを模倣した例を通してその機能を探索できます。
Qwen2.5-Omni-7Bモデルによるユニバーサルオーディオ理解
cookbooks/universal_audio_understanding.ipynb
は、多様なオーディオタスクを処理するモデルの能力を示しています。まず、自動音声認識(ASR)に取り組んでみましょう。
入力は会話リストとして構造化する必要があります。システムプロンプト(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
は、トークン化されたテキストプロンプトと処理されたオーディオ機能を組み合わせて、入力テンソルを作成します。動画が関与していないため、use_audio_in_video
フラグは一貫してFalse
に設定されていることに注意してください。
書き起こしを生成するには、model.generate
メソッドを呼び出します。ASRを高速化するために、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
パラメータによって制御され、process_mm_info
とprocessor
呼び出しの両方でTrue
に設定する必要があります。
# 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
のようなパラメータを正しく設定することで、開発者はこの高度なモデルの包括的な知覚および生成能力を活用できます。BF16精度やFlash Attention 2のような手法によるGPUリソースの管理は、長い動画のような複雑な入力を処理するためにしばしば必要であることを覚えておいてください。
結論
Qwen2.5-Omni-7Bモデルは、マルチモーダルAIにおける重要な進歩を象徴しています。そのエンドツーエンドアーキテクチャ、TMRoPEのような革新的な機能、多様なタスクにわたる強力なベンチマークパフォーマンス、およびリアルタイムインタラクション能力は、新しい標準を設定します。テキスト、画像、音声、動画の知覚と生成をシームレスに統合することで、洗練されたバーチャルアシスタントやコンテンツ分析ツールから、没入型教育体験やアクセシビリティソリューションまで、より豊かで自然で有能なAIアプリケーションの可能性を切り開きます。その周辺のエコシステムが成熟するにつれて、Qwen2.5-Omni-7Bモデルは、インテリジェントシステムの次の波を推進する要石技術となる準備ができています。
最大限の生産性で開発チームが共同作業できる統合されたオールインワンプラットフォームをお探しですか?
Apidogは、お客様のあらゆる要望に応え、Postmanをはるかに手頃な価格で置き換えます!