MusicLMができるまで

Googleラボが、**MusicLM**なるものを発表しました。文章で指示した通りの音楽を生成してくれるAIです。

https://google-research.github.io/seanet/musiclm/examples/

リンク先の音楽を聴いてみると、たしかに指示通りの音楽が、十分自然な品質で生成出来ているように聞こえます。凄いですね。

DALL.E 2やStable Diffusionなどの画像生成技術が世間を騒がせていた頃から繰り返し言われてきた、「そのうち音楽生成も来る」みたいな観測がようやく現実になったと言えるでしょう。

当然ながら、新しい技術は水を与えて待てば生えてくるわけではなく、実際は手と頭を動かし、あらゆる課題をねじ伏せなければ実現されません。未来予想トークで風呂敷を広げまくるよりも、リアルな課題解決の過程をじっくり研究したほうが楽しいと思います。

MusicLMは、Googleラボが去年発表した研究成果**AudioLM**と**MuLan**をベースにしており、AudioLMはさらに**SoundStream**と**W2V-BERT**という研究がベースになっています。これらの先行研究と合わせて読むと、MusicLMに辿り着くまでの道筋が見えて、とても面白いです。

https://twitter.com/syao_ming/status/1618828391511375873

そこで、MusicLMのベースになっている先行研究を振り返りながら、Googleラボが「文章からの高音質音楽生成」を実現するまでの道のりを辿ってみたいと思います。

## SoundStream

https://ai.googleblog.com/2021/08/soundstream-end-to-end-neural-audio.html

SoundStreamは本来、機械学習によって作られた「**音響データ圧縮用のニューラルコーデック**」です。3kbpsという低ビットレートで、12kbpsで圧縮されたOpusコーデックよりも高品質な音を再現できる優れものです。

ニューラルコーデックは基本的に**オートエンコーダー**と呼ばれる構造を利用します。音声を低ビットレートなデータ形式に変換するエンコーダーと、逆の変換を行うデコーダーを、入・出力が同じになるように訓練することで、効率の良いエンコード・デコード変換を自動で見出す手法です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/924e29c4-c7a4-495d-ac72-36179b4ebf0e.png)
圧縮コードのビットレートを抑えるために、**ベクトル量子化**（**Vector Quantization, VQ**）という手法を使い、エンコーダの出力ベクトルを有限集合内のコードに変換する方法があります。

VQベースの手法は、コード集合のサイズが大き過ぎるという弱点があります。1つのコードをあらわすためのビット数を$n$とすると、コード集合のサイズは$2^n$になるため、ビットレートが上がるにつれてコード集合のサイズは急激に膨れ上がります。下の例では、6kbpsのビットレートに対してコード集合のサイズは$2^{60}$に達しており、現実的な規模ではありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/c9b7be8e-f486-3fd5-d3c5-a861e7c32cbd.png)
この問題を解決するために、研究者らはVQを拡張した**Residual VQ**を採用しました。

Residual VQは、ベクトル量子化の量子化差分に再度ベクトル量子化を繰り返すことで、ベクトルを複数層の量子化コードに変換します。層が深くなるほど、元のベクトルとの差分が小さい、高精度な量子化コードになります。また、層が多いほどコードごとのビット数が減るので、コード集合のサイズは大きく増えずに済みます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/8ef8360a-244b-4a1c-0950-7224a63a8c9c.png)
Residual VQは低ビットレートで高い表現力を持てただけでなく、層を重ねるごとに高精度化するような**階層構造**を持っていることも重要な特徴です。後の音生成研究では、RVQ量子化コードの最初の数層を「低解像度コード」として利用することで、生成モデルの学習をしやすくしています。

当初から音声・音楽生成への応用を想定していたかは不明ですが、圧縮データが離散値形式であることや、RVQがもたらす階層構造は、イマドキな言語モデルによるモデル化に非常に向いており、のちに色んな音生成研究に組み込まれる流れになるのは必然だったのでしょう。

