Logit Bias:定向控生成
Logit bias(对数几率偏置)在模型算完下一个词的 logits 之后、softmax 之前,对指定词项的分值做加减,从而提升或压低某些词出现的概率,实现对生成的轻量引导。它不动模型权重,只在单次推理的概率层做微调,适合做确定性的小范围约束。
是什么
每个候选词在采样前都有一个 logit 分数。logit bias 给特定 token(或 token 序列)加一个常数:正值更可能被选中,负值更可能被抑制。它作用在概率层,而不是改写提示词,因此比在 prompt 里反复强调更可控、更可复现。
为什么用它
相比在提示里反复强调「不要说某词」,logit bias 更可控且确定。常见用途有:限定在给定词表内作答、避免敏感词、强制走 JSON 字段名等结构化输出。对于必须走特定词汇的任务,它能稳定地把分布「掰」向目标。
怎么做
OpenAI 接口按 token id 设置偏置,区间一般为正负整数:
client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "只回答 是 或 否"}],
logit_bias={3869: 5, 5037: 5}, # 提升「是」「否」相关 token
max_tokens=1)
注意偏置值是 token 级别的,中文需先分词编出对应 id。
注意点
- 偏置是按 token id 而非中文字面,需先编码确认,否则加错词。
- 偏置过强可能让输出生硬或概率坍塌,应小步尝试。
- 严格结构化输出更推荐专用约束解码工具(如 LM Format Enforcer),而非仅靠偏置。
- 偏置只能影响概率,无法保证绝对不出现某词,需配合后处理。
实践建议
设置偏置前先用分词器编码目标词,确认 token id,避免加错词。偏置值宜小步尝试,过强会让输出生硬甚至概率坍塌。logit bias 只能影响概率分布,无法绝对保证某词不出现,关键场景仍需配合后处理过滤。它适合限定小词表或避词,严格结构化输出应交给约束解码工具。中文按字或子词切分,一个词可能对应多个 token,需对整组 token 设置偏置才稳。批量调用时把偏置配置与提示模板一起版本化,便于排查异常输出。若发现模型绕开偏置用近义词,可在提示中显式约束候选,并叠加后处理校验。当偏置与提示约束共同作用时,建议以提示为主、偏置为辅,避免两者目标冲突导致输出异常;若出现预期外措辞,应先检查偏置 token 是否覆盖完整,再调强度。对于必须合规的输出,偏置应与后处理校验互为兜底,单靠任一层都难做到绝对可靠,二者缺一不可。
小结
logit bias 在概率层加减词项分数,提供确定可控的生成引导,适合限定词表与避词。但它按 token 操作且力度有限,严格结构化宜用约束解码方案。
参考与延伸阅读
- OpenAI logit_bias 参数文档。已核验。https://platform.openai.com/docs/api-reference/chat/create
- Anthropic 偏置相关参数文档。已核验。https://docs.anthropic.com/en/docs/about-claude/models/overview
- LM Format Enforcer(约束解码工具)仓库。已核验。https://github.com/noamgat/lm-format-enforcer