Phonon TTSリリース:高品質なオンデバイス音声合成

概要

Phononは、サーバーとの通信やネットワーク接続を必要とせずに動作するように設計された、コンパクトなオンデバイス音声合成(TTS)モデルです。Pocket TTSの系譜から派生したフローマッチング技術を活用することで、Phononは小さなメモリフットプリントで高品質な音声合成を実現しており、モバイルデバイス、ラップトップ、Webブラウザへのデプロイに適しています。

技術アーキテクチャと機能

Phononには65 MBと75 MBの2つの主要なサイズがあります。これらのモデルは、英語、フランス語、ドイツ語、スペイン語、ポルトガル語の5言語をサポートしています。

  • 推論効率: このモデルは速度が最適化されており、Hugging Face Open TTS LeaderboardのCPUストリーミング部門、特に最初の音声が出力されるまでの時間(TTFA)メトリクスでトップに立っています。31mバージョンで28 ms、40mバージョンで38 msのTTFAを達成しています。
  • 推論フレームワーク: チームは、CPU(Intel、Arm、WebAssembly)、GPU(CUDA、Vulkan、Metal、WebGPU)、NPU(Apple Core ML、Snapdragon)を含む10以上のバックエンドをサポートする専用の推論フレームワーク ptts を開発しました。
  • Transformers統合: PhononはHugging Face Transformers(v5.21以降)に統合されています。モデルが音声の潜在変数を自己回帰的に処理するモジュール設計を採用しています。音声コーデックがトークナイザーとして機能し、音声は生の録音データではなく、話者の潜在変数のテンソルとして表現されます。

ライセンスとアクセシビリティ

  • Phonon 31m: Apache 2.0ライセンス。商用製品での無料利用が可能です。
  • Phonon 40m: CC BY-NCライセンス。非商用プロジェクト向けです。
  • デプロイメント: これらのモデルはGradium Studioを介した音声クローン作成やカスタム音声デザインをサポートしており、開発者はパーソナライズされた音声をローカルアプリケーションに統合できます。

パフォーマンスとベンチマーク

Phononは、明瞭度(単語誤り率)、速度(逆リアルタイム係数およびTTFA)、自然さ(UTMOS/KOMOS)の観点からモデルを評価するHugging Face Open TTS Leaderboardで評価されています。

  • 明瞭度: Phononはドイツ語とスペイン語で1位を獲得し、評価されたすべての言語でトップ3を維持しており、はるかに大きなサイズのモデルと競合する性能を発揮しています。
  • 速度: 現在、最初の音声が出力されるまでの時間に関するCPUストリーミングベンチマークで首位にあり、リアルタイムかつ低遅延なアプリケーションへの適合性を示しています。

Transformersでの実装

開発者は、GradiumPhononTTSForConditionalGeneration クラスを活用することで、Transformersエコシステム内でPhononを使用できます。このモデルは、音声プロンプトをテンソルとして注入するチャットテンプレート形式を使用します。

from transformers import AutoProcessor, GradiumPhononTTSForConditionalGeneration

model_id = "gradium/phonon-31m-en"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = GradiumPhononTTSForConditionalGeneration.from_pretrained(model_id, device_map="auto")

# The processor handles audio tokenization and chat template formatting
inputs = processor.apply_chat_template(
    conversation,
    tokenize=True,
    return_dict=True,
    add_generation_prompt=True,
    processor_kwargs={"audio_prompt_latents": [voice]},
).to(model.device)

outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)

この実装により、バッチ生成や完全なグラフの torch.compile サポートが可能になり、大規模な音声データセットの合成を容易にします。

Sources