Nucleus Sampling
A amostragem top-p (núcleo) extrai cada token do menor conjunto cuja probabilidade acumulada alcança p, fazendo com que o conjunto se adapte à confiança do modelo, ao contrário de top-k.
A amostragem de núcleo, também chamada amostragem top-p, é um método de descodificação que escolhe cada token seguinte do menor conjunto de candidatos cuja probabilidade combinada atinge um limiar p e, em seguida, faz uma amostragem desse conjunto. Ari Holtzman e colegas da Universidade de Washington e do Allen Institute for AI apresentaram o método em 2019 no artigo The Curious Case of Neural Text Degeneration. Trabalhando com o GPT-2 Large, mostraram que a descodificação gulosa e a pesquisa em feixe fazem com que os modelos de linguagem caiam em ciclos insípidos e repetitivos, enquanto a amostragem de toda a distribuição produz texto incoerente; demonstraram também que eliminar a cauda pouco fiável da distribuição produzia texto cuja perplexidade e variedade eram as mais próximas da escrita humana. Atualmente, top-p é uma configuração padrão nas APIs de geração de texto de praticamente todos os grandes modelos de linguagem.
Como o núcleo é escolhido#
Em cada passo, o modelo de linguagem atribui uma pontuação a cada token do seu vocabulário, e o softmax converte essas pontuações em probabilidades. Em seguida, a amostragem de núcleo ordena os tokens do mais para o menos provável, soma as respetivas probabilidades por essa ordem até o total acumulado atingir p, descarta tudo o que estiver fora desse conjunto, renormaliza os tokens restantes para que as probabilidades somem um e seleciona um único token por amostragem.
Considera quatro candidatos com probabilidades 0,50, 0,25, 0,15 e 0,10 e define p como 0,8. Os dois primeiros somam 0,75, abaixo do limite, então o terceiro é incluído e o núcleo passa a cobrir 0,90. O quarto token é descartado, e os três restantes são selecionados com probabilidades de aproximadamente 0,56, 0,28 e 0,17 após a renormalização.
A característica definidora é que o núcleo redimensiona-se a cada etapa. Depois de "A capital da França é", um token concentra quase toda a probabilidade, e o núcleo se reduz a uma única palavra. No início de uma história, a probabilidade se distribui entre centenas de palavras plausíveis, e o núcleo se amplia para incluí-las. Um número fixo de candidatos não consegue se adaptar dessa forma.
O mesmo procedimento em PyTorch, para um passo de descodificação num vocabulário de seis tokens:
import torch
# Probabilidades do próximo token para um vocabulário de 6 tokens
probs = torch.tensor([0.10, 0.40, 0.04, 0.25, 0.06, 0.15])
top_p = 0.75
# Ordenar e, em seguida, manter os tokens até que o total acumulado alcance top_p
sorted_probs, order = probs.sort(descending=True)
cumulative = sorted_probs.cumsum(dim=0)
keep = cumulative - sorted_probs < top_p # o token que ultrapassa top_p permanece
# Renormalizar o núcleo e selecionar por amostragem o próximo ID de token
nucleus = sorted_probs * keep
next_token = order[torch.multinomial(nucleus / nucleus.sum(), num_samples=1)]
print(order[keep].tolist(), next_token.item())A saída lista o núcleo, os IDs de token 1, 3 e 5, que juntos concentram 0,80 da probabilidade, e, em seguida, o ID selecionado. Os tokens 0, 2 e 4 nunca podem ser escolhidos nesta etapa, e executar o script novamente seleciona um dos três restantes proporcionalmente às suas probabilidades.
Top-p versus decodificação gulosa, top-k e temperatura#
- Decodificação gulosa sempre escolhe o token mais provável. É determinística e funciona para respostas factuais curtas, mas saídas longas tendem a entrar em ciclos.
- Amostragem top-k mantém um número fixo de candidatos. Com k definido como 50, mesmo uma etapa confiante ainda seleciona entre 50 tokens, incluindo opções sem sentido, enquanto uma etapa incerta pode descartar opções razoáveis. O top-p substitui a quantidade fixa por uma proporção fixa da probabilidade.
- Temperatura divide as pontuações do modelo antes da softmax. Valores abaixo de 1 tornam a distribuição mais concentrada nas opções mais prováveis, e valores acima de 1 a tornam mais uniforme. Como o top-p é aplicado depois da temperatura, aumentá-la também amplia o núcleo.
- Amostragem min-p mantém todos os tokens cuja probabilidade é pelo menos uma fração definida da probabilidade do token mais provável, pelo que o limiar também acompanha a confiança do modelo. Hugging Face Transformers, vLLM e llama.cpp disponibilizam-na juntamente com top-p.
Como a temperatura e top-p controlam ambas a aleatoriedade, a recomendação habitual é ajustar uma ou outra, em vez de ambas ao mesmo tempo. Muitos motores de inferência também permitem combinar top-k e top-p, sendo que top-k impõe um limite máximo ao número de candidatos.
Como escolher um valor de top-p#
Um valor top-p de 1.0 desativa o filtro, e os valores predefinidos habituais situam-se entre 0.9 e 1.0. Top-p apenas altera as probabilidades do próprio modelo, pelo que a exatidão factual depende de fundamentar o prompt, por exemplo com geração aumentada por recuperação, que reduz as alucinações ao fornecer ao modelo os factos necessários. Valores mais elevados acrescentam variedade à geração de ideias, aos diálogos de chatbots e à escrita criativa. Valores mais baixos, como 0.5, tornam as saídas mais previsíveis e repetitivas, o que é adequado à extração de dados, a prompts de classificação e ao código; a descodificação condicionada vai mais longe, mascarando todos os tokens que violem um formato obrigatório.
A mesma configuração controla a geração de linguagem em pipelines de visão. Quando uma deteção de Ultralytics YOLO26 desencadeia uma descrição da cena gerada por um modelo de visão-linguagem, a interface LLM da Ultralytics passa argumentos do pedido, como top_p, diretamente para a API do fornecedor; assim, um valor baixo, como 0.5, mantém semelhantes as descrições de fotogramas parecidos.










