aria tech blog

深層学習に関する調べものなどをまとめます

論文解説:Transfer Learning from Speech Synthesis to Voice Conversion with Non-Parallel Training Data

目次

論文情報

arxiv[2009.14399] Transfer Learning from Speech Synthesis to Voice Conversion with Non-Parallel Training Data
demo : https://arkhamimp.github.io/TTL-VC/

概要

本論文では、Text-to-Speech(TTS)タスクで学習したモデルをVoice Conversion(VC)タスクへと転用する新たな学習フレームワーク(TTS-VC transfer learning、以下TTL-VC)を提案しています。
提案手法では始めに、seq2seqのEncoder-Decoder型マルチ話者音声合成モデル(Tacotron2)を学習します。 TTSタスクを学習することで、TTS Encoderは入力テキストからロバストな言語表現を抽出し、TTS Decoderは目標話者の話者埋め込み、Attention Context Vector、Attention Recurrent Network Cellの出力を用いて、目標話者の音響特徴(MelSpectrogram)を生成するようになります。
ここで、TTSタスクを学習したEncoderは、入力テキストから話者に依存しない文脈情報であるContext Vectorへのマッピングを学習をしていると考えることができます。 提案手法では、このマッピングをEncoder-Decoder型音声変換モデルの潜在表現に対して制約として加えるというアプローチをしています。 このアプローチにより、Encoderが音声から話者性を排除した埋め込み表現を獲得するように促します。
また、提案手法ではDecoderは目標話者のEmbeddingを用いて学習するので、Non-Parallelな教師データを用いた学習・任意の話者への音声変換を行うことが可能となります。
実験では、提案手法により得られた音声変換モデルが、品質、自然さ、話者類似性において、異なる2つの音声変換ベースライン手法(PPGベース、VAEベース)よりも優れていることを示し、さらにTTSモデルと同等品質の音声を生成できることを示しました。

提案手法

本論文では、Text-to-Speechタスクで学習したモデルをVoice Conversionタスクへと転用する新たな学習フレームワークであるTTL-VCを提案しています。
TTL-VCでは、事前に学習したTTSモデルの重みをVCタスクを学習するモデルの初期値として用いることで、以下の点で恩恵を得ています。

  1. Encoderの学習時にContext Vector(文脈情報ベクトル)による制約を用いることで、Encoderが音声から話者性に関する情報を完全に排除した埋め込み表現を獲得することが可能となる。
  2. 比較的収集しやすいTTSコーパスを用いて(Non-Parallelなコーパスで)VCタスクを学習することができる。

以下は、既存のTTSベースの手法(TTSタスクの知識を用いてVCタスクを学習する手法)と提案手法の学習の条件や制約について比較をした表です。

f:id:ariacat3366:20201120172938p:plain:w1000
TTSベースの音声変換手法と提案手法の条件比較

[41]:Cotatron: Transcription-guided speech encoder for any-to-many voice conversion without parallel data
[42]:Bootstrapping non-parallel voice conver- sion from speaker-adaptive text-to-speech
[43]:Joint training framework for text-to-speech and voice conversion using multi-Source Tacotron and WaveNet
[44]:Voice transformer network: Sequence-to-sequence voice conversion using transformer with text-to-speech pretraining

TTL-VCでは、VCタスク向けの追加のデータ(音声のパラレルデータなど)を用意する必要がないという点が他の手法との大きな違いとなっています。

TTL-VC の概要

f:id:ariacat3366:20201120172931p:plain:w1000
Transformer-TTS(VC)の概要

本論文で提案しているTTL-VCの概要図です。
図の上半分はTTSタスクの事前学習の概要を表しており、下半分がVCタスクの学習の概要を表しています。

TTSタスクによる事前学習

TTL-VCでは、事前学習としてTacotron2を用いてTTSタスクを学習します。以下は、Tacotron2のアーキテクチャの概要図です。