## W2V-BERT

https://arxiv.org/abs/2108.06209

自動音声認識の性能を向上させるための**事前学習手法**です。

事前学習とは、ラベルの無い音声データを使う**自己教師あり学習**によって、音声から高次（抽象度の高い）な意味情報をあらわす特徴量に変換するエンコーダーを作ることです。事前学習済みのエンコーダーが計算した特徴量を使うことで、自動音声認識など音声関連の教師あり学習を容易にする（＝少量の教師ありデータで高い汎化性能を達成する）ことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/e9279eef-90d2-7c3b-617e-954d2b144ddf.png)
良く知られている事前学習手法に、**wav2vec2.0**があります（初代wav2vecとはほぼ別物）。wav2vec2.0は、エンコーダーが出力した特徴量にマスクをかけ、Transformerにマスクされた特徴量を推定させる、という事前学習を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/0895883e-e0ad-a774-e59a-976098de7a18.png)
SoundStreamと異なり、特徴量から音声の再構築を試みるのではなく、**マスクで隠した部分を推定する**という訓練手法をとるので、音響特性よりも「**前後の文脈**」を反映した特徴量が出力されるようになります。

wav2vec2.0の事前学習は特徴量の数値のみを推定させるものですが、更に量子化された特徴量を「文字」と見なし、自然言語処理の事前学習手法である**BERT**で行われた**マスク推定学習**を追加で行えば、より深い意味情報を学習できるではないか？

というアイデアを試したのがw2v-BERTです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/ade56f6d-b02f-de28-1d40-c88a7c64f7ac.png)
新しい手法をwave2vec2.0などの事前学習手法と比較した結果、たしかにより高い音声認識精度を達成できました。音声のより深い意味情報を抽出するエンコーダーを得ることができたと言えるでしょう。

w2v-BERTも、特に音合成を想定した手法では無いと思われますが、音に含まれる「意味」という、SoundStreamとは別の側面の情報を提供してくれるので、同じく音合成に活用されることになります。

## SoundStream + W2VBERT = AudioLM

https://ai.googleblog.com/2022/10/audiolm-language-modeling-approach-to.html

ここからやっと音生成の話です。

画像生成の分野では、Googleラボも[**Parti**](https://parti.research.google/)という成果を出しており、自然言語処理で著しく成功している**言語モデル**が、画像生成にも応用できることを実証しています。同じく「**音の言語モデル**」も作れればいいですよね。

Googleラボは一足飛びで「音楽版Parti」を目指すのではなく、まず「音の言語モデルを作る」という課題にフォーカスします。

「音の言語モデル」は、音響的に高品質な音を生成するだけでなく、音の「**文脈**」、つまり語りの内容・話者の口調・音楽のテンポやムード…などなど、**人間が感じ取る大域的な要素**も正確に表現できるものであって欲しいです。

そこで、以下の２つの部品からなる音の生成モデルを考えます。
1. 入力トークン列から、続きのトークン列を予測する「**言語モデル**」。音の「文脈」の予測を担当します。
1. トークン列を音声に具現化する「**デコーダー**」。自然な音の生成を担当します。

ちなみにトークンとは、自然言語における文字あるいは単語のような、何らかの有限集合に属する値を指します。SoundStreamやW2V-BERTの量子化コードも、ここではトークンと呼ぶことにします。

音生成の流れはこんなイメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/dff396d8-a9ce-cd49-d739-e568d60435b1.png)
Partiの場合、言語モデルにTransformer、デコーダーにViT-VQGANを使うことで、高品質な画像生成に成功しています。

この構造を直接音響データに適用したいところですが……1秒間だけで数万個の数値が並ぶ音響データは、画像データに比べ **「品質」と「文脈の一貫性」を両立させるのが遥かに困難**です。言語モデル学習に使うトークンは、片方の要求しか満たすことができない、というジレンマに陥ってしまいます。

