モデル概要
モデル特徴
モデル能力
使用事例
🚀 TunesFormer
TunesFormerは、ユーザーが定義した音楽形式に沿ったメロディー生成を目的とした、Transformerベースの効率的なデュアルデコーダーモデルです。このモデルは、Wuらによる論文 TunesFormer: Forming Irish Tunes with Control Codes by Bar Patching で紹介されました。コードは このリポジトリ で公開され、データセットは huggingface で公開されています。
214,122のアイルランドの曲で訓練されたTunesFormerは、バーパッチングと制御コードなどの技術を利用しています。バーパッチングはシーケンス長と生成時間を短縮し、制御コードはTunesFormerが望ましい音楽形式に沿ったメロディーを生成するようにガイドします。
TunesFormer (GPT - 2バージョン) は、huggingface spaces でオンラインで使用し、体験することができます。完全なデュアルデコーダーバージョンのTunesFormerを使用するには、公式GitHubリポジトリ のスクリプトを使用してください。
✨ 主な機能
- ユーザー定義の音楽形式に沿ったメロディー生成が可能。
- バーパッチングと制御コードを用いて、生成時間の短縮と音楽形式の制御が可能。
- オンラインでの使用と独自データセットによる学習が可能。
📦 インストール
- このリポジトリ で公開されているコードの依存関係をインストールします。
unidecode 1.3.6
torch 1.13.1+cu116
samplings 0.1.7
transformers 4.18.0
💻 使用例
基本的な使用法
prompt.txt
で条件付き音楽生成のプロンプトを設定します。
S:2
B:9
E:4
B:9
L:1/8
M:3/4
K:D
de |"D"
generate.py
スクリプトを実行します。初めてスクリプトを実行する際には、ダウンロードした重みがキャッシュされ、将来的に再利用されます。自動ダウンロードが機能しない場合は、ここ から手動で重みをダウンロードできます。
python generate.py -num_tunes 3 -max_patch 128 -top_p 0.8 -top_k 8 -temperature 1.2 -seed 0 -show_control_code True
output_tunes
フォルダ内の曲を楽しんでください!これらのABC曲を楽譜またはオーディオに変換する場合は、ABC Notation
を参照してください。
X:1
S:2
B:9
E:4
B:9
L:1/8
M:3/4
K:D
de |"D" f2 fedB | A2 AF A2 |"G" B2 Bd B2 |"D" A2 AF A2 |"D" f2 fedB | A2 AF A2 |"G" B2 Bd"A" ce |
"D" d4 :: de |"D" f2 fdfa |"Em" g2 gfed |"A7" cecA ce |"D" fdfafd |"D" f2 fdfa |"Em" g2 gfed |
"A7" cecA ce |"D" d4 :|
X:2
S:2
B:9
E:4
B:9
L:1/8
M:3/4
K:D
de |"D" fdcdBd |"D" AdFAdf |"A" gecAce |"D" fdAdde | fdcdBd |"D" AdFAdf |"A" gecAce |"D" d4 :: a2 |
"G" gfgbd'b |"D" fad'fad' |"A7" c'bagfe |"D" d'afd A2 |"G" gfgbd'b |"D" fad'fad' |"A7" c'bagfe |
"D" d4 :|
X:3
S:2
B:9
E:4
B:9
L:1/8
M:3/4
K:D
de |"D" f3 e dc |"G" d2 cB AG |"D" F2 A2 d2 |"A7" f4 e2 |"D" f3 e dc |"G" d2 c2 B2 |"A7" A2 B2 c2 |
"D" d4 :| FG |"D" A3 B A2 |"D" A3 G FG |"D" A2 d2 f2 |"A7" e4 AA |"G" B2 Bc de |"D" f2 d2 A2 |
"G" Bc d2"A7" c2 |"D" d4 :|
高度な使用法
独自データセットの使用
以下の手順に従ってください。
- まず、
data_curation.zip
ファイルを解凍します。 - 次に、独自のシンボル音楽データ(.xml、.mxl、.musicxml形式)を
xmls
フォルダに配置します。 batch_converter.py
ファイルを実行して、データをABC表記に変換し、abcs
フォルダに保存します。add_control_codes.py
ファイルを実行します。これにより、ABC表記に制御コードが追加され、データがdataset.json
として保存されます。- 最後に、
train.py
ファイルを実行して独自のモデルを学習させます。重みはweights.pth
として保存されます。
コマンドライン引数
usage: generate.py [-h] [-num_tunes NUM_TUNES] [-max_patch MAX_PATCH]
[-top_p TOP_P] [-top_k TOP_K] [-temperature TEMPERATURE]
[-seed SEED] [-show_control_code SHOW_CONTROL_CODE]
optional arguments:
-h, --help このヘルプメッセージを表示して終了します
-num_tunes NUM_TUNES 独立して計算される返される曲の数
-max_patch MAX_PATCH 各曲のトークンの最大長を定義する整数
-top_p TOP_P テキスト生成のサンプリング操作内のトークンを定義する浮動小数点数
-top_k TOP_K テキスト生成のサンプリング操作内のトークンを定義する整数
-temperature TEMPERATURE
サンプリング操作の温度
-seed SEED 乱数生成のシード
-show_control_code SHOW_CONTROL_CODE
制御コードを表示するかどうか
📚 ドキュメント
ABC表記
ABC表記は、ASCIIベースのプレーンテキストの音楽表記システムで、伝統音楽の転記やオンラインでの楽譜共有に一般的に使用されています。これは、音符、リズム、コードなどの音楽要素を簡単かつ簡潔に表す方法を提供します。
ABC表記を様々な方法で操作するためのツールがいくつかあります。
- オンラインABCプレーヤー: このウェブベースのツールを使用すると、ABC表記を入力し、対応するオーディオ再生を聞くことができます。ABCコードをプレーヤーに貼り付けると、演奏されるときの曲をすぐに聴くことができます。
- ABC楽譜エディタ - EasyABC: EasyABCは、ABC表記の作成、編集、および書式設定を行うために設計された使いやすいソフトウェアアプリケーションです。そのグラフィカルインターフェイスを使用すると、ABCコードを入力し、楽譜をプレビューし、必要に応じて調整することができます。
データセット
アイルランドの大量ABC表記 (IrishMAN) データセットには、ABC表記の216,284のアイルランドの曲が含まれており、99%(214,122曲)が学習用、1%(2,162曲)が検証用に分割されています。これらの曲は、伝統音楽の共有で有名なthesession.orgとabcnotation.comから収集されました。書式の統一性を確保するために、すべての曲は スクリプト を使用してXMLに変換され、その後再びABCに変換され、自然言語を含むフィールド(例:タイトルや歌詞)は削除されました。
各曲には、以下のセクションで説明するABC記号から導出された制御コードが自動的に注釈付けされています。これらの制御コードは、各作曲の音楽形式と構造に関する洞察を提供します。
IrishMANデータセットの music21 でフィルタリングされた サブセット には、34,211のリードシートが含まれており、それぞれにコードシンボルが人為的に注釈付けされています。TunesFormerはこのサブセットから、ハーモニー付きのメロディーを生成する能力を開発しました。
注目すべき点は、データセット内のすべての曲が公共財産であり、研究や創造的なプロジェクトのための倫理的かつ合法的な使用が保証されていることです。
制御コード
CTRL に触発されて、TunesFormerに音楽形式を表す制御コードを組み込んでいます。これらのコードはABC表記の前に配置され、ユーザーが生成される曲の構造を指定することを可能にします。以下の制御コードが導入されています。
- S:セクションの数:メロディ全体のセクションの数を決定します。セクションの境界を表すために使用できるいくつかの記号をカウントします:
[|
、||
、|]
、|:
、::
、および:|
。このデータセットでは、範囲は1から8です(例:S:1
は1セクションのメロディ、S:8
は8セクションのメロディ)。 - B:バーの数:セクション内の希望するバーの数を指定します。バー記号
|
をカウントします。このデータセットでは、範囲は1から32です(例:B:1
は1バーのセクション、B:32
は32バーのセクション)。 - E:編集距離の類似度:メロディ内の現在のセクション $c$ と以前のセクション $p$ の間の類似度レベルを制御します。これはレーベンシュタイン距離 $lev(c,p)$ に基づいており、セクション間の違いを定量化して、バリエーションまたはコントラストを作成します。数学的には、次のように表すことができます。
ここで、$|c|$ と $|p|$ は2つのセクションの文字列長です。これは11レベルに離散化され、完全に一致しない場合から完全に一致する場合までの範囲です(例:eds(c,p) = 1 - lev(c,p) / max(|c|,|p|)
E:0
は類似度なし、E:10
は完全一致)。
注意事項
ABC表記は楽譜を表す特殊な表記法であり、特定の標準形式に従っています。TunesFormerとやり取りする際には、すべての学習済みABC表記がこれらの標準形式に準拠しています。
ABC表記の詳細に精通していない場合は、ABC表記を手動で入力しないことを強くお勧めします。そうしないと、モデルが正しく音楽を認識して生成できない可能性があります。誤った形式を入力すると、予測できない出力やその他の問題が発生する可能性があります。
一般的な推奨事項は、ABC表記自体を直接編集するのではなく、制御コードとABCヘッダーを通じて希望する音楽構造と形式を調整することです。
ABC表記標準の詳細については、公式ABC表記標準説明 を参照してください。
提供された形式とガイドラインに従って操作し、TunesFormerの機能を最大限に活用し、満足のいく音楽生成体験を実現してください。
🔧 技術詳細
TunesFormerは、Transformerベースのデュアルデコーダーモデルで、バーパッチングと制御コードを用いて音楽形式に沿ったメロディー生成を行います。バーパッチングによりシーケンス長と生成時間が短縮され、制御コードにより音楽形式の制御が可能になります。
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。
BibTeXエントリと引用情報
@inproceedings{DBLP:conf/hcmir/WuLY023,
author = {Shangda Wu and
Xiaobing Li and
Feng Yu and
Maosong Sun},
editor = {Lorenzo Porcaro and
Roser Batlle{-}Roca and
Emilia G{\'{o}}mez},
title = {TunesFormer: Forming Irish Tunes with Control Codes by Bar Patching},
booktitle = {Proceedings of the 2nd Workshop on Human-Centric Music Information
Retrieval 2023 co-located with the 24th International Society for
Music Information Retrieval Conference {(ISMIR} 2023), Milan, Italy,
November 10, 2023},
series = {{CEUR} Workshop Proceedings},
volume = {3528},
publisher = {CEUR-WS.org},
year = {2023},
url = {https://ceur-ws.org/Vol-3528/paper1.pdf},
timestamp = {Tue, 19 Dec 2023 17:15:12 +0100},
biburl = {https://dblp.org/rec/conf/hcmir/WuLY023.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
⚠️ 重要提示
ABC表記は楽譜を表す特殊な表記法であり、特定の標準形式に従っています。ABC表記の詳細に精通していない場合は、ABC表記を手動で入力しないことを強くお勧めします。そうしないと、モデルが正しく音楽を認識して生成できない可能性があります。誤った形式を入力すると、予測できない出力やその他の問題が発生する可能性があります。
💡 使用建议
一般的な推奨事項は、ABC表記自体を直接編集するのではなく、制御コードとABCヘッダーを通じて希望する音楽構造と形式を調整することです。提供された形式とガイドラインに従って操作し、TunesFormerの機能を最大限に活用してください。