f:id:ariacat3366:20201120172925p:plain:w600
Tacotron2の概要
Encoder_T は入力としてテキスト列 \mathbf{X}_T を受け取り、テキスト埋め込みベクトル \mathbf{O}_T を出力します。
f:id:ariacat3366:20201125033030p:plain:w400
ここで、EncoderのLocation-Sensitive Attentionから、Encoderによって埋め込まれたテキスト埋め込みベクトル \mathbf{O}_T と目標音響特徴 \mathbf{Y}_T 間のアラインメントを重み行列 \mathbf{W} として得ることができます。 テキスト埋め込みベクトル \mathbf{O}_T に重み行列 \mathbf{W} を掛け合わせることで、Context Vector \mathbf{H}_T を作成します。
f:id:ariacat3366:20201125033038p:plain:w400
Context Vector \mathbf{H}_T には、生成するMelSpectrogramの各フレームに対応した言語情報が埋め込まれていると考えることができます。
Decoderの入力は、上記により生成されたContext Vector \mathbf{H}_T と話者埋め込みベクトル z をconcatした物になります。
f:id:ariacat3366:20201125033046p:plain:w400
Loss_{Mel}は目標話者の音声から生成されたMelSpectrogram \mathbf{Y}_S と生成されたMelSpectrogram \hat{\mathbf{Y}}_S のMSEにより計算されます。
f:id:ariacat3366:20201125033055p:plain:w400

TTL-VC の学習

VCタスクの学習では、Encoder-Decoder型のモデルを用いて学習を行います。Decoderの重みの初期値として、事前に学習したTTSモデルのDecoderの重みを用います。
Encoder_S は入力として音響特徴列 \mathbf{Y}_S を受け取り、Context Vector \mathbf{H}_S を出力します。

f:id:ariacat3366:20201125040303p:plain:w400
ここで、生成するContext Vector \mathbf{H}_S が事前に学習したTTSモデルにより生成されたContext Vector \mathbf{H}_T に近付くように、以下のような制約 {Loss}_{Cont} を加えます。
f:id:ariacat3366:20201125040312p:plain:w400
{Loss}_{Cont}によりEncoderで話者性に関する情報が排除されると考えられるため、学習時に入力話者と目標話者を同一話者としても、Decoderが話者性を埋め込むような学習が促されると考えられます。
Decoderの入力は、TTSタスクの時と同様、Encoderにより生成されたContext Vector \mathbf{H}_S と話者埋め込みベクトル z がconcatされた物になります。
f:id:ariacat3366:20201125040321p:plain:w400
最終的なLossは、{Loss}_{Cont}{Loss}_{Mel}を足し合わせた物となります。
f:id:ariacat3366:20201125040329p:plain:w400

話者埋め込みベクトル z は事前に学習された話者埋め込みモデルにより獲得されます。
話者埋め込みモデルについてはGoogleが提案しているGE2Eと呼ばれる手法[2]を用いています。 以下は上記の話者埋め込みの手法についての解説のサイトです。
google.github.io

学習フローについて

論文の通りの学習では、以下のフローで学習を行います。

  1. Tacotron2の学習:TTL-VC Decoderの重み初期値 + Context Vectorの作成のため
  2. Decoder Adaptation Process:(4)式を用いてDecoderのみを学習
  3. TTL-VCの学習:Encoder, Decoderをend2endで学習

ですが、自分の環境では上記のフローでは学習が上手くいかなかったので、以下のフローで学習を行いました。(発生した現象や問題点の詳細・考察に関しては所感の項目に記載しています)

  1. Tacotron2の学習:TTL-VC Decoderの重み初期値 + Context Vectorの作成のため
  2. Encoderの事前学習:MelSpectrogram → Context Vector の変換を事前学習
  3. Decoderの学習:Context Vector → MelSpectrogram の変換を学習、この時Encoderの重みはfreezeさせる

ここで、Encoderの事前学習時に用いるContext Vectorは事前に学習したTacotron2を用いて事前に生成し、Decoderの学習時に用いるContext Vectorは直前に学習したDncoderを用いて生成しました。

実験