「品質」を取るなら、**SoundStream**トークンが適任かもしれません。デコーダーは、SoundStreamトークンから常に高品質な音を出力するように訓練されています。しかし、SoundStreamトークンは、音の文脈を捉えることはできません。

「文脈の一貫性」を取るなら、**w2v-BERT**トークンが適任かもしれません。音に含まれる意味情報をあらわす特徴量なので、言語モデルで音の文脈を学習することは容易でしょう。しかし、w2v-BERTトークンは音自身の情報が少ないので、トークンから音を生成するデコーダーが上手く学習できません。

ならば、音響情報をあらわすSoundStreamトークンと、意味情報をあらわすw2v-BERTトークンを両方活かせば良さそうです。このアイデアによって**AudioLM**が生まれます。

SoundStreamとw2v-BERTトークンを使い、以下のような階層的な生成過程が考案されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/e01aefe5-2e07-3043-5a8d-8c93f4d696ee.png)
音声の意味情報トークンを予測⇒意味情報トークンから低解像度な音響情報トークンを予測⇒音響情報トークンを高解像度化⇒SoundStreamデコーダーで音を生成する、という流れです。

SoundStreamとW2V-BERTエンコーダー・デコーダーは学習済みモデルを使うので、各ステップで使われる、トークン予測用の「言語モデル」が機械学習の対象です。言語モデルはそれぞれTransformerで実装されており、十分な量の音声データから学習させれば高い精度で予測を行うことができます。

以上工夫を凝らすことで、音声の文脈を正確に表現でき、かつ高品質な音を生成できる「音の言語モデル」の実現に成功しました。

この動画が示すように、生成された音声は「音」として自然に繋がるだけでなく、「文脈」レベルでもちゃんと辻褄が合うようになっています。

<iframe width="560" height="315" src="https://www.youtube.com/embed/_xkZwJ0H9IU?controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


AudioLM論文では入力音声から「続き」を生成する設計になっていますが、音声以外の情報（例えば：文章）をもとに音を生成する仕組みに改造することも可能です。

ゴールが見えてきましたね。

## MuLan

https://ismir2022program.ismir.net/poster_150.html

AudioLMという優れた「音の言語モデル」ができたことで、抽象的な「文脈」を具体的な「音」に具現化する能力を得ました。あとは、「音楽の文脈」を「文章の文脈」と結びつけることができれば、Stable Diffusion的なやつが作れそうです。

そこで去年、研究者らはMuLanという手法をISMIR2022で発表しました。**音声データと文章データを、共通の潜在特徴空間に変換する**、いわゆる**クロスモーダル学習**の手法です。

https://qiita.com/xiao_ming/items/5a6f738dc3751b17e9c4#p5-04-mulan-a-joint-embedding-of-music-audio-and-natural-language

手法自体は、確立されたクロスモーダル学習手法である**対照学習(Contrastive Learning)** を音と文章に適用しただけです。つまり、音響エンコーダーと文章エンコーダーが、「**同じ曲なら同じ特徴量を、違う曲なら違う特徴量を出力する**」ように学習させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/3bb05e34-b131-7d83-df30-b2407a331216.png)


学習済みのエンコーダーは後にMusicLMに活用されるのですが、音楽作品の自動タグ付けや、文章の指定通りの音楽を見つけ出す「賢い音楽検索」に使うこともできます。

機械学習を行うには、音楽データとそれに対応する文章のペアを、とにかく大量に集める必要があります。どちらかというと、インターネットに転がっている音楽・文章データから、学習に使えるデータペアを掘り出す手法のほうが、工夫を要したのではないでしょうか。

研究者らはインターネット（おそらくYouTube）から大量のミュージックビデオを集め、それらに付属するテキストデータから3種類のテキストを抽出してデータペアを作成しました。

