Top-p(Nucleus Sampling)

Top-p

只从大概率词里抽

亦作、亦称:Nucleus Sampling

Top-p 采样(又称核采样,Nucleus Sampling)是大语言模型解码阶段的一种动态截断采样策略:每步生成时,将词表按概率从高到低排列并依次累加,直到累积概率超过阈值 p,只在这个「核」词集内随机采样。相比固定候选数的 top-k,核采样能根据模型置信度自适应调整候选词数量,在创意多样性与输出质量之间取得更好的平衡,是当前主流大模型 API 中使用最广泛的采样策略之一。

概述

Top-p 采样(又称核采样,Nucleus Sampling)是大语言模型解码阶段的一种动态截断采样策略:每步生成时,将词表按概率从高到低排列并依次累加,直到累积概率超过阈值 p,只在这个「核」词集内随机采样。相比固定候选数的 top-k,核采样能根据模型置信度自适应调整候选词数量,在创意多样性与输出质量之间取得更好的平衡,是当前主流大模型 API 中使用最广泛的采样策略之一。

核心工作原理

每步生成时,模型先经过 softmax 得到全词表的概率分布,再按以下步骤执行核采样:

  • 第一步·排序:将词表中所有 token 按概率从高到低排列。
  • 第二步·累积截断:从最高概率 token 开始逐个累加,直到累积概率首次超过阈值 p,截断后续所有 token(即排除「长尾」低概率词)。
  • 第三步·重归一化:对截断后的候选集重新归一化,使概率之和为 1。
  • 第四步·采样:从归一化候选集中按概率随机抽取一个 token 作为当前步输出。
  • 动态候选数:p=0.9 时,若模型高度确定,核可能只有 3-5 个词;若上下文歧义高,核可扩展至数十甚至数百个词。

提出背景:神经文本退化问题

Holtzman 等人在研究中发现,当时主流解码方法存在根本性缺陷,这促使他们提出核采样:

  • 贪心解码与束搜索的退化:以最大化概率为目标的解码方式容易陷入重复循环,产生单调、无意义的文本,这一现象被称为「神经文本退化」(neural text degeneration)。
  • 人类写作的概率特性:真实人类文本中,每步的概率质量高度集中在少数几个词上,形成自然的「核」;而语言模型的概率分布存在不可靠的长尾,需要截断。
  • 固定 top-k 的局限:分布平坦时 k 个候选不够多样,分布尖锐时 k 个候选又引入过多噪声,固定值无法适应语境变化。
  • 实验结论:论文证明核采样在开放域长文本生成中的多样性和质量均优于 top-k 和束搜索,同时媲美人类写作水平的分布特性。

与相邻策略的区别

Top-p 常与 top-k 和 temperature 并列提及,三者控制解码随机性的角度各不相同:

  • Top-p vs Top-k:top-k 固定每步候选数量(如始终取概率最高的 40 个词),候选集大小不随语境变化;top-p 的候选集大小动态适应分布形状,适应性更强。
  • Top-p vs Temperature:temperature 通过缩放 logits 改变整个概率分布的「尖锐度」,在 softmax 之前作用;top-p 在 softmax 之后截断长尾,两者在不同维度上控制随机性,通常配合使用。
  • Top-p vs Greedy Decoding:greedy 每步取单个最高概率词,确定性最高但容易退化成重复输出;top-p 保留随机性,同一 prompt 的不同运行结果不同。
  • 联合使用:实践中常同时设置 top-k 和 top-p(先 top-k 截断,再 top-p 截断),以双重限制减少低质量候选;temperature 通常先于两者作用于 logits。

发展脉络

Top-p 从学术提案到工程标配经历了数年推广:

  • 2019:Holtzman 等人发布预印本,首次描述核采样概念,并通过人类评估和自动指标验证其优于 top-k 与束搜索。
  • 2020:论文「The Curious Case of Neural Text Degeneration」发表于 ICLR 2020GPT-3 发布时 OpenAI API 直接暴露 top_p 参数,核采样正式进入工程主流;Hugging Face Transformers 同步集成。
  • 2022-2023:ChatGPT、Claude 等产品将 top-p 作为可调参数向开发者开放,提示工程社区系统探索最优参数组合。
  • 2024:ICLR 2024 论文「Closing the Curious Case of Neural Text Degeneration」重新审视原始发现,指出在特定场景下贪心解码表现被低估,但 top-p 的主流地位未受影响。
  • 现状:llama.cpp、vLLM、Ollama、SGLang 等本地推理框架均原生支持 top_p 参数;Typical Sampling、Eta Sampling、Mirostat 等改进变体相继提出,但 top-p 凭借简洁有效仍是工业界首选基准。

实践调参建议

在调用大模型 API 或本地框架时,top-p 是最常用的调节旋钮之一:

  • p ≈ 0.9:常见默认值,兼顾创意与连贯,适合通用对话和内容生成。
  • p ≈ 0.7-0.85:输出更保守、更确定,适合代码补全、结构化提取等精确任务。
  • p = 1.0:不做概率截断,完全依赖 temperature 控制随机性;temperature 也为 1 时等同于无约束采样。
  • 与 temperature 联调:推荐先确定 temperature(控制分布尖锐度),再调 top-p(控制截断范围),避免同时大幅调整两个参数造成效果难以归因。
  • 注意框架差异:部分框架在同时设置 top-k 和 top-p 时执行顺序不同,使用前需确认文档说明。

局限与常见误区

Top-p 并非万能,使用时存在几个容易被忽视的问题:

  • 阈值 p 仍是超参数:最优 p 值因任务、模型和语境而异,没有一个放之四海皆准的默认值。
  • 「只从大概率词里抽」描述不完整:这句话忽略了「动态候选集」这一核心特性,与固定 top-k 的描述容易混淆。
  • 不能解决幻觉问题:幻觉源于模型对错误事实赋予了高概率,top-p 无法区分「高概率但错误」与「高概率且正确」的 token。
  • 极低 p 值风险:p < 0.5 在分布平坦的语境中会强制压缩到极少候选,可能导致输出不自然或语义跳跃。
  • 不替代 prompt 设计:p 参数只调整采样策略,无法弥补 prompt 设计不佳导致的模型输出方向错误。

常见误解

日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。

  • 「只从大概率词里抽」
  • 「大模型圈高频词」
  • 「跟 Top-p 是一回事吗」

相关术语

和本术语关联紧密的其他词条,便于串联理解。

🎯 考点练习

含该术语的高频面试题,含标准答案与追问。

延伸阅读

从知识库精选 2 篇文章,帮助深入理解该术语。

  1. 1

    文本生成:语言模型与解码策略

    从贪心搜索到核采样,掌握文本生成的解码技术

  2. 2

    Prompt Engineering 最佳实践

    系统学习 CoT、Few-shot、ReAct 等 Prompt 设计模式与技巧

外部参考

维基百科:查看「Top-p」词条

本页内容为本站原创撰写;维基百科链接仅作延伸参考。