温度与 top-p 等解码策略如何影响生成文本
同一个模型、同一句 prompt,为什么有时严谨有时放飞?答案在解码策略:模型每步输出的是词表上的概率分布,如何从分布里选下一个 token 由温度、top-k、top-p 等参数决定。本文把每个旋钮的物理含义与调参直觉讲清。
生成即逐步采样
自回归生成每步做同一件事:模型给出词表概率分布 → 解码策略选一个 token → 拼入上下文 → 下一步。贪心(永远选概率最大)只是策略之一;采样类策略在”确定性”与”多样性”之间提供连续可调的光谱。
温度(temperature):分布的锐化旋钮
采样前对 logits 除以 T 再 softmax:
- T → 0:分布无限锐化,退化为贪心——最确定、最保守,也最容易重复与呆板
- T = 1:模型原始分布
- T > 1:分布拉平,低概率词机会变大——更发散、更有”创意”,也更容易胡话
直觉:温度不改变概率排序,只改变差距。T=0.3 时 Top1 几乎必中;T=1.5 时第 20 名的词也有机会上台。
top-k:候选池硬截断
只从概率最高的 k 个词中采样,其余置零:
- k=1 即贪心;k=40 表示每步在 40 个候选里抽签
- 缺陷:k 是静态的——分布平坦时(该发散时)40 个太少,分布尖锐时(该确定时)40 个太多(尾部垃圾词混入)
top-p(nucleus sampling):候选池动态截断
按概率从高到低累加,达到累积阈值 p 即截断(如 p=0.9:候选集=凑够 90% 概率质量的最小词集):
- 分布尖锐时候选集自动变小(甚至 1-2 个词)→ 确定
- 分布平坦时候选集自动变大 → 多样
- 动态自适应是 top-p 优于 top-k 的核心,今天的主流默认
重复惩罚类:压制车轱辘话
- repetition_penalty / frequency_penalty:对已出现过的 token 降权,惩罚系数 >1 抑制复读
- presence_penalty:出现过即固定降权
- 场景:长文本生成、代码补全中防循环;过强会导致”不敢用常用词”的怪异文风
组合配方(按任务类型)
| 任务 | 温度 | top-p | 重复惩罚 | 理由 |
|---|---|---|---|---|
| 代码/数学/事实问答 | 0-0.2 | 1.0 | 默认 | 要确定性与正确率 |
| 摘要/抽取/改写 | 0.2-0.4 | 0.9 | 略加 | 忠实原文,少发挥 |
| 通用对话 | 0.6-0.8 | 0.9-0.95 | 默认 | 自然与稳定平衡 |
| 创意写作/脑暴 | 0.9-1.2 | 0.95 | 加 | 要多样性与意外 |
| 批量去重采样(self-consistency) | 0.7-1.0 | 0.95 | 默认 | 多次采样投票需独立性 |
原则:温度与 top-p 通常只调一个(两者作用重叠,同调易失校准);API 默认值多为对话场景优化,代码类任务记得手动压到 0 附近。
其他解码策略速览
- beam search:保留 k 条最优序列并行扩展,翻译/摘要时代的主流;成本高、多样性差,聊天场景已被采样取代
- min_p:按 Top1 概率的比例设下限(Top1 的 10% 以下全剔除),比 top-p 更抗”分布异常平坦”的崩坏步
- best-of-n / 重排序:采样 n 条用裁判模型选最佳——用算力换质量的上限玩法
调参实验方法
固定 seed 对比会掩盖采样差异(同 seed 同结果);正确做法:固定 prompt、变参数、每配置采样 10-20 条,人工或 LLM 裁判评多样性与质量均值——解码策略是分布级属性,单条对比无统计意义。
解码策略是模型与用户之间的最后一层创作权:温度管锐度、top-p 管候选池、惩罚管复读。理解每个旋钮在概率分布上做了什么,”调参”就从玄学变成对分布形状的主动 sculpting。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 非鱼小站!
评论
WalineDisqus







