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パートからなる
- 文字列からメルスペクトルグラムを推定する
- メルスペクトルグラムからWavenetにより音声信号を再構成する。
NVIDIA tacotron21 のチュートリアルでは、
メルスペクトルグラム推定部分は元のtacotron2のままだが、
メルスペクトルグラムから音声信号への変換はWaveglowを用いている。
tactron2, waveglowともに学習済みモデルが公開されており、
推論もjupyter notebookが用意されているので簡単に試せる。
デモをした感想
少し試した感じでは英語に関してはかなり長い文章でも流暢に読み上げてくれる。
ただ、日本語をローマ字にして入力しても片言になり、ものによっては
終了地点が定まっていないものがあった。
おそらく英語にはあまりない文章の終了文字に対しては、
メルスペクトル推定における文章の終了判定が
ただしく機能しないために起こっているものと思われる。
例えば
"Kyo ha ii tenki death" とすると片言な感じで1秒くらいの音声を出力してくれるが
"Kyo ha ii tenki desu" とすると文章の最後が不鮮明となり、10秒近くの出力となった。
(実行ごとに出力長が大きく変わるので不安定?)
少なくともtacotron2のほうは言語が変わると再学習する必要がある。
まとめと今後
今回はDeep LearningによるTTSについて調査し、
実際に学習済みのTacotron2とWaveglowに触れてみた。
少なくとも英語に関しては人と判別がつかないレベルの音声が出せているのはすごいと思った。
今後は自分の音声を出力するTTSモデルを作りたいので、 データのサンプル方法や
どの程度の計算資源がかかるか調査したい。