Estratégias de decodificação
O que “decodificação (decoding)” significa em um modelo de linguagem grande (large language model, LLM)
Um modelo de linguagem grande gera texto um token (token) por vez. Dado um contexto (o prompt mais os tokens gerados anteriormente), o modelo produz um vetor de logits (logits) (pontuações não normalizadas) sobre o vocabulário. Aplicar uma softmax (softmax) resulta em uma distribuição de probabilidade:
[ p(t \mid x) = \text{softmax}(\text{logits}(x))_t ]
Decodificação é o procedimento que transforma essa distribuição em uma escolha concreta do próximo token e repete isso até que uma condição de parada seja atendida (token de fim de sequência (end-of-sequence token), string de parada (stop string), máximo de tokens (max tokens) etc.). Estratégias de decodificação diferentes podem produzir saídas muito diferentes — mesmo com o mesmo modelo e prompt — afetando:
- Qualidade (fluência, coerência, factualidade, desempenho de raciocínio)
- Diversidade (variedade entre gerações)
- Consistência (repetibilidade e estabilidade)
- Segurança (probabilidade de gerar conteúdo não permitido, sucesso de injeção de prompt (prompt injection), evasões de política (policy evasions))
- Latência/custo (especialmente para métodos baseados em busca, como busca em feixe)
A decodificação fica a jusante do treinamento e do alinhamento. Mesmo modelos bem alinhados podem se comportar de forma diferente sob configurações distintas de decodificação, então a decodificação faz parte da “superfície” prática de alinhamento, ao lado de Alinhamento (Alignment) e Mitigações de Segurança (Safety Mitigations).
Fundamentos: busca (search) vs amostragem (sampling)
As estratégias de decodificação em geral se enquadram em duas famílias:
- Baseadas em busca (search-based): tentam encontrar uma sequência de alta probabilidade sob o modelo.
- Exemplo: decodificação gulosa (greedy decoding), busca em feixe (beam search)
- Baseadas em amostragem (sampling-based): amostram aleatoriamente de uma distribuição modificada.
- Exemplo: temperatura (temperature), amostragem top-k (top-k sampling), amostragem top-p (top-p (nucleus) sampling)
Métodos baseados em busca costumam ser determinísticos e otimizam a verossimilhança localmente (gulosa) ou aproximadamente de forma global (busca em feixe). Métodos baseados em amostragem trocam parte da verossimilhança por diversidade e criatividade.
Um detalhe crucial: o modelo é treinado para prever bem o próximo token, não necessariamente para produzir a “melhor” resposta completa por maximização ingênua de verossimilhança. Esse descompasso ajuda a explicar por que a decodificação “mais provável” pode ser sem graça, repetitiva ou ocasionalmente patológica.
Decodificação gulosa
Definição
A decodificação gulosa escolhe o token mais provável em cada passo:
[ t^* = \arg\max_t ; p(t \mid x) ]
Isso é equivalente à busca em feixe com largura do feixe (beam width) 1.
Características
- Prós
- Decodificação mais rápida
- Determinística (com configurações fixas e kernels determinísticos)
- Muitas vezes forte para conclusões curtas e diretas
- Contras
- Pode ficar presa em continuidades localmente ótimas, mas globalmente ruins
- Tende a uma redação genérica e às vezes repetitiva
- Baixa diversidade: você obtém um “modo” da distribuição do modelo
Exemplo prático
Prompt: “Write three distinct tagline ideas for a coffee shop.”
- A decodificação gulosa frequentemente retorna slogans seguros e comuns.
- Métodos de amostragem geram sugestões mais variadas ou mais brincalhonas.
Quando usar
- Pipelines determinísticos (ex.: extração estruturada) em que você valoriza consistência
- Sistemas de baixa latência
- Como linha de base para avaliação
Busca em feixe
Definição
A busca em feixe mantém as B melhores hipóteses parciais (o “feixe”) ranqueadas por log-probabilidade (log-probability) cumulativa:
[ \text{score}(\mathbf{t}{1:n}) = \sum{i=1}^{n} \log p(t_i \mid x, \mathbf{t}_{1:i-1}) ]
A cada passo, expanda cada candidato do feixe com possíveis próximos tokens e então mantenha os melhores B.
Com frequência, aplica-se uma penalidade de comprimento (length penalty) para evitar preferir sequências muito curtas:
[ \text{score}\alpha = \frac{\sum{i=1}^{n} \log p(t_i \mid \cdot)}{n^\alpha} ]
Características
- Prós
- Melhor para encontrar sequências de alta verossimilhança do que a decodificação gulosa
- Historicamente forte em tradução automática e sumarização (especialmente na era pré-modelos de linguagem grandes)
- Contras (especialmente para modelos modernos de instrução/chat)
- Pode reduzir a diversidade e gerar texto sem graça, “otimizado demais”
- Pode amplificar frases seguras comuns (“As an AI language model…”) dependendo do modelo
- Mais computação/latência: aproximadamente proporcional à largura do feixe
- Se a massa de probabilidade do modelo favorece continuações seguras porém erradas, a busca em feixe pode produzi-las com confiança (verossimilhança ≠ verdade)
Nota prática para assistentes baseados em modelos de linguagem grandes
Para geração de texto aberta, a busca em feixe frequentemente fica atrás de uma boa amostragem (ex.: top-p com temperatura moderada) em preferência humana, porque pode produzir texto de alta verossimilhança, porém menos envolvente ou menos útil.
Quando usar
- Tarefas em que você quer sequências de alta verossimilhança e em que a estrutura importa (alguma geração com restrições)
- Como parte de decodificações especializadas (ex.: busca em feixe com restrições)
- Quando combinada com reclassificação (reranking) ou avaliação externa (ver Computação em Tempo de Teste (Test-Time Compute))
Temperatura
Definição
A temperatura reescala os logits antes da softmax:
[ p_T(t \mid x) = \text{softmax}(\text{logits}(x) / T) ]
- T < 1: a distribuição fica mais concentrada (mais determinística)
- T = 1: sem alteração
- T > 1: distribuição mais “plana” (mais aleatoriedade)
A temperatura, por si só, não impõe truncamento rígido; ela apenas remodela as probabilidades.
Efeitos
- Temperatura baixa (ex.: 0.0–0.3)
- Mais consistente, mais repetitiva, menos criativa
- Muitas vezes melhor para formatação e para seguir esquemas estritos
- Temperatura média (ex.: 0.5–0.9)
- Diversidade e coerência equilibradas
- Temperatura alta (ex.: 1.0–1.5+)
- Saídas mais surpreendentes
- Maior risco de incoerência, alucinações ou conteúdo inseguro
A temperatura é comumente combinada com top-k ou top-p.
Amostragem top-k
Definição
A amostragem top-k restringe a distribuição do próximo token aos k tokens mais prováveis e então amostra:
- Ordene os tokens por probabilidade
- Mantenha os k tokens do topo
- Renormalize as probabilidades
- Amostre desse conjunto
Características
- Prós
- Evita que tokens de probabilidade extremamente baixa sejam amostrados
- Simples e eficaz
- Contras
- Escolher k é difícil:
- Pequeno demais → comportamento quase guloso, baixa diversidade
- Grande demais → pode admitir tokens ruins em contextos incertos
- k fixo não é adaptativo: alguns contextos são inerentemente mais/menos incertos
- Escolher k é difícil:
Orientação prática
- Valores comuns de k variam de 20 a 100 para texto criativo
- Para código ou saídas estruturadas, k costuma ser menor, ou a amostragem é desativada
Amostragem top-p (núcleo)
Definição
A amostragem top-p escolhe o menor conjunto de tokens cuja massa de probabilidade cumulativa seja ao menos p e então amostra desse conjunto:
- Ordene os tokens por probabilidade
- Pegue o menor prefixo em que a soma cumulativa ≥ p
- Renormalize e amostre
Isso se adapta à incerteza:
- Em contextos confiantes, o núcleo pode ser pequeno.
- Em contextos ambíguos, ele cresce.
Características
- Prós
- Mais adaptativa do que top-k
- Frequentemente o padrão para geração no estilo chat
- Contras
- Se p for alto demais (perto de 1.0), você pode admitir muitos tokens de baixa qualidade
- Se p for baixo demais (ex.: 0.7), você pode obter uma saída determinística demais ou repetitiva demais
Configurações típicas
- p = 0.8–0.95 é comum para chat geral
- p menor para saídas mais estritas; p maior para mais variedade (com controles de segurança apropriados)
Juntando tudo: um pipeline típico de decodificação
A maioria dos sistemas aplica uma sequência de transformações aos logits antes de amostrar/selecionar:
- Comece com os logits do modelo
- Aplique penalidades/restrições (opcional)
- Aplique temperatura
- Aplique truncamento top-k/top-p
- Amostre (ou escolha argmax)
Aqui vai uma ilustração simplificada em estilo Python:
import numpy as np
def softmax(x):
x = x - np.max(x)
e = np.exp(x)
return e / e.sum()
def decode_step(logits, temperature=1.0, top_k=None, top_p=None):
# 1) temperature
if temperature != 1.0:
logits = logits / temperature
probs = softmax(logits)
# 2) top-k
if top_k is not None:
idx = np.argpartition(-probs, top_k)[:top_k]
mask = np.zeros_like(probs, dtype=bool)
mask[idx] = True
probs = np.where(mask, probs, 0.0)
probs = probs / probs.sum()
# 3) top-p
if top_p is not None:
sorted_idx = np.argsort(-probs)
sorted_probs = probs[sorted_idx]
cdf = np.cumsum(sorted_probs)
cutoff = np.searchsorted(cdf, top_p) + 1
keep = sorted_idx[:cutoff]
mask = np.zeros_like(probs, dtype=bool)
mask[keep] = True
probs = np.where(mask, probs, 0.0)
probs = probs / probs.sum()
# 4) sample
return np.random.choice(len(probs), p=probs)
Em implementações reais, você também pode ver:
- Penalidade de repetição (repetition penalty) / penalidade de frequência (frequency penalty) / penalidade de presença (presence penalty)
- Comprimento mínimo / comprimento máximo
- Sequências de parada (stop sequences)
- Tokens banidos (banned tokens) ou máscaras de tokens permitidos (allowed-token masks) (decodificação restrita)
Esses elementos são críticos em sistemas de produção.
Como a decodificação afeta a qualidade
Fluência e coerência
- Decodificação gulosa/temperatura baixa tende a maximizar a probabilidade local → fluente e gramatical, mas pode ficar formulaica.
- Amostragem moderada (top-p + temperatura) frequentemente produz uma redação mais natural, preferida por humanos.
Factualidade e alucinações (hallucinations)
A decodificação não “sabe” diretamente o que é verdade; ela apenas seleciona tokens. Mas a decodificação muda em qual continuação plausível você acaba caindo.
- Mais aleatoriedade (temperatura mais alta / p mais alto) aumenta a chance de derivar para continuações de baixa probabilidade que podem ser menos factuais.
- Decodificação muito determinística ainda pode alucinar se a continuação de maior probabilidade do modelo estiver incorreta.
Isso interage fortemente com Alucinações e pode ser mitigado por recuperação (retrieval), ferramentas ou verificação (veja Modelos de Linguagem com Uso de Ferramentas e Computação em Tempo de Teste).
Diversidade e criatividade
- Métodos baseados em amostragem são essenciais para brainstorming, narrativa e ideação.
- Uma receita comum “criativa, mas não caótica” é:
- temperatura ~ 0.7–1.0
- top-p ~ 0.9–0.95
Desempenho de raciocínio
O raciocínio é sensível à decodificação porque muitos rastros de raciocínio não são a sequência de próximos tokens mais provável.
Na prática:
- Temperatura baixa demais pode forçar um caminho de raciocínio frágil.
- Um pouco de estocasticidade mais reclassificação (ex.: gerar vários candidatos e escolher o melhor) pode melhorar resultados — relacionado a métodos de autoconsistência (self-consistency) em cadeia de pensamento (chain-of-thought) e a técnicas em Técnicas de Cadeia de Pensamento e Raciocínio e ao escalonamento em tempo de inferência em Computação em Tempo de Teste.
Repetição e degeneração
Certas configurações podem disparar “loops degenerados” (repetição de frases). Fatores contribuintes incluem:
- Temperatura muito baixa sem controle de repetição
- Busca em feixe agressiva demais sem mecanismos de diversidade
- Gerações longas sem condições de parada
Mitigações comuns:
- Penalidade de repetição ou bloqueio de n-gramas (n-gram blocking)
- Penalidades de presença/frequência
- Menor máximo de tokens, melhores sequências de parada
Como a decodificação afeta a segurança
A decodificação não substitui alinhamento nem aplicação de políticas, mas altera materialmente o risco.
Determinismo vs estocasticidade
- Decodificação determinística (gulosa, temperatura baixa) é mais fácil de testar e auditar, porque as saídas são repetíveis.
- Decodificação estocástica pode revelar comportamentos de “cauda longa”:
- O modelo pode ocasionalmente produzir conteúdo não permitido, de baixa probabilidade, mas ainda presente.
- Atacantes podem “amostrar até quebrar”, tornando a avaliação de segurança mais difícil.
Por isso, em produção, a segurança frequentemente usa mitigações em camadas: treinamento de política mais filtragem e monitoramento (ver Mitigações de Segurança).
Dinâmica de “testar limites” e jailbreaks
Algumas continuações inseguras podem ser improváveis, mas não impossíveis. Aumentar a aleatoriedade (temperatura alta ou top-p alto) aumenta a chance de selecioná-las. Por outro lado:
- Temperatura muito baixa pode tornar o comportamento de recusa mais consistente se tokens de recusa forem de alta probabilidade sob a distribuição alinhada do modelo.
- Porém, o determinismo também pode tornar o modelo previsivelmente explorável se um atacante encontrar um prompt que deterministicamente produza saída insegura.
Filtros de conteúdo e tokens “quase-incidentes”
Classificadores de segurança e listas de bloqueio muitas vezes operam sobre o texto gerado. A decodificação que produz:
- saídas mais verbosas,
- continuações mais especulativas,
- ou escolhas de palavras mais diversas
pode mudar o desempenho de detecção. Em alguns casos, a decodificação estocástica pode produzir paráfrases que burlam filtros ingênuos (embora sistemas robustos de segurança não devam depender de filtragem ingênua).
Decodificação restrita para segurança
Uma técnica prática e comum de segurança é aplicar restrições no nível de token:
- Banir certos tokens/frases
- Forçar formatos estruturados (ex.: esquema (schema) JSON)
- Restringir a um vocabulário em lista de permitidos em contextos de alto risco
A decodificação restrita pode reduzir certos riscos, mas não é uma solução completa:
- Conteúdo inseguro pode ser expresso sem tokens banidos específicos.
- Restrições rígidas demais podem prejudicar a usabilidade e aumentar erros de recusa/formatação.
Trade-off entre segurança e utilidade
Menos aleatoriedade frequentemente aumenta a conformidade e reduz saídas inesperadas, mas também pode fazer o assistente:
- ter maior probabilidade de dar uma resposta única e confiante (que pode estar errada),
- ter menor probabilidade de explorar alternativas,
- ter maior probabilidade de “empacar” se modelos de recusa dominarem.
Isso está intimamente ligado a Seguimento de Instruções (Instruction Following) e Alinhamento.
Receitas práticas (pontos de partida)
Elas não são universais; as configurações ideais variam por modelo, domínio e tolerância a risco.
Extração estruturada / saída em JSON
Objetivo: correção, determinismo, aderência ao esquema.
- Decodificação gulosa ou temperatura muito baixa (0.0–0.2)
- Evite top-p alto; se usar amostragem, mantenha-a restrita (top-p 0.7–0.9)
- Adicione sequências de parada e restrições de formato
- Considere decodificação restrita ou chamada de funções (function calling) (ver Modelos de Linguagem com Uso de Ferramentas)
Suporte ao cliente / assistente geral
Objetivo: útil e consistente, mas não robótico.
- temperatura 0.3–0.7
- top-p 0.85–0.95
- Considere penalidades de repetição moderadas para respostas mais longas
- Camadas fortes de segurança para conteúdo gerado por usuário
Brainstorming / escrita criativa
Objetivo: variedade e novidade.
- temperatura 0.8–1.2
- top-p 0.9–0.98 (ou top-k 40–100)
- Gere múltiplos candidatos e deixe usuários escolherem, ou reclassifique
Geração de código
Objetivo: validade sintática, menos erros aleatórios.
- temperatura 0.0–0.4
- top-p 0.8–0.95 (se houver amostragem)
- Use sequências de parada (ex.: parar em “```” ou no limite do arquivo)
- Considere abordagens especializadas de Modelos de Código (Code Models)
Avaliação: como escolher configurações de decodificação
A decodificação é um parâmetro do sistema, então trate-a como tal:
- Defina métricas: preferência humana, taxa de sucesso da tarefa, validade de formato, correção de recusas, toxicidade (toxicity).
- Avalie distribuições, não apenas saídas únicas:
- Com amostragem, meça a taxa de falha em muitas amostras.
- Segmente por tipo de prompt:
- Prompts benignos e seguros vs prompts adversariais
- Ajuste por endpoint:
- Um endpoint de escrita criativa não deve compartilhar configurações com um endpoint de perguntas e respostas médicas.
Para avaliação de segurança, sempre teste também sob configurações estocásticas, porque atacantes podem fazê-lo.
Notas avançadas e extensões comuns
Penalidades de repetição, presença e frequência
Elas modificam os logits para desencorajar repetição de tokens:
- Penalidade de presença: penaliza tokens que já apareceram em algum momento.
- Penalidade de frequência: penaliza tokens proporcionalmente à frequência com que apareceram.
Elas podem melhorar a legibilidade em saídas longas, mas também podem prejudicar a correção (ex.: em texto técnico onde repetição é necessária).
Busca em feixe diversa e decodificação contrastiva
- Busca em feixe diversa (diverse beam search) incentiva feixes a diferirem, melhorando a variedade.
- Decodificação contrastiva (contrastive decoding) (e métodos relacionados) tenta evitar continuações genéricas equilibrando alta probabilidade com diferenças no espaço de representações (representation-space).
Elas são úteis, mas mais especializadas do que top-p/top-k em muitas implantações.
Determinismo na prática
Mesmo a geração “gulosa” pode variar entre execuções devido a:
- kernels de GPU não determinísticos,
- diferenças de ponto flutuante,
- detalhes de atendimento distribuído.
Se auditabilidade for importante, configure inferência determinística quando possível e registre parâmetros de decodificação.
Principais conclusões
- A decodificação converte probabilidades do próximo token em texto; ela molda fortemente resultados de qualidade, diversidade e segurança.
- Gulosa: mais rápida e consistente, mas pode ser sem graça ou ficar presa localmente.
- Busca em feixe: sequências de maior verossimilhança, mas pode reduzir diversidade e nem sempre é a melhor para modelos de chat.
- Temperatura: controla aleatoriedade ao remodelar probabilidades.
- Top-k: trunca para k tokens; simples, mas não adaptativa.
- Top-p (núcleo): trunca para uma massa de probabilidade; adaptativa e amplamente usada.
- Em segurança, maior aleatoriedade pode revelar comportamentos raros e inseguros; decodificação determinística melhora reprodutibilidade, mas não é automaticamente mais segura.
- Trate a decodificação como um componente ajustável de um sistema mais amplo que inclui alinhamento, filtragem e uso de ferramentas (ver Alinhamento, Mitigações de Segurança e Modelos de Linguagem com Uso de Ferramentas).