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.6k
音楽は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
190
Other Decks in Research
See All in Research
チュートリアル:Mamba, Vision Mamba (Vim)
hf149
6
2.1k
Weekly AI Agents News!
masatoto
30
53k
IM2024
mamoruk
0
220
医療支援AI開発における臨床と情報学の連携を円滑に進めるために
moda0
0
150
新規のC言語処理系を実装することによる 組込みシステム研究にもたらす価値 についての考察
zacky1972
1
320
ECCV2024読み会: Minimalist Vision with Freeform Pixels
hsmtta
1
410
研究を支える拡張性の高い ワークフローツールの提案 / Proposal of highly expandable workflow tools to support research
linyows
0
300
Zipf 白色化:タイプとトークンの区別がもたらす良質な埋め込み空間と損失関数
eumesy
PRO
8
1.3k
Composed image retrieval for remote sensing
satai
2
240
アプリケーションから知るモデルマージ
maguro27
0
260
リモートワークにおけるパッシブ疲労
matsumoto_r
PRO
6
4.9k
Poster: Feasibility of Runtime-Neutral Wasm Instrumentation for Edge-Cloud Workload Handover
chikuwait
0
340
Featured
See All Featured
Speed Design
sergeychernyshev
27
790
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Unsuck your backbone
ammeep
669
57k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
175
51k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
366
25k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
Into the Great Unknown - MozCon
thekraken
35
1.6k
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