Engineering

Kenapa DanceGAI Memakai Planner + Noter untuk Generate Beatmap

Alih-alih memetakan audio langsung ke not, ManiaGAI merencanakan gameplay tiap bagian dengan model diffusion, lalu menaruh not dengan transformer ala MaskGIT. Alasan, trade-off, dan manfaatnya.

Cara paling alami untuk menggambarkan generator beatmap AI adalah “audio masuk, neural network, not keluar”. ManiaGAI tidak bekerja seperti itu. Tugasnya dibagi dua: Planner memutuskan bagaimana rasa memainkan setiap bagian lagu, dan Noter memutuskan dengan tepat di mana not-notnya ditaruh. Tulisan ini menjelaskan alasannya, apa yang dikerjakan masing-masing model, dan apa harga dari pembagian itu.

Beatmap adalah aransemen, bukan transkripsi

Chart yang mengikuti audio dengan sangat dekat belum tentu chart yang bagus. Map osu! mania yang bagus lebih mirip aransemen: mapper memutuskan suara mana yang layak dapat not, seberapa padat sebuah bagian harus terasa, di mana jack atau long note cocok ditaruh, bagaimana pola mengalir di antara kedua tangan — dan bagaimana semua itu berubah antara Easy dan Expert dari lagu yang sama.

Satu model yang memetakan audio langsung ke not harus membuat semua keputusan itu sekaligus, di setiap momen: struktur, difficulty, gaya, dan penempatan kolom yang tepat. Model seperti itu cenderung benar di detail lokal tapi kehilangan bentuk lagunya — chorus yang tidak lebih menghentak dari verse, breakdown yang tidak memberi ruang bernapas.

Dua pertanyaan, dua model

  1. Musik
  2. Pemahaman
  3. Planner
  4. Noter
  5. Validasi
  6. Beatmap

Kedua model membaca gambaran musikal yang sama dari lagu: sebuah grid timing, dan representasi audio yang diselaraskan dengannya ketukan demi ketukan (dari model open-source MERT). Dari situ:

  • Planner menjawab apa yang seharusnya terjadi. Sebelum ada satu not pun, ia menyusun struktur gameplay seluruh lagu, bagian demi bagian: seberapa sulit setiap bagian, dan campuran long note, jack, serta jenis pola lainnya.
  • Noter menjawab bagaimana not-notnya ditaruh. Ia mengubah rencana menjadi penempatan nyata — kolom mana, not mana yang tap dan mana yang long note, bagaimana pola-pola tersambung — dengan mengikuti rencana sekaligus audionya.

Setiap model mendapat tugas yang lebih sempit, dan rencana itu memberi proses generate not sesuatu yang tidak dimiliki model not-per-not: gambaran seluruh lagu yang sudah diputuskan lebih dulu.

Planner: Gaussian diffusion atas seluruh lagu

Planner adalah model Gaussian diffusion dengan sekitar 6 juta parameter. Ia menghasilkan rencana untuk semua bagian lagu secara bersamaan, dikondisikan pada musik, jumlah key, serta difficulty dan gaya yang diminta.

Diffusion cocok untuk tugas ini karena dua alasan. Rencana adalah deskripsi lagu yang halus dan kontinu — difficulty lokal dan campuran pola yang naik turun seiring waktu — dan sinyal semacam itu ditangani dengan baik oleh model diffusion. Lalu, menghasilkannya secara utuh, bukan bagian demi bagian, membuat Planner bisa menyeimbangkan seluruh lagu sekaligus: ia bisa membuat chorus jadi puncak dan bridge jadi jeda karena ia melihat keduanya.

Noter: penyempurnaan ala MaskGIT

Noter adalah transformer non-autoregresif ala MaskGIT dengan sekitar 51 juta parameter. Chart direpresentasikan sebagai token pola diskret. Alih-alih menulisnya satu per satu dari awal sampai akhir lagu, Noter mengisi seluruh chart lalu menyempurnakannya dalam beberapa putaran — mengunci not yang sudah ia yakini dan meninjau ulang sisanya. Cara putaran-putaran itu dijadwalkan di sepanjang lagu adalah metode kami sendiri, dan salah satu hal yang kami rahasiakan.

Kenapa tidak generate chart dari kiri ke kanan, seperti language model menulis teks?

  • Menulis ketat dari kiri ke kanan berarti keputusan awal tidak bisa memperhitungkan musik yang datang belakangan, dan kesalahan menumpuk di sepanjang lagu yang panjang.
  • Di model penyempurnaan, setiap putaran melihat konteks di kedua sisi setiap bagian, sehingga pola tetap konsisten di sepanjang lagu.
  • Seluruh chart dihasilkan dalam jumlah putaran yang tetap, bukan satu token setiap kali — yang juga penting untuk kecepatan.
  • Sebuah bagian bisa direvisi tanpa harus generate ulang semua yang ada sesudahnya (lebih lanjut di bawah).

