このプロジェクトでは、ピアノ曲に焦点を当てて、ジャズ音楽を生成するための「Generative Pre-trained Transformer (GPT)」モデルの応用を検討します。プロジェクトは2021年に完成しました。
プロジェクトの目的
このプロジェクトの主な目的は、自然言語処理 (NLP) での成功で知られる GPT モデルを音楽生成の分野に適応させることです。このプロジェクトでは、音符とテキスト データの構造的類似性を活用して、ジャズ
ピアノ曲を生成することを目指しています。音楽を生成問題では、NLPを使用は少なかったから、プロジェクトは、ジャズ音楽における予測不可能な状況に対処するモデルの能力を調査していた。
過程
データ前処理:データセットは約200個の ジャズピアノMIDI ファイルでした。各 MIDI ファイルはピアノロール表現に変換され、2D 配列形式になりました。このデータ前処理は、NLP の単語埋め込みに似た音楽情報のエンコードに役立ちます。
MIDIデータ処理の例
モデルトレーニング: 3 つの 基本的GPT ブロックで構成されるGPT モデルを開発しました。モデルは、バッチ サイズ 32、シーケンス長 600 トークンで 1,500 エポック以上トレーニングされました。
Model: "model"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_1 (InputLayer) [(None, 600)] 0
_________________________________________________________________
token_and_position_embedding (None, 600, 128) 5120000
_________________________________________________________________
transformer_block (Transform (None, 600, 128) 99584
_________________________________________________________________
transformer_block_1 (Transfo (None, 600, 128) 99584
_________________________________________________________________
transformer_block_2 (Transfo (None, 600, 128) 99584
_________________________________________________________________
dense_18 (Dense) (None, 600, 40000) 5160000
=================================================================
Total params: 10,578,752
Trainable params: 10,578,752
Non-trainable params: 0
モデル推論と展開: モデルは、入力を最初の音符のシーケンスとして受け取り、トレーニング シーケンスの長さに合わせてパディングし、その後の音符のシーケンスを予測します。その後、音符は MIDI 形式に変換されます。さらに、React JS、Flask、Google Cloud Platform を使用して Web アプリが開発されました。このアプリでは、ユーザーが自分の最初の音符のシーケンスを入力すると、ジャズの音楽が無限に生成されます。

アプリケーションのUI。
結果
モデルのトレーニングのLossグラフ。
データセットのサイズが限られているにもかかわらず、モデルはジャズのジャンルと一貫性があり、スタイル的に一貫性のある音楽を生成することに成功しました。ただし、場合によっては、生成された出力が入力曲と完全に一致し、過剰適合モデルの兆候を示しています。
10秒最初の音符のシーケンスから生成していましたJazz音楽。
振り返り
このプロジェクトでは、小さなデータセットでも、GPT ベースのモデルでジャズ音楽を効果的に生成できることが実証されました。主な問題は過剰適合モデルでしたが、データセットのサイズを増えることで軽減できました。しかも、このプロジェクトでは、言語に関連しないタスクにおける NLP アルゴリズムの柔軟性も示されました。
最後に、このプロジェクトは以下のMedium記事でもっと細かく説明していますから、ご覧ください。
他のプロジェクトも自己紹介ウェブサイトで書かれています。https://victorpham1997.github.io/