[論文メモ] Disentangling Style and Speaker Attributes for TTS Style Transfer

arxiv.org

xiaochunan.github.io

speech style transferにおいてseen、unseenの両方を改善したAE型のEnd to End なTTSモデルの提案

手法

全体像は図1
f:id:Ninhydrin:20220126090253p:plain

ソースとなる発話を \textbf{X}_s = \{x^{(1)}_s,...x^{(n)}_s \}、ターゲットとなる発話を \textbf{X}_t = \{x^{(1)}_t,...x^{(n)}_t \}とする。
これらの発話はスタイル特徴 z \in \textbf{Z}と話者特徴 r \in \textbf{R}に分けられるとする。
ソースとターゲットに含まれるそれぞれの発話 x^{(i)}_s \in \textbf{X}_s x^{(j)}_t \in \textbf{X}_tは個別のスタイル z^{(i)}_s z^{j}_tを持つ。ここでいうスタイルは話し方や感情、韻律などを示す。

そしてスタイルエンコーダー E_z、話者エンコーダー E_sとすると、
ソース発話のスタイル特徴: z^{(i)}_s = E_z(x^{(i)}_s)
ターゲット発話のスタイル特徴: z^{(j)}_t = E_z(x^{(j)}_t)
ソース発話の話者特徴: r^{(i)}_s = E_s(x^{(i)}_s)
ターゲット発話の話者特徴: r^{(j)_t} = E_s(x^{(j)}_t)
となる。

SynthesizerモデルとしてはTacotron2を用い、 Tとする。 Tはスタイル特徴 zと話者特徴 rを入力とし、メルスペクトログラムを出力する。

仕組みとしてはソース・ターゲット発話を各エンコーダーでスタイル特徴と話者特徴に分離させ、各特徴の組み合わせで生成したメルスペクトログラムを色々なlossで最適化する感じ。
lossは6つあり、reconstruction( \mathcal{L}_{rec})、adversarial( \mathcal{L}_{adv})、style distortion( \mathcal{L}_{dis})、cycle consistency( \mathcal{L}_{cyc})、style classification( \mathcal{L}_{stycls})、speaker classification( \mathcal{L}_{spkcls})。
詳しくは後で。

Style Space

 E_z(x)が学習すべきスタイル空間について。
スタイルを表現するのにガウシアン分布を使ったVAEだと不十分な場合がある。
そこでInverse Autoregressive Flow(IAF)を採用する(図2参照)。
f:id:Ninhydrin:20220127091749p:plain

始めのエンコーダで \mu_0,\sigma_0,hを出力し、ランダムサンプルした \epsilon \sim \mathcal{N}(0, I)を使って
初期値 z_0 ~ \mu_0 + \sigma_0 \odot \epsilonを生成し、それを繰り返す( z_k = \mu_k + \sigma_k \odot z_{k-1})。
 z_Kをflowの最後の出力とすると確率密度は以下の式で得られる。

f:id:Ninhydrin:20220127093237p:plain

下記の記事が参考になった。
peluigi.hatenablog.com

Speaker Encoder

既存手法ではvoxcelebコーパス等を使って話者エンコーダを事前に学習しているものが多い。
提案手法では話者エンコーダを同時に学習する。
話者エンコーダのアーキテクチャは図4を参照。
f:id:Ninhydrin:20220127094406p:plain

活性化関数はReLUでクラス分類のヘッドはスタイルエンコーダと同じく3つのFC層。最後のFC層の出力が話者特徴になる。

Six Specifically-designed Objectives

6つのlossについて
 \thetaは最適化対象のネットワークのパラメータ。
 \mathcal{L}_{rec}は同じ発話のスタイル特徴と話者特徴から生成したメルスペクトログラムが元のメルスペクトログラムと同じになるように。
f:id:Ninhydrin:20220127094833p:plain
これで z rにメルスペクトログラムを復元するのに必要が情報が盛り込まれる。ただ、まだ2つの特徴量に何が含まれるかは不定

 \mathcal{L}_{adv}は出力結果のスタイルがターゲットスタイルに従うように。
f:id:Ninhydrin:20220127094938p:plain
これにより z_tには最低でもターゲットのスタイル情報が盛り込まれる。( z_tにすべて盛り込むこともできそう)。

上記のlossだけだと z_sに制約がなくスタイルを学習する保証がない。そしてこの問題は話者特徴にも影響する。
そこでdistortion loss  \mathcal{L}_{dis}を導入する。これは z_s z_tに近づけるためのもの。

はじめにdiscriminator  D_sを発話がターゲットの発話であるか否かを学習する( p_{D_s}(x \in X_t))。
そして z_sを学習するときに D_sを使って z_s z_t、2つの歪みが一定になるように強制する。
 d L_2ノルムとして以下の式の制約を課す。
f:id:Ninhydrin:20220128094158p:plain

distortion lossは生成した発話がターゲットのスタイルになるようにするためのもので、話者についての保証がない。
話者を一致させるためにcycle consistency loss \mathcal{L}_{cyc}を導入。
f:id:Ninhydrin:20220128092627p:plain
 \tilde{x}_s x_sをターゲットのスタイルに変更したもの。
スタイルを変更した音声から話者エンコーダで話者特徴を取り出したとき、それはスタイル変更前の音声と同じ話者であってほしいという感じ。
これにより

そしてスタイルと話者をよりしっかり分けるためにそれぞれをクラス分類する( \mathcal{L}_{stycls} \mathcal{L}_{spkcls})。

最終的なlossは以下の式で、各lossについている文字はそれぞれの重み。

f:id:Ninhydrin:20220128093127p:plain

実験・結果

f:id:Ninhydrin:20220128093208p:plain
f:id:Ninhydrin:20220128093235p:plain

所感

いろんなlossでガチガチに縛った感じ。
整理しないと各lossの役割がこんがらがってしまう。
音声のスタイルというのがいまいち分かりにくい。話し方とか感情とか言われればなるほどとならなくもないが、この手法ではスタイルと話者を分離していて、それではコンテンツはどこに行ったの?(多分スタイルに含まれていそう)となる。
話者とスタイルの分離なのでコンテンツが含まれていてもいいのだろうけど、スタイル特徴と言い切れないのがなんとも。
そして zに発話情報が入っていても問題なさそうに見えるが、何か見落としている?そのためのdistortion loss?
デモが公開されているけど中国語なので正直違いがわからない。