入门指南
在这篇文章中,我想解释一下我在开发自动和声分析模型的过程中的旅程。对我个人而言,深入理解音乐很重要。诸如“为什么事物构造成这样?”和“作曲家或艺术家在创作这首曲目时在想什么?”这样的问题对我很重要。自然而然的,开始的方式是分析曲目的底层和声。
翻阅我从音乐学院归来的旧笔记本,我找到了我们用来注释和分析小型音乐片段的技术。这被称为罗马数字分析。如果您之前从未听说过,这个想法可能有些复杂,但请耐心等待。
我的目标是构建一个能够自动分析乐谱的系统。给定一份乐谱,然后系统将返回带有罗马数字符号和弦的额外乐谱。主要适用于古典调性音乐,但不一定局限于此。
在本文的其余部分,我将介绍罗马数字、图神经网络的概念,并讨论我开发的模型和结果的一些细节。希望您喜欢!
罗马数字简介
罗马数字分析是一种用于理解和分析音乐中和弦和和声进行的方法,尤其是在西方古典音乐和流行音乐中。和弦使用罗马数字表示,而不是传统的音乐符号。
在罗马数字分析中,每个和弦根据其在给定调式中的位置和功能分配一个罗马数字。罗马数字代表调式的音阶,大写数字代表大调和弦,小写数字代表小调和弦。
例如,在C大调中,C大和弦将用罗马数字“I”表示(大写“I”代表大调和弦)。D小和弦将用“ii”表示(小写“ii”代表小调和弦)。G大和弦将用“V”表示(大写“V”表示大调和弦),因为它是C大调的第五个和弦。

罗马数字始终与调式有关。因此,如果调式是C大调,则罗马数字“V”将是属七和弦或G大和弦。但和弦的音质可以不同,例如小调或大调。在罗马数字中,大写字母表示大调音质,小写字母表示小调音质。
在音乐分析中,通常最低音符是一个关于和弦特征的参考点。罗马数字也能传达这些信息。在上面的示例中,第二个和弦的低音(最低的和弦音符)是F#,但和弦的根音是D,因此该和弦处于1转位,用数字6表示。
罗马数字的另一个有趣的符号能力与借用和弦有关。这种效果称为副程度,隐式地,每一个罗马数字(原始数字)都有一个主程度的副程度(即I或i),然而,当标记了副程度时,我们知道哪个音阶在暂时充当主音。上面的示例中,第三个和弦作为其主程度具有属七和弦,并作为其副程度具有C大的属和弦。V65表示带有七音质的大和弦在第二转位。
罗马数字分析帮助音乐家和音乐理论家了解音乐作品中和弦的结构和关系。它们可以识别常见的和弦进行,分析和弦模式,并比较不同的音乐作品。这是作曲家、编曲者和演奏者理解底层和声并基于这些知识进行音乐决策的有用工具。
自动罗马数字分析
既然我们对罗马数字分析的实践有了基础,我们可以讨论如何自动化这个过程。在本文中,我们将介绍一种从符号音乐(MusicXML、MIDI、Mei、Kern、MuseScore等)中预测罗马数字的方法。请注意,您可以从诸如Finale、Sibelius、MuseScore或任何其他乐谱编辑软件中获取其中一些格式。通常,这些软件允许将乐谱导出为MusicXML(未压缩)格式。但是,如果您没有这些编辑器中的任何一个,我建议使用MuseScore。
让我们现在更深入地讨论这些表示。与音频表示不同,音乐可以在波形级别作为数字序列或在频域中作为2-D频谱图看待,符号表示具有单个音符事件,其携带着包括起始时间、持续时间和音高拼写(音符名称)在内的信息。符号表示常常被视为一种伪音频表示,将乐谱分为分段时间,例如钢琴卷轴(如下图所示)。然而,最近一些作品提出了一种乐谱的图形表示,其中每个音符在图中代表一个顶点,而边表示音符之间的关系。对于后一种方法,乐谱可以转换成这种特殊的图形结构,这在涉及到机器学习模型时非常有用。

