Upgrade to Pro — share decks privately, control downloads, hide ads and more …

(LT)歌え!GPT!text LMによるアドリブ生成AIコンテスト参戦!歌え!GPT!text LMによるアドリブ生成AIコンテスト参戦!

(LT)歌え!GPT!text LMによるアドリブ生成AIコンテスト参戦!歌え!GPT!text LMによるアドリブ生成AIコンテスト参戦!

"ChatGPT Meetup Tokyo #3"で行ったLTのスライドです。

yatszhash

June 17, 2023
Tweet

Other Decks in Programming

Transcript

  1. お題のコード進行と伴奏midi例(予選1) 10 伴奏MIDI |Am | Am/Ab | Am/G | Am/F#

    | | F | C | Dm7 | Edom7 | Am | コード進行 自分のAIが生成して、 伴奏をマージもの 運営から 与えられる。 MIDIのメロディー部分をAIが生成
  2. 音楽の生成とtextのLMの相性は悪い 17 例えば 1. 複数のパートの時間軸と音程を同時に表現するのが難しい。 - 同時に鳴っている音が表現しにくい。 2. 四則演算など数値の扱いが苦手。[Dyer et.al.,

    2022], [Schick et.al., 2023] 3. 決まったルールがある出力をすることを生成系のLMだと保証されない。 a. 2と3のせいで、4/4の1小節には4分音符4個分の長さの音符を入れるといった保証ができない。 4. 事前学習のコーパスに歌詞以外の音楽データがあまり入ってなさそう。
  3. 29

  4. 30 X:1 T:Music21 Fragment with Melody C:Music21 L:1/4 M:4/4 I:linebreak

    $ K:C V:1 treble V:1 [F,,A,,C,E,]2 [F,,A,,C,E,]2 | [F,,A,,C,E,]2 [F,,A,,C,E,]2 | [E,G,B,D]2 [E,G,B,D]2 | %3 [E,G,B,D]2 [E,G,B,D]2 | [D,F,A,C]2 [D,F,A,C]2 | [E,G,B,D]2 [E,G,B,D]2 | %6 [F,,A,,C,E,]2 [F,,A,,C,E,]2 | [G,,F,A,C]2 [G,,F,A,C]2 | %8 [F,G,A,G,] [A,A,A,A,] | [F,G,A,G,] [C,C,C,C,] | [D,E,F,G,] [A,G,F,E,] | [D,E,F,G,] [C,C,C,C,] | [F,G,A,G,] [A,A,A,A,] | [F,G,A,G,] [C,C,C,C,] | [D,E,F,G,] [A,G,F,E,] | [D,E,F,G,] [C,C,C,C,] ||
  5. 実際のAPIへの入力JSONL {"prompt": "[C,E,G,]4 | z2 [F,_A,CD]2 | [C,E,G,]4 | [G,,B,,D,F,]4

    | [C,E,G,]2 [A,,,D,,E,,^G,]2 [E,A,C] | $ [D=GB]3 [D,^F,A,C] | [G,,B,,D,=F,]2 [C,E,G,A,]2 [C,E,G,A,] | [G,B,D]3 [C,E,G,] | $ z2 [G,,B,,D,F,A,]2 | [C,E,G,]4 | $ <song>", "completion": " e3 d/>c/ | B d f a | g e d c | B d B A | G (3A/A/A/ B (3A/A/A/ | B g g e/>f/ | g e a f | $ g e2 c/d/ | $ <end>"} {"prompt": "[C,E,G,_B,]4 | [G,,=B,,D,F,]4 | [G,,B,,D,F,]4 | [C,E,G,_B,]4 | [C,E,G,_B,]4 | [G,,=B,,D,F,]4 | $ [G,,B,,D,F,]2 [E,^G,B,D]2 | [A,,C,E,]4 | [D,^F,A,C]4 | [G,,B,,D,=F,]4 | $ <song>", "completion": " z4 | z z/ d/ g/d/4c/4 _B/G/- | G g/d/4c/4 _B/E/- E | z z/ ^F/ (3G/B/d/ ^f/e/- | $ e (3d/4e/4d/4c/ B/A/^G/B/ | A/e/ (3c/4d/4c/4A/ ^G/E/C/A,/ | =G/=F/^F/d/ z z/ c/ | $ B/d/d/d/ c/B/G/D/ | $ <end>"} (以下省略) 34
  6. 前処理でタスクの難易度を下げる 37 例えば 1. 学習データの曲のキーをC(ハ長調)またはAm(イ短調)にすべて移調する。 a. ルール上CかAmしかでないため。 2. データを4/4のみの曲のみフィルター a.

    ルール上4/4の曲しかでない。 3. 学習データのタイトル、歌手、コメントや歌詞といった余計な条件付けにつながりそ うな情報はinput/target双方から削除 4. promptでコードネームではなく、コードの構成音を明示的に与える
  7. ローカルのGPUサーバーで チューニングできるLMを代わりに利用し、 コストを下げる。 47 BART (Lewis et.al., 2019) - GPTと同様テキスト生成が可能なLM

    - baseなら小さいGPU(メモリ11GB以下)でもfine-tuningできる。 - 英語で事前学習されたモデルを利用
  8. inputにデータセットのサブセット名のprefixを添えて、 出力のバリエーションを出す。 56 サブセット wikifonia ?wiki?L:1\/4\nM:4\/4\nK:none\n [K:A] z4 | [G,,B,,E,]3\/2

    [F,A,D]3\/2 [E,A,C]・・・ ?char?L:1\/4\nM:4\/4\nK:none\n [K:A] z4 | [G,,B,,E,]3\/2 [F,A,D]3\/2 [E,A,C]・・・ サブセット charlie parker 推論 推論 ※学習時にも同様の prefixをつけて いる。
  9. 評価システムを用意する。 64 アドリブの評価は難しいものの、 使える(勝てる)ものを作るためには評価方法をきちんと設計する。 1. バリデーションセットを自分で用意する。 a. 今回運営から評価用(バリデーション)に使えるサンプルは 3つしか与えられていない。 b.

    代表的なコード進行パターンを調べて、網羅するパターンを作って追加する 2. “俺の好み”以外の評価指標を用意する。 a. 例えば音がどれぐらい調性に合っているかどうかはある程度ルールで自動評価できる b. 音楽をやっている複数人に評価をお願いする。 i. (”AIが作った割にすごい ”のようなバイアスが入らないように注意する) 本来は初期の段階にやること