[論文メモ] TGAVC: IMPROVING AUTOENCODER VOICE CONVERSION WITH TEXT-GUIDED AND ADVERSARIAL TRAINING

AutoencoderベースのVoice Conversionの改良

arxiv.org

AutoVCはボトルネック部分の大きさを調整することで話者情報とコンテンツ情報を分離させるVoice Conversion(VC)手法で非常にシンプルで良いのだが、VAEのような制約がない分結果がそこまで良くない。
このAutoVCに少しガイドを追加することでより分離を促し性能を向上させる。

既存手法

問題設定は、non-parallelで複数話者の音声データからmany-to-manyのVCモデルの構築。
発話サンプル x_iに対するラベルを (t_i, u_i)とする。 t_iはテキスト情報、 u_iは話者情報

既存手法のAutoVCはコンテンツエンコーダ E_c、スタイルエンコーダ E_sデコーダ Dからなる(図1参照)。

学習時は元の発話サンプル x_iから E_cを使ってコンテンツ埋め込み \mathcal{H}_cを、同じ話者のことなる発話サンプル x'_jから E_sを使ってスタイル埋め込み \mathcal{H}_sを取得し、これらを使って x_iを再構成する。
実際にVCとして利用するときは E_sにターゲットの話者のサンプルを入れれば良い。

学習時のlossは再構成した音声を\hat{x}_{i \rightarrow i}として、
再構成loss:

コンテンツの再構成loss:

を最小化する。

AutoVCではコンテンツ埋め込みにスタイル情報が入らないようにAEのボトルネックにあたる E_cの出力次元を慎重に調整している。
そして話者埋め込みを時間方向に複製して、コンテンツ埋め込みに合わせてデコードする。

VCにおいて、コンテンツとスタイルの分離が重要なのは事実だが、AutoVCの方法できれいに分離できているかは疑問。

手法

そこでテキスト情報を使ったガイドをすることでより分離を促したText Guided AutoVC(TGAVC)を提案(図2(a))。

TGAVCではAutoVCの3つのモジュールに加え、テキストエンコーダ E_t、話者識別器 Cを追加。

 E_tを使って、発話サンプル x_iに対応するテキストラベル u_iをテキスト埋め込みを \mathcal{H}_cとする。
 E_cを使って発話サンプル x_iから得たコンテンツ埋め込みを \hat{\mathcal{H}}_cとする。

 p_i \hat{\mathcal{H}}_cから予測した発話サンプル x_iの話者が u_iである確率。

この \mathcal{H}_tは話者情報を含んでおらず、コンテンツ埋め込みとして最も適している。
なので、学習時は \mathcal{H}_cをコンテンツ埋め込みとして再構成を行いつつ \hat{\mathcal{H}}_c \mathcal{H}_cに近づける。
仕組み的にはTex-to-speech(TTS)と同じ。
テスト時のVCはAutoVCのときと同じ(図2(b))。

lossもほぼ同じ。

音声からのコンテンツ埋め込みに対しての話者分類のlossが追加され、コンテンツ埋め込みからの再構成は削除。
各モジュールの目的関数は以下

式(10)の通り、 \mathcal{L}_2に関しては E_cはlossを下げるように学習するが、Cはこれを上げるように学習するDomain-Adversarialな学習を行う。

アーキテクチャは図3を参照

実験

データセットはAISHELL-3(中国語のアノテーション付き85時間218人の発話)。
比較対象はAutoVC、VQVC。
また、TGAVCをTTSとして学習・固定し、コンテンツエンコーダのみを学習したタイプをTGAVCsとする。

many-to-many

zero-shot

所感

発話からコンテンツ情報のみを抽出は難しいのでテキスト情報を使ってコンテンツ情報を抜き出すといった感じ。
テキスト情報があるなら別にAutoVCに沿う必要は無い気がする。
また、end2endの学習時にテキストエンコーダの出力からデコードしているがコンテンツエンコーダの出力をそれに似せてるとはいえドメインが異なるため品質に影響しそう。正直微妙であった。