概要
- Apple Silicon上で リアルタイム音声対話 を実現するqwen3-asr-swiftライブラリの紹介
- PersonaPlex 7Bによる フルデュプレックス音声対話 を単一モデルで実現
- ASR、TTS、多言語合成 を一つのSwift/MLXライブラリで統合
- 4ビット量子化による モデル軽量化と高速化
- ストリーミング音声生成 やE2E検証、細かな最適化手法も解説
Apple Siliconで実現するリアルタイム音声対話エンジン
- qwen3-asr-swift はApple Silicon上で動作する Swift/MLX音声ライブラリ
- PersonaPlex 7B を用いた フルデュプレックス音声対話 を実現
- ASR(音声認識)、TTS(音声合成)、多言語合成 を一つのライブラリで提供
- 音声入力→音声出力 を、テキスト変換なしで高速処理
- 4ビット量子化モデル(約5.3GB)が aufklarer/PersonaPlex-7B-MLX-4bit で公開
開発の経緯:音声認識から会話へ
- 最初はApple Siliconの 統合メモリ と MLXのMetal高速化 の検証が目的
- Pythonやサーバー不要、 CPUとGPU間のテンソル転送なし の設計
- ASR(Qwen3-ASR 0.6B、4ビット量子化)で MLXパターン 確立
- TTS(Qwen3-TTS 0.6B)で Mimi音声コーデック や10言語対応のストリーミング音声生成を追加
- 多言語合成(CosyVoice3 0.5B)で DiTフローマッチング を9言語で実装
- 現在は PersonaPlex 7Bによる音声to音声 を実現
PersonaPlex:三段階モデルから単一モデルへ
- 従来の音声アシスタントは ASR→LLM→TTS の三段階
- 各段階で 情報損失 や 遅延 が発生
- PersonaPlexは 音声入力→音声出力 を単一モデルで処理
- 17並列ストリーム(12.5Hz) で高速処理
- KyutaiのMoshiアーキテクチャ を基盤に、NVIDIAが18種の音声プリセットやロールベースプロンプトを拡張
モデル量子化と最適化
- 元のPersonaPlexは 16.7GBのPyTorchチェックポイント
- MLX最適化と4ビット量子化で 5.3GB まで削減
- 変換スクリプト(scripts/convert_personaplex.py)で
- 重み分類、量子化、プリセット抽出、HuggingFaceアップロード を自動化
単一モデルによる音声会話処理の仕組み
- Mimiエンコーダ で24kHz音声を 16コードブックトークン に変換
- Temporal Transformer (32層、4096d、7Bパラメータ、4ビット)が17ストリームを統合
- Depformer (6層、1024d、4ビット)が16ステップでエージェント音声トークンを生成
- Mimiデコーダ で最終音声を復元
- Mimiコーデック はTTS実装から流用、追加開発不要
Depformer:ステップごとの重み切り替え
- MultiLinearパターン で各ステップごとに異なる重みを適用
- 4ビット量子化で 2.4GB→650MB に削減
- 品質劣化なし をASRラウンドトリップで検証
システムプロンプトの重要性
- PersonaPlexは テキストプロンプト で会話の方向性を制御
- プロンプトなしでは 脱線しやすい
- CLIやAPIで 複数プリセット (一般アシスタント、カスタマーサービス、教師など)を選択可能
- カスタムプロンプトも事前トークン化して直接渡せる
性能とリアルタイム性
- M2 Max(64GB) で、PersonaPlexは RTF 0.87(68ms/step) を達成
- RTF(Real-Time Factor)が1.0未満= リアルタイムより高速
- 4ビット量子化で 80msフレーム予算(12.5Hz) をクリア
ラウンドトリップ検証によるE2Eテスト
- ライブラリ内の ASR、TTS、音声to音声 を組み合わせてE2Eテストが容易
- PersonaPlex出力をASRで再認識し、 キーワード一致で検証
ストリーミング処理の実装
- respondStream() で生成中に音声チャンクを逐次出力
- 各チャンクは 約2秒の24kHz音声
- CLIからも ストリーミング応答 に対応
高速化のための最適化
- eval()統合 でGPU同期バリアを削減
- 一括音声抽出 でMimiデコードの高速化
- プリフィルバッチ化 で初期化の高速化
- Temporal TransformerのMetalカーネルコンパイル でカーネル呼び出しを集約
- TTS移植時の最適化パターンを踏襲
導入方法・使い方
- GitHubからクローンしビルド
git clone https://github.com/ivan-digital/qwen3-asr-swiftcd qwen3-asr-swiftswift build -c release
- 音声to音声変換 (初回5.3GBダウンロード)
.build/release/audio respond --input your_audio.wav --output response.wav --voice NATM0
- ストリーミング音声to音声
.build/release/audio respond --input your_audio.wav --stream --output response.wav
- Metalカーネルコンパイル併用
.build/release/audio respond --input your_audio.wav --compile --stream --output response.wav
- 他モデルも利用可能
.build/release/audio transcribe audio.wav(ASR).build/release/audio speak "Hello world" --output hello.wav(TTS).build/release/audio speak "Hallo Welt" --engine cosyvoice --language german(多言語TTS)
技術的基盤・クレジット
- NVIDIA(PersonaPlex)、Kyutai(Moshi/Mimi)、Alibaba(Qwen ASR/TTS)、FunAudioLLM(CosyVoice)、Apple(MLX) の技術を活用
- aufklarer/PersonaPlex-7B-MLX-4bit で量子化モデル公開
- ivan-digital/qwen3-asr-swift でライブラリ全体を公開