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

音楽はAI×トークンで扱おう!

 音楽はAI×トークンで扱おう!

Music×Analytics Meetup Vol.8 登壇資料
https://muana.connpass.com/event/246874/

Masahiro Suzuki

June 29, 2022
Tweet

More Decks by Masahiro Suzuki

Other Decks in Research

Transcript

  1. About me 鈴木 正博 (すずき まさひろ) • ヤマハ株式会社 • Webエンジニア

    (PHP, JS, Selenium等) • PMもどき (Webサービス, Android/iOSアプリ開発) • AI研究者 (音楽情報処理; Python, C++) • 3~4年前に自力で研究を始め、R&Dへ • 研究 • 音楽情報処理/MIR (楽譜・アレンジ中心) • 音楽 • 楽器:ピアノ • 以前はよくサーキットイベントとか行っていた 研究者としては異色の経歴 @szqn_n 始めたて 2
  2. 今日の内容 (何の話をするか / しないか) AI / Blockchain Audio / MIDI

    / Score こっちの「トークン」じゃない! × 3
  3. 今日の内容 1. 音楽をAIで処理する有力な方法 = AI (Transformer系) × トークン 2. この方法で実現したAIの具体例

    for 音楽の分析/生成とか やりたい人 (やってる人含め) ➢ この方法をご自身のツールボックスに for 音楽×AIに興味ある人 ➢ この分野の面白い例などご紹介できたら 4
  4. Transformer 全盛 NLP Image GPT3 / OPT-175B Imagen Vision Transformer

    (ViT) = Transformer x Diffusion model 「チョコレートとマンゴーと ホイップクリームでできた白頭鷲」 CNNをリプレイス 「スイカみたいなボタン」の HTML生成 6
  5. Transformer のしくみ • Attention • ボトルネックがない (vs. RNN/LSTM) • 長距離の依存関係を扱える

    (vs. CNN) • 情報を「トークン」に切り分ける • 言葉の場合:単語 (word/sub-word) • 画像の場合:パッチ (細かく分割した画像片) • 「トークン」間で Attention を張って 関係性を学習 Attention Convolution RNN スイカ | みたいな | ボタン 7
  6. 音楽分野でも Transformer • Music Transformer (2018) • MIDIをトークンにして 音楽生成を学習 •

    長くても一貫性のある音楽生成が可能に • Pop Music Transformer (2020) • 小節を意識した音楽生成が可能に vs. Transformer LSTM (RNN) MIDIもトークンにすれば 音楽をうまく扱える! 8
  7. MIDIトークン 基本的な2種類 • MIDI-like • 動作をトークン化 • 1音 = 2つの動作

    (note_on / note_off) • 前の動作との時間差分 • 基準:直前の動作 • REMI • 音符をトークン化 • 1音 = 1つの音の長さ (len) • 小節内を分割した位置 • 基準:小節線 MIDIそのまま 音符にまとめた … on_60 time_1 off_60 on_64 time_1 off_64 … 差分 動作 bar … … pos_2 note_60 len_1 pos_3 note_64 len_1 … 位置 小節線 音符 ※時間分解能:ここでは4分音符 = 1とする 小節線 ここが基準 MIDI-like REMI 11
  8. MIDIトークン 発展形 • マルチトラック対応 • 多次元化 複数の属性を 多次元のトークンに MuMIDI MMM

    CP (Compound Word) Octuple MIDI MIDI-like 各トラックを 直列に結合 1トークンで 複数の情報を表す 各トラックの音符を 時系列に並べる 12
  9. MIDIトークン 制約と解決策 [制約] 拍子は固定 (ex. 4拍子のみ) • 小節線を基準に 音符の位置を表わす •

    「拍」は 無視 ≒ すべての楽曲が同じ「拍子」と仮定 • 色々な拍子 (3拍子 / 4拍子 / …) の楽曲を扱いたい場合は困る [解決策] 「拍」もトークンに • 小節線 or 拍を基準に 音符の位置を表わす • 何拍子の楽曲でもOK bar … … beat note_60 len_1 beat note_64 len_1 … 拍 bar … … pos_2 note_60 len_1 pos_3 note_64 len_1 … 小節線 拍 Score Transformer (2021) 13
  10. MIDI vs. 楽譜 (Score) MIDI 楽譜 調号 音部記号 拍子記号 声部

    連桁 符幹の向き 段 MIDIにない要素 が 楽譜には多数存在 共通要素:音の高さ / タイミング 14
  11. [参考] Audioトークン • Audioもトークン化 • ViT のように スペクトログラムをパッチ化 • ViT

    : 画像を分類 (何が写ってる?) • AST : 音を分類 (何の音が鳴ってる?) • 画像で事前学習 → 音で転移学習 で精度向上 Audioもトークン化できる Audio Spectrogram Transformer (2021) Audioトークン ImageNet 16
  12. AIピアノアレンジ AI アレンジ メロディ コード ピアノ アレンジ 難易度 MIDI MIDIトークン

    (MIDI-like + Chord) chord_21 root_9 on_72 wait 18 off_72 on_72 wait_3 off_72 on_71 wait_3 chord_16 root_4 wait_12 off_71 on_64 wait_6 off_64 on_67 wait_6 chord_5 root_5 on_R72 on_R64 on_L33 wait_6 off_L33 on_L40 wait_6 off_L40 on_L48 on_L45 wait_6 off_R72 off_R64 on_R72 wait_3 off_R72 on_R61 wait_3 off_L48 off_L45 on_L40 MIDIトークン (MIDI-like + R/L) 18 Transformer
  13. MIDI to Score (浄書/楽譜化) Score MIDI ・左右パート分離 ・調推定 (+転調検出) ・楽譜要素推定

    音部 / オクターブ指定 / 声部 / タイ結合 / 符幹の向き / 連桁 など 楽譜に必要な情報を推定 MIDIトークン (REMI + beat) Scoreトークン MIDI Score “Score Transformer: Generating Musical Score from Note-level Representation” (MMAsia 2021) R bar clef_treble key_sharp_3 time_3/4 note_E5 len_2 stem_down note_C#5 len_1/2 stem_down beam_start note_E5 len_1/2 stem_down beam_stop bar … L bar clef_bass key_sharp_3 time_3/4 note_G#3 note_E3 note_A2 len_2 stem_down note_G#3 note_E3 note_A2 len_1 stem_down bar … bar note_76 len_48 note_56 len_48 note_52 len_48 note_45 len_48 beat beat note_73 len_12 note_56 len_24 note_52 len_24 note_45 len_24 pos_12 note_76 len_12 bar … 20 Transformer
  14. 指番号推定 note_77 → note_77_5 のように「トークン変換」を学習 bar bar 音高 と 指番号

    を 1トークンで表現 note_77_5 note_71 tokenize R bar note_77_5 len_8 note_74_3 len_8 pos_8 note_76 len_8 note_73 len_8 pos_16 note_77 len_8 note_74 len_8 pos_24 note_76 len_8 note_72 len_8 pos_32 note_74 len_8 note_71 len_8 pos_40 note_72_4 len_8 note_69_2 len_8 bar note_71 len_16 note_67 len_16 指番号をトークン化 ・部分的に指番号をつける ・指番号を補完する “Piano Fingering Estimation and Completion with Transformers” (ISMIR2021 LBD) 22 MIDI Transformer
  15. 音楽版BERT • BERT : 汎用言語モデル • 大量の文章で pre-train • 少量の文章で

    fine-tune → 様々な文章タスクが解ける • 例:感情分析, 文章分類, 質問に対する回答抽出 • 音楽版BERT : 汎用音楽モデル • 大量のMIDIで pre-train • 少量のMIDIで fine-tune → 様々な音楽タスクが解ける • 例:曲調分析, 作曲家推定, メロディ推定, 伴奏パターン提案 • 研究例 • MusicBERT (コード公開) • MidiBERT-Piano (学習済みモデル公開 / 音符レベル推論も) ← おすすめ Transformer だけでなく BERTベースも メロディ音符の推定 23 MIDI BERT
  16. 音楽AIまとめ • 音楽をトークンに → いろいろな音楽タスクが解ける • モデルの使い分け • Transformer (Encoder/Decoder):生成

    / 変換 / 推定 • BERT (Encoder-only):推定 / 分類 / 識別 • … • MIDI • Score • Audio • 生成 / 変換 • 推定 • 分類 / 識別 × • アレンジ • MIDI to Score • 指番号推定 • 音楽分析 = etc. トークン化で様々な音楽AIが学習できる! 24
  17. MIDIライブラリ • pretty-midi • 楽器・音符 という扱いやすい単位でオブジェクト化 • MIDIイベントそのままではなく • [注意]

    基本単位は「時間 (sec.)」 • 音楽的な時間 (小節、拍) で扱いたいときは、 「 .time_to_tick() & .resolutionで割る」という一工夫が必要 pip install pretty_midi pm.time_to_tick() 先頭の楽器 音符一覧 26
  18. Scoreライブラリ • music21 • 楽譜処理全般:楽譜の分析、編集、作成 など • 高機能、やや難解 • 多様なメソッド/プロパティが用意

    • 全容把握は容易じゃない • 都度、ドキュメント検索が吉 • 楽譜をオブジェクト化 • オブジェクトの入れ子構造 Score Part Measure Voice pip install music21 27
  19. MIDIトークン化 • MIDITok • MIDIを各形式でトークン化 • MIDI-like / REMI /

    CP / MuMIDI など • id化されるので、意味を知りたいときは辞書から引く • 「拍」トークン対応版 • https://github.com/suzuqn/MIDITokenizer pip install miditok 28
  20. Scoreトークン化 • Score Transformer (拙著論文) の公開コード • https://github.com/suzuqn/ScoreTransformer R bar

    clef_treble key_sharp_3 time_3/4 note_E5 len_2 stem_down note_C#5 len_1/2 stem_down beam_start note_E5 len_1/2 stem_down beam_stop bar … L bar clef_bass key_sharp_3 time_3/4 note_G#3 note_E3 note_A2 len_2 stem_down note_G#3 note_E3 note_A2 len_1 stem_down bar … トークン化 逆変換 29