top_p 核采样是什么
top_p(核采样)先从概率最高的词开始往上累加,累到累计概率刚好超过阈值为止,只在集合内采样。阈值设成 1 相当于不截断、整张词表都参与;设成 0.9 表示只在累计概率前 90% 的高概率词里挑。它和 temperature 管控的层面不同:temperature 调整分布的陡峭程度,top_p 直接砍掉长尾候选,两者都会改变输出的随机性。
要点
| 机制 | 按概率从高到低累计,达到阈值即截断,只在集合内采样(核采样) |
|---|---|
| 对照 | top_p=1 相当于不截断;top_p 越小越保守 |
| 组合建议 | 多数官方文档建议 temperature 与 top_p 只调其中一个 |
| 典型区间 | 抽取与判定 0.1-0.5;创作放宽到 0.9-1.0,以实测为准 |
| 副作用 | 阈值太低会让输出趋于保守、重复率上升、表达变僵硬 |
典型使用场景
- 抽取与判定:收紧候选范围,减少同义变体与无关措辞
- 代码生成:缩小长尾候选,降低引入不存在函数名的概率
- 文案创作:放宽阈值以保留表达多样性,同时避免纯随机跑题
- 故障排查:怀疑输出抖动来自采样时,先固定 temperature 再单独收紧 top_p
取值理解
取值理解
top_p = 1.0 不加截断,全部词表参与采样 # 与不设置基本等价
top_p = 0.9 只从累计概率 90% 的高概率词中采样
top_p = 0.1 候选很窄,输出趋于保守、重复率上升
# 与 temperature 同时出现时,先固定其中之一再调另一个,避免无法归因与 temperature 的分工
| 维度 | temperature | top_p |
|---|---|---|
| 作用对象 | 整张概率分布的陡峭程度 | 参与采样的候选集合大小 |
| 低温/low 时 | 高概率项被放大,输出集中 | 长尾被砍掉,输出更保守 |
| 高温/high 时 | 分布被拉平,低概率词也有机会 | 集合大,随机性来自更多候选 |
| 调参建议 | 先定 temperature 区间 | 再用 top_p 微调,不要同时大改 |
部分平台只暴露其中一个参数或给出默认值,迁移模型时不要假设原有取值仍然生效,要按目标平台文档核对。