Contexte et jeu de données
Le projet repose sur la plateforme Dwitter.net, qui héberge des programmes JavaScript de 140 caractères appelés Dweets. L’auteur a exploité l’API publique pour constituer un corpus de 25 000 Dweets d’entraînement et 1 300 Dweets de validation. Chaque Dweet possède un score d’« awesomeness » calculé par le site, servant ensuite de critère de sélection.
Modèle de base et pré‑entraînement continu
Le modèle de départ est Qwen2.5‑Code‑7B, un LLM spécialisé code. En l’état, il montre une perplexité de 28,63 sur un jeu de 30 Dweets réservés, reflétant une difficulté à anticiper les constructions de code golf et les raccourcis mathématiques propres à Dwitter. L’auteur a appliqué un continued pre‑training (CPT) sur le corpus complet. Après cette phase, la perplexité chute à 8,57, et la surprisal des tokens devient globalement plus faible, comme le montre la heat‑map où le rouge s’atténue.
Curriculum basé sur l’« awesomeness »
Pour injecter une préférence esthétique, les 5 000 Dweets les mieux notés ont été pondérés progressivement. Au départ, chaque Dweet était échantillonné avec la même probabilité. Sur 400 pas d’entraînement, le poids des 1 000 meilleurs a atteint 67 % du total. Cette stratégie a produit un saut de perplexité supplémentaire, passant de 7,42 à 5,65 sur 7 000 Dweets de test, y compris ceux jamais vus pendant le curriculum. L’amélioration est plus marquée pour les programmes que le modèle initial jugeait les plus difficiles.
Affinage par RLHF avec GRPO
Inspiré par l’article de Surya sur la génération d’images avec p5.js, l’auteur a mis en place un reinforcement learning from human feedback (RLHF) en utilisant l’algorithme GRPO. Pour chaque Dweet incomplet, huit complétions sont générées, rendues, puis évaluées manuellement par l’auteur qui fournit un signal de récompense. Ce processus affine davantage le modèle, le rendant capable de proposer des continuations qui respectent à la fois la syntaxe du code golf et une esthétique jugée « belle » par l’utilisateur.