o problema
Desde 2020 a receita para melhorar um modelo de linguagem era conhecida e monótona: mais parâmetros, mais tokens, mais compute. As leis de escala descreviam a curva com precisão suficiente para virar planejamento orçamentário. O efeito colateral é que quase toda a engenharia foi para o lado do sistema — paralelismo, kernels, infra — e quase nenhuma para o lado do que exatamente estava dentro do corpus.
No caso de código, o corpus padrão é o The Stack mais StackOverflow: mais de 35 milhões de arquivos, mais de 35 bilhões de tokens. Inspecionando amostras à mão, os autores listam o que há ali: trechos que não são autocontidos e dependem de módulos que o modelo nunca vê; código que não computa nada, só define constante e configura GUI; lógica algorítmica enterrada dentro de funções longas e mal documentadas; e uma distribuição de assuntos torta. Um humano aprendendo a programar por esse material teria dificuldade. A hipótese do paper é que o modelo tem a mesma dificuldade, e que o problema não é volume, é razão sinal-ruído.
a ideia
Treinar com material que se pareça com um bom livro-texto: claro, autocontido, instrutivo e balanceado. A analogia é literal e funciona porque o objeto é o mesmo — explicação em linguagem natural intercalada com código que ilustra o ponto, seguida de exercícios. Onde a analogia para: nenhum livro-texto real foi usado. O material foi filtrado da web por um classificador e gerado por outro modelo.
como funciona
Três conjuntos, somando menos de 7 bilhões de tokens. O primeiro é o Stack e o StackOverflow filtrados: o GPT-4 anota cerca de 100 mil amostras respondendo se o trecho tem valor educacional para quem quer aprender os fundamentos, e essa anotação treina um random forest sobre embeddings de um codegen pré-treinado. O GPT-4 aparece só aqui, para evitar anotação humana. Restam uns 6 bilhões de tokens. O segundo é menos de 1 bilhão de tokens de livros-texto de Python sintéticos, gerados com GPT-3.5, com diversidade forçada por restrições de tópico e de público-alvo no prompt. Os dois juntos formam o CodeTextbook e produzem o phi-1-base.
O terceiro é o CodeExercises: cerca de 180 milhões de tokens, aproximadamente 880 mil exercícios no formato docstring mais função a completar, com diversidade induzida pela restrição do nome da função.
A arquitetura é convencional e o paper não esconde isso: decoder-only, MHA com FlashAttention, MHA e MLP em paralelo, 24 camadas, dimensão oculta 2048, MLP interna 8192, 32 attention heads de dimensão 64, rotary position embedding com dimensão rotativa 32, tokenizer do codegen-350M-mono, sequência de 2048. Pré-treino em 8 A100s, fp16, AdamW, batch efetivo 1024, learning rate máximo 1e-3, checkpoint aos 24.000 passos — pouco mais de 50 bilhões de tokens vistos, em menos de 4 dias. O finetuning custou 7 horas e levou o HumanEval de 29% para 50,6%.
o que isso custou
O modelo é de Python e só. Não conhece APIs específicas nem pacotes menos comuns. E é frágil de um jeito que interessa a quem for usar: a performance cai quando o prompt fica longo, e cai de novo quando o prompt tem erro gramatical — os exercícios de treino eram todos curtos e bem escritos, então o modelo não viu variação de estilo.
A contaminação é a objeção óbvia, e o paper a leva a sério. O overlap de n-gram encontra 4 questões do HumanEval com sobreposição de 13-gram, todas falsos positivos. O teste mais duro é a poda: remover do CodeExercises tudo que se parece com HumanEval por distância de embedding e por distância de edição entre ASTs, retreinar e reavaliar. Podando de 42.500 a 354.000 dos 879.500 exercícios, o modelo continua à frente do StarCoder-Prompted, mas o número total escorrega de 50,6% para algo entre 45% e 46% nos limiares mais agressivos. Todos os modelos acertam menos no subconjunto não-similar.
Há um custo de método também. O detalhe da geração de dados sintéticos foi omitido por razões proprietárias, então o resultado não é reproduzível de fora. E a receita inteira depende de um modelo mais forte já existir: sem GPT-3.5 e GPT-4 não há livro-texto nem anotação. Os autores admitem que o dado do GPT-3.5 tem alta taxa de erro, e que a tarefa é estreita — bater o professor num domínio específico é plausível, generalizar isso não está demonstrado.
onde isso aparece hoje
O paper abre um terceiro eixo ao lado dos dois que as leis de escala e o Chinchilla já tinham mapeado: parâmetros, tokens e agora curadoria. Modelo pequeno treinado com dado sintético curado virou linha de produto, e a família phi continuou depois deste primeiro modelo. É também um dos trabalhos que consolidam o uso de LLM para fabricar o corpus de treino do próximo LLM, na mesma direção do Self-Instruct. A régua usada aqui, o HumanEval, vem do Codex — e o desconforto com ela, visível na criação dos 50 problemas fora da distribuição corrigidos pelo GPT-4, antecipa a migração para benchmarks de tarefa real como o SWE-bench.