你有没有试过把一首喜欢的歌扒成乐谱?哪怕你完全不懂乐理,也大概知道这件事有多折磨人。你得一边听一边猜这段是什么和弦,这句旋律到底该写高八度还是低八度,鼓点落在哪个拍子上,副歌从哪一小节开始。专业音乐人做这件事,靠的是耳朵加经验,外行人做这件事,基本等于盲人摸象。
那让AI来做这件事,行不行?
2022年的时候,斯坦福的研究者做过一个叫SheetSage的系统,算是这个方向的开山之作。它能从音频里识别节奏、和弦、旋律这些要素,拼成一张简谱。但用过的人很快发现一个让人哭笑不得的问题:每个要素单独拎出来看都还行,拼在一起就乱套了。
节奏模块说这首歌是80拍,旋律模块转录出来的音符却暗示这是160拍的节奏型。和弦模块给出的和声走向,跟旋律模块猜出来的调性对不上。整份谱子就像几个互不通气的人各写各的,拼在一起满是裂缝。
这就是这篇论文要解决的核心矛盾:准确的局部预测,未必能拼成一份读得通的乐谱。
这事儿难在哪
你可能觉得,把节奏、和弦、旋律、调性各自做准,不就行了吗?
还真不行。
这几个音乐维度不是互相独立的拼图块,它们彼此牵制。旋律里一个音该写成C还是D,取决于当前是什么调。音符的时值和小节线,必须共享同一套节拍网格。如果节奏模块和旋律模块各自为政,哪怕每个模块单独测试都表现优秀,拼出来的谱子照样支离破碎。
更麻烦的是数据。想训练一个能听懂音乐全部维度的AI,你需要海量的"录音+完整乐谱"配对数据。但现实世界里,这种数据极其稀缺。大多数公开数据集只标注了节拍,或者只标注了和弦,很少有一份数据集把节奏、和弦、调性、旋律、曲式全都标全了。
标注质量*:指标注信息的准确程度和完整程度。有些数据集的标注时间戳可能存在几十毫秒的误差,这对于需要精确到10毫秒级别的乐谱转录任务来说是个不小的麻烦。
这就好比你想教一个学生写一篇融合历史、地理、文学知识的综合论文,但你手头的参考书,一本只讲历史,一本只讲地理,还都有点过时错漏,没有一本是把这几门知识编织在一起讲透的教材。如果硬是拿这些零散资料直接喂给学生,他写出来的东西大概率是历史部分和地理部分互相矛盾,因为他从没见过一篇真正融会贯通的范文。
这篇来自香港科技大学、纽约大学、MBZUAI等机构研究者的论文,提出的SheetSage2,就是奔着解决这两个问题去的:怎么让AI学会跨维度的协调一致,以及去哪儿找够用的训练数据。
先搞定数据荒:用MIDI造出几十万份"假"录音
既然现成的"录音+完整乐谱"数据不够用,那就自己造。
这里要先说一下MIDI是什么。
MIDI*:一种记录音乐演奏信息的数字格式,它不存储声音本身,而是存储"哪个音、什么时候响、响多久、用什么乐器"这些符号化信息,有点像乐谱的数字版本。
MIDI文件天然带着音高、时长、乐器轨道这些信息,把它渲染成音频,就能得到一对天然对齐的"音频+符号标注"。研究者用的是一个叫Los Angeles MIDI Dataset的集合,里面有超过40万个去重后的MIDI文件,体量相当可观。
但这里有个坑:MIDI文件里的高层标注,比如调性、和弦、旋律轨道,经常是缺失或者不可靠的。有研究者统计过,甲壳虫乐队的MIDI文件在调性识别上的准确率只有40%左右,排除掉那些默认标成C大调的敷衍标注后,也只能到84%左右,离真正可靠的标注还有距离。
研究者想了个巧办法,叫伪标签自举。
先用专家规则,从少量MIDI文件里挖出高置信度的种子标签。比如一个多轨编曲里,如果某个音轨是持续的柱式和弦,那它大概率就是在交代和声走向;如果某个音轨名字直接叫"melody",那它大概率就是旋律轨。拿这些高置信度的例子去微调一个预训练的符号音乐模型,训练出一个自动标注器,再把这个标注器应用到整个MIDI库上。
效果很惊人:旋律的种子样本池原本只有17134首有明确旋律轨道命名的歌,经过这套自举流程扩展之后,变成了185887首,扩大了10.8倍。
这个思路其实挺像教小孩认字的方式。你不可能一开始就给孩子看一本没有拼音标注的厚字典,那样他什么也学不会。但你可以先教会他几百个最常见、最容易辨认的字,然后让他拿着这点底子去啃更难的文章,边读边猜,猜错了自己纠正,慢慢地,他认字的范围会越滚越大。如果没有这个自举过程,直接拿那一万七千首高置信度样本去训练最终模型,数据量撑不起一个靠谱的AI,但如果一开始就想让模型直接从全部40万首里学,又会被大量错误标注带偏方向。
靠这套流程,研究者攒出了大约36万条合成训练数据,配合FluidSynth这类音频渲染工具,把MIDI转成24kHz的音频,构成了后续训练的基础材料。
两步走:先学会"感知",再学会"下笔"
有了数据,接下来是模型设计。SheetSage2的训练分成三个阶段,这个设计思路挺值得说道说道。
第一阶段是合成数据的构建,前面已经讲过了。第二阶段训练一个叫SheetSage2-Prober的模型,第三阶段再训练一个叫SheetSage2-AR的模型。
为什么不直接训练一个端到端的模型,一步到位?
因为训练数据本身就是"脏"的,带着不准的时间戳,带着不完整的标注,带着互相矛盾的信息。如果直接拿这些数据去训练一个需要生成完整、自洽序列的模型,它会被这些噪声带偏,学出一堆互相矛盾的输出习惯。
研究者的解法是先训练一个"容错性强"的感知模型Prober。
Prober*:论文中负责逐帧预测的感知模型,分为非旋律和旋律两个子模型,分别处理和弦、调性、节奏、曲式,以及旋律这几类任务。
它的训练目标不是生成一整段连贯的乐谱,而是逐帧判断"这一刻是不是下拍""这个时间点的和弦是什么""这段旋律的音高落在哪里"。因为是逐帧判断,它对标注里几十毫秒的时间误差没那么敏感,也能容忍某些标签缺失,毕竟每一帧的判断是相对独立的局部任务。
Prober训练完之后,接一层结构化解码器,把这些零散的逐帧概率,整理成离散、自洽的标签序列。这一步才是真正解决"各模块互相打架"问题的关键,后面会细说。
有了Prober产出的高质量、自洽的伪标签序列,研究者才拿这些伪标签去训练第三阶段的SheetSage2-AR。
AR*:全称Autoregressive,自回归,指模型在生成序列时,每一步的预测都依赖于前面已经生成的内容,逐个token地往下写,类似人写文章时一个字一个字往下接。
SheetSage2-AR是一个真正的序列到序列模型,它把音频编码之后,像写文章一样,逐个token生成一整套包含节奏、和声、旋律、曲式信息的事件序列,最终可以被转换成ABC记谱法文本或者MIDI文件。
这个"先感知、后生成"的两段式设计,本质上是把一个困难的大问题拆成两个较容易的小问题。Prober不需要操心生成一份完整连贯的乐谱,它只需要把每一帧判断准;结构化解码器专门负责拼接的逻辑自洽;SheetSage2-AR则专心跟着老师的范本学会怎么流畅地写出完整的东西。这种分工,有点像先请一个经验丰富的老编辑把一篇文章的事实核对清楚、逻辑理顺,再请一个文笔好的作家照着这份理顺后的草稿,重新组织语言写成一篇流畅的文章。如果没有这道工序,直接让文笔好的作家去啃一堆事实混乱的原始素材,他写出来的东西读起来可能很顺,但内容经不起推敲。
结构化解码:让节奏不再"忽快忽慢"
Prober的输出是一堆概率,比如这一帧是下拍的概率是多少,那一帧是某个和弦的概率是多少。怎么把这些概率变成一份能看的乐谱,这是结构化解码要干的事。
这里最值得展开讲的,是节奏解码的设计。
论文提到一个很典型的问题,叫节奏层级不一致,也就是模型在同一首歌里,忽快忽慢地切换速度判断。
举个论文里提到的具体场景:一首歌有两段主歌,内容和节奏其实差不多,但第一段没鼓、第二段加了鼓。传统的节拍跟踪方法,只会局部地判断当前的速度,它可能把没鼓的那段判断成80拍,把有鼓的那段判断成160拍,尽管这首歌实际的音乐速度从头到尾根本没变过。这种速度判断的来回横跳,会导致同一首歌不同段落用了不一样的节拍网格和音符时值记法,乐谱看起来就会特别别扭。
为什么会出现这种情况?因为传统的动态贝叶斯网络解码器,也就是论文里提到的DBN,只能看局部窗口内的信息来判断速度,它没有一个贯穿全曲的"基准速度"概念。
SheetSage2的解法是设计一个三阶段的节奏解码器,核心是先选定一个全局的速度锚点。
具体做法是,先把模型在整首歌范围内对"中位速度"的预测汇总起来,池化出一个最可能的锚点速度。有了这个锚点作为基准,后面局部速度的判断,都变成相对于这个锚点的微调,而不是每个片段各自为政。
这就像是开车走长途的时候,如果你每过一个路口都重新估算一次整体要开多快,很容易被某个路段的限速牌带偏,忽快忽慢。但如果你一开始就设定好整段旅程的平均时速,中途只做小幅微调,整趟车开起来才会稳。SheetSage2做的就是这件事:先定锚,再微调,而不是每一帧都重新猜一次。
论文里用具体数据验证了这个设计的效果。研究者定义了一个"混淆比例"指标,衡量一份录音里,预测的节拍速度和参考速度之间发生几倍关系混淆的比例,比如同一首歌里既有1倍速也有2倍速的判断。在osu2017这个数据集上,一个叫Beat This!的近期强基线混淆比例高达20.74%,也就是五分之一的歌都存在这个问题。而Prober把这个比例压到了2.96%,用传统DBN解码同样的Prober输出则是3.70%,SheetSage2-AR更是压到了1.48%。
这组数字很能说明问题:结构化解码确实比传统DBN解码器更能维持全局一致性,而且AR蒸馏并没有把这个优势丢掉。
解决旋律里的"八度幽灵"
节奏之外,旋律转录有另一个经典难题,叫八度模糊。
简单说就是模型很容易把同一个音符判断到相邻的八度上。比如一句旋律本该是C4-E4-G4,模型可能识别成C5-E4-G4,中间那个音凭空跳高了一个八度。这不是模型瞎猜,而是因为同一个音名在不同八度上听感很相似,尤其在复杂的伴奏背景下,模型很容易误判。
论文给出的解法挺巧妙。它不让模型直接预测绝对音高,而是让模型预测音程关系,也就是当前这个音相对于前一个音差了几个半音。
这里有个细节值得注意。研究者把音程差分成了七个桶,极端的音程差距会被归到同一个粗粒度的类别里,因为隔得太远的两个音之间的关系对判断旋律走向意义不大。这意味着模型做决策的时候,看到的不是一个孤立的绝对音高数字,而是"这个音跟上一个音差多远"这样一个相对关系。相对关系天然就比绝对音高更稳定,因为旋律的听感本质上就是由音程构成的,哪怕整体移低或移高一个八度,只要音程关系对了,旋律的"形状"就还在。
这个设计思路让我联想到你描述路线的时候,经常不会说"从东经多少度到东经多少度",而是说"往前走200米,然后左转"。绝对坐标很容易因为基准点选择不同而产生误差累积,相对方向和距离反而更稳。音乐旋律的转录用了类似的逻辑:与其死磕绝对音高,不如先把相对音程关系定住。
实验数据同样证明了这个设计有效。在RWC完整旋律数据集的333个连续乐器段落上,使用相对音程信息的完整解码器,把八度混淆比例从12.91%降到了9.31%。作为对照,前代系统SheetSage1在同样的场景里混淆比例高达34.83%,相当于三分之一的乐句都存在八度跳变问题。而SheetSage2-AR虽然在推理时不再使用这套专门的动态规划算法,混淆比例依然只有11.71%,说明通过蒸馏,学生模型把老师的这种一致性习惯学了过去。
自回归蒸馏:把老师的规矩教给学生,但不教规矩本身
这里有个挺有意思的设计选择:SheetSage2-AR在推理的时候,完全不使用前面提到的那套结构化动态规划解码器,它只是简单地逐个token贪心解码。
这是不是意味着它放弃了一致性?
恰恰相反。研究者采用的策略叫自回归蒸馏,思路是让Prober加结构化解码器这套组合先生成一批高质量、自洽的伪标签序列,然后把这些序列直接当作硬目标,训练AR模型去模仿。
蒸馏*:机器学习里的一种训练方式,通常是让一个更强或者经过特殊处理的教师模型产生的输出,去指导一个结构更简单的学生模型学习,目的是让学生模型在不需要教师那套复杂机制的情况下,也能达到接近的效果。
这个思路有点像带新人。一个经验丰富的老师傅,脑子里有一整套判断标准和纠错机制,新人跟着干了足够多活之后,哪怕脱离了师傅手把手的指导,自己也能把活干得像模像样,因为那套判断标准已经内化成了他自己的直觉,而不再需要每次都翻一遍规章手册。如果没有这个蒸馏过程,AR模型要么得在推理时也背着一整套复杂的动态规划算法跑,拖慢速度,要么就只能靠自己从头摸索一致性,大概率会退回到各模块互相打架的老问题。
实验结果支持了这个判断。在15组基准测试指标里,SheetSage2-AR在其中10组上超过了Prober本身,包括节拍和下拍这两类对一致性要求最高的任务。更关键的是,前面提到的节奏混淆比例和八度混淆比例,AR模型都基本保持了Prober的水准,没有因为丢掉了显式的动态规划而明显退步。
跑分看看:八个数据集,十二项第一
说了这么多设计思路,实际效果到底怎么样?
论文在八个基准数据集上做了测试,涵盖节拍、下拍、调性、和弦、曲式、旋律这几大类任务,对比对象包括SheetSage1、经典工具madmom,以及多个近两年发表的任务专用最强系统,比如节拍跟踪的Beat This!、调性识别的S-KEY、和弦识别的ChordFormer、曲式分析的SongFormer。
| 任务 | 数据集 | 指标 | SheetSage1 | 任务专用最强 | SheetSage2-Prober | SheetSage2-AR |
|---|---|---|---|---|---|---|
| 节拍 | osu2017 | F1 | 91.80 | 89.19 | 92.28 | **93.01** |
| 下拍 | osu2017 | F1 | 83.47 | 85.90 | 92.79 | **92.90** |
| 调性 | GiantSteps | 加权分 | 43.89 | 72.09 | **78.29** | 77.73 |
| 和弦 | JAAH | 大小调准确率 | 39.77 | 59.45 | 62.94 | **64.50** |
| 曲式 | HarmonixSet | F1(3秒容差) | — | 79.50 | 81.65 | **82.86** |
| 旋律 | RWC-Pop人声 | F1 | 62.71 | — | **83.08** | 82.51 |
| 旋律 | Rock Corpus人声 | F1 | 49.19 | — | 65.98 | **67.08** |
这张表只摘选了部分代表性结果,完整的15组基准指标对比里,SheetSage2-AR在其中12组上超过了对比的最强基线系统。拿旋律转录这一项来说,SheetSage2-AR在RWC-Pop人声旋律F1上达到82.51%,比SheetSage1的62.71%高出近20个百分点。这个差距意味着什么?大致可以理解为,原来每转录5个音符,SheetSage1就要漏掉或者错认1个,而新系统把这个错误率压低了不少。
论文还专门拿了几个近期发布、有公开权重的旋律转录系统做了补充对比,包括MuScriptor、YourMT3+,以及一个Demucs加ROSVOT的组合方案。结果是这几个系统在RWC-Pop人声旋律上的F1都停留在26%到49%之间,远低于SheetSage1的62.71%,更不用说SheetSage2系列的80%以上。这说明专门针对人声旋律场景做过调优的系统,确实比通用多乐器转录模型更擅长这类任务。
即便不靠人声训练数据,模型也能学会哼唱的模样
论文还做了一个挺能说明问题的消融实验,拆分训练数据来源,分别用纯真实录音、纯合成数据、以及两者混合来训练Prober,看看合成数据到底有没有用。
结果显示,混合数据在节拍、下拍、和弦、曲式这几项任务上都优于单独使用任何一种数据源,只有调性识别稍微打了点折扣,旋律识别基本持平。更让人意外的是,仅用合成数据训练的模型,在RWC-Pop上的人声旋律F1居然达到了57.76%,而它的训练音频里完全不包含真实的人声演唱,全部是MIDI乐器音色渲染出来的。
论文里专门给了一个可视化例子,截取了RWC-MDB-P-2001第一首歌开头的人声片段,对比纯合成数据模型和真实数据模型的预测曲线。即便合成模型从没听过真人唱歌,它依然大致抓住了旋律的走向,只是在音符起止时间和时值的判断上还比较粗糙。这提示了一件有意思的事:音乐里很多结构性的规律,比如旋律怎么走、和弦怎么接,可能并不严格依赖于某种特定的音色,哪怕训练素材听起来和目标场景相差很远,模型依然能学到一部分可迁移的规律。
这有点像一个从小只听钢琴曲长大的孩子,第一次听到小提琴拉奏同一首曲子,依然能哼出大致的旋律走向,尽管音色完全陌生。旋律的"形状"本身是独立于乐器音色的一种抽象结构,这种抽象能力正是AI模型试图去捕捉的东西。
从论文看到的边界和局限
这篇论文也诚实地列出了当前系统的局限,这点值得一提。
节奏方面,SheetSage2只支持到十六分音符的网格精度,三连音或者更细的节奏型只能近似处理。而且整首曲子共用一个全局速度锚点,这对速度稳定的流行歌很友好,但对速度大幅波动的曲目就不太适用。
和声方面,系统假设的是十二平均律,和弦词汇表只覆盖三和弦、挂留和弦、六和弦、七和弦,像九和弦这类更复杂的扩展和弦暂时无法表示。
风格覆盖方面,无论是训练数据还是lead sheet这种记谱格式本身,针对的都是节拍稳定的流行音乐。对于节奏自由、需要多声部记谱的古典音乐,这套系统并不适配。
lead sheet*:一种简化的乐谱记谱形式,通常只记录旋律线、和弦符号、歌词和曲式结构,省略了完整的多声部编曲细节,是流行音乐、爵士乐领域常用的记谱方式。
研究者在论文结尾提到,随着训练数据规模继续扩大,一些目前依靠人工设计的音乐约束,或许会变得不那么必要。这句话背后其实藏着一个研究范式上的判断:当数据足够丰富时,模型或许能自己摸索出那些目前还需要工程师手工设计的一致性规则。
从SheetSage1到SheetSage2,再往后看
这篇论文并不是孤立出现的。它是一个更大项目YuE2的一部分,YuE2是2026年发表的一篇音乐生成论文,首次引入了SheetSage2和配套的MERT2音频编码器,用来给音乐生成任务提供符号化和语义化的监督信号。这篇技术报告,正是对SheetSage2方法和评测细节的完整补充说明。
往前追溯,SheetSage1是2022年斯坦福团队发表的工作,最早把节拍跟踪、调性和弦识别、旋律转录这几件事拼在一起做lead sheet转录,但它在跨任务一致性上存在明显短板,这也是SheetSage2要解决的核心问题。
同期还有两个方向相近的工作值得一提。一个是2026年的TUTTI,专注于把音频转录成完整的古典乐谱,它的监督数据完全来自合成渲染的MIDI。另一个是同年的MuScriptor,面向多乐器MIDI转录,论文里也把它拿来和SheetSage2做了旋律转录的横向对比。这几篇工作几乎是同一时期、沿着相似的"合成数据+序列到序列建模"思路在往前推进,从中能感受到这个方向正在变成一个热门赛道。
写在后面
读这篇论文的时候,最让我意外的其实不是技术细节本身,而是那个合成数据训练出来的模型,在完全没见过真人唱歌的情况下,依然能转录出接近正确的人声旋律轮廓。
这件事其实在提醒我们一个容易被忽略的道理:很多时候,我们以为AI需要"逼真"的训练数据才能学会某种能力,但实际上它学的可能是更抽象的结构性规律,音色只是外壳,旋律的走向、和声的逻辑才是骨架。这跟人类学习音乐的某些直觉是相通的,一个受过系统训练的音乐人,哪怕换一种陌生乐器演奏熟悉的旋律,依然能一下子认出来。
另外一个让我反复琢磨的地方,是论文里那个"先学感知,再学生成"的两段式设计。放在更大的视角看,这其实是在回应一个几乎所有复杂AI系统都会遇到的矛盾:训练数据往往是脏的、残缺的、彼此不一致的,而我们最终想要的输出,却必须是干净、完整、自洽的。直接从脏数据训练出干净输出,往往事倍功半,但分成两步,先让一个模型去消化噪声、产出相对干净的中间结果,再让另一个模型去学习这个中间结果,反而更容易成功。这个思路或许不只适用于音乐转录,在很多需要从嘈杂真实世界数据里提炼出结构化知识的场景,都值得借鉴。
论文里那份把摇滚吉他独奏简化成十六分音符网格的转录结果,让我想起小时候学乐器的经历:老师经常会把一段复杂的即兴演奏先简化成基本节奏型,让你照着弹,等你掌握了骨架,再慢慢加上那些细腻的装饰音。AI目前在这件事上,可能也正处在"先学会骨架"的阶段。
那么下一步呢,当这类系统真的能精确捕捉到那些十六分音符之外的细微律动时,它写出来的乐谱,会不会比专业音乐人听写得还要细致?
Q&A
Q1:SheetSage2是什么?
A:SheetSage2是一个把音频转录成完整乐谱的AI系统,能同时识别节奏、和弦、旋律、调性和曲式结构,并把它们整合成一份逻辑自洽的lead sheet乐谱,而不是互相矛盾的零散标注。
Q2:SheetSage2相比前代SheetSage1有什么提升?
A:在八个基准数据集的15项指标测试中,SheetSage2-AR在12项上超过了此前最强的专用系统,旋律转录F1比SheetSage1提升近20个百分点,同时通过结构化解码和自回归蒸馏,显著减少了节奏速度混淆和旋律八度跳变这类一致性错误。
Q3:SheetSage2的训练数据是怎么来的?
A:研究者主要用MIDI文件渲染成音频作为合成训练数据,并通过专家规则加伪标签自举的方式,把高置信度的少量标注扩展成几十万条规模的训练集,弥补了真实录音标注数据稀缺的问题。







