[論文メモ] SALTTS: Leveraging Self-Supervised Speech Representations for improved Text-to-Speech Synthesis

arxiv.org

INTERSPEECH2023

self-supervised learning (SSL)モデルを使ったTTSの性能向上手法の提案

TTSモデルの学習には大量のラベル付きデータが必要なためコストが高い。
近年出てきたwav2vec 2.0やHuBERTなどのSSLモデルは音声認識や話者分類等の下流タスクへの応用で高いパフォーマンスを示している。
それに対してSSLモデルをTTSに適用した例がほとんど無いので調査したという感じ。

手法

FastSpeech2はピッチ、エナジー、音素継続長を条件として合成を行うが、音声にはこれらで表現のできない感情や強調などの情報が存在する。
SSLモデルが感情検出等の下流タスクでもパフォーマンスを発揮していることに注目し、SSLモデルの埋め込みを利用することで感情等のFastSpeech2で考慮されていない情報を補完する。

法名はSALTTS(Self-supervised representations for Auxiliary Loss in TTS)
適用するベースモデルはFastSpeech2だが、JETSやVITSにも適用可能。

SALTTS-parallelとSALTTS-cascadeの2種類を調査した。
提案手法の全体像は以下の図1を参照。


SALTTS-parallelとSALTTS-cascadeで共通の部分として、

FastSpeech2のvariance adapterから得られた384次元の出力をmulti-layer projectorで変換し768次元にする。
その後4つのエンコーダブロックからなるSSL predictor(図1の肌色のブロック)に通し埋め込み(図1の緑のSSL Embeddings)を得る。
これとSSLモデルの出力とのL1 lossをauxiliary lossとして利用する。

 \mathcal{L}_{aux} =\sum^n_{i=1}|y_i - \hat{y}_i|


 ySSLモデルから埋め込み、 \hat{y}SSL predictorからの埋め込み、 nは埋め込みの総数。

SALTTS-cascade

図1の左側のアーキテクチャ

予測したSSLの埋め込みにmulti-layer projectorをresidual接続し、その結果をメルスペクトログラムデコーダに入力する。
デコーダへの入力が768次元になるのでそこは調整する。

SALTTS-parallel

図1の中央のアーキテクチャ

multi-layer projectorとSSL predictorを本体から分離させる。
なのでメインのフローはFastSpeech2のままで、multi-layer projectorとSSL predictorは学習時のみ利用される。
表現力はcascade版に劣るが、実行時速度はFastSpeech2と同じにできる。

Repeater Module

図1の右側のアーキテクチャ

よくあるSSLモデルは入力音声のサンプリングレートは16kHzで、LJSpeechに対してのFastSpeech2のサンプリングレートの22.05kHzと異なる。
またwindow sizeやhop lengthも異なるため、auxiliary lossをとる埋め込み長さが合わない。

このアライメント調整を行う必要がある。
調べるとSSLモデルの最初の5フレームがFastSpeech2の最初の7フレームと一致する。
なので整列させるためにSSLモデルの2番目と4番目を1度繰り返すことで7フレームに拡張する。

その後はSSLモデルの18フレーム毎にFastSpeech2の31フレームが一致する。
なのでSSLモデルの3フレーム毎に1フレーム目と2フレームをガウシアンノイズを加えて1回繰り返す。でもこれだと3フレームが5フレームになり、18フレームが30フレーム
に拡張されて足りない気がするが、読み間違え?ちょっとよくわからない。

実験・結果

データセットはLJSpeech。
ベースラインとなるオリジナルFastSpeech2は1000epochで3日、提案手法のSALTTS-parallelとSALTTS-cascadeは同じ1000epochで4.5日かかった。
ボコーダは学習済みのHiFi-GANでベースラインと提案手法で共有。

SSLモデルはHuBERT、ccc-wav2vec 2.0、data2vec-aqcの3つで9、10、11層の出力を平均化したものをラベルとして利用。
これらの層を採用したのは既存研究でこれらの層が認識等で有効だと示されていたから。

評価指標はMOSとメルケプストラム歪(Mel-cepstral distortion: MCD)と log-F0 root mean square error (F0 RMSE)。

実験結果は以下の表1。
MOS、MCDに関してはcascadeよりparallelのがよく、F0RMSEは逆の傾向。
F0 RMSEはベースラインに勝っているが、MCDは負けている。
parallelモデルのMOSに関してはベースラインに対して大きく勝っている。

cascadeモデルはメルスペクトログラムの勾配がvariance adapterにうまく伝わっていないのでは?
parallelモデルはメルスペクトログラムの勾配がvariance adapterに直接届いているのでこれが性能差の原因なのではと推測。
また、parallelモデルはvariance adapterの出力がよりリッチな特徴になろうとする効果があり、これが間接的によりよいメルスペクトログラム生成に繋がった可能性がある。

所感

TTSに対してSSLを適用するのは確かにあまり見かけない。
SSLが入力として音声波形を必要とするのでTTSタスク的には運用時に音声波形が利用できないので適用がしにくそう。
今回のようにlossとして利用するならば運用上も問題ないので良さそう。
ただ、FastSpeech2の入力に無い情報をSSLで補完したいのに、入力はFastSpeech2のままなのでなんかモヤッとしないでもない。
MOSは向上していて効果はありそうではある。
音素やピッチから感情等をうまく補完できたという感じか。
これらをコントローラブルにできたら面白そう。

学習コストが1.5倍になるが運用時計算コストが上がらずに精度向上できるので有用そうではある。