Tacotron2を日本語で学習してみる(0から学習編)

はじめに

f:id:shirowanisan:20201221132645p:plain

NVIDIA社が公開しているTacotron2は英語モデルです。

そのため、今回は自分でTacotron2の日本語モデルを作ってみようと思いました。

ちなみに、先に言ってしまうと今回の設定は上手く行きませんでした。上手くいったパターンは以下の「Tacotron2を日本語で学習してみる(転移学習編)」で記述しています。

shirowanisan.com

Tacotron2とは

Tacotron2に関する説明は以下で行っています。

shirowanisan.com

使用する日本語音声データセット 

以下の音声データセットで日本語のTacotron2を作成してみようと思います。

www.kaggle.com

これは、夏目漱石の明暗を朗読したデータセットで、6841個のwavファイルで構成されています。音声データの中身を、例として載せておきます。

学習のためのfilelistの作成

tacotron2で学習するためにはwavファイルとテキストの対応を示すfilelistを作る必要があります。そのため、データセットに含まれていたtextからtacotron2用のfilelistを作成しました。

before(データセットに含まれていたtext)

meian/meian_0000.wav|この前探った時は、途中に瘢痕の隆起があったので、ついそこが行きどまりだとばかり思って、ああ云ったんですが、|kono mae sagut ta toki wa 、 tochu- ni hankon no ryu-ki ga at ta node 、 tsui soko ga yukidomari da to bakari omot te 、 a- yut ta n desu ga 、|8.77
meian/meian_0001.wav|今日疎通を好くするために、そいつをがりがり掻き落して見ると、まだ奥があるんです」|kyo- sotsu- wo yoku suru tame ni 、 soitsu wo garigari kaki otoshi te miru to 、 mada oku ga aru n desu|7.48

after(tacotron2用に変えたもの)

meian/meian_0000.wav|konomaesaguttatokiwa,tochu-nihankonnoryu-kigaattanode,tsuisokogayukidomaridatobakariomotte,a-yuttandesuga,

meian/meian_0001.wav|kyo-sotsu-woyokusurutameni,soitsuwogarigarikakiotoshitemiruto,madaokugaarundesu

音素の変換は行わなくても学習できるかもしれませんが、私は以下のように一部音素を変換しました。

変換前 変換後
,
.
' n
―― <削除>
<削除>
<削除>
<半角空白> <削除>

データセットのサンプリングビット数の変換

データセットのwavファイルはサンプリングビットが32なのですが、このままでは上手く学習できなかったため、サンプリングビットを16に変換しました。サンプリングビットの変換方法については以下で説明しています。

shirowanisan.com

データセットの分割

データセットはtrainとvalを以下のように分割しました。

項目
train 6800
val 41

Tacotron2のハイパーパラメータの設定

日本語で学習するにあたり、以下のハイパーパラメータを変更しました。

text_cleanersは、今回はローマ字で音素を示すためbasic_cleanersに変更、

batch_sizeは、GPUのメモリが足りなかったので32にしました。

項目 デフォルト値 設定値
text_cleaners ['english_cleaners'] ['basic_cleaners']
batch_size 64 32

学習結果

trainのlossの結果です。0.325ぐらいで収束しています。

f:id:shirowanisan:20201205180229p:plain

valのlossの結果です。これも収束していそうです。

f:id:shirowanisan:20201205180446p:plain

音声生成

学習は上手くできていたように思えましたが、意外にも音声生成結果は散々なものでした。以下は「今日はいい天気ですね」で音声生成したときのメルスペクトグラムとアライメントです。アライメントはテキストとメルスペクトグラムの対応を示していますが、上手く対応付けできていないことがわかります。

原因はデータセット 、ハイパーパラメータと色々考えられますが、今回は細かく調査しないことにします。理由は、次に英語モデルを初期値とした転移学習を試した結果、そちらでは上手く音声生成できたからです。

f:id:shirowanisan:20201205180543p:plain

まとめ

日本語音声データセットを用いて、0からTacotron2を学習してみたのですが、データセット 、または、ハイパーパラメータの影響で上手く音声生成できませんでした。

しかし、この後に英語モデルを初期値とした転移学習では、上手く音声生成できました。内容については、以下の「Tacotron2を日本語で学習してみる(転移学習編)」を参照してください。

shirowanisan.com

参考文献

Tacotron2で始める日本語音声合成 - Qiita

Tacotron2系における日本語のunidecodeの不確かさ - Qiita