Ingénierie

Pourquoi DanceGAI utilise un Planner + Noter pour générer des beatmaps

ManiaGAI planifie d’abord le gameplay de chaque section avec un modèle de diffusion, puis place les notes avec un transformer de type MaskGIT. Le raisonnement, les compromis et ce que cela permet.

La façon la plus naturelle de décrire un générateur de beatmaps par IA, c’est « de l’audio en entrée, un réseau de neurones, des notes en sortie ». ManiaGAI ne fonctionne pas ainsi. Il coupe le travail en deux : un Planner décide de ce que chaque partie de la musique doit faire ressentir au joueur, et un Noter décide exactement où vont les notes. Cet article explique pourquoi, ce que fait chaque modèle, et ce que coûte cette séparation.

Une beatmap est un arrangement, pas une transcription

Un chart qui suit l’audio de près n’est pas forcément un bon chart. Une bonne map osu! mania tient plutôt de l’arrangement : le mapper décide quels sons méritent des notes, quelle densité doit avoir une section, où placer un jack ou une long note, comment les patterns circulent d’une main à l’autre — et comment tout cela change entre une Easy et une Expert de la même musique.

Un modèle unique qui transforme directement l’audio en notes doit prendre toutes ces décisions à la fois, à chaque instant : structure, difficulté, style et placement exact dans les colonnes. Ce genre de modèle a tendance à réussir les détails locaux tout en perdant la forme de la musique — un refrain qui ne frappe pas plus fort que le couplet, un breakdown qui ne respire pas.

Deux questions, deux modèles

  1. Musique
  2. Compréhension
  3. Planner
  4. Noter
  5. Validation
  6. Beatmap

Les deux modèles lisent la même image musicale de la chanson : une grille de timing, et une représentation de l’audio alignée sur elle, temps par temps (issue du modèle open source MERT). À partir de là :

  • Le Planner répond à la question que doit-il se passer. Avant qu’une seule note existe, il établit la structure de gameplay de toute la musique, section par section : la difficulté de chaque partie, et le mélange de long notes, de jacks et d’autres types de patterns.
  • Le Noter répond à la question comment placer les notes. Il transforme le plan en placement concret — quelles colonnes, quelles notes sont des taps et lesquelles sont des long notes, comment les patterns s’enchaînent — en suivant à la fois le plan et l’audio.

Chaque modèle a une tâche plus ciblée, et le plan donne à la génération de notes ce qui manque à un modèle note par note : une vue de toute la musique, déjà décidée.

Le Planner : une diffusion gaussienne sur toute la musique

Le Planner est un modèle de diffusion gaussienne d’environ 6 millions de paramètres. Il génère conjointement le plan de chaque section de la musique, conditionné par la musique, le nombre de touches, ainsi que la difficulté et le style demandés.

La diffusion convient à cette tâche pour deux raisons. Un plan est une description lisse et continue d’une musique — difficulté locale et mélange de patterns qui montent et descendent au fil du temps — exactement le type de signal que les modèles de diffusion gèrent bien. Et le générer d’un bloc, plutôt que section après section, permet au Planner d’équilibrer toute la musique à la fois : il peut faire culminer le refrain et laisser respirer le pont parce qu’il voit les deux.

Le Noter : un raffinement à la MaskGIT

Le Noter est un transformer non autorégressif de type MaskGIT d’environ 51 millions de paramètres. Les charts sont représentés sous forme de tokens de patterns discrets. Au lieu de les écrire un par un du début à la fin de la musique, le Noter remplit le chart entier et l’affine en plusieurs passes — il valide les notes dont il est sûr et revient sur les autres. La façon dont ces passes sont organisées sur une musique est notre propre méthode, et fait partie de ce que nous gardons privé.

Pourquoi ne pas générer le chart de gauche à droite, comme un modèle de langage écrit un texte ?

  • Écrire strictement de gauche à droite signifie que les premières décisions ne peuvent pas tenir compte de la musique qui suit, et que les erreurs s’accumulent sur une longue musique.
  • Dans un modèle de raffinement, chaque passe voit le contexte des deux côtés de chaque section, ce qui garde les patterns cohérents sur toute la musique.
  • Le chart entier est produit en un nombre fixe de passes au lieu d’un token à la fois — ce qui compte aussi pour la vitesse.
  • Une section peut être révisée sans régénérer tout ce qui la suit (on y revient plus bas).

