ASPについて学ぶ - 2

はじめに

前回 Text To Speech (TTS)手法の概要について調べた。
今回はTTSに関するDeep Learning手法を調査し、実際に動かしてみる。

Deep LearningにおけるTTS

以下のページが分かりやすくまとめてくださっていた。
https://gist.github.com/tosaka2/30032cdd505fe7a66d91f14851e293e3

手法 著者 発表年 引用数(2020/4)
Wavenet Oord et al. 2016 1686
ParallelWavenet Oord et al. 2017 271
WaveRNN Kalchbrenner et al. 2018 147
Tacotron Wang et al. 2017 401
Tacotron2 Shen et al. 2017 439
DeepVoice Arik et al. 2017 271
DeepVoice2 Arik et al. 2017 196
DeepVoice3 Ping et al. 2017 106
ETTTS Tachibana et al. 2017 71
ClariNet Ping et al. 2018 89
Waveglow Prenger et al. 2018 107

今回はこの中からTacotron2とWaveglowを実際に動かしてみた。

Tacotron2

Tacotron2は文字から直接音声信号を出力するTTSフレームワーク Tacotronの改良版である。

日本語の解説記事 :
https://akifukka.hatenablog.com/entry/tacotrn2_1
https://akifukka.hatenablog.com/entry/tacotrn2_2

Tacotron2の処理は以下の2パートからなる

  1. 文字列からメルスペクトルグラムを推定する
  2. メルスペクトルグラムからWavenetにより音声信号を再構成する。

NVIDIA tacotron21チュートリアルでは、
メルスペクトルグラム推定部分は元のtacotron2のままだが、
メルスペクトルグラムから音声信号への変換はWaveglowを用いている。

tactron2, waveglowともに学習済みモデルが公開されており、
推論もjupyter notebookが用意されているので簡単に試せる。

デモをした感想

少し試した感じでは英語に関してはかなり長い文章でも流暢に読み上げてくれる。
ただ、日本語をローマ字にして入力しても片言になり、ものによっては
終了地点が定まっていないものがあった。

おそらく英語にはあまりない文章の終了文字に対しては、
メルスペクトル推定における文章の終了判定が
ただしく機能しないために起こっているものと思われる。

例えば
"Kyo ha ii tenki death" とすると片言な感じで1秒くらいの音声を出力してくれるが
"Kyo ha ii tenki desu" とすると文章の最後が不鮮明となり、10秒近くの出力となった。
(実行ごとに出力長が大きく変わるので不安定?)

f:id:nakamrnk:20200422135652j:plain
"Kyo ha ii tenki death" の結果

f:id:nakamrnk:20200422135759j:plain
"Kyo ha ii tenki desu" の結果

少なくともtacotron2のほうは言語が変わると再学習する必要がある。

まとめと今後

今回はDeep LearningによるTTSについて調査し、
実際に学習済みのTacotron2とWaveglowに触れてみた。
少なくとも英語に関しては人と判別がつかないレベルの音声が出せているのはすごいと思った。
今後は自分の音声を出力するTTSモデルを作りたいので、 データのサンプル方法や
どの程度の計算資源がかかるか調査したい。

参考文献