Capítulo 07 · Geração · 7 min

Escolher a próxima palavra

Temperature, top-k, top-p. A arte de transformar uma distribuição de probabilidade em texto.

Gerar não é escolher sempre o máximo

Um modelo treinado produz uma distribuição de probabilidade. Mas uma distribuição não é uma frase. É preciso transformá-la em um token.

A opção mais simples seria pegar sempre o token mais provável. Funciona para tarefas fechadas, mas produz texto rígido, repetitivo, às vezes travado. Para escrever, explicar ou explorar, precisamos de alguma variação.

Brinque com a temperature: em 0, o modelo é determinístico e repetitivo; em 1.5, fica criativo até virar incoerente. Top-k e top-p cortam a cauda dos candidatos improváveis sem mexer nos prováveis.

Temperatura

A temperatura controla a forma da distribuição antes da amostragem.

  • Temperatura baixa: tokens prováveis ficam ainda mais dominantes.
  • Temperatura alta: a distribuição se achata e deixa entrar opções menos prováveis.

Ela não muda o que o modelo sabe. Muda quanto risco aceitamos na escolha.

Top-k

Top-k corta a distribuição — em vez de permitir todos os tokens do vocabulário (muitas vezes 100.000 ou mais) — e mantém apenas os k tokens mais prováveis. Se k = 5, tudo fora do top 5 fica impossível.

É simples e eficaz, mas rígido: às vezes o modelo tem duas boas opções; às vezes tem trinta. Top-k não sabe disso.

Top-p

Top-p, ou nucleus sampling, mantém tokens até atingir uma probabilidade acumulada p.

Se o modelo está muito seguro, o núcleo pode conter um ou dois tokens. Se está indeciso, ele se abre para incluir mais candidatos.

Top-p adapta o tamanho da lista ao nível de incerteza do modelo.

Na prática, top-p ≈ 0.9 é o valor mais recomendado, e o padrão de muitas configurações open source. Atenção: as grandes APIs em geral o deixam em 1.0 e fazem você pilotar pela temperatura — se quiser o efeito top-p, é preciso pedi-lo explicitamente.

Por que isso importa

Parâmetros de amostragem explicam por que duas respostas do mesmo modelo podem diferir mesmo com o mesmo prompt.

Também explicam por que uma configuração ruim pode degradar um bom modelo:

  • temperatura baixa demais → texto plano, repetitivo
  • temperatura alta demais → respostas incoerentes
  • top-k pequeno demais → pouca diversidade
  • top-p alto demais → cauda rara demais

Três outros parâmetros para conhecer

Além de temperatura / top-k / top-p, alguns parâmetros aparecem em todo lugar nas APIs.

As penalidades de repetição. Todas penalizam tokens que já apareceram na saída, para quebrar ciclos sem precisar aumentar a temperatura — mas não confunda as duas famílias, suas escalas não têm nada a ver uma com a outra. A repetition penalty do ecossistema open source (HuggingFace, llama.cpp) divide as pontuações dos tokens já vistos: vale 1 quando está desativada, e costuma ser ajustada entre 1.05 e 1.2. Já a frequency penalty e a presence penalty da OpenAI subtraem um valor: vão de −2 a +2, valem 0 por padrão, e raramente se passa de 1. Ajustar uma frequency penalty em 1.2 achando que se aplica uma repetition penalty dá um resultado bem diferente do esperado.

Stop sequences. Uma lista de strings que, se aparecerem na saída, interrompem a geração imediatamente. Indispensável para usos estruturados: em um diálogo formatado, você para em <|im_end|> ou \n\nUser: para impedir que o modelo continue a conversa sozinho.

Beam search. Em vez de amostrar de forma estocástica, você mantém em paralelo as k melhores sequências parciais a cada passo, e escolhe a que maximiza a probabilidade global no final. O resultado é mais "suave" mas muitas vezes menos natural. Usado em tradução automática e reconhecimento de voz, raramente em geração criativa.

O próximo passo

Até aqui vimos um modelo que prediz texto. Mas um assistente precisa fazer mais: seguir instruções, recusar certos pedidos, adotar um tom útil. Isso não aparece automaticamente no pré-treinamento.

É preciso alinhá-lo.

Atualizado em