研究

揭秘 AI osu! mania 作谱模型背后的数据集

ManiaGAI v2 学习了约 14,500 位作谱者制作的 150,622 张人工 osu! mania 谱面,远不止 ranked 区。按键数、难度和来源看语料库里有什么,以及为什么这样构建。

AI beatmap 生成器的大部分工作并不在模型上,而在数据上:决定哪些谱面值得学习,确保每个训练样本的 timing 都正确,并用一种能抓住“可玩性”本质的形式来表示谱面。这篇文章带你看看 ManiaGAI v2 的模型所学习的语料库——里面有什么,以及它为什么是现在这个样子。

语料库概览

谱面
150,622
歌曲
86,255
作谱者
~14,500
不重复音频
4,227 小时

也就是 150,622 张人工制作的 osu! mania 谱面,涵盖 86,255 首歌曲,出自大约 14,500 位不同的作谱者——共 4,227 小时的不重复音频。它一开始并没有这么大:在后来成为第 2 版的那段开发过程中,训练集从约 83,000 张谱面增长到了现在的规模。

不只是 ranked 谱面

最显而易见的选择是只用 ranked 谱面训练——它们经过审核,timing 经过检查,代表了社区的质量标准。我们刻意没有这么做。ranked 谱面只是人们实际做谱和游玩内容中很小、风格也很窄的一部分:在这个语料库里,每六张谱面中只有一张是 ranked。

按 osu! 上的状态划分的训练谱面
osu! 上的状态谱面数占比
Ranked / Qualified24,89616.5%
Loved2,5301.7%
Pending、WIP 与 Graveyard114,21275.8%
从未上传到 osu!(大多为 BMS / O2Jam 转谱)8,9846.0%

状态取自 osu!,截至 2026 年 10 月。

四分之三的谱面处于 pending、WIP 或 graveyard 状态——也就是从未经过 rank 流程的谱面,但这并不等于它们很差:这意味着没人审核过它们,而不是它们没通过审核。只从 ranked 谱面学习的模型,学到的是 ranked 区的习惯;从整个社区学习的模型,才能看到人们做谱方式的全貌。

osu! 之外:BMS 与 O2Jam

这个语料库已经横跨不止一个下落式节奏游戏生态。21,379 张谱面——占全集的 14%,分布在各种状态中——被标记为来自 BMS 或 O2Jam:16,188 张来自 BMS,5,491 张来自 O2Jam,其中 300 张同时带有两种标记。这些游戏有各自的写谱传统,拓宽了模型的视野。

按键数划分

按键数划分的训练谱面
键数谱面数占比
4K72,36248.0%
5K8,4425.6%
6K13,2358.8%
7K49,12932.6%
8K5,0903.4%
9K2,3641.6%

4K 和 7K 占绝对多数——合计约占语料库的 80%。8K 和 9K 很少:各自只有几千张。这种不均衡对训练很重要,所以训练时会在各键数(以及各难度级别)之间平衡采样,让 8K 和 ★10 的谱面不会被 4K 和 ★4 淹没。

按难度划分

星级使用 osu! 官方算法测量;中位数 ★4.2,范围 ★0.5–13。

语料库的主体集中在 ★1 到 ★7 之间,★9 以上还有一条由高难谱面组成的长尾。ManiaGAI 的难度范围 ★1 到 ★10 正好落在样本充足的区间:★10 以下的每个星级都有一千张以上的谱面;再往上,数量迅速变少。另外,有 15.8% 的谱面会在歌曲中途变速,所以变速是模型学习内容的一部分,而不是边缘情况。

我们排除了什么

覆盖面广不等于照单全收。有些谱面会教给模型错误的东西,因此被排除:

  • 未完成的谱面——只做了一半的歌,会教模型做到一半就停下。
  • 变速(rate-edit)的重复谱面——同一张谱面加速或减速后,会让一位作谱者的配置被重复计算很多次。
  • AI 生成的谱面,包括我们自己的——用生成的谱面训练出来的模型,学会的是模仿生成器,而不是模仿作谱者。

所有谱面使用同一种 timing 网格

语料库中的每张谱面,都被重新 timing 到与生成器从音频中产出的同一种 timing 网格上。这听起来像个细节,其实是整个数据集里最重要的决定之一。生成时,模型是对照 ManiaGAI 检测出的 timing 来放置音符的,而不是对照人工 timing——所以它们也应该在同一种网格上学习音符的放置。如果用作谱者自己的 timing 训练、再用检测出的 timing 生成,就等于教模型认一种网格,再把另一种网格交给它。(检测出的 timing 到底有多准确,有一篇专门的文章:timing 基准测试。)

从中学习需要什么

音频会一次性编码成与网格对齐的音乐特征——在磁盘上约占 0.7 TB。所有训练都在一张 16 GB 显存的 NVIDIA RTX 4070 Ti SUPER 上进行。我们不会每次改动都从头重新训练,而是随着数据和 timing 网格的演进持续微调音符模型;当我们改变网格的起点方式时,两个模型都在新网格上重新训练过。v2 音符模型的完整训练谱系累计约 540 个有记录的 GPU 小时——光是最后一轮就用了大约四天,对 1,690 万个训练窗口跑了约五遍——而 planner 还要再加上约 40 个小时。

这一切都不只看训练损失。每一处改动都会在生成的谱面本身上检验:timing 准确率、实测难度与目标的差距、可玩性。

广泛的数据能带来什么——以及不能带来什么

正是覆盖面,让一个模型能写出 4K 和 9K、★1 和 ★10、长条为主和 jack 为主的谱面,并能遵循你要求的风格:这些配置都存在于语料库的某个角落。覆盖面不能给你的,是统一的质量标准——社区语料库里的谱面有好有坏,而模型会从所有谱面中学习。

我们公开数据里有什么、为什么这样做;但不公开数据的具体来源、筛选和构建细节。技术页面解释了数据在整个系统中的位置,Planner + Noter 一文则介绍了从这些数据中学习的两个模型。