* **Short-form(SF)**: 短い説明文。楽曲のタイトル・タグからとる。
* **Long-form(LF)**: 長い説明文。動画コメント・概要欄テキストからとる。
* **Playlist(PL)**: このミュージックビデオが入っているプレイリストのタイトル。

SFとLFデータは、音楽内容とは無関係なテキストも多く含まれるため、学習データとして利用する前に簡単なフィルタリングを施しています。

* SF：ルールベースの、ヒューリスティックなフィルタリング。
* LF：まず小規模（700文）な教師データを使いBERTベース分類モデルを訓練してから、その分類モデルで有用なテキストデータを抽出。

以上の手順で、4400万個の音楽音声クリップ（37万時間）の音声と、対応するテキストデータのペアデータを集めたのです。途方もない量ですね。

これをMuLanの対照学習に投入することで、音楽と文章を「文脈」レベルで繋げることができました。


## AudioLM + MuLan = MusicLM

MuLanとAudioLMが揃うことで、ようやく「文章からの音楽生成」に取り組むことができます。これが新しく発表された**MusicLM**です。

MusicLMは、AudioLMをベースに、MuLanのエンコーダーが出力した潜在特徴をトークン化したMuLanトークンを、意味情報・音響情報言語モデルの両方に入力する構造になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/0cb24dfa-8b74-2ae6-4205-44b468e4c82f.png)
AudioLMと同じく、SoundStream、W2V-BERT、MuLanの学習済みモデルをそのまま使い、W2V-BERTトークンやSoundStreamトークンを予測するための言語モデルを訓練します。

学習時は、MuLanの音声エンコーダーを用いて推定したMuLanトークンを利用することで、**音楽音響データのみ**を用いて言語モデルを訓練することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/ec545da3-9093-f985-63dd-fa2affec6a1c.png)
学習済みの生成モデルは、つい最近発明された音楽生成AIであるRiffusionやMubertを明らかに上回る品質の音楽を生成出来たと、MusicLM論文は示しました。生成例を聴いても、確かにそんな感じがしますよね。

## まとめ

MusicLMは、ニューラルコーデック・事前学習・言語モデル・クロスモーダル学習といった、多数の分野の研究成果を統合したプロジェクトです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128515/4f650909-3023-07f1-b315-9ccf070ffb9f.png)
クロスモーダル学習は既存の手法をほぼ適用しただけですが、「音の言語モデル」を作る際は音データ特有の課題に直面し、画像生成の成果を直接適用できませんでした。Googleラボは、本来音楽生成を想定していなかった、音声に関する先行研究の力を借りることで、言語モデルの構築に成功し、最終的に「文章からの音楽生成」というゴールに辿り着きました。

目指したいゴールに対して、問題を分析して解決すべき課題を特定し、解決策を見出して各個撃破…という手順をしっかり踏んで事を進めてきたのが読み取れます。

深層学習技術は汎用性が高いため、画像などの分野で大きな進歩があると、当然のように「**音声/音楽もできるよね？**」と期待されがちなところがあると思います。しかし実際には、他分野の成果をそのまま適用しようとしても、音楽情報特有の難題を突き付けられることが多く、なかなか順調にいきません。

MusicLMは、そういった具体的な難題に打ち勝つための、色んなアプローチを教えてくれるものだと思いました。

# 余談

ちなみに生成AIブーム以来、GoogleラボはParti、Imagen、Muse、MusicLMなど幾つもの関連研究を発表していますが、**今をときめく拡散モデル**は特に使っていません。

いずれもベクトル量子化で得られた離散トークンを言語モデルで学習し、特徴量をデコードする際は「低解像度生成⇒高解像度化」というアプローチで生成画像（音声）の高品質化を目指すという、MusicLMと結構似たような作戦を取っています。彼らはVQと階層的デコードに可能性を感じているのでしょうか。

独自路線を貫きながら成果を出し続けている所も格好いいですね。