すべての記事

· Casimiro Ferreira· 1 分で読めます

ジャガイモの上でも動く TTS モデル

  • phoonnx
  • TTS
  • ONNX
  • VITS
  • self-hosted
  • OVOS

良質なテキスト読み上げに GPU やクラウドの契約は必要ありません。自然で多言語の音声は、あなたがサーバーと呼ぶのを恥じるような代物 — 「念のため」に引き出しにしまっておくたぐいのボード — に収まります。ジャガイモです。

phoonnx は、まさにその対象のための私たちの研究フレームワークです。すなわち、完全にオフラインで、CPU 上で、安価なハードウェア上で動作する小さな VITS ベースの音声であり、しかも私たちが自分たちでゼロから学習させることもできるものです。

小さいとはどれくらい小さいのか?

手を振って誤魔化す代わりに、実際の数字を出しましょう。私たちは本番の phoonnx 音声 — バスク語の「Miro」音声(OpenVoiceOS/phoonnx_eu-ES_miro_espeak)— を Hugging Face から直接取り出し、ONNX グラフの重みを数えました。

import onnx, numpy as np
m = onnx.load("miro_eu-ES.onnx")
print(sum(int(np.prod(i.dims)) for i in m.graph.initializer))
# 15650459

約 1,565 万パラメータ。 それが音声全体です — エンコーダ、デコーダ、その一切合切 — 63 MB のファイルに収まっています。同じリリースの女性版「Dii」音声はまったく同じ数を数えます。なぜなら、それらは標準の phoonnx VITS アーキテクチャを共有しているからです。個性は追加の容量にではなく、重みの中に宿っています。

参考までに。「小さな」現代の言語モデルの単一のレイヤーは、この音声合成器全体よりも多くのパラメータを持つことがあり、それでもこれは流暢に話します。

なぜ VITS か、そしてなぜ ONNX か

VITS は、あらゆる phoonnx 音声の背骨です。それはエンドツーエンドのアーキテクチャ — テキスト(正確には音素)を入力し、波形を出力する — であり、世話を焼く別個のボコーダも、一度に一サンプルずつ這い進む自己回帰ループもありません。そのエンドツーエンド設計こそが、ジャガイモの上で扱いやすくしているものです。一回のフォワードパス、並列合成、完了です。

私たちはエッジに PyTorch を出荷しません。学習済みの音声は ONNX にエクスポートされ、CPU 上で onnxruntime を通じて実行されます — CUDA なし、GPU なし、ドライバのロシアンルーレットなし。onnxruntime は緊密で移植性のある C++ エンジンであり、1,500 万パラメータのグラフは、Raspberry Pi クラスのコアがリアルタイムより速く噛み砕けるものの十分範囲内です。その結果は、インターネットがダウンしているとき、クラウドプロバイダに障害があるとき、あるいはそもそも自宅のオーディオを家の外に出したくなかったときにも話し続ける音声アシスタントです。

賢さが隠れているのは音素の中

小さな音響モデルが小さくいられるのは、phoonnx が難しい言語的作業を事前に、音素化器の中で行うからです。音素化器(書記素から音素へ、すなわち G2P)は、書かれたテキストを、モデルが実際に話す音の単位の列に変換します — そのおかげで VITS ネットワークは綴りを学ぶ必要が一切なく、音だけを学べばよいのです。

私たちの音素の作業は 820 の言語のための書記素から IPA へ古典的なポルトガル語音声学 に根ざしており、これにより数週間の専門家アノテーションなしに低資源言語の音声を学習させることが可能になります。

phoonnx は意図的に音素化器に依存しない設計であり、その小さな軍勢を同梱しています。espeak-nggruutepitranmisakitransphone(Glottolog にカタログ化された数千もの言語に手を伸ばします)、さらにアラビア語向けの mantoq、ガリシア語向けの cotovia、日本語向けの OpenJTalk、韓国語向けの KoG2P といった専門家群です。それらは IPA、ARPA、Pinyin、Hangul、Buckwalter を出力します — その言語が必要とするものは何でも。他のすべてと同様に ONNX にエクスポートされた、ByT5 上に構築されたモデルベースの多言語 G2P さえあります。

正書法を音素化器にオフロードすることこそが、1,500 万パラメータのモデルが、書かれたのを一度も見たことのない低資源言語で良い響きを出せる秘訣です。

音声を動かすだけでなく、作るためのフレームワーク

phoonnx は推論ツールキットだけではありません。付属のフレームワーク phoonnx_train は、そもそも私たちがどうやって音声を作るかです。

phoonnx_train はパイプライン全体をカバーします。

  • LJSpeech スタイルのデータセットを音素化された学習データに前処理すること。
  • 単一のコンシューマー向けまたはミドルレンジの GPU で VITS ジェネレータ(あの約 1,565 万パラメータ)を学習させること — これほど小さなモデルには学習クラスタは不要です。
  • 完成したチェックポイントを単一のスクリプトで ONNX にエクスポートすること。デバイス上の onnxruntime にそのまま差し込む準備が整います。

レシピがオープンでモデルが小さいので、まったくオープンなオフラインの選択肢がない言語のためのまったく新しい音声を構築することは、研究助成金規模ではなく週末規模のプロジェクトです。それが、私たちがベンダーがある言語を商業的に興味深いと判断するのを待つのではなく、十分にサービスが行き届いていない言語 — バスク語、ミランダ語、ヨーロッパポルトガル語など — のギャップを埋めてきた方法です。

すでにあなたのアシスタントに組み込み済み

これらを手作業で貼り合わせる必要はありません。phoonnx はネイティブの OpenVoiceOS プラグイン ovos-tts-plugin-phoonnx を同梱しており、それがあなたのために音声を取得してロードします。

"tts": {
  "module": "ovos-tts-plugin-phoonnx",
  "ovos-tts-plugin-phoonnx": {
    "voice": "OpenVoiceOS/phoonnx_pt-PT_miro_tugaphone"
  }
}

voice を省くと、あなたの言語に一致する最初のモデルを選びます。アシスタントの外で音声を管理するために、言語を一覧表示し、音声を閲覧し、モデルを事前ダウンロードするための CLI、phoonnx-voices があります。

phoonnx-voices list-voices --lang pt-PT
phoonnx-voices download OpenVoiceOS/phoonnx_pt-PT_miro_tugaphone

そして phoonnx はプレーンな VITS-over-ONNX を話すので、その推論エンジンは Piper、Mimic3、Coqui、MMS によって学習された音声も実行します — 合計で千を超える言語と音声です。一つの小さなランタイム、巨大なカタログ、そのどれも自宅へ電話をかけません。

要点

あなたを尊重する音声技術は、あなたのいる場所で — あなたのハードウェア上で、あなたの管理下で、お望みならネットワークケーブルを抜いた状態で — 動作しなければなりません。phoonnx は、そこにたどり着く方法はより大きなモデルではなく、小さく作られた正しいアーキテクチャだ、という私たちの賭けです。背骨には VITS、言語的負荷を担う賢い音素化器、移植性のための ONNX、そして誰もがカタログを育てられるようにするオープンな学習フレームワーク。

1,550 万パラメータが CPU 上で動作し、誰もが所有できるハードウェアで学習される。それが、あらゆる phoonnx 音声の背後にある学習パイプラインです。