研究
揭秘 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! 上的状态 | 谱面数 | 占比 |
|---|---|---|
| Ranked / Qualified | 24,896 | 16.5% |
| Loved | 2,530 | 1.7% |
| Pending、WIP 与 Graveyard | 114,212 | 75.8% |
| 从未上传到 osu!(大多为 BMS / O2Jam 转谱) | 8,984 | 6.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 张同时带有两种标记。这些游戏有各自的写谱传统,拓宽了模型的视野。
按键数划分
| 键数 | 谱面数 | 占比 |
|---|---|---|
| 4K | 72,362 | 48.0% |
| 5K | 8,442 | 5.6% |
| 6K | 13,235 | 8.8% |
| 7K | 49,129 | 32.6% |
| 8K | 5,090 | 3.4% |
| 9K | 2,364 | 1.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 一文则介绍了从这些数据中学习的两个模型。