解码策略的取舍
贪心与采样都是逐词元决策、单路径推进;束搜索同时维护多条候选路径,质量可能更稳,但计算量按束宽成倍放大。生成类任务多用采样,只有需要精挑候选的场景才考虑束搜索。
基本信息
| 适用平台 | 支持多种解码策略的推理框架 |
|---|---|
| 策略类型 | 贪心、采样、束搜索 |
| 计算代价 | 束搜索按束宽成倍放大 |
| 适用任务 | 开放式生成多用采样,精挑候选才用束搜索 |
Hugging Face generate 示例
Hugging Face generate 示例
# 贪心(do_sample=False)
out = model.generate(**inputs, do_sample=False)
# 束搜索
out = model.generate(**inputs, num_beams=4, do_sample=False, early_stopping=True)典型使用场景
- 确定性输出:贪心或低温度采样用于需要稳定结果的场景
- 多样性输出:提高温度或使用采样,适合创意类任务
- 候选精挑:需要多条候选比较时用束搜索
- 在线服务:高吞吐引擎普遍收敛到采样路径
- 问题复现:固定随机种子后再复跑,结果才可比
策略与代价
| 策略 | 输出特点 | 代价 |
|---|---|---|
| 贪心 | 确定性强、容易重复 | 计算最低 |
| 采样 | 多样性好、结果随机 | 要固定随机种子才能复现 |
| 束搜索 | 候选质量相对稳 | 计算量按束宽放大 |
高吞吐服务引擎逐步收敛到采样与受约束解码路径:束搜索的支持情况以所用版本文档为准。
复现问题要固定随机种子:采样类输出不固定种子时,同一个请求两次结果不同,问题很难复现。
温度与束搜索不建议叠加:参数组合的语义在不同实现里差异较大,混用容易得到意外结果。
束搜索在长输出上的代价放大明显:候选路径越长,维持多路径的成本越高。
线上调参要小步走:温度与惩罚项的组合影响很大,一次只改一项才好归因。
判断差异要靠批量评测:单条样例的好坏受随机性影响很大,结论要落在统计结果上。