[論文メモ] Speak, Read and Prompt: High-Fidelity Text-to-Speech with Minimal Supervision

Google Research
比較的少量のラベルありデータで学習できるmulti-speaker TTSの提案

arxiv.org

TTSを学習するには音声と発話のペアデータが大量に必要でペアデータはコストが高いため少量しか手に入らない。
それに対して音声のみのデータは大量にあるので、それを使ってTTSの学習コストを下げたいというお気持ち。

提案手法

TTSのタスクを"reading"と"speaking"に分割して考える。
"reading"はテキストをセマンティック特徴に変換するseq2seqタスク。
"speaking"はセマンティック特徴を音響特徴に変換するseq2seqタスク。
この2つのseq2seqを組み合わせた SPEAR-TTSを提案。SPEARは“speak, read and prompt”から(最近のGoogleの略名意味がわからん)

SPEAR-TTSはAudioLMの拡張
AudioLMは言語モデルと音声デコーダからなるモデルで

という形。


SPEAR-TTSの大まか仕組みとしては以下の2つのステージからなる

ステージ1) 入力されたテキストをセマンティックトークンに変換
ステージ2) セマンティックトークンを音響トークンに変換

トークンの意味は以下

セマンティックトーク

テキストよりは音声的な特徴を捉えたもので、コンテンツを提供するトークン(音素等に近い?)。
話者情報等の音響の詳細情報は取り除かれている。
w2v-BERTにを学習して得られた特徴をk-meansでクラスタリングし、それらのセントロイドを利用することで離散的なトークンとする。

音響トーク

離散的なトークンで音声を再合成するのに必要な音響の詳細情報等を含んだトークン。
SoundStreamのResidual VQで得られた量子化ベクトルがそれ。

この音響トークンをデコーダで音声波形に変換してTTSを実現する

なぜわざわざセマンティックトークンを挟むのか

1つ目
セマンティックトークンは話者情報等が制限され主に音素的な情報を含んだトークンでテキストよりも音声の情報を含んでいる。
そのためセマンティックトークンのほうがテキストよりも音響トークンに似ており、音響トークンの生成がしやすい

2つ目
ステージ2で利用するセマンティックトークンと音響トークンは自己教師あり学習により得られる。
なので音声のみの大量のデータでステージ2の学習をスケールできる。

ステージ1

Transformerを使ってテキストをセマンティックトークンに変換するseq2seqタスクを学習する。
利用するのはテキストと音声のペアデータ。セマンティックトークンは音声から抽出するのでテキストとセマンティックトークンのペアデータになる。

Transformerの学習には大量のデータが必要で通常のテキスト音声ペアデータではデータ不足である。
そこでpretrainingとbacktranslationを導入し解決する。

Pretraining

既存研究に基づいて、デノイジングを行う(一部欠けたトークン列を入力して元のトークン列を予測するタスク)。
ノイズの方法はいくつかあるが、個々のトークンを一定の確率で独立に削除するのが効果的だった。
入出力はセマンティックトークン。

これで事前学習したものをステージ1の学習で利用する。このときデコーダとエンコーダの上位層を固定してfine tuning。
ステージ1で学習したいのはテキスト2セマンティックで、Pretrainingではセマンティック2セマンティックなのでこういう固定の仕方かと。

Backtranslation

テキストから音声を生成する場合、生成されるパターンはアクセントや声質など複数存在するため難しい。
そこで音声からテキストを生成するBacktranslationモデルを学習する。
これにより大量の音声のみのデータからテキストを生成しパラレルデータを生成できる。

Backtranslationモデルの学習はPretrainingで学習したのモデルのエンコーダを固定して行う。

ステージ1の学習の全体像

全体像は図2参照

  • まずPretrainingにより図下部のモデルPを得る
  • モデルPをコピーしてエンコーダを固定する
  • 音声からテキストを生成するBacktranslationモデルを学習する
  • Backtranslationモデルを使って音声のみのデータから擬似的なテキスト音声ペアデータを作成する
  • このテキスト音声ペアデータを使ってテキストを使ってモデルPをfine tuningする

ステージ2

ステージ2ではセマンティックトークンを音響トークンに変換する。
主に音声のみの巨大なデータセットを利用する。
ここではセマンティックトークンで表現されていない音響情報をデータの分布から学習することになる。
ステージ1と分離したことでステージ1が単一話者で学習していたとしても、ステージ2で多様な音声を生成できるらしい。

AudioLMには以下の2つの特性がある

  • セマンティックトークンのみで始めると毎回ランダムな音声を生成する
  • 音響トークンを条件として含めるとその音響トークンにあった特性を維持して生成を行う

この特性を利用して音声の制御を行う。

ステージ2の学習プロセスは以下の図3を参照

  • 学習サンプルを選び、そこからオーバーラップなしで2区間を取り出す
  • 区間についてセマンティックトークンと音響トークンを計算する
  • 2区間のうち片方をプロンプト、もう片方をターゲットとする
  • プロンプトのセマンティックトークンと音響トークン、ターゲットのセマンティックトークトークンを入力としてターゲットの音響トークンを出力するように学習

入力の各トークン集合との間には特別なセパレーション(図3の灰色の四角)を入れないと境界部分にアーティファクトが出る。

図だと入力が少々わかりにくいが論文ではそう書いてあった。

実験

詳しくは論文を参照。
セマンティックトークンと音響トークンを作るための自己教師あり学習のモデル(SoundStreamとw2v-BERT)はLibriLight を利用。
ステージ1のPretrainingはLibriLight、BacktranslationではLibriTTSを利用。
ステージ1のfine tuningではLJSpeechを利用。単一話者の24時間のパラレルデータセット
ステージ2はLibriLightを利用。

各モデルの事前学習ありなしによる明瞭度の変化。事前学習は効果あり。

ステージ1の学習に使うパラレルデータの話者数が、マルチスピーカー出力に与える影響。
ステージ1は単一話者でも問題はない。

話者の正確性。15分と少ないデータ量で他手法にさほど劣らない。

MOS評価


所感

ちょっとVALL-EっぽいTTS。やはり音声合成はARのほうがよいのかな?(VITSとかはfeedforwardだったが)。
いきなりテキストから音声にせずセマンティックトークンという中間表現にするのは、メルスペクトログラムをセマンティックトークンとみなせばFastSpeech + HifiGANとかに近そうではある。
セマンティックトークンのほうがメルスペクトログラムよりも音響情報はだいぶ少なそうだが。
Tortoise TTSでも述べられていたが直接音声波形生成よりVocoderを挟んだほうがよいとのことで直接波形生成は最近少ない?
TTS等音声合成系は画像系と異なりアーキテクチャ設計よりもいかにデータを集めるかが現状重要視されてそうな印象。
そのためにラベル無しのデータをいかにうまく使うかという意味でVALL-EよりもSPEAR-TTSのほうが使い勝手は良さそう。
事前に量子化した特徴をトークンとみなしてシーケンス生成するtaming transformer系の生成が流行りか。