Music×Analytics Meetup Vol.8 登壇資料 https://muana.connpass.com/event/246874/
音楽は AI ×トークン で扱おう!ヤマハ (株) RDD 鈴木 正博Music×Analytics Meetup vol.82022/6/29
View Slide
About me鈴木 正博 (すずき まさひろ)• ヤマハ株式会社• Webエンジニア (PHP, JS, Selenium等)• PMもどき (Webサービス, Android/iOSアプリ開発)• AI研究者 (音楽情報処理; Python, C++)• 3~4年前に自力で研究を始め、R&Dへ• 研究• 音楽情報処理/MIR (楽譜・アレンジ中心)• 音楽• 楽器:ピアノ• 以前はよくサーキットイベントとか行っていた研究者としては異色の経歴@szqn_n始めたて2
今日の内容 (何の話をするか / しないか)AI / BlockchainAudio / MIDI / Scoreこっちの「トークン」じゃない!×3
今日の内容1. 音楽をAIで処理する有力な方法= AI (Transformer系) × トークン2. この方法で実現したAIの具体例for 音楽の分析/生成とか やりたい人 (やってる人含め)➢ この方法をご自身のツールボックスにfor 音楽×AIに興味ある人➢ この分野の面白い例などご紹介できたら4
AI (Transformer) の話
Transformer 全盛NLP ImageGPT3 / OPT-175BImagenVision Transformer (ViT)= Transformer x Diffusion model「チョコレートとマンゴーとホイップクリームでできた白頭鷲」CNNをリプレイス「スイカみたいなボタン」の HTML生成6
Transformer のしくみ• Attention• ボトルネックがない (vs. RNN/LSTM)• 長距離の依存関係を扱える (vs. CNN)• 情報を「トークン」に切り分ける• 言葉の場合:単語 (word/sub-word)• 画像の場合:パッチ (細かく分割した画像片)• 「トークン」間で Attention を張って 関係性を学習AttentionConvolutionRNNスイカ | みたいな | ボタン7
音楽分野でも Transformer• Music Transformer (2018)• MIDIをトークンにして 音楽生成を学習• 長くても一貫性のある音楽生成が可能に• Pop Music Transformer (2020)• 小節を意識した音楽生成が可能にvs.TransformerLSTM(RNN)MIDIもトークンにすれば 音楽をうまく扱える!8
音楽のトークン化
[基礎知識] MIDIファイル音の高さ タイミング動作時間差分を表す(単位はtick: 1拍=480ticks など)音符ではなく動作10
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-likeREMI11
MIDIトークン 発展形• マルチトラック対応• 多次元化複数の属性を多次元のトークンにMuMIDIMMMCP (Compound Word)Octuple MIDIMIDI-like各トラックを直列に結合1トークンで複数の情報を表す各トラックの音符を時系列に並べる12
MIDIトークン 制約と解決策[制約] 拍子は固定 (ex. 4拍子のみ)• 小節線を基準に 音符の位置を表わす• 「拍」は 無視 ≒ すべての楽曲が同じ「拍子」と仮定• 色々な拍子 (3拍子 / 4拍子 / …) の楽曲を扱いたい場合は困る[解決策] 「拍」もトークンに• 小節線 or 拍を基準に 音符の位置を表わす• 何拍子の楽曲でもOKbar … … 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
MIDI vs. 楽譜 (Score)MIDI楽譜調号音部記号 拍子記号 声部連桁 符幹の向き段MIDIにない要素 が 楽譜には多数存在共通要素:音の高さ / タイミング14
Scoreトークン• 楽譜をトークン化楽譜もこうしてトークン化できる登壇者の発明Score Transformer (2021)声部も表現複数の段を結合15楽譜要素をトークンに
[参考] Audioトークン• Audioもトークン化• ViT のように スペクトログラムをパッチ化• ViT : 画像を分類 (何が写ってる?)• AST : 音を分類 (何の音が鳴ってる?)• 画像で事前学習 → 音で転移学習 で精度向上Audioもトークン化できるAudio Spectrogram Transformer (2021)AudioトークンImageNet16
トークンを使った音楽AI
AIピアノアレンジAIアレンジメロディコードピアノアレンジ難易度MIDIMIDIトークン (MIDI-like + Chord)chord_21 root_9 on_72 wait 18 off_72 on_72 wait_3off_72 on_71 wait_3 chord_16 root_4 wait_12 off_71on_64 wait_6 off_64 on_67 wait_6 chord_5 root_5on_R72 on_R64 on_L33 wait_6 off_L33 on_L40 wait_6off_L40 on_L48 on_L45 wait_6 off_R72 off_R64 on_R72wait_3 off_R72 on_R61 wait_3 off_L48 off_L45 on_L40MIDIトークン (MIDI-like + R/L)18Transformer
AIピアノアレンジDemo19MIDI Transformer
MIDI to Score (浄書/楽譜化)ScoreMIDI・左右パート分離・調推定 (+転調検出)・楽譜要素推定音部 / オクターブ指定 /声部 / タイ結合 /符幹の向き / 連桁 など楽譜に必要な情報を推定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_downnote_C#5 len_1/2 stem_down beam_start note_E5 len_1/2 stem_downbeam_stop bar … L bar clef_bass key_sharp_3 time_3/4 note_G#3note_E3 note_A2 len_2 stem_down note_G#3 note_E3 note_A2 len_1stem_down bar …bar note_76 len_48 note_56 len_48 note_52 len_48 note_45len_48 beat beat note_73 len_12 note_56 len_24 note_52len_24 note_45 len_24 pos_12 note_76 len_12 bar …20Transformer
MIDI to Score (浄書/楽譜化)MIDIからの生成楽譜例21MIDI Score Transformer
指番号推定note_77 → note_77_5 のように「トークン変換」を学習barbar音高 と 指番号 を1トークンで表現note_77_5note_71tokenizeR bar note_77_5 len_8 note_74_3 len_8 pos_8 note_76 len_8 note_73 len_8pos_16 note_77 len_8 note_74 len_8 pos_24 note_76 len_8 note_72 len_8pos_32 note_74 len_8 note_71 len_8 pos_40 note_72_4 len_8 note_69_2len_8 bar note_71 len_16 note_67 len_16指番号をトークン化・部分的に指番号をつける・指番号を補完する“Piano Fingering Estimation and Completion with Transformers” (ISMIR2021 LBD) 22MIDI Transformer
音楽版BERT• BERT : 汎用言語モデル• 大量の文章で pre-train• 少量の文章で fine-tune → 様々な文章タスクが解ける• 例:感情分析, 文章分類, 質問に対する回答抽出• 音楽版BERT : 汎用音楽モデル• 大量のMIDIで pre-train• 少量のMIDIで fine-tune → 様々な音楽タスクが解ける• 例:曲調分析, 作曲家推定, メロディ推定, 伴奏パターン提案• 研究例• MusicBERT (コード公開)• MidiBERT-Piano (学習済みモデル公開 / 音符レベル推論も) ← おすすめTransformer だけでなく BERTベースもメロディ音符の推定23MIDI BERT
音楽AIまとめ• 音楽をトークンに → いろいろな音楽タスクが解ける• モデルの使い分け• Transformer (Encoder/Decoder):生成 / 変換 / 推定• BERT (Encoder-only):推定 / 分類 / 識別• …• MIDI• Score• Audio• 生成 / 変換• 推定• 分類 / 識別ו アレンジ• MIDI to Score• 指番号推定• 音楽分析=etc.トークン化で様々な音楽AIが学習できる!24
Pythonライブラリ音楽を処理するための
MIDIライブラリ• pretty-midi• 楽器・音符 という扱いやすい単位でオブジェクト化• MIDIイベントそのままではなく• [注意] 基本単位は「時間 (sec.)」• 音楽的な時間 (小節、拍) で扱いたいときは、「 .time_to_tick() & .resolutionで割る」という一工夫が必要pip install pretty_midipm.time_to_tick()先頭の楽器 音符一覧26
Scoreライブラリ• music21• 楽譜処理全般:楽譜の分析、編集、作成 など• 高機能、やや難解• 多様なメソッド/プロパティが用意• 全容把握は容易じゃない• 都度、ドキュメント検索が吉• 楽譜をオブジェクト化• オブジェクトの入れ子構造ScorePartMeasureVoicepip install music2127
MIDIトークン化• MIDITok• MIDIを各形式でトークン化• MIDI-like / REMI / CP / MuMIDI など• id化されるので、意味を知りたいときは辞書から引く• 「拍」トークン対応版• https://github.com/suzuqn/MIDITokenizerpip install miditok28
Scoreトークン化• Score Transformer (拙著論文) の公開コード• https://github.com/suzuqn/ScoreTransformerR bar clef_treble key_sharp_3 time_3/4 note_E5 len_2 stem_downnote_C#5 len_1/2 stem_down beam_start note_E5 len_1/2 stem_downbeam_stop bar … L bar clef_bass key_sharp_3 time_3/4 note_G#3note_E3 note_A2 len_2 stem_down note_G#3 note_E3 note_A2 len_1stem_down bar …トークン化逆変換29
まとめ
音楽はAI×トークンで扱おう!AI トークン×音楽分野でもTransformer系モデルは強いMIDI・楽譜・Audioすべてトークン化できるこの組み合わせで様々な音楽AIが実現できる@szqn_nよければフォローお願いします!ご質問などもどうぞ!アイデア次第、お試しあれ!31