微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 新加坡科技设计大学研究:音乐相似度不该只有一个分数,这个AI框架能同时听出旋律、节奏、音色三个维度

新加坡科技设计大学研究:音乐相似度不该只有一个分数,这个AI框架能同时听出旋律、节奏、音色三个维度

2026-06-09 11:04
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-06-09 11:04 科技行者

这项由新加坡科技设计大学(Singapore University of Technology and Design)研究团队完成的工作,以预印本形式发布于2026年5月,论文编号为arXiv:2605.27346,有兴趣深入了解的读者可以通过这个编号在arXiv平台上查阅完整论文。

**当你说"这首歌和那首歌很像",你说的是哪种像?**

每个爱听音乐的人大概都有过这样的经历:有人向你推荐一首歌,说"这首跟你喜欢的那首很像",结果你一听,发现确实有点像——但哪里像,却很难一句话说清楚。是旋律像?是鼓点的感觉像?还是整体的乐器音色像?

这个看起来有点哲学的问题,其实是音乐信息检索领域长期面临的真实挑战。目前几乎所有的音乐推荐系统、相似度搜索工具,给出的都是一个单一的数字——"这两首歌的相似度是0.82"。但问题在于,这个0.82究竟是旋律像、节奏像还是音色像,完全黑盒,用户无从得知,也无法针对某一个维度去搜索。

新加坡科技设计大学的研究团队提出了一个叫做MERIT的框架,核心想法是:既然音乐相似度天然是多维度的,为什么不让AI同时给出三个分数——旋律相似度、节奏相似度、音色相似度——而不是把它们混成一锅?这个听起来直观的想法,背后涉及相当复杂的技术挑战,而研究团队用了一套颇具创意的方法来解决它。

一、为什么"一个分数"会成为问题

先来理解这个"一锅粥"的问题有多严重。以一个经典的音乐场景为例:一个钢琴手翻奏了一首重金属摇滚名曲。这个钢琴版和原版之间,旋律和和声结构几乎完全相同,但乐器从电吉他和架子鼓变成了钢琴,节奏也从重金属的猛烈节拍变成了钢琴演奏的舒缓律动。这时候,旋律维度上它们高度相似,音色维度上几乎天壤之别,节奏维度上也大相径庭。

一个只给出单一分数的系统,面对这个例子会非常为难。它可能给出0.4的相似度(因为音色和节奏都差太远),也可能给出0.7(因为旋律太像了)。但无论给出什么数字,都没法告诉你"旋律层面高度相似,其他层面差异很大"这个对音乐推荐真正有价值的信息。

类似的情况无处不在。同一个艺人的不同歌曲,往往有非常一致的音色风格(同样的嗓音、同样的制作习惯),但旋律和节奏可以截然不同。电子舞曲里的不同曲目,可能共享几乎完全相同的鼓机节拍模式,但旋律和音色各有特色。传统的单一相似度分数,把这些有意义的区别都抹平了。

MERIT的研究团队意识到,要解决这个问题,需要训练三个"专科医生":一个只看旋律,一个只看节奏,一个只看音色。但麻烦在于,训练数据从哪里来?

二、最难的问题:训练数据的"纯度"

训练一个"只看旋律"的AI模型,你需要大量这样的音频对:两段音乐,旋律完全相同,但节奏和音色都不同。现实世界里的音乐录音几乎不存在这种纯粹的情况。即使是翻唱,也往往在旋律、节奏、音色多个维度同时发生变化。

这就是MERIT最核心的创新:研究团队设计了一套数据生成流水线,人工制造出"只有一个维度发生变化"的音频对。整套方案的基础是一个叫做MoisesDB的数据集,这个数据集提供了多首歌的逐个乐器分轨(例如单独的人声轨、鼓轨、钢琴轨等),以及一个叫做JASCO的AI音乐生成模型,这个模型能够接受条件约束来生成音乐。

