学習済みFlowtronを試してみる

はじめに

前回Flowtron (Valle et al. 2020)の内容を理解しようとしたが、
今回は公開されている学習済みFlowtronを動かしてみる。

学習済みモデル

Flowtronの学習済みモデルFlowtron LibriTTS を用いた。
複数スピーカーによる音声データセットであるLibriTTSで学習されたモデルである。
このモデルにおいては123スピーカー分のembeddingが学習されていた。

メルスペクトルグラムから音声信号の推論にはwaveglowモデルを用いた。

結果

sigma = 0.4でサンプリングした
"Flowtron is awesome."
という文章に対するいくつかのスピーカーによる音声合成結果を以下に記述する。

speaker_id = 0

f:id:nakamrnk:20200519092523j:plain 左上は推論されたメルスペクトルグラム、右上はwaveglowによって再現された音声波形。
下段は2層あるflow layerのattentionである。
奇数番目と偶数番目で時間的に反転しているためattentionの方向も反転している。

speaker_id = 1

f:id:nakamrnk:20200519092958j:plain

speaker_id = 50

f:id:nakamrnk:20200519093205j:plain

speaker_id = 100

f:id:nakamrnk:20200519093301j:plain

ひとつのモデルでスピーカーごとに特徴のあるそれなりに自然な音声が生成できている ように感じる。

サンプリングの影響

Flowtronはガウス分布からサンプリングされたノイズによりメルスペクトルグラムを構成するため、
サンプリングされたノイズによって多少異なる音声信号が得られる。
ここではノイズ以外のパラメータを固定して3回runを回してどれくらい音声の多様性が
生まれるかを検証する。 ガウシアンノイズのsigma=1, 0.4の2つの値で検証した。

sigma=1

speaker_id=0 (run 1)

speaker_id=0 (run 2)

speaker_id=0 (run 3)

speaker_id=100 (run 1)

speaker_id=100 (run 2)

speaker_id=100 (run 3)

sigma=1でサンプリングした場合runごとのブレが大きすぎるように感じる。
特にspeaker_id=100の場合は同一スピーカーとは思えないほどブレている
(特にspeaker_id =100が顕著) 。
ガウス分布の分散が大きすぎると非言語情報だけでなく、スピーカーまで変わってしまうようだ。
また、やや発音が不自然に聞こえる音声も多い。

sigma=0.4

speaker_id=0 (run 1)

speaker_id=0 (run 2)

speaker_id=0 (run 3)

speaker_id=100 (run 1)

speaker_id=100 (run 2)

speaker_id=100 (run 3)

sigma=0.4の場合はsigma=1の場合と比較するとrunごとのブレは小さい。
同一speakerからの音声と言われても納得できる音声に対してアクセントなどに
微妙なブレが生じているためFlowtronに期待されている非文章情報のサンプリング
ができていると思われる。

感想

学習済みのFlowtronを動かしてみた。
少なくとも英語に関しては同一のネットワークで複数のスピーカーに対して
微妙に異なる自然な音声が生成できていてすごいと思った。
日本語音声でも同様なことができるかは今後可能ならば検証したい。