Irodori-TTS v2 — 表現豊かな高性能音声合成モデルの紹介と速度改善
表現力の高い AI 音声合成「Irodori-TTS」を、品質を落とさずに約5〜6倍高速化しました。1秒の音声を約0.05秒で生成できる水準(リアルタイムの約18倍速)に到達し、AI と音声で会話するシステムでも待ち時間を感じさせない応答速度を実現します。
疑問
人間らしい自然で表現豊かな音声を、リアルタイムで 合成することはできるでしょうか?
音声対話システム(マイク入力 → 音声認識 → LLM → 音声合成)では、音声合成の遅さがそのまま応答の遅さになって体験を損ないます。一方で「人間っぽさ」や「表現力」を備えた高品質なモデルは、計算に時間がかかるのが弱点でした。
回答
シンプルな回答
できます。
表現豊かな音声合成モデル Irodori-TTS を高速化し、リアルタイムの約18倍速 で動かせる構成を実現しました。1秒の音声を約0.05秒で合成できる水準で、対話システムでもスムーズに使える応答速度です。
実際にこの構成で生成した音声を以下に示します。いずれも同一の参照音声を起点に、テキストに応じて声色や抑揚が変化していることが聞き取れます。
| 感情 | 発話内容 | 音声 |
|---|---|---|
| 高揚 | やったー!ついに完成したよっ!みんな、見て見てっ! | |
| 怒り | もうっ、知らないんだから!絶対に許さないんだからねっ! | |
| 悲しみ | ごめんなさい……ほんとうに、ほんとうにごめんなさい……。 | |
| 驚き | えっ、嘘でしょ?!信じられない、ほんとうに?! | |
| 決意 | 絶対に諦めないっ!わたしが、必ずみんなを守ってみせるからっ! |
※ 上記サンプルはアニメ調の表現に特化した構成によるもので、同じ枠組みでニュースナレーションやカスタマーサポート向けの自然で落ち着いた話し方に特化したバリエーションを構築することも可能です。用途に合わせた音声合成の検討にご興味があれば、お問い合わせからお気軽にご相談ください。
シンプルな理由
- 元の Irodori-TTS は表現力が高い反面、毎回多くの計算を走らせていました。
- 今回、「必要な長さだけ生成する」「計算の手数を減らしても品質が落ちない仕組みを使う」 という2つの工夫を加えることで、品質を保ったまま大きく速くできました。
- 結果として、表現力と速さを両立できる構成にたどり着いています。
ここから先は、モデルの中身・改善手法・検証結果について順を追って詳しく説明します。
詳細:何をどう速くしたのか
品質を維持したまま、ベースラインと比較して 約5〜6倍の高速化 を実現しました。最終構成では、GPU 上で 音声生成1秒あたり0.054秒 で合成でき、これは リアルタイムの約18倍速 に相当します。
主な改善は次の2点です。
- 必要な長さだけ生成するように再学習した:毎回30秒分の音声を生成していた仕組みを、入力テキスト長に応じた長さに変えた。
- 拡散モデルの計算ステップを 40 → 6 に減らしても品質が落ちないサンプリング方式を採用した:Sway sampling と呼ばれる手法。
それぞれの考え方を簡単に整理すると、
- 1点目(生成長を絞る): 元のモデルは「常に30秒分の音声を生成し、末尾の無音区間を切り捨てる」という作りでした。これを「必要な長さでぴったり終わる」ように学習し直すことで、短い発話の合成コストが大幅に減ります。
- 2点目(ステップ削減 + Sway sampling): 拡散モデルは「ノイズから音声を徐々に作る」処理で、序盤はノイズが多く形が大きく変わり、終盤は形が決まってきて微調整に近い動きになります。Sway sampling は 序盤の計算を多く、終盤の計算を少なく割り当てる 手法で、これにより 6 ステップという少ないステップ数でも品質が崩れません。
- ベースラインの「40 ステップ + 等間隔サンプリング」と比べ、「6 ステップ + Sway」は誤り率(CER)も話者類似度もむしろ向上しました。ステップ数を増やしても品質は伸びませんでした。
Irodori-TTS の特徴
Irodori-TTS は、フローマッチング(flow matching) という、拡散モデルの一種で音声を生成する TTS です。
特徴的なのは、音声を直接生成するのではなく、DAC VAE という仕組みで圧縮された「潜在空間」の上で拡散プロセスを動かしている 点です。これは画像生成における Stable Diffusion(Latent Diffusion)と同じ発想で、低次元の表現の上で計算してから、最後に DAC のデコーダで音声波形に戻します。メルスペクトル+ボコーダを介する古典的構成と比べると、潜在の系列長が短く、拡散モデルの計算量を抑えながら高品質な波形再構成を得られるのが利点です(一方で、表現力そのものは拡散モデル本体と参照音声からのスタイル転写に由来します)。
速度改善の方針
応答速度を稼ぐため、Irodori-TTS v2 では以下の2点に取り組みました。
- 生成長を必要分だけに絞る(デュレーション固定学習)
- 拡散ステップ数を削る(6 ステップ + Sway sampling)
手法 1: デュレーション固定学習による生成長制御
Irodori-TTS はもともと 30 秒固定長で音声を生成 し、生成後に末尾の無音区間をトリミングすることで任意長の音声を出力する仕組みでした。これは合成のたびに常に 30 秒分のフローマッチングを走らせるため、短い発話でも一定のコストがかかってしまいます。
一方、テキストから 音声の長さ(duration)を予測して固定 し、必要な長さぶんだけ生成する方が高速化には有利です。しかし単純に予測したデュレーションを渡して生成させると、末尾が途中で途切れる という問題が発生しました。学習時にデュレーションを固定して訓練していないことが原因です。
そこで、社内で保有する音声データセットを用いて デュレーションを固定したうえで再学習 を行い、さまざまな話者・声質に対して安定して目的長の音声を生成できるモデルを得ました。これにより末尾切れを発生させずに必要最小限の長さだけ生成できるようになり、拡散プロセスの計算量が発話長に比例するかたちに揃ったため、単発のレイテンシも、同一GPUで捌けるスループットも揃って改善しました(図1)。
手法 2: 拡散ステップ数の削減(6 step + Sway sampling)
フローマッチング型の拡散モデルでは、ノイズから音声特徴への変換を数値積分の N ステップ で離散化して解きます。Irodori-TTS のデフォルトは 40 ステップ であり、ここを 品質を落とさずにどこまで削れるか を実測ベースで検証しました。
検証は F5-TTS で提案された Sway sampling と、Faster-F5-TTS で提案された EPSS(Empirically Pruned Step Sampling)の2つのスケジューリング手法を中心に行いました。
- Sway sampling: 拡散プロセスの時刻 t ∈ [0, 1] を等間隔ではなく不均一に取る手法。係数 s で時刻列を歪ませ、s = −1.0 では ノイズが多い序盤を密に、構造が決まってきた終盤を疎にサンプリング する。少ないステップ数でも安定して収束させることが狙い。
- EPSS: 解析的な分布ではなく、特定ステップ数(4 / 6 / 8 など)ごとに実測でキャリブレーションした離散時刻列をプリセットとして持つ手法。
それぞれの手法における時刻 t の取り方を図2に示します。Sway は序盤に時刻を集中させ、EPSS は実測ベースで決め打った離散時刻列を用いる点が、等間隔の Linear との大きな違いです。
検証セットアップ
ステップ数とスケジュールの最適点を決めるため、JSUT basic5000 から固定 seed (=42) で 100 文をサンプリングし、合計 14 構成(6 / 8 / 15 / 20 / 30 / 40 ステップ × {Linear, Sway s = −1.0, EPSS})について以下の指標を実測しました。RTF はすべて NVIDIA RTX 3090 上で計測した値です。
- CER(誤り率): 生成音声を ASR で書き起こし、原文と比較。ASR には Cohere の
CohereLabs/cohere-transcribe-03-2026を採用。漢字↔ひらがな表記揺れの影響を排除するため pyopenjtalk で読み(kana)に正規化してから CER を計算。 - 話者類似度(sim): 参照波形と生成音声の話者埋め込みを OpenVoice の話者エンコーダで抽出し、cosine 類似度をとる。低い側のパーセンタイル(P25 / P10 / P5)を「声質崩れ頻度」の指標として確認。
- RTF: GPU 上の合成時間 ÷ 生成音声長。小さいほど高速。
検証結果
14構成すべての kana CER 分布を表1、話者類似度(OpenVoice cosine)の分布を表2に示します。値はいずれも各パーセンタイルでの値で、CER は低いほど・sim は高いほど良いです。RTF は GPU 上の合成所要時間 ÷ 生成音声長で、値が小さいほど高速です。
表1: CER (kana 正規化、低いほど良い) の構成別分布
| 構成 | 中央 | P75 | P90 | P95 | 最悪 | RTF |
|---|---|---|---|---|---|---|
| 6step_linear | 0.000 | 0.080 | 0.139 | 0.181 | 0.375 | 0.054 |
| 6step_sway_m1.0 ★ | 0.000 | 0.071 | 0.131 | 0.161 | 0.370 | 0.054 |
| 6step_epss_v2 | 0.000 | 0.078 | 0.135 | 0.161 | 0.400 | 0.053 |
| 8step_linear | 0.000 | 0.075 | 0.135 | 0.180 | 0.312 | 0.055 |
| 8step_sway_m1.0 | 0.000 | 0.091 | 0.147 | 0.201 | 0.400 | 0.057 |
| 8step_epss_v2 | 0.000 | 0.084 | 0.139 | 0.180 | 0.312 | 0.055 |
| 15step_linear | 0.000 | 0.080 | 0.143 | 0.189 | 0.400 | 0.068 |
| 15step_sway_m1.0 | 0.000 | 0.085 | 0.156 | 0.226 | 0.400 | 0.069 |
| 20step_linear | 0.000 | 0.090 | 0.155 | 0.213 | 0.400 | 0.076 |
| 20step_sway_m1.0 | 0.000 | 0.083 | 0.143 | 0.226 | 0.400 | 0.079 |
| 30step_linear | 0.000 | 0.085 | 0.139 | 0.180 | 0.400 | 0.098 |
| 30step_sway_m1.0 | 0.000 | 0.086 | 0.147 | 0.223 | 0.400 | 0.108 |
| 40step_linear | 0.000 | 0.090 | 0.155 | 0.213 | 0.400 | 0.112 |
| 40step_sway_m1.0 | 0.000 | 0.094 | 0.149 | 0.223 | 0.400 | 0.124 |
表2: 話者類似度 (OpenVoice cosine、高いほど良い) の構成別分布
| 構成 | 中央 | P25 | P10 | P5 | 最悪 |
|---|---|---|---|---|---|
| 6step_linear | 0.852 | 0.827 | 0.804 | 0.790 | 0.621 |
| 6step_sway_m1.0 ★ | 0.858 | 0.840 | 0.825 | 0.804 | 0.700 |
| 6step_epss_v2 | 0.854 | 0.835 | 0.810 | 0.801 | 0.702 |
| 8step_linear | 0.854 | 0.829 | 0.812 | 0.802 | 0.740 |
| 8step_sway_m1.0 | 0.853 | 0.832 | 0.809 | 0.799 | 0.719 |
| 8step_epss_v2 | 0.857 | 0.841 | 0.818 | 0.796 | 0.696 |
| 15step_linear | 0.853 | 0.830 | 0.814 | 0.795 | 0.726 |
| 15step_sway_m1.0 | 0.852 | 0.836 | 0.816 | 0.804 | 0.728 |
| 20step_linear | 0.853 | 0.827 | 0.809 | 0.797 | 0.718 |
| 20step_sway_m1.0 | 0.853 | 0.834 | 0.815 | 0.811 | 0.730 |
| 30step_linear | 0.851 | 0.830 | 0.810 | 0.794 | 0.705 |
| 30step_sway_m1.0 | 0.853 | 0.831 | 0.816 | 0.812 | 0.724 |
| 40step_linear | 0.850 | 0.832 | 0.810 | 0.795 | 0.738 |
| 40step_sway_m1.0 | 0.852 | 0.832 | 0.817 | 0.801 | 0.730 |
主な観察は以下の通りです。
- 6step + Sway (s = −1.0) が CER・sim 両方で最良。kana CER P95 = 0.161(linear 0.181 より −11%)、sim 中央 = 0.858 で全構成中トップ。
- per-sentence 比較: 100 文中 67 文で Sway の方が話者類似度が高く、平均 +0.014 上昇。特に linear で sim が低かった文ほど Sway の改善幅が大きく、外れ値抑制に効いている。
- ステップを増やしても品質は伸びない: 6step → 40step で kana CER P95 が 0.16 → 0.22(+37%)とむしろ悪化。RTF は 0.054 → 0.124 と倍以上になる一方で、改善ゼロ。
- EPSS は 6step で Sway と同水準(CER P95 0.161, sim 中央 0.854)だが上回らず、また EPSS は 6 / 8 ステップ専用プリセットであり高ステップ域では使えない。汎用性と最高品質の双方で Sway を選ぶのが妥当。
- 20–30step Sway は外れ値耐性が高い(sim P5 0.811–0.812)。レイテンシ要件が緩い高品質モードでは選択肢になる。
採用構成と成果
デュレーション固定学習 × 6 step Sway sampling (s = −1.0) の組み合わせを最終構成として採用しました。
- RTF = 0.054(40step linear の RTF 0.112 と比較して約 2 倍)
- 初期実装の 30 秒固定生成と合わせると、音声合成パイプライン全体で 5〜6 倍の高速化
- 上記を CER・話者類似度といった品質指標を維持したまま達成
これにより、表現力の高い拡散モデル系 TTS の品質を保ったまま、カスケード構成のままで TTS 区間の遅延を実用的な水準まで圧縮することができました。