旋律维度的训练数据是这样制造的:先从MoisesDB里取出一段音乐的旋律轨,用算法分析出这段音乐的音高轮廓(就是旋律走向,哪个时间点唱的是哪个音),然后把这个音高轮廓作为约束条件输入给JASCO。JASCO会根据这个旋律轮廓生成新的音乐,同时用一段随机抽取的文字描述(比如"带有手风琴和原声吉他的民谣")来决定音色和风格。这样生成出来的新音乐,旋律走向和原始音乐一样,但乐器、风格、节奏完全不同。

节奏维度的数据生成逻辑类似,但换了约束条件:这次不是旋律轮廓,而是原曲的鼓轨。JASCO拿到鼓轨作为节奏骨架,然后用随机文字描述来决定旋律和音色。生成出来的音乐,节拍和律动跟原曲一致,但旋律和音色完全是另一回事。

音色维度则不需要生成模型。研究团队直接从MoisesDB里找同种乐器的不同分轨:比如两首不同歌曲里的钢琴轨,放在一起就是音色相同(都是钢琴)但旋律和节奏各不相同的一对。负样本则是同一首歌里不同乐器的分轨,比如钢琴轨和鼓轨配一对,音色截然不同。

最终,旋律和节奏各产生了5000个训练组、125000个训练三元组(锚定样本、正样本、负样本的三件套),音色产生了1855个训练组、46241个三元组。这套数据制造方案的创意在于,它不需要人工标注,完全依靠生成模型和已有分轨,批量制造出了现实录音里根本找不到的"纯度极高"的对比样本。研究团队还把这套数据集开放了出来,供其他研究者使用。

三、听音乐的AI大脑是怎么搭建的

有了数据,下一步是搭建模型。MERIT的骨架是一个叫做MERT的已有模型,你可以把它理解成一个"音乐理解通才"——它在大约16万小时的音乐上做过大规模预训练,对音乐的音高、节拍、音色等各方面都有相当丰富的理解。这个模型有3.3亿个参数,是个体量不小的模型。

MERIT的做法是把MERT的权重完全冻住——也就是说,MERT的所有参数在训练过程中都不会变化。这样做的好处是训练速度快,而且不会破坏MERT原本积累的音乐知识。在MERT之上,MERIT添加了三个轻量级的"专科投影头",每个投影头就是一个两层的小型神经网络。旋律头只负责旋律,节奏头只负责节奏,音色头只负责音色,三者相互独立,互不干扰。

MERT内部有23层,每层对音乐的理解侧重不同。MERIT并不只取最后一层的输出,而是把第3、4、5、6层和第23层的输出一起拼起来用。这样设计是因为浅层(3-6层)更擅长捕捉低级的声学特征,比如节拍的律动感;深层(第23层)更擅长理解高级的语义信息,比如旋律的走向和曲调特点。把五层的输出拼在一起,形成一个5120维的向量,再分别送入三个投影头,最终每个头输出一个128维的向量,代表该音频在对应维度上的"坐标"。两段音乐在某个维度的相似度,就是它们在该头输出空间里的余弦相似度。

训练时用的是"圆损失"(Circle Loss)这种损失函数。它的工作原理可以用一个比喻来理解:正样本对(应该靠近的一对)和负样本对(应该远离的一对),各自根据"当前距离离目标还有多远"来动态分配训练力度。距离目标最近的难样本会获得最大的训练注意力,而已经明显满足要求的容易样本则被忽略,从而让训练效率更高。

一个有趣的细节是,由于MERT是冻住的,所有音频的MERT特征可以事先一次性提取并缓存下来,三个投影头的训练直接在这些缓存特征上进行,速度相当快。

四、人工听感验证:训练数据真的"纯"吗?

在汇报模型效果之前,研究团队先做了一件重要的事:让真人来验证这套合成训练数据是否真的达到了"单维度变化"的效果。

他们邀请了15位音乐专家,给每位专家听取音频对,然后分别在旋律、节奏、音色三个滑条上打分(0到100)。测试样本包括10对旋律正样本(应该旋律最相似)、10对节奏正样本(应该节奏最相似)和10对音色正样本(应该音色最相似)。

