一句话定义:Top-p(核采样,Nucleus Sampling)是一种文本生成的采样策略——每一步只从「概率累加刚好超过 p」的那一小撮候选词里抽签,剩下那条长尾直接丢弃。p 常取 0.9 或 0.95 这类接近 1 的值。
它到底在解决什么问题
模型每生成一个词,都会对词表里每个词算一个分数,转成概率。麻烦在于:词表动辄几万到十几万条,除开少数几个真正合理的词,剩下每个的概率都小得可怜——但架不住数量多,加起来可能相当可观。这些词正是「胡说八道」的来源:跑题的词、乱码碎片、语言混杂的怪东西。
Top-p 的做法很直接:把词按概率从高到低排队,从头开始累加,加到刚好 ≥ p 就停手。被圈进来的这批词叫「核」(nucleus),只在核内按原比例重新归一化后采样,核外一律归零。于是尾巴被齐根砍掉。
打个比方:点外卖。Top-k 是「不管三七二十一,只看排名前 50 的店」——如果第一名评分碾压全场,剩下 49 家纯属陪跑;如果附近本来就没什么店,池子又太窄。Top-p 是「看到累计覆盖 90% 好评为止」:选择多的地方自动多挑几家,选择少的地方自动收窄,池子大小随分布形状伸缩。
和相邻概念的区别
| 策略 | 候选池怎么定 | 特点 |
|---|---|---|
| 贪心解码(Greedy) | 只取概率最高的那个 | 确定、可复现,但呆板、易重复 |
| AI 词典:Beam Search">Beam Search | 保留若干条整体最优路径 | 适合翻译等有标准答案的任务,不适合闲聊 |
| Top-k | 固定取前 k 个 | 简单好用,但 k 无法适配所有场景 |
| Top-p | 取累计概率到 p 为止 | 池子大小随分布自动伸缩 |
还有一个常见的混淆项:温度(Temperature)。温度是把整个分布「压扁」或「拉尖」,改的是形状;Top-p 是直接截断,改的是范围。两者并不互斥,通常可以叠加——先调温度,再截断,这也是各家接口往往同时暴露这两个参数的原因。
对使用者意味着什么
- 想要稳定、可复现的输出:把 p 调小,或者干脆用无采样的贪心解码。
- 想要创意、发散、多样:p 调大一些,并配合较高的温度。
- 输出开始跑题、生造词、语言错乱:多半是 p 或温度偏大,长尾被抽中了。
- p 取 1 等于完全不截断;p 取得过小则会退化成近似贪心,容易陷入循环重复。
一句话总结:温度决定「分布有多平」,Top-p 决定「只留多大一撮」。想让它别乱说,先把尾巴剪短。各家的默认值与取值范围并不相同,具体以官方文档为准。
