温度与 top-p:采样参数
大模型生成时并不是永远选概率最高的词,而是从分布中采样。温度(temperature)与核采样(top-p,也称 nucleus sampling)是两个最常用的旋钮,用来调节输出的随机性与多样性。理解二者区别,才能在不同任务上稳定地拿到想要的效果。
是什么
温度在 softmax 之前缩放 logits:温度越高,分布越平滑,输出越随机;温度越低,分布越尖锐,输出越确定。top-p 则动态截取累计概率达到 p 的最小词集合,只在这个集合内采样,避免低概率词混入。二者作用位置相同,但调节方式不同。
为什么两个都要
温度改变整体平滑度,但固定截断 k 个词(top-k)会忽略分布形状。top-p 按概率质量截断,长尾薄时集合小、长尾厚时集合大,更自适应。两者可叠加,但官方多建议不要同时大幅改动,以免效果难解释,通常固定一个、调另一个。
怎么做
以 OpenAI 接口设置为例:
client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "写一句诗"}],
temperature=0.7,
top_p=0.9)
温度接近 0 时输出近乎贪心,top_p 接近 1 时几乎不截断。
注意点
- 事实问答、代码等任务建议低温(接近 0)以求稳定。
- 创意写作可升温或提高 top-p 以增加变化。
- 同时调温度与 top-p 易互相放大,建议固定其一再调另一。
- 不同模型对参数的敏感度不同,切换模型后宜重新校准。
实践建议
事实问答、代码生成等任务建议低温(接近 0)以求稳定可复现;创意写作、头脑风暴可升温或提高 top-p 增加变化。官方多建议不要同时大幅改动温度与 top-p,通常固定一个再调另一个,便于归因。不同模型对参数敏感度不同,切换模型后应重新校准。批量评测时固定采样参数,才能保证结果可比较。温度设为 0 并不绝对贪心,部分实现仍保留极小随机性,关键场景应结合其他约束。top-p 取值过小会限制多样性,过大则失去截断意义,常见区间 0.8 到 0.95。把采样参数写入实验配置,便于复现与回归。把采样参数作为模型卡片的一部分公开,有助于使用者复现你的结果,也方便在不同模型之间做公平比较;团队内部更应统一默认值,减少因参数漂移导致的评测不一致。生产环境建议把参数写进配置中心,支持不停机调整,便于按流量与场景切换档位。
小结
温度缩放分布平滑度,top-p 按概率质量截断候选集,二者共同控制生成的随机性。事实类任务用低温求稳,创意类任务升温求变,调参时避免两者同时大幅改动。
参考与延伸阅读
- Holtzman 等「The Curious Case of Neural Text Degeneration」(2019,提出核采样)。已核验。https://arxiv.org/abs/1904.09751
- OpenAI 采样参数(temperature 与 top_p)文档。已核验。https://platform.openai.com/docs/api-reference/chat/create
- Anthropic 采样参数文档。已核验。https://docs.anthropic.com/en/docs/about-claude/models/overview