La difficulté et le style sont des entrées, pas des retouches

Cette séparation est aussi ce qui rend la génération contrôlable. ManiaGAI accepte des contrôles explicites, et les modèles ont été entraînés à les suivre :

  • Nombre de touches — de 4K à 9K.
  • Difficulté — n’importe quelle sélection de nombres d’étoiles de ★1 à ★10 ; une seule exécution produit un mapset complet.
  • Style — cinq dimensions : proportion de long notes, long notes inversées, jacks, long notes courtes et delay. Chaque difficulté peut avoir son propre style, calibré à partir de vrais charts pour ce nombre de touches et ce nombre d’étoiles.

Ces contrôles agissent sur le plan, là où ils comptent : « plus dur », « plus de long notes » ou « plus de jacks » sont des décisions sur la forme d’une section, pas sur une note. La densité n’est pas un réglage à part — elle découle de la difficulté visée et du plan. Et comme chaque difficulté est générée à partir de la même compréhension de la musique, un mapset se lit comme une seule famille de charts plutôt que comme des charts sans rapport entre eux.

La régénération locale découle de la conception

Les charts générés sont rarement mauvais partout. Le plus souvent, c’est un passage qui cloche — un pattern qui ne colle pas, un segment trop dense. Régénérer tout le chart pour le corriger, c’est jeter tout ce qui était déjà réussi.

  1. Sélectionner
  2. Masquer
  3. Régénérer
  4. Affiner

Comme le Noter affine un chart entier au lieu de l’écrire de gauche à droite, il peut régénérer une zone sélectionnée tout en gardant fixe tout ce qui l’entoure, en se servant des notes voisines comme contexte — la nouvelle section s’intègre donc au chart au lieu de détonner. C’est la base de l’édition section par section : un éditeur de maps où vous sélectionnez la partie qui ne vous plaît pas pour ne régénérer que cette section, ou modifiez les notes vous-même et testez le résultat en jeu, est en test interne. Il n’est pas encore disponible sur le site.

Les entraîner séparément

Les deux modèles sont entraînés séparément, chacun sur la représentation avec laquelle il travaille : le Planner comme modèle de diffusion sur une description du gameplay de chaque section, le Noter par prédiction de tokens masqués sur des tokens de patterns. Les échantillons sont équilibrés entre nombres de touches et niveaux de difficulté pour que les combinaisons rares, comme le 8K à ★10, ne soient pas noyées sous les plus courantes. Les données derrière les deux modèles sont décrites dans Dans les coulisses du jeu de données d’un mapper IA osu! mania.

Ce que coûte la séparation

Une hiérarchie n’est pas gratuite. Les compromis avec lesquels nous vivons :

  • Deux modèles à entraîner et à garder synchronisés. Le plan est une interface entre eux ; quand sa définition change, les deux côtés doivent suivre.
  • Le Noter ne peut pas être meilleur que le plan qu’on lui donne. Un plan qui juge mal une section donne au Noter de mauvaises consignes.
  • Un plan ne décrit que ce que nous avons choisi de décrire. La difficulté et le mélange de patterns au niveau des sections capturent une bonne part de ce qui donne à un chart son ressenti, mais pas tout ce qu’un mapper a en tête.

Ce que nous n’affirmons pas

Nous n’avons pas comparé cette conception à un modèle unique de bout en bout entraîné sur les mêmes données, donc nous n’affirmons pas qu’elle est meilleure. Ce que nous pouvons dire, c’est qu’elle nous donne une manière plus propre de modéliser séparément la structure à long terme et le placement local des notes, un endroit naturel où placer les contrôles de difficulté et de style, et un modèle capable de réviser une section d’un chart sans toucher au reste. Le style de mapping se contrôle encore par une poignée de dimensions ; décrire un style par l’exemple plutôt que par des curseurs est une direction vers laquelle nous travaillons.

La page Technologie montre où se situent les deux modèles dans le pipeline complet, et comment nous avons rendu la génération rapide explique ce qu’il faut pour les faire tourner.