生成参数
一句话定义:调用大模型时控制输出"如何采样、多长、何时停"的配置项,如 temperature、top_p、top_k、max_tokens、stop 等,与提示词共同决定输出质量。
1. 定义
生成参数(Generation / Decoding Parameters)指调用 LLM 时传入的、影响"从概率分布中如何选出下一个 token"以及"生成何时结束"的配置。它们不改模型权重,只调控行为。提示词决定"说什么",生成参数决定"怎么说、说多稳、说多长"。
典型调用(OpenAI 风格):
response = client.chat.completions.create(
model="gpt-4o",
messages=[...],
temperature=0.7, # 采样温度
top_p=0.9, # 核采样
max_tokens=1024, # 输出上限
stop=["\n\n用户:"], # 停止序列
seed=42, # 可复现
response_format={"type": "json_object"}, # JSON 模式
)
2. 解码策略总览
| 策略 | 做法 | 特点 |
|---|---|---|
| Greedy(贪心) | 每步选概率最高 token | 确定性、易重复、易陷入局部 |
| Beam Search | 维护 k 条候选序列取整体最优 | 传统 NMT 常用,LLM 时代少用 |
| Sampling | 按概率分布随机采样 | 多样性强,是 LLM 默认 |
LLM 时代主流是 Sampling,通过 temperature / top_p / top_k 控制采样空间。
3. temperature(温度)
- 对 logits 除以 T 再 softmax:$p_i = \text{softmax}(z_i / T)$。
- T → 0:分布变尖,趋近贪心,输出确定、保守。
- T → ∞:分布变平,趋近均匀采样,输出随机、混乱。
- T = 1:用原始分布采样。
典型取值:
| 场景 | 推荐 temperature |
|---|---|
| 代码、事实问答、JSON 抽取 | 0 ~ 0.2 |
| 通用对话、摘要、翻译 | 0.5 ~ 0.7 |
| 创意写作、头脑风暴 | 0.8 ~ 1.2 |
4. top_p(核采样 / Nucleus Sampling)
- 选概率累积和达到 p 的最小 token 集合,只在该集合内采样。
- 候选集大小动态:分布尖锐时候选少,平坦时候选多。
- 典型 0.9 ~ 1.0。p=1 等价于不截断。
- 优点:自动剔除长尾低概率 token,比 top_k 更自适应。
5. top_k
- 只在概率最高的 k 个 token 中采样,其余置零。
- 候选集大小固定。
- 典型 40 ~ 100。k=1 等价于贪心。
- 缺点:分布尖锐时 k 太大会放进噪声,平坦时 k 太小会丢合理选项。
6. top_p vs top_k 对比
| 维度 | top_p | top_k |
|---|---|---|
| 候选集 | 动态 | 固定 |
| 自适应 | 强 | 弱 |
| 分布尖锐时 | 自动收窄 | 可能放噪声 |
| 实现复杂度 | 略高 | 低 |
| 主流默认 | 常用 | 部分框架默认 |
二者常叠加使用(先 top_k 再 top_p),但一般调一个即可,避免过度限制。
7. min_p
- 相对阈值:只保留概率 ≥ (最大 token 概率 × min_p) 的 token。
- 兼顾自适应与简洁,近年(llama.cpp 等)流行。
- 典型 0.05 ~ 0.1。
8. 惩罚参数
控制重复,多用于长文本生成。
| 参数 | 机制 | 典型范围 |
|---|---|---|
| frequency_penalty | 按出现次数线性惩罚已出现 token | -2 ~ 2,正值减重复 |
| presence_penalty | 按是否出现惩罚(一次性) | -2 ~ 2,正值促新词 |
| repetition_penalty | 对已出现 token 的 logits 乘 1/p(<1 降权) | 1.0 ~ 1.3 |
要点:
- 正值减重复,负值增重复。
- repetition_penalty > 1.3 易跑题、破坏连贯。
- 不同厂商语义略有差异,迁移时需重测。
9. 长度与停止
- max_tokens / max_new_tokens:输出 token 上限。注意部分框架的
max_length含输入,max_new_tokens仅算输出。 - stop / stop_sequences:遇到指定字符串即停止生成,常用于对话分隔、结构化输出收尾。
- max_completion_tokens(新版 OpenAI):专指补全长度上限。
建议:生产环境始终设 max_tokens 上限,防失控生成。
10. 确定性与可复现
- seed:固定随机种子,使同输入产生同输出(尽量可复现)。
- 注意:temperature=0 理论上等价贪心,但批处理、浮点精度、框架实现差异可能导致微小不一致;要严格可复现需 seed + temperature=0 + 单条请求。
- n:一次返回多条候选,便于 Self-Consistency、多方案对比。
11. 其他常见参数
| 参数 | 作用 |
|---|---|
| logprobs / top_logprobs | 返回 token 对数概率,用于置信度评估、扰动检测 |
| response_format | 强制 JSON 等结构化输出 |
| stream | 流式返回 token,降首 token 延迟体验 |
| n | 一次生成多条候选 |
| presence/frequency_penalty | 见第 8 节 |
| best_of | 后台多生成取 logprob 最优(部分厂商) |
12. 典型场景配置
| 场景 | temperature | top_p | 其他 |
|---|---|---|---|
| 代码生成 | 0 | 1 | max_tokens 足够大 |
| 事实问答 / 信息抽取 | 0 | 1 | response_format=json |
| 摘要 / 翻译 | 0.3 | 0.9 | — |
| 通用对话 | 0.7 | 0.9 | — |
| 创意写作 | 0.9 ~ 1.1 | 0.95 | repetition_penalty=1.1 |
| 长文生成(防重复) | 0.7 | 0.9 | presence_penalty=0.6 |
| 多样性头脑风暴 | 1.0 | 0.97 | n=3 取最优 |
13. 注意事项
- temperature=0 ≠ 完全确定:浮点与批处理可能引入微小差异,要复现用 seed。
- 别同时乱调 top_p 和 top_k:过度叠加会过度收窄候选,输出僵硬。
- 惩罚参数别过强:repetition_penalty > 1.3、penalty > 1.5 易跑题、语无伦次。
- 厂商差异:OpenAI / Anthropic / 开源框架参数名与语义略有不同(如 max_tokens vs max_new_tokens),迁移需重测。
- max_tokens 含输入还是仅输出:不同框架定义不同,看清文档避免截断。
- 与提示工程配合:生成参数是"放大器",提示写不好调参也救不回来;先打磨提示,再调参。
- 评测要固定参数:跑 benchmark 一律 temperature=0、固定 seed,保证可比。
14. 学习要点
- 生成参数 = 解码策略 + 采样控制 + 长度/停止 + 确定性,不改权重只调行为。
- temperature 控随机性,top_p 动态截尾,top_k 固定截断,min_p 相对阈值。
- 惩罚参数控重复,过强则跑题。
- 生产环境必设 max_tokens 与 stop,防失控。
- 可复现需 seed + temperature=0 + 单条请求。
15. 参考资料
- Holtzman et al., "The Curious Case of Neural Text Degeneration"(核采样 top_p)
- Fan et al., "Hierarchical Neural Story Generation"(top_k 采样)
- OpenAI / Anthropic / Hugging Face API 文档(参数语义)
- Hugging Face Transformers
generation_config文档
评论
评论加载中…