结果相当令人满意:旋律正样本对在旋律维度上获得了60分的平均评分,节奏正样本对在节奏维度上获得了65.8分,音色正样本对在音色维度上获得了57.3分——每种类型的样本对,都在对应的维度上获得了最高分,符合设计初衷。

不过有一个值得注意的细节:旋律正样本对的节奏评分(53.4分)和旋律评分(60分)非常接近。这其实是可以理解的——旋律本身也包含节奏信息,因为旋律里每个音的时值(长短)就是一种节奏模式。这种"维度之间的渗漏"在真实音乐里难以完全消除,但旋律维度仍然是旋律正样本对的主导因素,这就足够了。

信度评估方面,使用Cronbach's α系数来衡量15位专家之间的一致性:音色维度的α值为0.757(一致性较高),旋律为0.615(可接受),节奏为0.493(中等)。节奏维度的一致性相对较低,这也符合音乐感知的普遍规律——节奏的判断往往比音色更主观,不同听众对"什么算节奏相似"有更大的个体差异。

五、模型到底分得清吗?内部测试结果

模型训练完之后,研究团队做了一张非常直观的测试表格:三个头分别在三类测试集上的表现。如果模型真的实现了维度分离,对角线(旋律头测旋律、节奏头测节奏、音色头测音色)应该都接近100%,而非对角线位置应该接近50%(随机猜测的水平)。

结果完全符合预期,甚至超出预期。旋律头在旋律测试集上达到99.9%的准确率,在节奏测试集上只有58.4%,在音色测试集上只有60.4%。节奏头在节奏测试集上达到100%,在旋律测试集上只有47.7%,在音色测试集上71.6%。音色头在音色测试集上达到99.6%,在旋律测试集上55.3%,在节奏测试集上69.5%。

对比之下,基础的MERT模型(不加任何投影头,直接用余弦相似度)在三类测试集上的表现都在79%到87%之间,差距不大。CLAP(另一个著名的音频-语言预训练模型)也类似,在78%到94%之间徘徊。这说明这两个"通才"模型虽然对各维度都有感知,但没有分离——对任何一个维度测试,它们的表现都差不多,说明它们的嵌入空间是多因素混合的。

最有意思的数字是节奏头在旋律测试集上的47.7%——这个数字低于随机猜测的50%。这意味着节奏头不是简单地"对旋律不敏感",而是学到了一种主动排斥旋律信息的表示方式:在节奏头的坐标空间里,旋律相似的两段音乐实际上比旋律不相似的两段音乐坐标还要更远一些。这种主动抑制,才是真正意义上的维度解耦。

研究团队还做了一个有趣的深层分析:看每个投影头的第一层权重,哪一部分对应MERT的哪一层最重要。结果发现,旋律头对MERT第23层(最深层)的依赖稍高,而节奏头对第3-6层(浅层)的依赖相对更强。这与此前对自监督音频模型的研究发现一致——浅层更擅长捕捉低级节奏纹理,深层更擅长编码高级音高和旋律语义。没有人告诉模型该用哪一层,这种分工完全是从数据中自然涌现出来的。

六、真实世界的考验:三个完全独立的零样本测试

内部测试做得再好,也可能只是因为训练数据和测试数据来自同一个生成流水线。真正有说服力的是:把这三个头拿到完全不相关的真实录音数据集上,看结果是否依然符合预期。

研究团队选了三个外部数据集,它们和训练数据没有任何重叠,也没有经过任何生成模型处理。

第一个是MUSDB18-HQ,这是一个专业音乐分轨数据集,包含人声、鼓、贝斯、其他乐器四类纯净分轨。测试设计是:同类乐器的两段分轨为正样本对(比如两首不同歌的鼓轨),不同类乐器为负样本(比如同一首歌的鼓轨和人声轨)。这是一个纯粹的音色测试。结果是音色头以78.9%的准确率成为三个头中最强的,节奏头最弱(63.1%),差距超过15个百分点。原始MERT模型在这个测试上达到79.8%,和音色头几乎一样——但这里的关键不是音色头赢过了MERT,而是另外两个头虽然用同样的MERT基础,却主动把乐器类别信息甩掉了,比音色头低了很多。这说明训练信号确实让各头形成了差异化的信息偏好。

