グラフニューラルネットワークによるローマ数字の分析
美容とファッションの世界におけるグラフニューラルネットワークの活用
イントロダクションガイド
この記事では、自動和声分析モデルの開発における私の旅を説明したいと思います。個人的には、音楽を深く理解することに興味があります。「なぜ物事はそのように構築されているのか?」や「作曲家やアーティストが作曲する際に考えていたことは何か?」といった疑問は、私にとって重要です。当然のことながら、始めるためには楽曲の基盤となるハーモニーを分析する必要がありました。
私は音楽院から古いノートを探し出し、小さな楽曲の断片を注釈付けして分析する際に使用していたテクニックに出会いました。それはローマ数字の分析と呼ばれています。もしあなたがこれについて聞いたことがない場合、アイディアは少し複雑かもしれませんが、お付き合いいただければと思います。
私の目標は、楽譜を自動的に分析できるシステムを構築することです。楽譜が与えられると、そのシステムはローマ数字記号でコードが記載された追加の楽譜を含む同じ楽譜を返します。これは主にクラシックの調性音楽に適用されますが、それに限定されるものではありません。
この記事の残りでは、ローマ数字、グラフニューラルネットワークの概念を紹介し、私が開発したモデルと結果について詳しく説明します。お楽しみください!
ローマ数字の紹介
ローマ数字分析は、音楽の和音と和声進行を理解し分析するための方法です。特に西洋のクラシック音楽やポピュラー音楽において使用されます。伝統的な楽譜表記の代わりに、和音はローマ数字で表されます。
ローマ数字分析では、各和音は与えられた調における位置と機能に基づいてローマ数字が割り当てられます。ローマ数字は調の音階度数を表し、大文字の数字は長調の和音を表し、小文字の数字は短調の和音を表します。
例えば、Cメジャーの場合、Cメジャーコードはローマ数字「I」によって表されます(大文字の「I」は長調の和音を示します)。Dマイナーコードは「ii」で表されます(小文字の「ii」は短調の和音を示します)。GメジャーコードはCメジャーの5番目の和音であるため、「V」で表されます(大文字の「V」は長調の和音を示します)。
ローマ数字は常に調に対して相対的です。したがって、キーがCメジャーの場合、「V」はドミナント、つまりGメジャーコードを表します。ただし、コードにはマイナーやメジャーなど異なる質があります。ローマ数字では、大文字はメジャーの質を、小文字はマイナーの質を示します。
音楽分析では、通常、和音の最低音が和音の性格に関する参照点になります。ローマ数字はこの情報も伝えることができます。上記の例では、2番目のコードのベース(最低音)はFシャープですが、和音の根音はDです。したがって、その和音は1の転回形であることを示すために「6」という数字で示されます。
ローマ数字のもう1つの興味深い表記能力は、借用和音と関連しています。この効果は副次度と呼ばれ、暗黙のうちにすべてのローマ数字(主次度)には瞬間的に主音(Iまたはi)として機能する音階度数があります。ただし、副次度が注釈付けられた場合、瞬間的に主音として機能する音階度数がわかります。上記の例では、3番目のコードは主次度としてドミナントセブンを持ち、Cメジャーのドミナントとして副次度を持ちます。V65は、セブンの質を持つメジャーコードの2転回形を示しています。
ローマ数字分析は、ミュージシャンや音楽理論家が音楽の和音の構造と関係を理解するのに役立ちます。これにより、一般的な和声進行を特定し、和声のパターンを分析し、異なる音楽作品を比較することができます。これは、作曲家や編曲家、演奏家が潜在的なハーモニーを理解し、その知識に基づいて音楽的な決定をするための有用なツールです。
自動ローマ数字分析
ローマ数字分析の実践例を持っているので、それを自動化する方法について考えてみましょう。この記事では、記号音楽(MusicXML、MIDI、Mei、Kern、MuseScoreなど)からローマ数字を予測する方法を説明します。これらの形式のいくつかは、Finale、Sibelius、MuseScoreなどの楽譜エディタソフトウェアから取得できます。通常、ソフトウェアはmusicxml(非圧縮)形式へのエクスポートを許可します。しかし、これらのエディタを持っていない場合はMuseScoreを使用することをおすすめします。
さて、より詳細に表現について議論しましょう。音声表現とは異なり、音楽を波形レベルでのデジタルシーケンスまたは周波数領域の2次元スペクトログラムとして見ることができるオーディオ表現とは対照的に、象徴的な表現は開始時間、持続時間、音高のスペリング(音符の名前)などの情報を持つ個々の音符イベントを持っています。象徴的な表現はしばしば擬似オーディオ表現として扱われ、スコアを量子化された時間フレームに分割する、たとえばピアノロール(下図で示されているような)のようなものです。しかし、最近では、スコアのグラフ表現が提案されるようになりました。ここでは、各音符がグラフ内の頂点を表し、エッジが音符間の関係を表します。後者では、機械学習モデルが関与する場合に特に有用なこのグラフ構造にスコアを変換することができます。
したがって、象徴的なスコアが与えられた場合、グラフは音符間の3つの関係をモデリングして構築されます。
- 同時に開始する音符、つまり同じ開始時刻。
- 1つが終わり次にもう1つが開始する音符、つまり連続した音符。
- 1つが鳴っている最中にもう1つが始まる音符、つまり接続中の音符。
スコアのグラフは、グラフニューラルネットワークへの入力として使用できます。この際、グラフのエッジに沿って情報を伝達することによって暗黙的に学習します。ただし、モデルがスコア上でどのように機能するかを説明する前に、まずグラフニューラルネットワークがどのように機能するかを簡単に説明しましょう。
グラフニューラルネットワーク
では、グラフニューラルネットワーク(GNN)とは具体的には何でしょうか?GNNは、グラフとして表されるデータを処理するために設計されたディープラーニングモデルの一種です。実世界のネットワークと同様に、グラフは相互に接続されたノードまたは頂点で構成されており、それぞれが固有の特徴を持っています。GNNは、この相互接続性を利用して豊富な関係と依存関係を捉え、分析や予測のタスクを実行できるようにしています。
では、GNNはどのように機能するのでしょうか?各音符がノードであり、音符間の関係がそれらの接続を表すような楽譜を想像してみてください。従来のモデルでは、各音符のインスタンスを個別に扱い、音楽のコンテキストを無視しています。しかし、GNNは、個々の特徴(音高のスペリング、持続時間など)と関係(同時開始、連続など)の両方を同時に考慮することで、このコンテキストを活用します。近隣ノードから情報を集約し、GNNは個々の音符だけでなく、ネットワーク全体のダイナミクスとパターンも理解することができます。
これを実現するために、GNNは一連の反復的なメッセージパッシングステップを使用します。各ステップでは、ノードは隣接ノードから情報を収集し、自身の表現を更新し、これらの更新された特徴をネットワーク全体にさらに伝播させます。この反復プロセスにより、GNNは近傍ノードから情報をキャプチャし、徐々にグラフ全体の包括的な理解を構築することができます。
ネットワーク内で反復的に行われるメッセージパッシングプロセスは、グラフ畳み込みと呼ばれることがあります。私たちの音楽分析モデルでも使用した人気のあるグラフ畳み込みブロックは、有名なGraphSAGE論文からのSageConvと呼ばれるものです。ここでは詳細は説明しませんが、GraphSAGEの機能については多くの情報源があります。たとえば、こちらの情報源などがあります。
GNNの美しいところは、グラフデータから意味のある表現を抽出する能力にあります。ローカルなコンテキストから学習し、グローバルな情報と組み合わせることにより、GNNは隠れたパターンを見つけ出し、正確な予測を行ったり、新たな洞察を生成したりすることができます。これにより、ソーシャルネットワーク分析から薬物発見、交通予測から詐欺検出まで、さまざまなドメインで非常に貴重なツールとなっています。そして今、音楽分析にも活用されています。
Roman Numeral分析に使用されるモデルはChordGNNと呼ばれています。名前の通り、ChordGNNはグラフニューラルネットワークを基にした自動的なRoman Numeral分析モデルです。このモデルの特徴は、音符ごとの情報を活用してオンセットごとの予測を生成することです。つまり、スコアのユニークなオンセットイベントごとに1つのRoman Numeralが予測されます。これは、楽譜に注釈を付けるときのように、同じオンセットで複数の音符が同じRoman Numeralを共有することを意味します。ただし、グラフ畳み込みを使用することにより、すべての音符の情報が隣接する音符とオンセットに伝播されます。
ChordGNN は、グラフ畳み込み再帰ニューラルネットワークアーキテクチャに基づいており、ノートレベルで操作されるスタックされた GraphSAGE 畳み込みブロックから構成されています。
グラフ畳み込みは、オンセットプーリング層に続きます。この層ではノートの表現をオンセットレベルに縮小し、それによりスコアの各ユニークなオンセットごとにベクトル埋め込みが得られます。これは重要なステップであり、表現をグラフからシーケンスに移す役割を果たしています。
オンセットプーリングによって得られた埋め込みは時間順に並べられ、その後 Sequential モデル(例:GRU スタック)に入力されます。最後に、ローマ数字を表す各属性に対してシンプルな多層パーセプトロン分類器が追加されます。したがって、ChordGNN はマルチタスクモデルでもあります。
ChordGNN はスコアの各位置に直接ローマ数字を予測せず、代わりに度数、ローカルキー、品質、転回、ルートを予測します。各属性のタスクの予測は、各タスクの予測を分析して単一のローマ数字予測に組み合わせられます。では、予測の出力結果を見てみましょう。
ChordGNN の予測の例
このセクションでは、ChordGNN のいくつかの予測を見て、人間による分析と比較することもあります。以下は、ハイドンの弦楽四重奏曲 op.20 №3 第4楽章の最初の小節の例です。
この例では、いくつかの点が見られます。2小節目では、人間の注釈では第1転回の属音を示していますが、その時点でのヴィオラはチェロよりも低くなっているため、実際には根音の位置にあるコードです。ChordGNN はこれを正しく予測できます。その後、ChordGNN は8分音符の調和リズムを予測し、注釈者の半音符の注記とは異なります。そのパッセージの基にあるハーモニーを分析すると、ChordGNN の選択が正当化されます。
人間の注釈では、第2小節の後半全体が viio コードを表していると示唆されています。しかし、それは第1転回ではありません。なぜなら、チェロが F# を最低音として演奏しているからです(それが viio の根音です)。しかし、このセグメントには二つの対立する解釈があります。第一に、3拍目の viio は周囲の属音コードの間に現れるパッシング・コード(次の小節でのドミナント・コードへつながる)と見なされます。また、viio は既に長いドミナント・ハーモニーの一部であり、オフビートでのパッシング・コードを伴いつつ V7 へ向かっている可能性もあります。ChordGNN の解は、それぞれの八分音符を個別のコードとして扱い、パッシング・イベントではなくすることで、両方の解釈に適合しています。
上記は、ChordGNN の予測をモーツァルトのピアノソナタの元々の分析と比較した別の例です。この場合、ChordGNN の分析はもう少し簡素であり、一部のコードを省略しています。これは、4転回の V7 で発生する場面で2回起こっています。これは、ChordGNN にとって合理的な推測です。さらに、注釈と予測の間のもう一つの不一致は、終盤のハーフ・カデンツで起こります。ChordGNN は、メロディの C# をパッシング・ノートとして扱い、注釈者は #11 の拡張を指定します。
結論
この記事では、グラフニューラルネットワークを使用したローマ数字解析の自動化方法について説明しました。ChordGNNモデルの動作方法と、その予測の一部を紹介しました。
参考文献
E. Karystinaios、G. Widmer著。グラフニューラルネットワークによるローマ数字解析:ノートごとの特徴からのオンセット予測。国際音楽情報検索会議(ISMIR)の論文集、2023年。
リソース
GitHub – manoskary/ChordGNN:Roman Numeral Analysis with Graphのリポジトリ…
これは、「Roman Numeral Analysis with Graph Neural Networks」の論文のリポジトリです – GitHub – manoskary/ChordGNN…
github.com
この記事のすべての画像とグラフィックは、著者によって作成されています。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles