Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
音楽はAI×トークンで扱おう!
Search
Masahiro Suzuki
June 29, 2022
Research
3
1.5k
音楽はAI×トークンで扱おう!
Music×Analytics Meetup Vol.8 登壇資料
https://muana.connpass.com/event/246874/
Masahiro Suzuki
June 29, 2022
Tweet
Share
More Decks by Masahiro Suzuki
See All by Masahiro Suzuki
Score Transformer (MMAsia'21)
suzuqn
0
180
Other Decks in Research
See All in Research
打率7割を実現する、プロダクトディスカバリーの7つの極意(pmconf2024)
geshi0820
0
140
Weekly AI Agents News! 8月号 プロダクト/ニュースのアーカイブ
masatoto
1
210
渋谷Well-beingアンケート調査結果
shibuyasmartcityassociation
0
310
EBPMにおける生成AI活用について
daimoriwaki
0
220
文書画像のデータ化における VLM活用 / Use of VLM in document image data conversion
sansan_randd
2
330
移動ビッグデータに基づく地理情報の埋め込みベクトル化
tam1110
0
170
Human-Informed Machine Learning Models and Interactions
hiromu1996
2
530
PostgreSQLにおける分散トレーシングの現在 - 第50回PostgreSQLアンカンファレンス
seinoyu
0
130
非ガウス性と非線形性に基づく統計的因果探索
sshimizu2006
0
440
日本語医療LLM評価ベンチマークの構築と性能分析
fta98
3
790
129 2 th
0325
0
250
「並列化時代の乱数生成」
abap34
3
910
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Writing Fast Ruby
sferik
628
61k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Why Our Code Smells
bkeepers
PRO
335
57k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
KATA
mclloyd
29
14k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
180
Bash Introduction
62gerente
609
210k
Transcript
音楽は AI ×トークン で扱おう! ヤマハ (株) RDD 鈴木 正博 Music×Analytics
Meetup vol.8 2022/6/29
About me 鈴木 正博 (すずき まさひろ) • ヤマハ株式会社 • Webエンジニア
(PHP, JS, Selenium等) • PMもどき (Webサービス, Android/iOSアプリ開発) • AI研究者 (音楽情報処理; Python, C++) • 3~4年前に自力で研究を始め、R&Dへ • 研究 • 音楽情報処理/MIR (楽譜・アレンジ中心) • 音楽 • 楽器:ピアノ • 以前はよくサーキットイベントとか行っていた 研究者としては異色の経歴 @szqn_n 始めたて 2
今日の内容 (何の話をするか / しないか) AI / Blockchain Audio / MIDI
/ Score こっちの「トークン」じゃない! × 3
今日の内容 1. 音楽をAIで処理する有力な方法 = AI (Transformer系) × トークン 2. この方法で実現したAIの具体例
for 音楽の分析/生成とか やりたい人 (やってる人含め) ➢ この方法をご自身のツールボックスに for 音楽×AIに興味ある人 ➢ この分野の面白い例などご紹介できたら 4
AI (Transformer) の話
Transformer 全盛 NLP Image GPT3 / OPT-175B Imagen Vision Transformer
(ViT) = Transformer x Diffusion model 「チョコレートとマンゴーと ホイップクリームでできた白頭鷲」 CNNをリプレイス 「スイカみたいなボタン」の HTML生成 6
Transformer のしくみ • Attention • ボトルネックがない (vs. RNN/LSTM) • 長距離の依存関係を扱える
(vs. CNN) • 情報を「トークン」に切り分ける • 言葉の場合:単語 (word/sub-word) • 画像の場合:パッチ (細かく分割した画像片) • 「トークン」間で Attention を張って 関係性を学習 Attention Convolution RNN スイカ | みたいな | ボタン 7
音楽分野でも Transformer • Music Transformer (2018) • MIDIをトークンにして 音楽生成を学習 •
長くても一貫性のある音楽生成が可能に • Pop Music Transformer (2020) • 小節を意識した音楽生成が可能に vs. Transformer LSTM (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-like REMI 11
MIDIトークン 発展形 • マルチトラック対応 • 多次元化 複数の属性を 多次元のトークンに MuMIDI MMM
CP (Compound Word) Octuple MIDI MIDI-like 各トラックを 直列に結合 1トークンで 複数の情報を表す 各トラックの音符を 時系列に並べる 12
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
MIDI vs. 楽譜 (Score) MIDI 楽譜 調号 音部記号 拍子記号 声部
連桁 符幹の向き 段 MIDIにない要素 が 楽譜には多数存在 共通要素:音の高さ / タイミング 14
Scoreトークン • 楽譜をトークン化 楽譜もこうしてトークン化できる 登壇者の発明 Score Transformer (2021) 声部も表現 複数の段を
結合 15 楽譜要素をトークンに
[参考] Audioトークン • Audioもトークン化 • ViT のように スペクトログラムをパッチ化 • ViT
: 画像を分類 (何が写ってる?) • AST : 音を分類 (何の音が鳴ってる?) • 画像で事前学習 → 音で転移学習 で精度向上 Audioもトークン化できる Audio Spectrogram Transformer (2021) Audioトークン ImageNet 16
トークンを使った音楽AI
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
AIピアノアレンジ Demo 19 MIDI Transformer
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
MIDI to Score (浄書/楽譜化) MIDIからの生成楽譜例 21 MIDI Score Transformer
指番号推定 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
音楽版BERT • BERT : 汎用言語モデル • 大量の文章で pre-train • 少量の文章で
fine-tune → 様々な文章タスクが解ける • 例:感情分析, 文章分類, 質問に対する回答抽出 • 音楽版BERT : 汎用音楽モデル • 大量のMIDIで pre-train • 少量のMIDIで fine-tune → 様々な音楽タスクが解ける • 例:曲調分析, 作曲家推定, メロディ推定, 伴奏パターン提案 • 研究例 • MusicBERT (コード公開) • MidiBERT-Piano (学習済みモデル公開 / 音符レベル推論も) ← おすすめ Transformer だけでなく BERTベースも メロディ音符の推定 23 MIDI 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_midi pm.time_to_tick() 先頭の楽器 音符一覧 26
Scoreライブラリ • music21 • 楽譜処理全般:楽譜の分析、編集、作成 など • 高機能、やや難解 • 多様なメソッド/プロパティが用意
• 全容把握は容易じゃない • 都度、ドキュメント検索が吉 • 楽譜をオブジェクト化 • オブジェクトの入れ子構造 Score Part Measure Voice pip install music21 27
MIDIトークン化 • MIDITok • MIDIを各形式でトークン化 • MIDI-like / REMI /
CP / MuMIDI など • id化されるので、意味を知りたいときは辞書から引く • 「拍」トークン対応版 • https://github.com/suzuqn/MIDITokenizer pip install miditok 28
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
まとめ
音楽はAI×トークンで扱おう! AI トークン × 音楽分野でも Transformer系モデルは強い MIDI・楽譜・Audio すべてトークン化できる この組み合わせで 様々な音楽AIが実現できる
@szqn_n よければフォローお願いします! ご質問などもどうぞ! アイデア次第、お試しあれ! 31