Mühendislik
DanceGAI Beatmap Üretmek İçin Neden Planner + Noter Kullanıyor
ManiaGAI sesi doğrudan notalara çevirmez: önce her bölümün oynanışını bir diffusion modeliyle planlar, sonra notaları MaskGIT tarzı bir transformer ile yerleştirir. Gerekçesi, bedeli ve getirdikleri.
Bir yapay zekâ beatmap oluşturucusunu anlatmanın en doğal yolu “ses girer, sinir ağı, notalar çıkar” demektir. ManiaGAI böyle çalışmaz. İşi ikiye böler: bir Planner, şarkının her bölümünün oynarken nasıl hissettirmesi gerektiğine karar verir; bir Noter ise notaların tam olarak nereye gideceğine. Bu yazı bunun nedenini, her modelin ne yaptığını ve bu ayrımın bedelini anlatıyor.
Beatmap bir transkripsiyon değil, bir aranjmandır
Sesi yakından takip eden bir chart, illa iyi bir chart değildir. İyi bir osu! mania map’i daha çok bir aranjmana benzer: mapper hangi seslerin nota hak ettiğine, bir bölümün ne kadar yoğun hissettirmesi gerektiğine, jack’in ya da long note’un nereye ait olduğuna, pattern’lerin eller arasında nasıl aktığına — ve bunların hepsinin aynı şarkının Easy’si ile Expert’i arasında nasıl değiştiğine karar verir.
Sesi doğrudan notalara çeviren tek bir model, bu kararların her birini aynı anda ve her an vermek zorundadır: yapı, zorluk, stil ve tam sütun yerleşimi. Bu tür bir model yerel ayrıntıları doğru yaparken şarkının genel şeklini kaybetmeye meyillidir — verse’ten daha sert vurmayan bir nakarat, nefes almayan bir breakdown.
İki soru, iki model
- Müzik
- Anlama
- Planner
- Noter
- Doğrulama
- Beatmap
İki model de şarkının aynı müzikal resmini okur: bir timing ızgarası ve sesin bu ızgaraya vuruş vuruş hizalanmış bir temsili (açık kaynaklı MERT modelinden). Oradan sonra:
- Planner ne olması gerektiğini cevaplar. Daha hiçbir nota yokken tüm şarkının oynanış yapısını bölüm bölüm ortaya koyar: her bölümün ne kadar zor olması gerektiği ve long note’ların, jack’lerin ve diğer pattern türlerinin karışımı.
- Noter notaların nasıl gideceğini cevaplar. Planı gerçek yerleşime dönüştürür — hangi sütunlar, hangi notaların tap hangilerinin long note olduğu, pattern’lerin nasıl bağlandığı — hem plana hem de sese uyarak.
Her modelin işi daha dar hale gelir ve plan, nota üretimine nota nota çalışan bir modelde olmayan bir şey verir: tüm şarkıya dair önceden karara bağlanmış bir bakış.
Planner: tüm şarkı üzerinde Gaussian diffusion
Planner, yaklaşık 6 milyon parametreli bir Gaussian diffusion modelidir. Müziğe, tuş sayısına ve istenen zorluk ile stile koşullanarak şarkının tüm bölümleri için planı birlikte üretir.
Diffusion bu işe iki nedenle uyuyor. Plan, bir şarkının pürüzsüz, sürekli bir tarifidir — zaman içinde yükselip alçalan yerel zorluk ve pattern karışımı — ve bu, diffusion modellerinin iyi başa çıktığı türden bir sinyaldir. Ayrıca planı bölüm bölüm değil bir bütün olarak üretmek, Planner’ın tüm şarkıyı aynı anda dengelemesini sağlar: nakaratı zirveye çıkarıp bridge’i dinlendirebilir, çünkü ikisini de görür.
Noter: MaskGIT tarzı iyileştirme
Noter, yaklaşık 51 milyon parametreli, MaskGIT tarzı, otoregresif olmayan bir transformer’dır. Chart’lar ayrık pattern token’ları olarak temsil edilir. Noter bunları şarkının başından sonuna tek tek yazmak yerine tüm chart’ı doldurur ve birkaç geçişte iyileştirir — emin olduğu notaları kesinleştirip geri kalanına yeniden döner. Bu geçişlerin bir şarkı boyunca nasıl planlandığı bizim kendi yöntemimiz ve gizli tuttuğumuz şeylerden biri.
Peki neden chart’ı, bir dil modelinin metin yazdığı gibi soldan sağa üretmiyoruz?
- Kesinlikle soldan sağa yazmak, erken kararların sonraki müziği hesaba katamaması demektir ve uzun bir şarkıda hatalar birikir.
- Bir iyileştirme modelinde her geçiş, her bölümün iki tarafındaki bağlamı görür; bu da pattern’leri şarkı boyunca tutarlı tutar.
- Tüm chart, her seferinde tek bir token yerine sabit sayıda geçişte üretilir — bu da hız açısından önemlidir.
- Bir bölüm, ondan sonraki her şeyi yeniden üretmeden revize edilebilir (aşağıda bundan daha fazla bahsediyoruz).
Zorluk ve stil sonradan eklenen şeyler değil, girdilerdir
Üretimi kontrol edilebilir kılan da bu ayrım. ManiaGAI açık kontroller alır ve modeller bunlara uyacak şekilde eğitildi:
- Tuş sayısı — 4K’den 9K’ye.
- Zorluk — ★1’den ★10’a istediğin star rating seçimi; tek bir çalıştırma koca bir mapset üretir.
- Stil — beş boyut: long note oranı, inverse long note’lar, jack’ler, kısa long note’lar ve delay. Her zorluk, o tuş sayısı ve star rating’deki gerçek chart’lardan kalibre edilmiş kendi stilini alabilir.
Bu kontroller, önemli oldukları yerde, yani plan üzerinde etki eder: “daha zor”, “daha çok long note” ya da “daha çok jack”, tek bir notayla değil, bir bölümün şekliyle ilgili kararlardır. Yoğunluk ayrı bir ayar değildir — hedef zorluktan ve plandan kendiliğinden çıkar. Ve her zorluk şarkının aynı anlayışından üretildiği için bir mapset, birbiriyle ilgisiz chart’lar gibi değil, tek bir chart ailesi gibi okunur.
Yerel yeniden üretim tasarımın doğal sonucu
Üretilen chart’lar nadiren her yerde yanlıştır. Daha sık olan, bir pasajın kötü olmasıdır — uymayan bir pattern, fazla yoğun bir bölüm. Bunu düzeltmek için tüm chart’ı yeniden üretmek, zaten iyi olan her şeyi çöpe atmak demektir.
- Seç
- Maskele
- Yeniden üret
- İyileştir
Noter bir chart’ı soldan sağa yazmak yerine bütün olarak iyileştirdiği için, seçilen bir bölgeyi etrafındaki her şeyi sabit tutarak ve çevredeki notaları bağlam olarak kullanarak yeniden üretebilir — böylece yeni bölüm chart’la çatışmak yerine ona eklemlenir. Bu, bölüm düzeyinde düzenlemenin temelidir: bir chart’ın beğenmediğin kısmını seçip yalnızca o bölümü yeniden ürettiğin ya da notaları kendin düzenleyip sonucu test oyunuyla denediğin bir map editörü şu anda dahili testte. Henüz sitede kullanılamıyor.
Ayrı ayrı eğitmek
İki model, her biri kendi çalıştığı temsil üzerinde ayrı ayrı eğitilir: Planner, her bölümün oynanışını tarif eden bir temsil üzerinde diffusion modeli olarak; Noter ise pattern token’ları üzerinde maskelenmiş token tahminiyle. Örnekler tuş sayıları ve zorluk seviyeleri arasında dengelenir; böylece ★10’da 8K gibi nadir kombinasyonlar yaygın olanların altında kaybolmaz. İkisinin arkasındaki veri, Yapay Zekâ osu! mania Mapper’ının Arkasındaki Veri Kümesi yazısında anlatılıyor.
Bu ayrımın bedeli
Bir hiyerarşi bedava değildir. Birlikte yaşadığımız ödünleşimler:
- Eğitilmesi ve senkron tutulması gereken iki model. Plan, ikisi arasında bir arayüzdür; tanımı değiştiğinde iki tarafın da buna uyması gerekir.
- Noter, ancak kendisine verilen plan kadar iyi olabilir. Bir bölümü yanlış değerlendiren bir plan, Noter’a yanlış bir görev tanımı verir.
- Bir plan yalnızca tarif etmeyi seçtiğimiz şeyi tarif eder. Bölüm düzeyindeki zorluk ve pattern karışımı, bir chart’ın hissini belirleyen şeylerin çoğunu yakalar, ama bir mapper’ın niyet ettiği her şeyi değil.
İddia etmediklerimiz
Bu tasarımı aynı veriyle eğitilmiş tek bir uçtan uca modelle karşılaştıran bir benchmark yapmadık; bu yüzden ondan daha iyi olduğunu iddia etmiyoruz. Söyleyebileceğimiz şu: bize uzun menzilli yapıyı ve yerel nota yerleşimini ayrı ayrı modellemenin daha temiz bir yolunu, zorluk ve stil kontrollerini koymak için doğal bir yer ve bir chart’ın bir bölümünü geri kalanına dokunmadan revize edebilen bir model veriyor. Mapping stili hâlâ bir avuç boyut üzerinden kontrol ediliyor; bir stili slider’larla değil örnekle tarif etmek, üzerinde çalıştığımız bir yön.
Teknoloji sayfası iki modelin tüm süreçte nerede durduğunu gösteriyor; üretimi nasıl hızlandırdığımız yazısı da onları çalıştırmanın neler gerektirdiğini anlatıyor.