温度与 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 按概率质量截断候选集,二者共同控制生成的随机性。事实类任务用低温求稳,创意类任务升温求变,调参时避免两者同时大幅改动。

参考与延伸阅读

本文累计阅读