研究

深入 AI osu! mania mapper 背後的資料集

ManiaGAI v2 從約 14,500 位 mapper 製作的 150,622 張人工 osu! mania 譜面中學習,遠遠不只 ranked 區。依鍵數、難度與來源拆解語料庫內容,以及為什麼這樣建構。

一個 AI beatmap 生成器,大部分的工作其實不在模型,而在資料:決定哪些譜面值得學、確保每個訓練樣本的 timing 都正確,以及用一種能抓住「為什麼好玩」的形式來表示一張譜面。這篇文章帶你看看 ManiaGAI v2 的模型所學習的語料庫——裡面有什麼,以及它為什麼長成這個樣子。

語料庫概覽

譜面
150,622
歌曲
86,255
Mapper
~14,500
不重複音訊
4,227 h

也就是 150,622 張人工製作的 osu! mania 譜面,涵蓋 86,255 首歌,出自大約 14,500 位不同的 mapper——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%

狀態取自 2026 年 10 月的 osu!。

四分之三的譜面是 pending、製作中(WIP)或 graveyard——也就是從來沒有走過 ranking 流程的譜面。這不代表它們很爛:意思是沒有人審核過它們,而不是審核沒通過。只從 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)的重複譜面——同一張譜加速或減速,會讓同一位 mapper 的譜型被重複計算好幾次。
  • AI 生成的譜面,包括我們自己的——用生成譜面訓練的模型,學會的是模仿生成器,而不是模仿 mapper。

所有譜面共用一種 timing 格線

語料庫裡的每張譜面,都會重新對齊到生成器從音訊產生的同一種 timing 格線上。這聽起來像是小細節,卻是整個資料集最重要的決定之一。生成時,模型是依照 ManiaGAI 偵測到的 timing 放音符,而不是依照人類的 timing——所以它們學習放音符時,也應該對著同一種格線。如果用 mapper 自己的 timing 訓練、卻用偵測到的 timing 生成,等於先教模型一種格線,再交給它另一種。(偵測到的 timing 有多準,另有專文介紹:timing 基準測試。)

從這些資料學習需要什麼

音訊只會編碼一次,轉成對齊格線的音樂特徵——存在硬碟上大約 0.7 TB。所有訓練都在單張 16 GB 記憶體的 NVIDIA RTX 4070 Ti SUPER 上進行。我們不是每次改動都從頭重新訓練,而是隨著資料和 timing 格線演進,持續微調音符模型;當我們改變格線的起始方式時,兩個模型都重新在新格線上訓練。v2 音符模型的完整訓練歷程累計約 540 個有紀錄的 GPU 小時——光是最後一輪就花了大約四天,對 1,690 萬個訓練視窗跑了大約五輪——規劃器則另外再加上大約 40 小時。

這一切都不只看訓練 loss 來判斷。每一項改動都會直接在生成的譜面上檢查:timing 準確度、實測難度與目標的差距,以及可玩性。

廣泛的資料能帶來什麼——又不能帶來什麼

正是因為資料夠廣,一個模型才能寫出 4K 和 9K、★1 和 ★10、長條為主和 jack 為主的譜面,並依照你要求的風格作譜:這些譜型都存在於語料庫的某個角落。廣泛的資料給不了的,是一致的品質標準——社群語料庫裡的譜面有好有壞,而模型會從所有譜面學習。

我們公開資料裡有什麼、以及為什麼;但不公開資料取得、篩選和建構的細節。技術頁面說明了資料在整個系統中的位置,而Planner + Noter 一文則介紹了從這些資料學習的兩個模型。