Um desenvolvedor lançou o Demoscener-7B, um modelo de IA que escreve as próximas linhas de pequenos programas JavaScript visualmente impressionantes, e afirma que o ajustou ao seu próprio senso do que parece bom. O modelo e o conjunto de dados usado em seu treinamento já estão disponíveis no Hugging Face.
O projeto começou com uma pergunta simples. Ao estudar a peça de demoscene chamada “Memories”, do programador HellMood, o desenvolvedor percebeu que alguns de seus efeitos visuais podiam ser rastreados até experimentos anteriores e ideias emprestadas. Ele se perguntou quantas outras direções essas mesmas ideias poderiam ter tomado. O Dwitter.net, um site que funciona como o Twitter para demos em JavaScript de 140 caracteres, pareceu o lugar certo para testar essa ideia. O site permite que os usuários “remixem” qualquer publicação, de modo que os mesmos programas frequentemente aparecem em várias versões relacionadas.
Escrever esses programas é difícil, e o desenvolvedor disse que teve dificuldades para terminar os seus. Ele queria um preenchimento automático que entendesse a sintaxe peculiar desse formato. Os dweets dependem muito de truques de code golf e de abreviações matemáticas, que raramente aparecem no código que modelos de código de uso geral costumam ver. Ele observou que, mesmo com um alfabeto de 64 caracteres, um programa privado dos seus últimos 30 caracteres pode ser completado de um número astronômico de maneiras. A maioria dessas completações é inválida ou sem graça. Um modelo de linguagem, raciocinou ele, poderia se concentrar nas continuações que são realmente plausíveis.
Como o modelo de código da demoscene foi treinado?
O primeiro passo foi a coleta de dados. Ele tentou gerar dweets sintéticos com um grande modelo de linguagem, mas considerou os resultados esteticamente pouco atraentes. Em vez disso, usou a API do Dwitter para montar um conjunto de dados com 25.000 dweets para treinamento, além de cerca de 1.300 a mais para validação. O modelo base, Qwen2.5-Code-7B, teve dificuldades para completar a maioria dos programas de teste.
Em seguida, ele executou um pré-treinamento contínuo sobre o corpus. Para medir o efeito, acompanhou a surpresa (surprisal) de tokens individuais antes e depois do treinamento. Em 30 dweets reservados para teste, a perplexidade caiu de 28,63 para 8,57, o que, segundo ele, significava que o modelo havia se tornado muito melhor em prever a estrutura desses programas. As saídas ficaram mais consistentes, mas ele sentiu que ainda faltava charme.
Como o desenvolvedor ajustou o modelo ao próprio gosto?
Para acrescentar essa qualidade, ele recorreu à pontuação de “awesomeness” do Dwitter. Classificou os 5.000 melhores dweets pela pontuação e montou um currículo que favorecia gradualmente os exemplos mais bem avaliados. Ao longo de 400 etapas de treinamento, os 1.000 melhores programas passaram a representar cerca de 67% da probabilidade de amostragem. Ele descreveu isso como um avanço, pois as continuações ficaram visivelmente mais interessantes do ponto de vista visual. A perplexidade em um conjunto mais amplo de 7.000 dweets também melhorou, inclusive em programas que o modelo nunca havia amostrado durante o treinamento com currículo.
A etapa final foi o aprendizado por reforço, executado com GRPO e tendo ele mesmo como função de recompensa. Para cada dweet inacabado, o modelo gerava oito completações. Ele renderizava todas lado a lado e escolhia a que mais gostava, ou descartava o grupo caso nenhuma lhe agradasse. Ao longo de cerca de nove ou 10 rodadas de 500 grupos cada, inspecionou em torno de 40.000 animações. Disse que mais tarde desejou ter conhecido os modelos de visão e linguagem e o HPSv3, um sistema de pontuação de preferência humana, que poderiam ter tornado o processo menos manual.
Como o desenvolvedor avaliou o modelo?
Para verificar se o seu gosto realmente havia sido transferido, pediu a um amigo que avaliasse 400 conjuntos de demos de vários checkpoints, sem que ele soubesse qual modelo havia gerado cada um. O checkpoint 4 obteve a melhor pontuação, e ele o usou para inferência em seu Mac.
Ele também criou uma interface simples que gera várias continuações a partir do mesmo código inicial, renderiza-as lado a lado e permite que o usuário ramifique a partir de qualquer resultado. Os usuários podem editar o código, gerar novas variações e continuar explorando. O desenvolvedor disse que o projeto foi financiado com o pagamento que recebeu pelo GitHub Sponsors, usado para alugar uma GPU para o treinamento.
O trabalho é um projeto pessoal informal, e não uma publicação formal de pesquisa, mas mostra como um conjunto de dados pequeno e curado pela comunidade, somado ao julgamento de uma única pessoa, pode direcionar um modelo de código a um estilo artístico restrito. Ele afirmou que pretende continuar explorando as possibilidades que a ferramenta abre.
Cet article a été rédigé avec l'assistance de l'IA.
News Factory APP - actualités agentiques pour booster votre SEO et AEO.