第二个是Ballroom Dataset,这是一个舞蹈音乐数据集,包含探戈、华尔兹、伦巴等八种舞蹈类型的录音。不同舞蹈类型之间的区别主要在节奏特征(拍号、速度范围、切分音模式),而所有录音都是大乐队风格,音色差异较小。这是一个几乎"纯粹节奏"的测试。节奏头在这里达到88.0%,是所有三个测试中所有头的最高单头准确率。旋律头只有55.2%,差距高达32.8个百分点。更重要的是,节奏头比原始MERT模型(78.0%)高出了整整10个百分点——虽然底层模型完全相同,但节奏维度的专门训练让节奏头能够把MERT已经有但混杂在一起的节奏信息提取放大,超越了MERT自身的水平。

深入分析各舞种的准确率,可以看到更细腻的规律。节奏头在探戈(97.0%)、维也纳华尔兹(94.4%)和标准华尔兹(94.0%)上准确率极高,因为这三种舞蹈的节奏特征非常鲜明、彼此区分度大。而在伦巴-国际式上只有65.4%,因为数据集里有三种伦巴子类型,它们的切分音模式高度重叠,即使对人类而言也难以区分,节奏头的表现退化发生在节奏本身就模糊的地方,而非模型本身的问题。

第三个是Covers80,这是一个翻唱歌曲数据集,包含80首歌的原版和翻唱版各一首。翻唱的本质是多维度混合:旋律按定义保留,节奏在大多数翻唱中也相当程度地保留(因为大多数翻唱是改编而非完全重新诠释),但音色往往大幅改变(因为翻唱者换了乐器和演唱风格)。这个测试没有单一"正确答案"的维度,是一个多维度交叉的压力测试。

结果与预期完全吻合:节奏头(69.9%)和旋律头(63.4%)都超过了原始MERT(66.1%),而音色头(61.3%)低于MERT。这说明翻唱识别的信号主要来自旋律和节奏,而不是音色,三个头的表现排序准确地反映了翻唱这种音乐现象的本质。

节奏头略微超过旋律头,乍看有些奇怪,但仔细想想:MERIT的旋律头被训练成对乐器和节奏变化不敏感,这恰恰去掉了翻唱识别依赖的部分线索;而翻唱中节奏(速度、律动感)往往比具体旋律走向保留得更稳定。这不是模型的缺陷,而是它确实学到了"旋律"的纯粹含义,去掉了和旋律捆绑在一起的节奏信息。

七、把三个分数合并用,效果更好吗?

既然有了三个维度的分数,一个自然的问题是:把它们合并成一个分数,是否比任何单一头都更好?研究团队测试了四种合并方式:简单平均、加权平均、L2归一化拼接(把三个头的128维向量直接拼成384维)、逐元素乘积。

在MUSDB18-HQ(音色测试)和Covers80(多维度测试)上,L2归一化拼接的效果和最佳单头相当甚至略有超越,这说明三个头提供的信息是互补的。在Ballroom(节奏测试)上,最佳单头(节奏头)已经很强,合并后没有明显提升。逐元素乘积表现最差,原因是只要有一个维度的相似度接近零,乘积就会趋近于零,把其他维度的有效信息都湮没了。

八、具体案例:每对翻唱都有自己的"因子指纹"

除了统计数字,研究团队还分析了Covers80里六对具体翻唱的三维度分数,展示了MERIT的解释能力。

披头士《Let It Be》的录音室版和现场版,三个维度分数几乎完全相同(旋律0.97,节奏0.97,音色0.96),这完全符合常识:同一艺人现场翻唱自己的作品,编曲几乎没有变化。

Extreme和Westlife翻唱的《More Than Words》,旋律(0.93)和节奏(0.95)都很高,但音色(0.79)明显偏低,反映了Westlife的流行人声组合风格和Extreme的原声摇滚风格在音色上的巨大差异。

