先记住这个答案
模型在预测下一个 token 时,输出层会为词表中每一项产生一个实数,即 logits。选取 softmax 后所有 token 的概率总和为 1,拥有最高概率的 token 即为模型的预测。logprob 是该概率的自然对数,通常为负,越接近 0 表示对应概率越高。我们可以把 logprob 当作模型内在的确定性指标,但它是模型内部对 token 的相对偏好,并不具备事实真理性,高 logprob 也可能对应错误回答。
- logits 是未归一化词表得分,经 softmax 变概率
- logprob 越接近 0 表示概率越高,但只是分布置信
- 不同模型与温度下 logprobs 不可直接比较
从 logits 到词表概率分布
大语言模型预测下一个 token 时,输出层产生一个长度为词表大小的实数向量,即 logits。每个元素对应一个 token 的得分,例 5.2、-1.7,数值越大模型越倾向选它,但数值本身没有概率范围。
用 softmax 把 logits 转为概率 p_i = exp(z_i)/Σ_j exp(z_j),概率总和为 1。取自然对数得到 logprob,通常为负值;比如概率 0.5 对应约 -0.693,越接近 0 说明该 token 胜出越明显。
用首 token logprob 做人工触发
假设在抽取城市名的 API 场景中,我们限制模型只输出一个 token,并观察几个候选的 logprob。对于正确答案“巴黎”,模型可能给出 logprob 为 -0.33(对应概率约 0.72);对于错误答案“东京”,logprob 可能低至 -3.5。如果我们设阈值为 -0.5,低于 -0.5 的输出就会被转人工处理,这样可以拦截一部分低置信度的错误输出,但实际拦截比例取决于具体数据分布,此处仅作为演示。
理由是 logprob 直接反映此刻模型对替代 token 的优势。但只检查第一个 token 会漏掉句子后半的偏差,如“巴黎是法国的农业区”首 token 很高但事实有误。所以单点 logprob 只能做弱信号,应结合整句累加或约束解码。
logprobs 可靠性的丧失点
当输出由多个 token 组成时,每个 token 的 logprob 相乘会得到极小的联合概率,不能直接比较不同长度句子。模型常用长度归一化平均,但同一概念由不同 token 拼写会让概率分散,例如“法国首都”与“巴黎”可能等价但 token 不同,导致低 logprob 误判。
更深层的问题是 logprob 不对齐真实性。提问“我的手机落哪了?”模型可能给常见但没帮助的答复,logprob 偏高却无事实依据;而给出正确事实时也可能因分布平均而偏低。因此 logprob 永远只能辅助,不可作为真理信号,关键任务仍需外部校验。
容易答错的地方
- 把 logprob 高当成答案对
- logprob 反映模型内部选择的确定性,但模型完全可以对编造内容给出高 logprob。比如问不存在的历史人物,模型会流畅编造,每个 token 概率都不低。因此 logprob 高不等于事实正确,需要外部知识校验。
- 低 logprob 一定是不好
- 同义词或多 token 表达会摊薄概率,比如“篮球”在不同语言中是不同 token,正确项可能只有 0.2 概率但仍是第一。此时 logprob 低不代表错。应看 top-5 的相对间隙,而非单个绝对数值。
面试官还会怎么问?
API 返回的 logprobs 具体指什么?
API 通常在生成时返回每个输出 token 的自然对数概率,它基于当前上下文和采样参数(如 temperature)计算。不同 temperature 下同一词的 logprob 会变化,因此比较时必须保持设置一致。
logprob 与 calibration(校准)是一回事吗?
不是。logprob 是模型对某个 token 的分布确定性,而校准指这个概率与真实正确率是否一致。大模型常过度自信,可能给错误回答打出 0.9 的概率。校准需要统计多次结果,单点 logprob 无法判断。
怎么用 logprobs 优化多步推理?
可将整条生成路径的对数概率相加作为分数,对多次采样的结果重排。但必须做长度归一化,且 logprob 只反映模型偏好,不直接代表推理逻辑,要与规则或逻辑校验结合使用。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。