ねらい
音声合成(TTS)の世界では、品質と速度のトレードオフに悩まされることが多い。高品質な音声を生成しようとすると遅くなるし、速くしようとすると品質が落ちる。
そこに登場したのがMatcha-TTS。抹茶のように滑らかで、しかも高速。この新しいアプローチが何をやっているのか、解説していこう。
対象
- TTSモデルに興味がある人
- Diffusionモデルベースの音声合成を知りたい人
- VITS、Grad-TTS、FastSpeechなどを触ったことがある人
ゴール
- Matcha-TTSのアーキテクチャを理解する
- 従来手法との違いを把握する
- 実際に動かせるようになる
TL;DR
Matcha-TTSは、Conditional Flow Matching(CFM)を使った非自己回帰型TTSモデル。少ない推論ステップで高品質な音声を生成でき、メモリ効率も良い。ICASSP 2024で発表された。
Matcha-TTSとは
arXiv論文のabstractより:
We introduce Matcha-TTS, a new encoder-decoder architecture for speedy TTS acoustic modelling, trained using optimal-transport conditional flow matching (OT-CFM). This yields an ODE-based decoder capable of high output quality in fewer synthesis steps than models trained using score matching.
(Matcha-TTSを紹介します。これは高速TTS音響モデリングのための新しいエンコーダ・デコーダアーキテクチャで、最適輸送条件付きフローマッチング(OT-CFM)を使って訓練されています。これにより、スコアマッチングで訓練されたモデルよりも少ない合成ステップで高品質な出力が可能なODEベースのデコーダが得られます。)
引用元: https://arxiv.org/abs/2309.03199
名前の「Matcha」は、日本の抹茶から来ている。滑らかで高品質、そして健康的(計算効率が良い)というイメージだろう。
技術的な背景
Diffusionモデルの課題
近年、画像生成や音声合成でDiffusion Probabilistic Models(DPM)が大きな成功を収めている。Grad-TTS、Diff-TTSなどがその例だ。
しかしDiffusionモデルには欠点がある。高品質な生成には多数の推論ステップ(通常50〜1000ステップ)が必要で、リアルタイム性が犠牲になりがちだ。
Flow Matchingという新手法
Matcha-TTSはConditional Flow Matching(CFM)、特に**Optimal-Transport CFM(OT-CFM)**という手法を使う。
これは何かというと、ノイズから目標分布への「流れ」を直接学習する方法だ。従来のScore Matching(Diffusionの学習で使われる)よりも効率的に学習でき、少ないステップで高品質な生成が可能になる。
論文より:
CFM is a new technique that differs from earlier approaches to speed up SDE/ODE-based TTS, which most often were based on distillation.
(CFMはSDE/ODEベースTTSを高速化する従来アプローチとは異なる新しい技術です。従来は蒸留ベースのものが多かったのですが。)
引用元: https://arxiv.org/html/2309.03199v2
Matcha-TTSの特徴
公式GitHubより:
We propose Matcha-TTS, a new approach to non-autoregressive neural TTS, that uses conditional flow matching (similar to rectified flows) to speed up ODE-based speech synthesis.
引用元: https://github.com/shivammehta25/Matcha-TTS
主な特徴をまとめると:
1. 高速推論
従来のDiffusion TTSが50ステップ以上必要なのに対し、Matcha-TTSは2〜10ステップ程度で高品質な音声を生成できる。
2. 小さいメモリフットプリント
論文によると、比較対象のベースラインモデルの中で最小のメモリ使用量を達成。
3. 外部アライナー不要
音素と音声のアライメントを外部ツールに頼らず、モデル内部で学習する。Monotonic Alignment Search(MAS)を使用。
4. 非自己回帰
音素を順番に処理するのではなく、一度に全体を生成。長い文章でも効率的。
アーキテクチャ
Matcha-TTSは大きく分けて3つの部分からなる:
1. テキストエンコーダ
入力テキスト(音素列)を処理して、コンテキスト表現を生成。RoPE(Rotary Position Embedding)を使った Transformer ベース。
2. デュレーション予測器
各音素がどのくらいの長さで発話されるかを予測。これによりアライメントを決定する。
3. フローマッチングデコーダ
U-Netバックボーンを持つデコーダ。Grad-TTSにインスパイアされているが、2D CNNを1D CNNに置き換えることでメモリ消費を大幅に削減。
使い方
インストール
git clone https://github.com/shivammehta25/Matcha-TTS.git
cd Matcha-TTS
pip install -e .
Pythonからの推論
from matcha.hifigan.config import v1
from matcha.hifigan.denoiser import Denoiser
from matcha.hifigan.env import AttrDict
from matcha.hifigan.models import Generator as HiFiGAN
from matcha.models.matcha_tts import MatchaTTS
from matcha.text import sequence_to_text, text_to_sequence
from matcha.utils.utils import intersperse
import torch
# モデルのロード(事前学習済みモデルが自動ダウンロードされる)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# テキストを音素に変換
text = "Hello, this is a test."
x = torch.tensor(
intersperse(text_to_sequence(text, ['english_cleaners2'])[0], 0),
dtype=torch.long,
device=device
)[None]
x_lengths = torch.tensor([x.shape[-1]], dtype=torch.long, device=device)
# 推論(n_timesteps で品質と速度のトレードオフを調整)
# 少ないステップ = 高速だが品質低下
# 多いステップ = 低速だが高品質
コマンドラインから
# 基本的な推論
matcha-tts --text "Hello world" --output output.wav
# オプション付き
matcha-tts --text "Hello world" \
--output output.wav \
--temperature 0.667 \
--speaking_rate 1.0 \
--n_timesteps 10
ONNX エクスポート
本番環境向けにONNXエクスポートもサポート。
python3 -m matcha.onnx.export matcha.ckpt model.onnx --n-timesteps 5
他のTTSモデルとの比較
vs Grad-TTS
Matcha-TTSはGrad-TTSの設計にインスパイアされているが、Score MatchingではなくFlow Matchingを使用。これにより少ないステップで同等以上の品質を達成。
vs VITS
VITSは end-to-end で波形まで生成するが、Matcha-TTSは音響特徴(メルスペクトログラム)を生成し、別途ボコーダ(HiFi-GANなど)で波形に変換する。
vs FastSpeech 2
FastSpeech 2は決定論的で高速だが、生成の多様性がない。Matcha-TTSは確率的モデルなので、同じテキストでも微妙に異なる自然な音声を生成できる。
vs Voicebox
MetaのVoicebox(2023年)も同じくCFMを使用しているが、60,000時間の独自データで訓練されており、コードや重みは非公開。Matcha-TTSは公開データで訓練され、コードもチェックポイントも公開されている。
評価結果
論文によると:
Compared to strong pre-trained baseline models, the Matcha-TTS system has the smallest memory footprint, rivals the speed of the fastest models on long utterances, and attains the highest mean opinion score in a listening test.
(強力な事前学習済みベースラインモデルと比較して、Matcha-TTSシステムは最小のメモリフットプリントを持ち、長い発話では最速モデルに匹敵する速度を達成し、リスニングテストでは最高の平均オピニオンスコアを獲得しました。)
引用元: https://arxiv.org/abs/2309.03199
つまり、速度・メモリ・品質のすべてで競争力があるということだ。
実践的なTips
実際にMatcha-TTSを使う上でのノウハウ。
n_timesteps の調整
- 2〜5: 高速だが品質はやや低下
- 10: バランスが良い
- 20以上: 品質重視だが遅くなる
temperature の調整
- 低い値(0.4〜0.6): より安定した、予測可能な音声
- 高い値(0.8〜1.0): より多様で表現豊かだが、ときどき不安定
ボコーダの選択
デフォルトはHiFi-GANだが、Vocosなど他のボコーダも使える。品質と速度のトレードオフに応じて選択。
まとめ
Matcha-TTSは「Flow Matchingで高速・高品質を両立した」TTSモデルだ。
主な特徴:
- OT-CFMによる効率的な学習と推論
- 2〜10ステップで高品質音声生成
- 最小クラスのメモリ使用量
- 外部アライナー不要
- オープンソース(コード・重み公開)
音声合成を始めたい人にも、既存システムの改善を考えている人にも、試してみる価値のあるモデルだ。
参考リンク
- 公式GitHub: https://github.com/shivammehta25/Matcha-TTS
- デモページ: https://shivammehta25.github.io/Matcha-TTS/
- arXiv論文: https://arxiv.org/abs/2309.03199
- Hugging Face Space: https://huggingface.co/spaces/shivammehta25/Matcha-TTS
- Hugging Face Papers: https://huggingface.co/papers/2309.03199