Difficulty dan gaya adalah input, bukan tempelan belakangan

Pembagian ini juga yang membuat proses generate bisa dikendalikan. ManiaGAI menerima kontrol eksplisit, dan model-modelnya dilatih untuk mengikutinya:

  • Jumlah key — 4K sampai 9K.
  • Difficulty — pilihan star rating apa pun dari ★1 sampai ★10; satu kali proses menghasilkan satu mapset utuh.
  • Gaya — lima dimensi: rasio long note, inverse long note, jack, long note pendek, dan delay. Setiap difficulty bisa punya gayanya sendiri, dikalibrasi dari chart sungguhan pada jumlah key dan star rating tersebut.

Kontrol-kontrol ini bekerja pada rencana, di tempat yang memang berpengaruh: “lebih sulit”, “lebih banyak long note”, atau “lebih banyak jack” adalah keputusan tentang bentuk sebuah bagian, bukan tentang satu not. Kepadatan bukan kenop terpisah — ia mengikuti dari difficulty target dan rencananya. Dan karena setiap difficulty dihasilkan dari pemahaman yang sama tentang lagunya, sebuah mapset terasa seperti satu keluarga chart, bukan chart-chart yang tidak saling berhubungan.

Regenerasi lokal muncul dengan sendirinya dari desain ini

Chart hasil generate jarang salah di semua tempat. Lebih sering hanya satu bagian yang meleset — pola yang tidak cocok, satu bagian yang terlalu padat. Generate ulang seluruh chart untuk memperbaikinya berarti membuang semua yang sudah bagus.

  1. Pilih
  2. Mask
  3. Generate ulang
  4. Sempurnakan

Karena Noter menyempurnakan seluruh chart alih-alih menulisnya dari kiri ke kanan, ia bisa generate ulang area yang dipilih sambil mempertahankan semua yang ada di sekitarnya, dengan memakai not-not di sekitarnya sebagai konteks — sehingga bagian baru menyatu dengan chart, bukan bertabrakan dengannya. Itulah dasar untuk pengeditan per bagian: editor map tempat kamu memilih bagian yang tidak kamu suka lalu generate ulang hanya bagian itu, atau mengedit not sendiri lalu mencoba memainkan hasilnya, sedang dalam pengujian internal. Fitur itu belum tersedia di situs.

Melatih keduanya secara terpisah

Kedua model dilatih secara terpisah, masing-masing dengan representasi yang ia pakai: Planner sebagai model diffusion atas deskripsi gameplay tiap bagian, Noter dengan prediksi masked-token atas token pola. Sampel diseimbangkan antar jumlah key dan level difficulty supaya kombinasi langka, seperti 8K di ★10, tidak tenggelam oleh kombinasi yang umum. Data di balik keduanya dijelaskan di Mengintip Dataset di Balik Mapper osu! mania AI.

Harga dari pembagian ini

Hierarki tidak gratis. Trade-off yang kami terima:

  • Dua model yang harus dilatih dan dijaga tetap sinkron. Rencana adalah antarmuka di antara keduanya; saat definisinya berubah, kedua sisi harus ikut menyesuaikan.
  • Noter hanya bisa sebagus rencana yang diberikan padanya. Rencana yang salah menilai sebuah bagian memberi Noter arahan yang keliru.
  • Rencana hanya menggambarkan apa yang kami pilih untuk digambarkan. Difficulty dan campuran pola per bagian menangkap banyak hal yang membuat sebuah chart terasa seperti itu, tapi tidak semua yang dimaksudkan seorang mapper.

Apa yang tidak kami klaim

Kami belum membandingkan desain ini dengan satu model end-to-end yang dilatih dengan data yang sama, jadi kami tidak mengklaim desain ini lebih baik. Yang bisa kami katakan: desain ini memberi kami cara yang lebih bersih untuk memodelkan struktur jangka panjang dan penempatan not lokal secara terpisah, tempat yang wajar untuk kontrol difficulty dan gaya, dan model yang bisa merevisi satu bagian chart tanpa menyentuh sisanya. Gaya mapping masih dikendalikan lewat segelintir dimensi; menggambarkan gaya lewat contoh, bukan lewat slider, adalah arah yang sedang kami tuju.

Halaman Teknologi menunjukkan posisi kedua model dalam pipeline lengkap, dan cara kami membuat proses generate jadi cepat membahas apa yang dibutuhkan untuk menjalankannya.