JA EN
体系生成モデル
·★ 会員·論文·11分で読めます

音楽・音声生成を1から — トークン化された音

3分の曲は1500万個以上の数値でできています。音楽生成の技術史は、この途方もない数列をどう畳むかの歴史でした。コーデックトークン、自己回帰と拡散の分かれ道、テキスト条件づけ、そしてSuno系サービスの構造を公開された部品から組み立て直すところまで、前提知識ゼロで解説します。

対象textタスクgeneration

Simple and Controllable Music Generation


3分の曲は、1500万個の数字でできている

CDと同じ品質(44.1 kHz・ステレオ)で3分の曲を作るということは、1秒あたり44,100回の測定値を2チャンネル分、合計およそ1,588万個の数値を、それらしい順番に並べるということです。

文章と比べてみます。日本語で3,000字の記事は、トークンにすればせいぜい数千個。音は桁が4つほど違います。しかも隣り合う数値は強く相関していて、1個おかしな値が混じるだけで「プチッ」というノイズになって耳に届く。

だから音楽・音声生成の歴史は、その大半がこの1,588万個をどう畳むかの歴史です。モデルの構造よりも先に、この数の勘定を押さえるのが近道です。

比喩: 音符で書くか、見本帳の番号で書くか

畳み方には、長いあいだ2つの流儀がありました。

1つは楽譜方式です。「ドを0.5秒、ピアノで」と書けば、3分の曲は数千個の記号で済みます。MIDIを生成するモデルはこの路線で、実際とても軽い。ただし記号から音に戻すところで、歌声も、歪んだギターの質感も、部屋の残響も落ちます。楽譜には「何を鳴らすか」しか書かれておらず、「どう鳴ったか」は書かれていないからです。

もう1つは波形方式です。空気の震えそのものを作るので原理的には何でも表現できますが、上に書いたとおり列が長すぎる。OpenAIのJukeboxが2020年にこの路線で歌つきの曲を作って見せましたが、1曲に何時間もかかりました。

いま主流なのは、その中間にある見本帳方式です。音を短い区間に切り、各区間を「見本帳(コードブック)の何番に一番似ているか」という整数に置き換える。楽譜のように短く、波形のように何でも表現できる。この整数の列をコーデックトークンと呼びます。「トークン化された音」とは、この置き換えのことです。

秒あたりの勘定 — なぜトークンなら扱えるのか

畳んだ効果は、数を出せば一目で分かります。トークンの総数は単なる掛け算です。

N=TfnqN = T \cdot f \cdot n_q
(1)

要するに、秒数 × 1秒あたりのコマ数 × 1コマに積む番号の枚数TT は秒数、ff はフレームレート(1秒を何コマに切るか)、nqn_q は1コマに何段の番号を重ねるか(残差量子化の段数)です。

MusicGenは32 kHz用のEnCodecを使い、f=50f = 50nq=4n_q = 4 です。3分なら 180×50×4=36,000180 \times 50 \times 4 = 36{,}000 トークン。1,588万個が36,000個になりました。これならもう、長めの文書と同じ土俵です。

同じ材料からビットレートも出ます。

R=fnqlog2KR = f \cdot n_q \cdot \log_2 K

つまり1秒あたりのコマ数 × 段数 × 番号1個を書くのに要るビット数。見本帳のサイズ KK が2048なら1個あたり11ビットなので、50×4×11=2,20050 \times 4 \times 11 = 2{,}200 bps、およそ2.2 kbpsです。

なぜ番号を1段でなく何段も重ねるのか、その仕組み(残差量子化)はニューラル音声コーデックで扱っています。ここで要る前提は一行だけです。音は有限個の整数の列にでき、そこから元の音へ戻せる

FIG 1量子化がやっているのは、この最近傍探索そのもの。動かしている点が「エンコーダが吐いたベクトル」、周りの点が見本帳の候補で、いちばん近い1個の番号がトークンになる。距離の測り方を変えると選ばれる顔ぶれが変わるのも同じ

分かれ道①: 自己回帰 — 次の1個を当て続ける

整数の列になってしまえば、あとは文章と同じです。左から順に「次の1個」を予測し、出た番号をまた入力に足す。GPTと同じ仕掛けで曲が出てきます。

ただし音には、文章にない厄介があります。1コマに番号が縦に4つ積まれていることです。文章のトークンは1コマ1個なので迷いませんが、音は同じ時刻について4段ぶんを出さねばなりません。

素直な解は2つあり、どちらも困ります。4段を1列に引き伸ばす(フラット化)と列の長さが4倍になって遅くなる。4段を同時に独立に出すと、段どうしの辻褄が合わなくなる。1段目が「ピアノ」を選んだのに2段目が「歪んだギター」の残差を足す、という事故が起きるわけです。

MusicGenが採ったのは遅延パターン(delay pattern)という折衷です。段 を コマだけ後ろへずらして並べる。すると2段目を出す時点では、同じ時刻の1段目がすでに確定していて条件にできる。それでいて列の長さはほとんど伸びません。

この先にあるもの

§

ここから先は会員限定です

解説記事371本・教科書26章・学生モード48単元・論文精読6本が、月額¥490ですべて読み放題になります。新しい解説は毎日3本ずつ増えます。いつでも解約でき、解約後も期間の終わりまで読めます。

会員の方はログインすると続きが表示されます

参考文献

  1. Simple and Controllable Music Generation. arXiv:2306.05284論文ページ·PDF
  2. MusicLM: Generating Music From Text. arXiv:2301.11325論文ページ·PDF
  3. AudioLM: a Language Modeling Approach to Audio Generation. arXiv:2209.03143論文ページ·PDF
  4. Fast Timing-Conditioned Latent Audio Diffusion. arXiv:2402.04825論文ページ·PDF
  5. AudioLDM: Text-to-Audio Generation with Latent Diffusion Models. arXiv:2301.12503論文ページ·PDF
  6. Jukebox: A Generative Model for Music. arXiv:2005.00341論文ページ·PDF
  7. Fréchet Audio Distance: A Metric for Evaluating Music Enhancement Algorithms. arXiv:1812.08466論文ページ·PDF

本記事は上記論文の本文にもとづいて執筆しています。数値・主張は原典を優先してください。

コメント

コメントにはログインが必要です