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. 音楽は AI ×トークン で扱おう!
    ヤマハ (株) RDD 鈴木 正博
    Music×Analytics Meetup vol.8
    2022/6/29

    View Slide

  2. About me
    鈴木 正博 (すずき まさひろ)
    • ヤマハ株式会社
    • Webエンジニア (PHP, JS, Selenium等)
    • PMもどき (Webサービス, Android/iOSアプリ開発)
    • AI研究者 (音楽情報処理; Python, C++)
    • 3~4年前に自力で研究を始め、R&Dへ
    • 研究
    • 音楽情報処理/MIR (楽譜・アレンジ中心)
    • 音楽
    • 楽器:ピアノ
    • 以前はよくサーキットイベントとか行っていた
    研究者としては異色の経歴
    @szqn_n
    始めたて
    2

    View Slide

  3. 今日の内容 (何の話をするか / しないか)
    AI / Blockchain
    Audio / MIDI / Score
    こっちの「トークン」じゃない!
    ×
    3

    View Slide

  4. 今日の内容
    1. 音楽をAIで処理する有力な方法
    = AI (Transformer系) × トークン
    2. この方法で実現したAIの具体例
    for 音楽の分析/生成とか やりたい人 (やってる人含め)
    ➢ この方法をご自身のツールボックスに
    for 音楽×AIに興味ある人
    ➢ この分野の面白い例などご紹介できたら
    4

    View Slide

  5. AI (Transformer) の話

    View Slide

  6. Transformer 全盛
    NLP Image
    GPT3 / OPT-175B
    Imagen
    Vision Transformer (ViT)
    = Transformer x Diffusion model
    「チョコレートとマンゴーと
    ホイップクリームでできた白頭鷲」
    CNNをリプレイス
    「スイカみたいなボタン」の HTML生成
    6

    View Slide

  7. Transformer のしくみ
    • Attention
    • ボトルネックがない (vs. RNN/LSTM)
    • 長距離の依存関係を扱える (vs. CNN)
    • 情報を「トークン」に切り分ける
    • 言葉の場合:単語 (word/sub-word)
    • 画像の場合:パッチ (細かく分割した画像片)
    • 「トークン」間で Attention を張って 関係性を学習
    Attention
    Convolution
    RNN
    スイカ | みたいな | ボタン
    7

    View Slide

  8. 音楽分野でも Transformer
    • Music Transformer (2018)
    • MIDIをトークンにして 音楽生成を学習
    • 長くても一貫性のある音楽生成が可能に
    • Pop Music Transformer (2020)
    • 小節を意識した音楽生成が可能に
    vs.
    Transformer
    LSTM
    (RNN)
    MIDIもトークンにすれば 音楽をうまく扱える!
    8

    View Slide

  9. 音楽のトークン化

    View Slide

  10. [基礎知識] MIDIファイル
    音の高さ タイミング
    動作
    時間差分を表す
    (単位はtick: 1拍=480ticks など)
    音符ではなく動作
    10

    View Slide

  11. 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

    View Slide

  12. MIDIトークン 発展形
    • マルチトラック対応
    • 多次元化
    複数の属性を
    多次元のトークンに
    MuMIDI
    MMM
    CP (Compound Word)
    Octuple MIDI
    MIDI-like
    各トラックを
    直列に結合
    1トークンで
    複数の情報を表す
    各トラックの音符を
    時系列に並べる
    12

    View Slide

  13. 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

    View Slide

  14. MIDI vs. 楽譜 (Score)
    MIDI
    楽譜
    調号
    音部記号 拍子記号 声部
    連桁 符幹の向き

    MIDIにない要素 が 楽譜には多数存在
    共通要素:音の高さ / タイミング
    14

    View Slide

  15. Scoreトークン
    • 楽譜をトークン化
    楽譜もこうしてトークン化できる
    登壇者の発明
    Score Transformer (2021)
    声部も表現
    複数の段を
    結合
    15
    楽譜要素をトークンに

    View Slide

  16. [参考] Audioトークン
    • Audioもトークン化
    • ViT のように スペクトログラムをパッチ化
    • ViT : 画像を分類 (何が写ってる?)
    • AST : 音を分類 (何の音が鳴ってる?)
    • 画像で事前学習 → 音で転移学習 で精度向上
    Audioもトークン化できる
    Audio Spectrogram Transformer (2021)
    Audioトークン
    ImageNet
    16

    View Slide

  17. トークンを使った音楽AI

    View Slide

  18. 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

    View Slide

  19. AIピアノアレンジ
    Demo
    19
    MIDI Transformer

    View Slide

  20. 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

    View Slide

  21. MIDI to Score (浄書/楽譜化)
    MIDIからの生成楽譜例
    21
    MIDI Score Transformer

    View Slide

  22. 指番号推定
    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

    View Slide

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

    View Slide

  24. 音楽AIまとめ
    • 音楽をトークンに → いろいろな音楽タスクが解ける
    • モデルの使い分け
    • Transformer (Encoder/Decoder):生成 / 変換 / 推定
    • BERT (Encoder-only):推定 / 分類 / 識別
    • …
    • MIDI
    • Score
    • Audio
    • 生成 / 変換
    • 推定
    • 分類 / 識別
    ×
    • アレンジ
    • MIDI to Score
    • 指番号推定
    • 音楽分析
    =
    etc.
    トークン化で様々な音楽AIが学習できる!
    24

    View Slide

  25. Pythonライブラリ
    音楽を処理するための

    View Slide

  26. MIDIライブラリ
    • pretty-midi
    • 楽器・音符 という扱いやすい単位でオブジェクト化
    • MIDIイベントそのままではなく
    • [注意] 基本単位は「時間 (sec.)」
    • 音楽的な時間 (小節、拍) で扱いたいときは、
    「 .time_to_tick() & .resolutionで割る」という一工夫が必要
    pip install pretty_midi
    pm.time_to_tick()
    先頭の楽器 音符一覧
    26

    View Slide

  27. Scoreライブラリ
    • music21
    • 楽譜処理全般:楽譜の分析、編集、作成 など
    • 高機能、やや難解
    • 多様なメソッド/プロパティが用意
    • 全容把握は容易じゃない
    • 都度、ドキュメント検索が吉
    • 楽譜をオブジェクト化
    • オブジェクトの入れ子構造
    Score
    Part
    Measure
    Voice
    pip install music21
    27

    View Slide

  28. MIDIトークン化
    • MIDITok
    • MIDIを各形式でトークン化
    • MIDI-like / REMI / CP / MuMIDI など
    • id化されるので、意味を知りたいときは辞書から引く
    • 「拍」トークン対応版
    • https://github.com/suzuqn/MIDITokenizer
    pip install miditok
    28

    View Slide

  29. 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

    View Slide

  30. まとめ

    View Slide

  31. 音楽はAI×トークンで扱おう!
    AI トークン
    ×
    音楽分野でも
    Transformer系モデルは強い
    MIDI・楽譜・Audio
    すべてトークン化できる
    この組み合わせで
    様々な音楽AIが実現できる
    @szqn_n
    よければフォローお願いします!
    ご質問などもどうぞ!
    アイデア次第、お試しあれ!
    31

    View Slide