実験では、3つのベースライン手法と提案手法の品質比較を行っています。

以下は、ベースライン手法と提案手法の学習の条件や制約について比較をした表です。

f:id:ariacat3366:20201120172943p:plain:w1000
ベースライン手法と提案手法の条件比較表

ベースライン手法についての簡単な説明です。

MS-TTS

  • Malti-Speaker TTSの略で、実験ではTacotron2を学習モデルとして用いています。他のベースライン手法と異なり、MS-TTSはTTSタスクを学習し、テキストから生成された音声を生成音声として用います。
  • MS-TTSは、生成された音声の品質に関する比較評価のために用意されたベースライン手法です。

PPG-VC

  • PPG-VCのモデルは、ASR(Automatic Speech Recognition、音声認識)を行うEncoderと、音素列から音響特徴を復元するDecoderで構成されています。
  • EncoderはKaldi toolkitsを用いて、MFCCからPPG(Phonetic PosteriorGram、音素事後確率)と呼ばれる、フレーム毎の音素のベクトル確率表現を予測するように学習を行います。(フレームシフト:12.5 ms、MFCC:40次元)
  • Decoderの構造は、Tacotron2のデコーダとほぼ同じ構造で、PPGフレームを入力として受け取り、80次元のMelSpectrogramを予測するように学習を行います。
  • PPG-VCは、TTL-VCと似たEncoder、Decoderの構造をしているため、ベースライン手法として採用されています。また、PPGベースのVC手法は、近年のVCタスクにおいて最先端の性能を発揮することが知られています。

VAE-VC

  • VAE-VC はTTL-VCに非常によく似ていますが、潜在空間が平均と分散により表現される点、Loss_{Cont}が制約として与えられない点が大きな違いとなります。
  • VAE-VCのEncoderは、LSTM layerに続いて2つのFull Connected Layerが接続されており、それぞれ平均ベクトルとガウス確率分布の対数分散ベクトルを出力します。最終的なEncoderの出力はReparameterization Trickにより確率分布からサンプリングされます。
  • VAE-VCのDecoderはTacotron2やPPG-VCのDecoderと似ていますが、他の手法と異なり自己回帰構造を用いることなくフレームごとのマッピングを学習します。そのため、モデル内部にAttention Mechanismを持ちません。
  • TTL-VCとVAE-VCの最も大きな違いは、転移学習の有無にあります。VAE-VCは、転移学習によりTTSの知識伝達が得られるTTL-VCとの比較のために用意された手法です。

結果

以下は、作者が公開している本手法のデモ音声が聴けるサイトです。
demo : https://arkhamimp.github.io/TTL-VC/
品質の確認の際はデモを聞くことをお勧めします。

以下は実験の結果を示す図になります。

f:id:ariacat3366:20201120172948p:plain:w1000
図1. TTSベースの音声変換手法と提案手法の品質評価

f:id:ariacat3366:20201120172954p:plain:w1000
図2. ベースライン手法と提案手法の話者類似性評価

f:id:ariacat3366:20201120172957p:plain:w1000
図3. TTSベースの音声変換手法と提案手法のMOS評価

図1、図2は提案手法と各ベースライン手法の生成音声のどちらが高品質な音声を変換できているかというアンケートの比較結果です。オレンジが提案手法、青が比較対象となるベースライン手法となっています。
また、図3において、提案手法のMOSの値はMS-TTSとほぼ同等ということがわかります。
上記より、TTL-VCは既存のVCまた、MS-TTSはTTSタスクにおける手法なので、TTL-VCはTTSモデルと同等の品質の音声へと変換することが可能であると言うことが確認できました。

また、以下は手法ごとのMCDとRMSEに関する実験結果です。

f:id:ariacat3366:20201125014524p:plain:w500
図4. TTSベースの音声変換手法と提案手法のMCDとF_0のRMSE

ここで、MCDとRMSEの定義は以下の通りです。

f:id:ariacat3366:20201125014852p:plain
f:id:ariacat3366:20201125014900p:plain

