Neural text to speech のメモ(2020 年 3 月 28 日時点)


テキストから, 自然な(人間が話しているっぽい)スピーチを生成し, LibTorch, TensorFlow C++ でモバイル(オフライン)でリアルタイム or インタラクィブに動く(動かしやすそう)な手法に注力しています.

英語に限っています.

人気がありそう(いろいろな人がトライしていて知見や実装があるもの)なやりやた

Tacotron2 -> [Mel spectrogram(wav)] -> WaveRNN -> [audio(wav)]

最近のトレンド?

Tacotron2 の部分を Transformer 系のものを使う(e.g. FastSpeech), WaveRNN の部分を WaveGlow, WaveFlow を使う.

Mel spectroguram(メル スペクトログラム)

中間のデータ表現. 誤差を計算したりいろいろ処理がしやすいのでこの Mel spectrogram データを入出力に使うのが長く使われている. WaveRNN, Tacotron2 も Mel spectrogram を中間データ形式として使う.

Tactron2

NATURAL TTS SYNTHESIS BY CONDITIONING WAVENET ON MEL SPECTROGRAM
PREDICTIONS

Tacotron に比べてより簡略化したネットワーク. Mel spectrogram を生成後は, Tacotron では Griffin-Lim で処理していた部分を WaveNet に置き換え(この部分はどれでもよい?).

WaveRNN

Mel spectrogram から自然な音声生成. Griffin-Lim や WaveNet は処理が重いが, 品質を保ったままモバイル CPU でもインタラクティブに動くように sparse に計算させるなどして高速化.

WaveGlow

WaveRNN + Glow.

論文著者によるオフィシャル実装があり検証しやすい. pytorch 実装.

WaveRNN のように mel spectrogram を生成する Tacotron2 などと組み合わせる.
合成が高速(mel spectrogram -> audio の部分)

オフィシャルの提供の pretrained model は 640 MB あるので, モバイルなどで動かすにはモデルデータ削減(パラメータ調整)が必要かもです(昨今のメモリ 8 ~ 12 GB, ストレージ 512GB ~ 1TB 搭載ハイエンドスマホなら削減しなくてもよさそう...?)

MelNet

MelNet: A Generative Model for Audio in the Frequency Domain
https://arxiv.org/abs/1906.01083

インターネット上のビデオから学習して, 話者の声質を再現

FastSpeech

高速に TTS できるっぽい. ソースコード公開予定

FastSpeech: Fast, Robust and Controllable Text to Speech
https://arxiv.org/abs/1905.09263

有志?による実装

pretrained model でそこそこいい感じに推論できます.

CPU でも I'am happy to see you again だと 1 秒くらいで合成できます(Transformer 0.1 秒, griffin-lim 0.9 秒くらい). waveglow と組みあわえる場合は 9 秒くらい.

関連論文

Almost Unsupervised Text to Speech and Automatic Speech Recognition
https://speechresearch.github.io/unsuper/

少ないデータから学習できる

Transformer-TTS

Neural Speech Synthesis with Transformer Network
https://arxiv.org/abs/1809.08895

LCPNet

モバイルで動く

Mellotron

Mellotron: Multispeaker expressive voice synthesis by conditioning on rhythm, pitch and global style tokens

感情や歌声などのトレーニングデータなしに, 感情を含んだ音声や歌声を生成できる.

2019 年 11 月 25 日にオフィシャル実装公開されました.

WaveFlow

WaveGlow より, よりコンパクトに表現できる(パラメータ数が少ない). 2D convolution する. WaveGlow, WaveNet もここから派生して定義することがでいる.

WaveFlow: A Compact Flow-based Model for Raw Audio
https://arxiv.org/abs/1912.01219

W.I.P 実装
https://github.com/L0SG/WaveFlow

ForwardTacotron

FastSpeech inspired.

Tacotron と FastSpeech のいいとこ取りな感じか.

その他

ClariNet: Parallel Wave Generation in End-to-End Text-to-Speech
https://arxiv.org/abs/1807.07281

Close to Human Quality TTS with Transformer
https://arxiv.org/abs/1809.08895

https://github.com/tensorflow/models/tree/master/official/transformer を使えばさらっと実装できるっぽい...?

FFTNet http://gfx.cs.princeton.edu/pubs/Jin_2018_FAR/
リアルタイム向け. WaveRNN よりいいかも?

GAN-based text-to-speech synthesis and voice conversion (VC)
https://github.com/r9y9/gantts

AlignTTS: Efficient Feed-Forward Text-to-Speech System without Explicit Alignment
https://arxiv.org/abs/2003.01950

WG-WaveNet: Real-Time High-Fidelity Speech Synthesis without GPU
https://arxiv.org/abs/2005.07412

所感

Tacotron は end-to-end で学習できるのが利点であるが, 品質を出すにはいろいろ学習の試行錯誤が必要なようである.
2020 年 3 月 28 日時点では,

  • Tacotron2 + Waveglow が基準品質(英語)
  • FastSpeech + WaveGlow -> Tacotron2 + Waveglow に比べ, いくらか機械的にはなるがより抑揚などが制御できている(英語) LJSpeech 以外のデータセットで学習すればいい感じになるかも
  • モバイル向けなら FastSpeech + SquezeWave or ForwardTacotron + SqueezeWave か?

Transformer 系は高速でモバイルで動かすのによさそうである.

Tacotron + WaveRNN は単一話者向け(一話者一学習データ)っぽいので, マルチスピーカーや声質変換, 感情つけなどの場合は別のモデルがよさそう(DeepVoice, LoopVoice, Mellotron など)

MelNet に期待.

実装