而CCR的《Lodi》和Tesla的原声版翻唱则呈现了完全反转的模式:音色相似度最高(0.95),旋律相似度最低(0.71)。这捕捉到了一个音乐爱好者能够辨认的事实:Tesla的翻唱版保留了CCR标志性的原声摇滚音色质感,但在旋律处理上加入了大量即兴演绎,偏离了原曲的音高走向。一个单一的相似度数字,无法区分这三种截然不同的翻唱关系,而MERIT的三维度画像准确地还原了每对翻唱背后的音乐事实。

九、这个框架的局限和未来方向

研究团队在论文里诚实地列出了几个现有局限。当前的分解只覆盖旋律、节奏、音色三个维度,和声(和弦进行)和力度(动态变化)还没有被独立建模,需要设计新的生成条件才能引入。音色维度目前是以"乐器类别"来定义的,两把不同录音条件下的原声吉他被当作音色相同,但它们实际上听起来可能差别挺大,这种粒度不够细的问题还有待解决。此外,JASCO的生成质量本身会给旋律和节奏的训练数据带来上限——如果生成模型没能完美重现旋律或节奏,训练数据的"纯度"就会打折扣。

研究团队提出了两个值得期待的未来方向:一是通过和弦条件生成来加入和声作为第四个因子;二是用一个多头Transformer来取代现在三个独立的投影头,让三个头共享中间层的计算,同时保持各自的监督目标,可能在参数效率和泛化能力上更优。

归根结底,MERIT做的事情可以用一句话描述:它把"这两首歌有多像"这个问题,拆解成了"旋律有多像""节奏有多像""音色有多像"三个更具体的问题,并且给出了有实验支撑的、能泛化到真实录音的答案。这不是说单一相似度分数没有用,而是在需要精细控制的场景下,三个维度的分数显然比一个混合分数包含更多可用信息。

对于普通用户来说,这意味着未来的音乐搜索可能会支持这样的操作:"给我找旋律和这首歌像,但音色要完全不同的歌"或者"找同样节奏感,但完全不同曲风的音乐"。这种精准的、可解释的音乐检索,是现有系统暂时无法做到的。

Q&A

Q1:MERIT框架训练数据是怎么来的,为什么不直接用真实录音?

A:MERIT的训练数据主要是通过AI音乐生成模型JASCO"制造"出来的,而非直接使用真实录音。原因是真实录音里旋律、节奏、音色总是同时变化,无法做到"只改变一个维度"。研究团队通过把原曲的旋律轮廓或鼓轨输入JASCO,同时随机指定文字描述来控制其他方面,从而批量生成出旋律相同但音色节奏不同、或节奏相同但旋律音色不同的音频对。音色维度则直接利用多轨数据集里不同歌曲的同类乐器分轨配对,无需生成模型。

Q2:MERIT的三个头是否可以用于音乐推荐系统?

A:从技术角度看是可行的。MERIT在推理时,对于一段查询音频只需经过一次MERT编码,然后分别经过三个轻量投影头,就能得到三个维度的128维向量。在实际系统中可以预先为音乐库建立三个独立的近似最近邻索引,查询时分别检索,返回结果带有旋律、节奏、音色三个独立相似度分数,用户可以按照自己关注的维度筛选或排序。目前代码和预训练模型已经开源,感兴趣的开发者可以在GitHub上的AMAAI-Lab/MERIT项目中获取。

Q3:MERIT的旋律头为什么在翻唱检测(Covers80)上的表现反而不如节奏头?

A:这个现象有两方面原因。一方面,MERIT的旋律头被专门训练成对乐器音色和节奏模式不敏感,而传统翻唱识别系统通常会利用共同的节奏框架作为辅助线索,MERIT的旋律头主动去掉了这部分信息。另一方面,Covers80数据集里大多数翻唱是致敬版或现场版,演唱者往往在节奏和速度上高度忠实于原曲,但在旋律装饰音和走向上有较多个人发挥,所以节奏保留的稳定性反而更高。这恰恰证明了MERIT的旋律头学到了"纯旋律"的概念,而非混有节奏信息的综合特征。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-