[論文メモ] Voice Conversion With Just Nearest Neighbors

arxiv.org
github.com

INTERSPEECH2023

k-NNを用いたシンプルなany-to-anyな声変換の提案

最近のVoice Conversion(VC)は精度を出すために手法複雑になっており、再現や構築が難しい。
高品質なVCを実現するためにそれほど複雑な必要は無いのでは?ということでk-NN回帰によるVCを提案。

手法

法名はk-NNを用いたVCなのでシンプルに k-nearest neighbors voice conversion (kNN-VC)という名前。

kNN-VCは3つのコンポーネント(encoder、converter、vocoder)から成る。
音声の生成フローは3段階

1) encoderを使ってソース音声とターゲット音声を特徴量化
2) ソース音声とターゲット音声を入力としてconverterが変換した特徴量を生成
3) vocoderが音声波形を合成

手法の全体像は図1参照。

Encoder

Encoderとしては既存の学習済みモデルを利用し、fine tuning等の追加の学習はしない。
学習済みモデルとしては音素分類のスコアが高いものを利用する。

この学習済みEncoderを利用してソース音声とターゲット音声から特徴ベクトルを取り出す。
ソース音声から取り出した特徴ベクトル列をquery sequence、1つ以上のターゲット音声から取り出した特徴ベクトルの集合をmatching setと呼ぶ。
matching setは集合であり順序関係はない。

k-nearest neighbors matching

query sequenceの各特徴ベクトルに近い特徴ベクトルをmatching set からk-NNで検索し置き換える。

既存モデルで得た特徴ベクトルは音素が似ていると近い性質があるので、置き換えることでコンテンツを保存したまま話者を変換できる。
またk-NNはノンパラメトリックな手法で追加の学習も不要で再現がし易い特徴もある。

Vocoder

特徴ベクトル列を音声波形にするためのものでここではHiFi-GAN V1を採用する。
普通のVocoderはスペクトログラムから音声波形を生成するが、ここでは特徴ベクトル列から音声波形を生成するため学習が必要になる。

Prematched vocoder training

vocoderの入力は学習時は音声から生成した特徴ベクトル列だが、予測時は変換した特徴ベクトル列でありドメインが異なる。
また、変換した特徴ベクトル列はmatching setから選出されるため時間的に連続の保証はなく、これをそのまま音声にしてもアーティファクトが出る。
そこでmatching setで置き換えた特徴ベクトル列にロバストにするためにvocoderの学習を工夫する。

学習に使うquery sequenceと同じ話者で作成したmatching setを使って特徴ベクトル列を変換し、これを入力として学習を行う。
これにより時間的な不連続性に対してロバストになる。

実験・結果

学習済みEncoderとしてWavLM-Largeを採用する。
どの層から特徴ベクトルを取り出すかは事前実験の結果6層目とした。後半の層だと音素分類は良いがピッチや話者性の再現が難しい(既存研究あり)。
1つの特徴ベクトルは16kHzの20msに相当。

k-NNについては k=4とし、距離はコサイン類似度を用いた。

vocoderの学習にはLibriSpeechの学習データセットを利用。

テストは同じくLibriSpeechのテストセットの一部を利用。

他手法との比較結果が表1。

ほぼすべての指標についても提案手法が既存手法を上回っている(MOSがなぜが太字...)。
また、話者埋め込みを利用していないので言語等の縛りが無い。
学習は英語で行っているが、ドイツ語話者から日本語話者への変換についても試してみたデモが公開されている。


ablationとしてprematched vocoder trainingの効果とmatching setの大きさ(ターゲット音声の長さ)について調査。
結果が図2。同じmatching setのサイズならprematched vocoder trainingしたほうが全てにおいてよく、matching setも基本的に大きい方が良い。
また、ターゲット音声が30sより少ない場合は既存のany-to-any手法に劣る。

所感

非常にシンプルなany-to-anyで面白かった。
ターゲット話者の音声集合で置き換えは正直誰でも思いつきそうだったが、案外珍しい?
WavLMができたからこそなのだろうか?
これをEncodecのVQでやってみたらどうなるのか気になる。EncodecのVQはコンテンツ特徴と音響特徴に別れているのでうまいこと転写できないだろうか?