因此,给定一个符号乐谱,通过对音符之间的三种关系进行建模,可以构建出一个图。
- 开始时间相同的音符,即具有相同的起始。
- 一个音符在另一个音符结束时开始,即连续的音符。
- 一个音符在另一个音符发声时开始,即持续连接。
乐谱的图可以作为图神经网络的输入,通过沿图的边传播信息来隐式学习。但是在解释模型如何处理乐谱之前,让我们先简要解释一下图神经网络的工作原理。
图神经网络
那么,图神经网络到底是什么?在它们的核心,GNN是一类设计用于处理表示为图的数据的深度学习模型。就像现实世界中的网络一样,图由互相连接的节点或顶点组成,每个节点具有自己独特的特征。GNN利用这种相互连接性来捕捉丰富的关系和依赖关系,使其能够执行分析和预测任务。
但是,GNN是如何工作的呢?想象一个音乐乐谱,其中每个音符都是一个节点,而音符之间的关系表示它们之间的连接。传统模型会将每个音符实例单独处理,忽略音乐上下文。然而,GNN通过同时考虑个体特征(例如音高拼写,持续时间)和它们之间的关系(相同的起始,连续的)来拥抱这个上下文。通过聚合相邻节点的信息,GNN使我们能够理解不仅仅是个别音符,还有整个网络中的动态和模式。
为了实现这一点,GNN采用一系列迭代的消息传递步骤。在每个步骤中,节点从其邻居那里收集信息,更新自己的表示,并通过网络进一步传播这些更新后的特征。这个迭代过程允许GNN从附近的节点中捕获和细化信息,逐渐建立对整个图的全面理解。
当在网络中进行这种迭代的消息传递过程时,有时称为图卷积。我们的音乐分析模型中使用的一种流行的图卷积块称为SageConv,来自著名的GraphSAGE论文。我们不会在这里详细介绍,但有许多资源涵盖GraphSAGE的功能,比如这一个。
GNN的美妙之处在于它们能够从图数据中提取有意义的表示。通过从局部上下文中学习并将其与全局信息结合起来,GNN能够发现隐藏的模式,进行准确的预测,甚至生成新的见解。这使得它们在广泛的领域中无价,从社交网络分析到药物发现,交通预测到欺诈检测,现在又到音乐分析。
罗马数字分析使用的模型称为ChordGNN。正如名字所示,ChordGNN是一种基于图神经网络的自动罗马数字分析模型。该模型的一个特点是,它利用音符级的信息,但产生的是起始值预测,即为乐谱的每个唯一起始事件预测一个罗马数字。这意味着在相同的起始点上有多个音符,它们将共享相同的罗马数字,就像标注音乐乐谱一样。然而,通过使用图卷积,从每个音符传播到相邻的音符和起始点的信息。

ChordGNN 基于图卷积循环神经网络架构,由操作音符级别的堆叠图卷积块组成。
图卷积后跟随一个起始池化层,将音符表示缩小到起始级别,从而为分数的每个唯一起始点生成一个向量嵌入。这是一个重要的步骤,因为它将表示从图形转移到序列。
通过起始池化获得的嵌入,也按时间顺序排列,然后输入到顺序模型中,例如 GRU 堆栈。最后,为描述罗马数字的每个属性添加简单的多层感知器分类器,因此 ChordGNN 也是一个多任务模型。
ChordGNN 不直接预测分数的每个位置的罗马数字,而是预测度数、局部调、和弦品质、倒置和根音。通过分析每个任务的预测,将每个属性任务的预测组合成单个的罗马数字预测。让我们看看输出预测的样子。
ChordGNN 预测示例
在本节中,我们将查看一些 ChordGNN 的预测并将其与人工分析进行比较。以下是来自海顿弦乐四重奏作品20号第3乐章的前几小节的示例。

在这个例子中,我们可以看到几个情况。在第2小节中,人工注释标记为首倒三和弦;然而,此时中提琴比大提琴音高低,因此和弦实际上是根音位置。ChordGNN 能够正确预测这一点。随后,ChordGNN 预测了八分音符的和谐节奏,与注释者标记的二分音符不符。通过分析该段落的基础和声学,我们可以解释 ChordGNN 的选择。
人工注释表明,第2小节的下半部分代表 viio 和弦。然而,它不应该是首倒一和弦,因为大提琴演奏作为最低音符的 F#(即 viio 的根音)。但是,对该段的解释存在两种争议。首先,在第三个拍子上的 viio 被视为围绕主音和弦的过渡和弦,导致下一个小节中的属和弦。或者,viio 可能已经是一个延长的属音和声学(在拍子弱拍上的过渡和弦),导致 V7。ChordGNN 的解决方案符合这两种解释,因为它不试图将和弦在更高的层级分组,而是将每个八分音符视为独立的和弦,而不是过渡事件。

上面是另一个示例,将 ChordGNN 的预测与莫扎特钢琴奏鸣曲的原始分析进行比较。在这种情况下,ChordGNN 的分析比较简单,选择省略一些和弦。这在两个不同的情况下发生,即 V7 和弦的4倒置(V2)。对于 ChordGNN 来说,这是一个合理的假设,因为丢失了低音。注释者与预测之间的另一个分歧发生在结束时的半终止。ChordGNN 将旋律的 C# 视为过渡音符,而注释者选择指定 #11 的延展。
结论
在本文中,我们讨论了一种利用图神经网络自动化进行罗马数字分析的新方法。我们讨论了ChordGNN模型的工作原理,并展示了它的一些预测结果。
参考文献
E. Karystinaios, G. Widmer. Roman Numeral Analysis with Graph Neural Networks: Onset-wise Predictions from Note-wise Features. Proceedings of International Society of Music Information Retrieval Conference (ISMIR), 2023.
资源
GitHub – manoskary/ChordGNN:这是论文《利用图进行罗马数字分析》的代码库…
这是论文《利用图神经网络进行罗马数字分析》的代码库 – GitHub – manoskary/ChordGNN…
github.com
本文中的所有图片和图形都是作者创建的。