日本の大学に通うしがない大学二年の樹と申します。
Twitterで投稿したり、GitHubにレポジトリを上げたりしてるので、いいねやスター、フォローいただけると嬉しいです。
最近、歌詞やジャンルを指定して音楽付きの歌声を生成するモデルが出てきました。
この最初は私が知る限り(他にありましたら教えてください。)では、OpenAIから出たJukeBoxです。
しかし、JukeBoxから生成された歌声は歌として歌えていない、サンプリング速度が長すぎるなどといった欠点があり、ながらく音楽付きの歌声生成モデルは無かったような気がします。
しかし、最近になりbarkを制作したSunoからchirpという音楽付きの歌声生成モデルが出ました。
サンプリング速度もJukeboxに比べ、早くなり歌詞通りに歌声を生成でき、そこから私もこの分野に興味を抱き始めこれが私もできないかと模索しています。
で、今回は私が考えた、モデルのアーキテクチャを紹介します。このモデルについてのコメントなどもいただけると嬉しいです。
手書きですが、モデルアーキテクチャはざっくりとこういったもので、さらなる詳細は以下のレポジトリにまとめました。
コードもあります。
https://github.com/0417keito/UTAUTAI
まず、SPEARTTSの手法にしたがい、歌詞からセマンティックトークンを取得するモデルを構築します。
セマンティックトークはMERTと呼ばれるMLMを音楽理解のために訓練されたモデルからの表現をkmeans量子化したものを取得し、クラスタサイズは量子化器のコードブックサイズに合わせます。
そして、歌詞からセマンティックトークンを取得するモデルにはTransformerベースのデコーダーを使用し、歌詞とセマンティックトークンとのマッピングを学習します。
次に、SPEARTTSではTTSなのでトランスクリプトからセマンティックトークンを取得するのみでよかったが、音楽付きの歌声生成においては歌詞からのセマンティックトークンだけでは無く音楽からのセマンティックトークも必要では無いのかと考え、学習時には音楽から取得した、MERT unitを使用します。
しかし、推論時には勿論のことこの音楽から取得したMERT表現は使用することはできません。使用できるようにすれば、それはそれで入力された音声と歌詞をアライメントして音楽を生成するモデルに使えるかもしれませんが、今回は入力はテキストのみとしているので、PromptTTS2の手法に触発されてこの音楽から取得したMERT表現を入力されたプロンプトから生成するといったモデルを作ります。
それが、(2)のStyle Moduleです。
Style Moduleはまず、BERTによってプロンプトから取得された表現をkeyとvalueとし、学習可能なqueryによってプロンプト表現を抽出します。そして、それを条件としてVariation Netと呼ばれるTransformerベースの拡散モデルによってMERT表現というのを生成することを目指します。
このようにして得られた、セマンティックトークンを条件としてSoundstormと呼ばれる高品質な精度でセマンティックトークンからアコースティックトークンを生成するモデルによって、このタスクを満たせるのではと考えました。
しかし、このモデルにはいくつか欠点があり、歌詞からセマンティックトークンを取得するのに自己回帰モデルを、プロンプトからMERT表現を取得するのにDiffusionモデルを使用しているのでかなり生成速度が遅いです。
それを解決するのに、Consistency Modelなども視野にはいれています。
これで、以上が私が考えたモデルアーキテクチャの説明です。
コードなどはhttps://github.com/0417keito/UTAUTAI
においてあります。
ご興味いただけた方、コメントなどいただけると嬉しいです。
進捗がありましたら、次にも上げていく予定なのでよろしくお願います。