Nucleus Sampling
Top-p(核采样)会从概率总和达到 p 的最小 token 集合中抽取每个 token,因此候选集合会随模型置信度调整,这与 top-k 不同。
核采样(也称 top-p 采样)是一种解码方法:它从候选项中选出一个最小集合,使集合内候选项的总概率达到阈值 p,然后从该集合中采样出下一个token。华盛顿大学和艾伦人工智能研究所的 Ari Holtzman 及其同事于 2019 年在论文《神经文本退化的奇特案例》中提出了这种方法。他们使用 GPT-2 Large 进行研究,发现贪心解码和束搜索会让语言模型陷入平淡、重复的循环,而从完整概率分布中采样则会生成不连贯的文本;截去分布中不可靠的尾部后,生成文本的困惑度和多样性最接近人类写作。如今,几乎所有大型语言模型的文本生成 API 都将 top-p 作为标准设置。
如何选取核集合#
在每个步骤中,语言模型都会为其词汇表中的每个 token 评分,而 softmax 会将这些分数转换为概率。随后,核采样按概率从高到低排列 token,依次累加其概率,直到总和达到 p;然后丢弃集合之外的所有 token,对保留项重新归一化,使其概率总和为 1,最后采样一个 token。
假设有四个候选项,概率分别为 0.50、0.25、0.15 和 0.10,并设 p=0.8。前两项的概率和为 0.75,未达到阈值,因此加入第三项,核集合覆盖的概率达到 0.90。第四个 token 会被丢弃;重新归一化后,三个保留项的采样概率约为 0.56、0.28 和 0.17。
核采样的关键特性是集合会在每一步自动调整大小。在“The capital of France is”之后,一个 token 几乎占据了全部概率,核集合便缩小为一个词。在故事开头,概率会分散到数百个合理词语上,核集合也随之扩大以纳入这些词语。固定候选项数量无法实现这种自适应。
下面是使用 PyTorch 对六 token 词汇表进行单步解码的相同过程:
import torch
# 包含 6 个 token 的词汇表中的下一个 token 概率
probs = torch.tensor([0.10, 0.40, 0.04, 0.25, 0.06, 0.15])
top_p = 0.75
# 先排序,再保留 token,直到累积概率达到 top_p
sorted_probs, order = probs.sort(descending=True)
cumulative = sorted_probs.cumsum(dim=0)
keep = cumulative - sorted_probs < top_p # 跨过 top_p 阈值的 token 仍会保留
# 重新归一化核集合并采样下一个 token ID
nucleus = sorted_probs * keep
next_token = order[torch.multinomial(nucleus / nucleus.sum(), num_samples=1)]
print(order[keep].tolist(), next_token.item())输出会列出核集合,其中 token ID 1、3 和 5 的概率合计为 0.80,随后列出采样得到的 ID。在这一步中,永远不会选中 token 0、2 和 4;重新运行脚本时,会按照各自的概率比例从三个保留项中采样。
Top-p 与贪心解码、Top-k 和温度#
- 贪心解码总是选择可能性最高的单个 token。它具有确定性,适用于简短的事实性回答,但较长的输出往往会陷入循环。
- Top-k 采样会保留固定数量的候选项。将 k 设为 50 时,即使模型在某一步非常确定,采样仍会在 50 个 token 中进行,其中可能包括无意义选项;而在模型不确定时,合理选项又可能被截掉。Top-p 用固定的概率占比取代了固定的候选项数量。
- 温度会在 softmax 之前缩放模型分数。低于 1 的值会让分布更集中于最可能的选项;高于 1 的值则会让分布更平缓。由于 top-p 在温度调整后应用,提高温度也会扩大核集合。
- Min-p 采样会保留概率至少达到最高概率 token 的指定比例的所有 token,因此其截断阈值也会随模型置信度变化。Hugging Face Transformers、vLLM 和 llama.cpp 都在提供 top-p 的同时支持它。
由于温度和 top-p 都能控制随机性,通常建议调整其中一个,而不是同时调整两者。许多推理引擎也允许同时使用 top-k 和 top-p,其中 top-k 会对候选项数量设置硬性上限。
如何选择 Top-p 值#
top-p 设为 1.0 时会禁用筛选,常见默认值在 0.9 到 1.0 之间。top-p 只会重新调整模型自身的概率,因此事实准确性取决于提示的事实依据;例如,检索增强生成可以为模型提供所需事实,从而减少幻觉。较高的取值能为头脑风暴、聊天机器人对话和创意写作增添多样性。0.5 等较低取值会让输出更可预测、更重复,适用于数据提取、分类提示和代码;而受约束解码更进一步,会屏蔽所有会破坏指定格式的 token。
同一设置也控制视觉流水线中的语言输出。当 Ultralytics YOLO26 检测触发场景描述,并交由视觉语言模型生成描述时,Ultralytics LLM 接口会将 top_p 等请求参数直接传递给服务提供商的 API,因此,0.5 这样的低取值会让相似帧的描述措辞保持一致。










