[論文メモ] GenerSpeech: Towards Style Transfer for Generalizable Out-Of-Domain Text-to-Speech Synthesis

arxiv.org

out-of-domainに強くしたzero-shot Text-to-Speechモデル、GenerSpeechを提案。

out-of-domain(OOD)なデータに対するText-to-Speech(TTS)では現状2つの問題がある。
1) スタイルをデータ全体の平均したスタイル分布を学習するのでそこから外れたものをうまく表現できない
2) 学習データとの分布のギャップにより生成結果が劣化する

モデルをドメイン依存・ドメイン非依存な部分に分離することでOODに強くした。

手法


目的は学習データと異なる音響条件を持つ(OOD)音声から高品質でそれに似た音声サンプルを生成すること。
基本のバックボーンにはFastSpeech2を採用。アーキテクチャの全体像は図1を参照。

Generalizable Content Adaptor

コンテンツ(音素特徴)からスタイル情報を排除する。コンテンツにどれくらいスタイル情報があるのかは少々謎。
図1(a)の赤いモジュールで内部にMix-Style Layer Normalization (MSLN)というモジュールを内蔵。
MSLNはLayer NormにAdaINのような学習可能なscalingとshiftingを2つ追加したもの。
入力は特徴量化した音素 xと参照音声から抽出したスタイルベクトル wの2つで wからscalingとshiftingを以下の様に生成する。

なお \tilde w = \verb|Shuffle|(w)で図1(b)に示す様に wを時間方向にシャッフルする。
 \lambda \sim \verb|Beta|(\alpha, \alpha)はバランスを取るハイパラで \alpha = 0.2

得られたscalingとshiftingをつかってMSLNは以下になる。

 \mu, \sigmaはそれぞれ平均と分散。

その後Style Agnostic Pitch(SAP) Predictorでピッチを予測を行い追加する。
個人的に音素情報にどれくらいスタイル情報があるのかわからず、別にLayer Normだけでもいいのでは感がある。

Multi-level Style adaptor

OODデータに対応するためにマルチレベル(グローバルとローカル)のスタイルを利用する。

グローバルなスタイルとして学修済みのwav2vec 2.0を利用する。
wav2vec 2.0の最期にaverage poolingと2つの全結合層を追加し話者分類と感情分類タスクでfine tuning。
そのときにAM-softmaxを利用。なぜArcFaceじゃない?

ローカルなスタイルは発話レベル、音素レベル、単語レベルで考える。
ネットワーク構造は図1(e)で共通。Boundaryがあり、音素レベル、単語レベルではBoundaryに従ってpoolingを行う。
音素・単語レベルを導入することでピッチ変化等に対応しやすくする(発話レベルのときはpoolingは行わない)。

またVQを導入することでスタイル以外の情報を排除。コードブックサイズは128。

このスタイルベクトルをコンテンツ(ここでは音素)長に揃える(図1(e)の上のStyle-to-Content Alignment)。

VQ後の各スタイルベクトルを音素をencodeして得られた特徴をQueryとしたAttentionのKeyとValueに用いる。
なおスタイルベクトルにはPositional Encodingを施す。

Dropout率を大きくすることでコンテンツ特徴をそのままコピーするのを防ぐ。

この層を複数回重ねて徐々にコンテンツ(Query)をスタイル化していくのが良いパフォーマンスを出すらしい。

Flow-based Post-Net

OODなデータを参照として詳細なメルスペクトログラムをTransformerだけで生成するのは難しい。
そこでFlow-basedなネットワークを追加してよりきれいなメルスペクトログラムを生成する。
ネットワークはGlowのをベースに。

Pre-training and Training

グローバルなスタイルとして利用するwav2vec 2.0は先程の事前学習を行いネットワーク全体を調整。
GenerSpeechの学習は
1) duration prediction loss: 正解のdurationとのMSE
2) メルスペクトログラムの再構成loss: 正解のメルスペクトログラムとのMAE
3) ピッチ再構成loss: 正解ピッチとのMSE。正解ピッチの計算は不明
4) Flow部分での負の対数尤度
5) commit loss: VQの部分
をlossとする。詳細はappendixにとあるがまだappendixが無い。

Inference Procedures

特別なことはなく、音素列と参照音声を入力としてメルスペクトログラムを得る。

実験・結果

LibriTTSデータセットとESDデータセットの一部を利用して学習。ESDデータセットには感情ラベルが含まれる。
OODデータとしてVCTKを利用。
VocoderはHiFi-GAN。

メルスペクトログラムの可視化


Ablation study

所感

音素や単語レベルでpoolingするのは面白い。同じような特徴になるべき部分をネットワークに学習させるのではなく、強制的に同じにしてしまう。
始めは単語レベルでのpooling意味がわからないかとも思ったが、単語全体でスタイルをあわせたほうが良さそうな気もする。
単語レベルは英語は楽そうだが日本語でやるのはちょっと面倒そう。

スタイルをグローバルとローカルに分けてるのも良さそう。1つのグローバルなスタイルベクトルで全体を最適化しようとするのは無理がある気もする。
ただVITS等は1つの話者埋め込みで変換できているので問題は無いのかも?でもVITSはスタイル学習というより話者を記憶しているメモリという役割になっていそうでもある。