Como ensinar um modelo pequeno de IA a gerar texto estruturado sem erros
Pesquisadores conseguiram triplicar a precisão de um modelo de linguagem de 350 milhões de parâmetros em tarefas de saída estruturada usando apenas 100 passos de treinamento e uma GPU gratuita.
Pesquisadores do Hugging Face ajustaram o modelo LFM2.5-350M (um modelo de linguagem com 350 milhões de parâmetros) usando GRPO (um algoritmo de aprendizado por reforço) e apenas 100 passos de treinamento em uma GPU gratuita. O modelo passou de 22,6% para 29,7% de acerto no benchmark IFStruct, que mede a capacidade de gerar saídas estruturadas válidas em JSON e YAML.

Ensinar um modelo de inteligência artificial a devolver respostas em formatos estruturados — como JSON (um formato padronizado para trocar dados entre sistemas) ou YAML (outro formato de texto para dados estruturados, mais fácil de ler) — é uma das tarefas mais comuns no mundo real, mas também uma das mais ignoradas pelos testes de desempenho tradicionais. A maioria dos benchmarks (conjuntos de testes que medem a capacidade de um modelo) mede raciocínio ou extração de informação, mas não verifica se o modelo consegue entregar a resposta no formato exato que o sistema pediu. Segundo informou o blog do Hugging Face (uma plataforma onde desenvolvedores compartilham e baixam modelos de IA já treinados), essa conformidade com o esquema — ou seja, a capacidade de retornar uma saída válida e analisável na estrutura solicitada — é muitas vezes o que decide se um modelo pode ou não ser integrado em um sistema real.
Um novo guia publicado no Hugging Face mostra como ajustar um modelo pequeno, o LFM2.5-350M (um modelo de linguagem com 350 milhões de parâmetros, desenvolvido pela Liquid AI), para melhorar drasticamente sua capacidade de gerar saídas estruturadas. O método usa uma técnica chamada GRPO (Group Relative Policy Optimization, um algoritmo de aprendizado por reforço que ajusta o modelo comparando diferentes respostas geradas para a mesma tarefa) e a biblioteca TRL (uma ferramenta de código aberto para treinar modelos de linguagem com aprendizado por reforço). O treinamento completo usou apenas 500 exemplos e 100 passos, rodando em uma GPU gratuita do Google Colab ou Kaggle, e está disponível no GitHub.
Antes do ajuste, o modelo base alcançava 22,6% de acerto no IFStruct (um benchmark que mede a capacidade de modelos de linguagem seguirem instruções de formato e validarem suas saídas contra esquemas JSON). Após o treinamento, a taxa subiu para 29,7%. O teste avaliou 2 mil amostras, divididas entre JSON e YAML, e mediu se o modelo conseguia gerar tanto objetos simples quanto listas de nível superior (estruturas que começam diretamente com uma lista de itens, sem uma chave de agrupamento). Os erros mais comuns antes do ajuste eram campos obrigatórios faltando, contagens erradas de itens e incompatibilidade de tipos.
O processo de treinamento usou uma técnica chamada LoRA (Low-Rank Adaptation, um método que ajusta apenas uma pequena fração dos parâmetros de um modelo para economizar memória e tempo), treinando cerca de 6 milhões de parâmetros — apenas 1,66% do modelo total. Os dados vieram de um conjunto publicado pela Nvidia, o Nemotron-RL-instruction_following-structured_outputs, mas foram modificados: 40% das instruções receberam o pedido explícito de retornar a saída dentro de um bloco de código cercado por três acentos graves (o formato padrão para exibir código em markdown), e 20% foram convertidas em tarefas de lista de nível superior, para ensinar o modelo a gerar arrays diretamente.
O treinamento usou três funções de recompensa combinadas: uma que verifica se a saída é analisável e está no formato pedido (código cercado ou JSON cru), outra que conta se o número de campos no objeto está correto, e uma terceira que valida a saída contra o JSON Schema (um padrão que descreve a estrutura esperada de um documento JSON) fornecido. Cada função devolve uma pontuação entre 0 e 1, e as três são somadas com pesos diferentes — a validação de esquema tem peso 2, o formato peso 1, e a contagem de campos peso 0,5. Segundo os autores, o método não busca reproduzir os resultados do modelo oficial treinado para o IFStruct, mas demonstrar que ajustes específicos podem fazer modelos pequenos competirem com modelos muito maiores.
A avaliação foi feita localmente em um MacBook Pro com chip M5 Max e 36 GB de memória unificada, usando llama.cpp (uma ferramenta de código aberto que roda modelos de linguagem localmente e expõe uma API compatível com a da OpenAI). O modelo foi servido no formato GGUF (um formato de arquivo otimizado para inferência rápida, ou seja, para rodar o modelo gerando respostas) em precisão BF16 (um tipo de número de ponto flutuante que economiza memória sem perder muita precisão). O servidor processou quatro requisições em paralelo com um contexto de 32.768 tokens (unidades de texto que o modelo processa), e o benchmark completo levou em média 1.453 milissegundos por amostra.


