Top-p sampling (PT)

From Systems analysis Wiki
Jump to navigation Jump to search

Amostragem Top-p, também conhecida como amostragem por núcleo (em inglês, Nucleus Sampling), é um método de decodificação estocástica usado em grandes modelos de linguagem (LLMs) para a geração de texto. O método foi proposto em 2019 por Ari Holtzman et al. como uma alternativa aprimorada à amostragem Top-k fixa. Sua ideia é selecionar dinamicamente um conjunto de candidatos a cada passo da geração, com base em um limiar de probabilidade cumulativa p.[1]

Conceito

A ideia principal do Top-p é, a cada passo, selecionar o menor conjunto de tokens mais prováveis cuja probabilidade acumulada seja igual ou superior a um limiar p predefinido (o núcleo, em inglês nucleus). Matematicamente, para uma distribuição condicional P(xx1:i1) sobre um vocabulário V, o núcleo V(p) pode ser definido como:

xV(p)P(xx1:i1)peSV(p): xSP(xx1:i1)<p.

Uma formulação equivalente é: ordenar os tokens em ordem decrescente de P(xx1:i1) e selecionar o prefixo mais curto cuja massa de probabilidade acumulada seja ≥ p.[1]

Após a definição do núcleo, as probabilidades dos tokens fora de V(p) são zeradas, e as probabilidades dentro do núcleo são normalizadas (para que sua soma seja igual a 1). O próximo token é então amostrado a partir dessa distribuição truncada.

Adaptação dinâmica

  • Em uma distribuição "aguda" (quando o modelo está confiante), o núcleo é pequeno: poucos tokens já alcançam a massa ≥ p, o que aumenta a coerência.
  • Em uma distribuição "plana" (quando há muitas continuações plausíveis), o núcleo é grande: a seleção se expande, aumentando a diversidade.[1]

Comparação com outros métodos de decodificação

Top-p vs. Top-k

  • O Top-k sempre seleciona a partir de um número fixo k de tokens mais prováveis. Em distribuições "agudas", isso pode adicionar opções desnecessárias e de baixa probabilidade apenas para atingir o número k, enquanto em distribuições "planas", pode, ao contrário, cortar continuações razoáveis que não ficaram entre as k primeiras.
  • O Top-p ajusta o tamanho do conjunto de candidatos com base nos dados de cada passo, o que torna seu comportamento mais flexível e estável em diferentes tipos de distribuição.[1]

Top-p vs. Temperatura

  • A Temperatura (temperature) remodela toda a forma da distribuição (tornando-a mais aguda ou mais suave), mas não corta tokens: mesmo as opções de baixa probabilidade mantêm uma chance diferente de zero.[2]
  • O Top-p introduz um truncamento rígido da cauda da distribuição — tokens de baixa probabilidade são completamente excluídos da amostragem, o que ajuda a evitar continuações claramente inadequadas.[1]

Conselho prático dos provedores: ao ajustar o estilo/aleatoriedade, geralmente se modifica ou `temperature` ou `top_p`, mas não ambos ao mesmo tempo, para evitar um impacto "duplo" na distribuição e simplificar o diagnóstico.[3]

Aplicação prática e recomendações

O Top-p é amplamente utilizado nos LLMs modernos devido à sua combinação de flexibilidade e controlabilidade.

  • Faixa de valores típica. Na prática, valores de p0.900.95 são frequentemente usados (consulte guias e exemplos em Transformers; em muitos SDKs, o valor 0.95 é encontrado como padrão ou recomendado em exemplos).[2][4]
    • Valores próximos de 1.0 (por exemplo, 0.98–0.99) aumentam a diversidade, pois mais tokens entram no núcleo.
    • Valores menores (por exemplo, 0.80–0.90) aumentam o determinismo e a "contenção" da saída.
    • Com p=1, o truncamento desaparece: a seleção ocorre em todo o vocabulário (levando em conta a temperatura).[2]
  • Compatibilidade com bibliotecas e APIs.
    • Na biblioteca Transformers, está implementado o TopPLogitsWarper, que utiliza adicionalmente um limiar `min_tokens_to_keep` (geralmente ≥1) para evitar a degeneração do núcleo com valores de p muito baixos e distribuições "agudas".[5]
    • Em várias APIs, o parâmetro `top_p` está disponível, enquanto `top_k` pode estar ausente; o suporte aos parâmetros e sua semântica dependem do modelo/provedor específico (por exemplo, alguns modelos de raciocínio podem restringir o ajuste da estocasticidade). Consulte os manuais oficiais da OpenAI/Azure/Google.[6][3][4]
  • Textos longos e repetitividade. Em uma série de experimentos, foi demonstrado que a amostragem por núcleo (nucleus sampling) reduz a tendência à degeneração (repetições, frases clichês) em comparação com a busca gulosa (greedy), busca por feixe (beam search) e Top-k fixo, especialmente em sequências longas.[1][7]

Ver também

  • Temperatura
  • Grandes modelos de linguagem

Leitura adicional

  • Holtzman, A. et al. (2020). The Curious Case of Neural Text Degeneration. arXiv:1904.09751.
  • Fan, A. et al. (2018). Hierarchical Neural Story Generation. arXiv:1805.04833.
  • Meister, C. et al. (2023). Locally Typical Sampling. arXiv:2202.00666.
  • Su, Y.; Collier, N. (2022). Contrastive Search Is What You Need for Neural Text Generation. arXiv:2210.14140.
  • O’Brien, S.; Lewis, M. (2023). Contrastive Decoding Improves Reasoning in Large Language Models. arXiv:2309.09117.
  • Yu, S. et al. (2023). Conformal Nucleus Sampling. ACL Findings 2023.
  • Tan, Q. et al. (2024). A Thorough Examination of Decoding Methods in the Era of Large Language Models. arXiv:2402.06925.
  • Finlayson, M. et al. (2024). Basis‑Aware Truncation Sampling for Neural Text Generation. arXiv:2412.14352.
  • Chen, S. J. et al. (2025). Decoding Game: On Minimax Optimality of Heuristic Text Generation Methods. arXiv:2410.03968.
  • Sen, J. et al. (2025). Advancing Decoding Strategies: Enhancements in Locally Typical Sampling for LLMs. arXiv:2506.05387.

Notas

  1. 1.0 1.1 1.2 1.3 1.4 1.5 Holtzman, A., Buys, J., Du, L., Forbes, M., & Choi, Y. (2019). The Curious Case of Neural Text Degeneration. arXiv:1904.09751. [1]
  2. 2.0 2.1 2.2 Hugging Face Transformers. Generation strategies (top‑k, top‑p, temperature). [2]
  3. 3.0 3.1 Microsoft Learn (Azure OpenAI). Text/Chat Completions — parameters. Recomendação para "alterar `temperature` ou `top_p`, mas não ambos ao mesmo tempo". [3]
  4. 4.0 4.1 Google AI / Vertex AI. Generation parameters (topP/topK) for text/Gemini. Exemplos com topP≈0.95. [4] [5]
  5. Transformers API. TopPLogitsWarper (parâmetros e comportamento, incluindo `min_tokens_to_keep`). [6]
  6. OpenAI API Reference. top_p. [7]
  7. Tan, Q. et al. (2024). A Thorough Examination of Decoding Methods in the Era of Large Language Models. arXiv:2402.06925. [8]