Qwen3-ASR
Qwen3-ASRは最先端の多言語自動音声認識モデルです。MLX経由のMetal GPUアクセラレーションを使用してオンデバイスで動作し、効率的なメモリ使用のために4ビット量子化されています。0.6Bと1.7Bパラメーターのバリアントで利用可能です。
パイプライン
Qwen3-ASR推論パイプラインは、音声を4段階で処理します:
| ステージ | 説明 |
|---|---|
| 音声入力 | 生の音声を16 kHzモノラルにリサンプル |
| Melスペクトログラム | 波形から128ビンmelフィルターバンク特徴量を抽出 |
| 音声エンコーダー | ブロックアテンションを備えた18レイヤートランスフォーマー、melフレームを音声embeddingに処理 |
| テキストデコーダー | グループドクエリアテンション (GQA) と回転位置埋め込み (RoPE) を備えた28レイヤーQwen3トランスフォーマー、テキストトークンを自己回帰的に生成 |
パフォーマンス
| バックエンド | RTF | ピークメモリ | 備考 |
|---|---|---|---|
| Qwen3-ASR 1.7B MLX 8-bit | 0.033 | 2.7 GB | WER 1.52% |
| Qwen3-ASR 0.6B MLX 8-bit | 0.015 | 1.3 GB | WER 1.82% |
| Qwen3-ASR 0.6B MLX 4-bit | 0.012 | 1.0 GB | WER 2.20% |
| Qwen3-ASR 0.6B CoreML INT8 | 0.098 | 1.4 GB | WER 3.02% (chunked-attn rebuild) |
Apple M5 Pro、48 GB。LibriSpeech test-clean n=200、エンジンごとに分離。RTF < 1.0 = リアルタイムより高速。
モデルバリアント
| モデル | バックエンド | サイズ | HuggingFace |
|---|---|---|---|
| Qwen3-ASR-0.6B (4ビット) | MLX | 680 MB | aufklarer/Qwen3-ASR-0.6B-MLX-4bit |
| Qwen3-ASR-0.6B (8ビット) | MLX | 1.0 GB | aufklarer/Qwen3-ASR-0.6B-MLX-8bit |
| Qwen3-ASR-0.6B (CoreML INT8) | CoreML | 180 MB | aufklarer/Qwen3-ASR-CoreML |
| Qwen3-ASR-1.7B (4ビット) | MLX | 2.1 GB | aufklarer/Qwen3-ASR-1.7B-MLX-4bit |
| Qwen3-ASR-1.7B (8ビット) | MLX | 3.2 GB | aufklarer/Qwen3-ASR-1.7B-MLX-8bit |
CLIの使用法
デフォルトのQwen3-ASRモデルで音声ファイルを文字起こしします:
.build/release/speech transcribe recording.wav
オプション
# Use the larger 1.7B model
.build/release/speech transcribe recording.wav --model 1.7b
# Specify language
.build/release/speech transcribe recording.wav --language en
# Streaming mode with partial results
.build/release/speech transcribe recording.wav --stream --partial
Swift API
プログラム的に音声を文字起こしするにはQwen3ASRモジュールを使用します:
import Qwen3ASR
// Load the model (downloads from HuggingFace on first use)
let model = try await Qwen3ASRModel.fromPretrained()
// Transcribe audio samples (16 kHz mono Float)
let text = model.transcribe(audio: audioSamples, sampleRate: 16000)
print(text)
CoreMLエンコーダー(Neural Engine)
CoreML経由でNeural Engine上で音声エンコーダーを実行し、MLX経由でGPU上でテキストデコーダーを実行します。このハイブリッドアプローチは消費電力を下げ、並行ワークロードのためにGPUを解放します。
import Qwen3ASR
let encoder = try await CoreMLASREncoder.fromPretrained()
let model = try await Qwen3ASRModel.fromPretrained()
let text = try model.transcribe(
audio: samples, sampleRate: 16000,
coremlEncoder: encoder
)
# CLI
.build/release/speech transcribe recording.wav --engine qwen3-coreml
INT8パレット化(180 MB、コサイン類似度 > 0.999)がデフォルトです。サイズ制約のあるデプロイメント向けにINT4バリアント(90 MB)も利用可能です。
ストリーミングモード
ストリーミングモードは、VAD(音声区間検出)を使用して音声をチャンクにセグメント化し、それらを段階的に文字起こしします。長時間の録音やリアルタイム処理に有用です。
# Stream with default segment size
.build/release/speech transcribe recording.wav --stream
# Control maximum segment duration
.build/release/speech transcribe recording.wav --stream --max-segment 15
# Show partial (in-progress) results as they arrive
.build/release/speech transcribe recording.wav --stream --partial
--max-segmentフラグは、チャンクの最大継続時間を秒単位で制御します。--partialフラグは、部分結果出力を有効にして、デコードされる単語を表示します。
サポート形式
Qwen3-ASRは以下の音声形式を受け付けます。すべての入力は内部で16 kHzモノラルに自動的にリサンプルされます。
- WAV — 非圧縮PCM
- M4A — AACエンコード音声
- MP3 — MPEG Layer III
- CAF — Apple Core Audio Format
モデルは初回使用時にHuggingFaceからダウンロードされ、~/Library/Caches/qwen3-speech/にキャッシュされます。4ビット0.6Bモデルは約1.5 GBです。