MCD(mel-cepstrum distortion)は、変換の前後で音響特徴であるmel-cepstral coefficients (MCCs) がどれだけ変化したかを表す指標です。
F_o RMSE(root mean square errors of F_o)は、変換音声と目標音声のフレーム毎の F_o の差を表す指標です。(目標音声はDTWにより整形されています)
どちらも、値が小さければ小さいほど目標話者との解離が少なく、生成音声の分布がであるという指標となります。

所感

音声変換において、話者性を完全に排除した埋め込み表現を得ることは非常に難しく、現在も様々なアプローチによって検証がなされています。 この手法ではTacotron2の文章埋め込み情報をVCタスクへと使用するというアプローチを用いており、完全に話者性を排除でき、さらにDecoderにより音声を生成することがTTSタスクの事前学習によりある程度保証されるので、個人的にはとても良いアプローチだなと思いました。

逆に、この手法のWeekpointは以下の点かなと思いました。

  • Encoderを汎化させるために、大規模なTTSコーパスを用いた事前学習が必要。英語のコーパスであればlibrittsを用いれば良いので良いが、他の言語(特に日本語)での学習はコーパスを用意する必要があり、敷居が高い。

  • TTL-VCの詳細なアーキテクチャが記載されていないので、詳細な再現実装が難しい。

    • 自分が実装した際は、DecoderはTacotron2のDecoderからAttentionを抜き、本来Attentionから与えられるContext Vectorの代わりにEncoderにより生成されるContext Vectorをフレーム毎に入力する構造にし、EncoderはTacotron2のEncoderの入力サイズをテキスト埋め込みの次元数からメルスペクトログラムの次元数に変更した構造としましたが、これが正しい構造であるのかがわからないという問題があります。
  • TTL-VCの学習の際、Encoderの重みを全てfreezeしないと、話者埋め込みが全く機能しなくなってしまう問題。

    • 論文に記載がなかったのですが、自分の環境で学習を行った際、EncoderとDecoderを同時に学習させた場合、生成される音声が(話者埋め込みが何であれ)入力音声と全く同じになってしまうという現象が発生しました。
    • 上記の問題に関して、自分は「EncoderにMelSpectrogramのlossが伝播されてしまうと、話者性に関する情報を埋め込むようになってしまうのではないか?」という仮説を立て、Encoderの重みを完全にfreezeさせて学習を行った結果、上手く音声を生成できるようになりました。
  • Context Vectorにはイントネーションの情報は含まれないので、生成される音声のイントネーションと入力話者のイントネーションの解離が生じてしまう。

総じて、改善次第でとても有用性のある良いアプローチだなと思いました。

参考文献

  1. Zhang, Mingyang & Zhou, Yi & Zhao, Li & Li, Haizhou. (2020). Transfer Learning from Speech Synthesis to Voice Conversion with Non-Parallel Training Data.

  2. Wan, Li & Wang, Quan & Papir, Alan & Moreno, Ignacio. (2017). Generalized End-to-End Loss for Speaker Verification.

  3. S.-w. Park, D.-y. Kim, and M.-c. Joe, “Cotatron: Transcription-guided speech encoder for any-to-many voice conversion without parallel data,” arXiv preprint arXiv:2005.03295, 2020.

  4. H. Luong and J. Yamagishi, “Bootstrapping non-parallel voice conver- sion from speaker-adaptive text-to-speech,” in IEEE ASRU, 2019, pp. 200–207.

  5. M. Zhang, X. Wang, F. Fang, H. Li, and J. Yamagishi, “Joint training framework for text-to-speech and voice conversion using multi-Source Tacotron and WaveNet,” in Proc. INTERSPEECH, 2019, pp. 1298– 1302.

  6. W.-C. Huang, T. Hayashi, Y.-C. Wu, H. Kameoka, and T. Toda, “Voice transformer network: Sequence-to-sequence voice conversion using transformer with text-to-speech pretraining,” arXiv preprint arXiv:1912.06813, 2019.