解码策略与输出控制

解码策略与输出控制

💡 原文英文,约3300词,阅读约需12分钟。
📝

内容提要

本文介绍语言模型解码策略与输出控制。解码算法将模型logits转为文本,影响生成质量。主要方法包括:贪心解码(确定性但可能单调)、温度采样(控制随机性)、Top-k与核采样(过滤低概率词)、重复惩罚(减少重复)、束搜索(多候选但成本高)、停止条件及结构化输出约束(如JSON)。选择合适策略需平衡质量与性能。

🔎

延伸解读

解码策略的选择取决于任务类型

文章指出,贪心解码虽然稳定但可能枯燥,而采样能增加多样性但可能引入错误。因此,解码策略的选择应基于具体任务:事实提取类任务适合低温度或贪心解码,而创意写作或头脑风暴则适合较高温度。束搜索在开放式对话中通常不是最佳选择,但在有明确序列级目标的场景(如翻译)中可能有用。

温度与Top-p的配合使用

文章中的示例函数将温度缩放、Top-k过滤和Top-p过滤结合使用,并强调顺序很重要。温度控制分布的锐度,Top-k固定候选数量,而Top-p自适应地保留累积概率达到p的最小token集合。这种组合可以更灵活地控制生成质量,但需要根据模型和任务调整参数。

重复惩罚的适用边界

重复惩罚能减少重复,但可能损害需要重复的文本,如代码、名称、引用和结构化格式。文章建议仅在重复成为实际问题时使用,并指出生产实现通常区分频率惩罚和存在惩罚。此外,惩罚应先生效于Top-k或核采样之前。

结构化输出约束的代价

约束解码(如强制生成JSON)能提高可靠性,但会减慢推理速度,因为每一步都需要计算和应用token掩码。文章示例仅处理单token标签,多token标签需要更复杂的约束。因此,在采用结构化输出时,需要权衡质量与性能。

Q&A

什么是语言模型的解码策略?

解码策略是将语言模型输出的logits转换为实际文本的算法。它决定了每一步选择哪个token,从而影响生成文本的质量、多样性和一致性。

贪心解码和温度采样有什么区别?

贪心解码总是选择概率最高的token,输出确定但可能单调重复;温度采样通过温度参数调整概率分布的尖锐程度,温度低时接近贪心,温度高时增加随机性,使输出更多样。

Top-k采样和核采样(Top-p)有什么不同?

Top-k采样固定保留概率最高的k个token,而核采样(Top-p)保留累积概率达到p的最小token集合。核采样是自适应的,在模型自信时保留较少token,分布平坦时保留较多,更灵活。

重复惩罚是如何工作的?

重复惩罚通过降低已出现token的分数来减少重复。简单实现中,正logits除以惩罚值,负logits乘以惩罚值。但需注意,某些场景(如代码、引用)需要重复,惩罚可能有害。

束搜索适合用于聊天生成吗?

束搜索通常不适合聊天生成,因为它倾向于高概率的通用文本,导致输出平淡。它更适合有明确序列级目标的任务,如机器翻译。此外,束搜索计算成本高,内存占用大。

如何让语言模型输出JSON格式?

可以通过结构化输出约束实现,例如在解码时屏蔽无效token,只允许符合JSON语法的token。更高级的方法使用语法、trie或有限状态机来约束每一步的token选择。

停止条件有哪些?

常见的停止条件包括:达到最大生成token数、生成结束符(EOS token)、或遇到自定义的停止标记。实现时需注意批处理中不同序列可能在不同时间停止。

🏷️

标签

➡️

继续阅读