☰
Intern-Decision-0.8B 响应字段详解:如何正确读取 probabilities、confidence 与 score(完整指南)
2026/10/20 15:26:52 网站建设 项目流程

【免费下载链接】Intern-Decision-0.8B

项目地址:https://ai.gitcode.com/InternLM/Intern-Decision-0.8B
点击查看免费下载

快速上手:一次推理得到什么?

Intern-Decision-0.8B 是一个多模态结构化决策模型:你传入一段共享状态(state)、一组带选项的问题(questions)以及可选图片,它在一次前向推理中为每个问题返回完整的答案分布。调用入口只有两步:

from inference import DecisionEngine engine = DecisionEngine(device="cuda") # 只加载一次,重复使用 response = engine.predict(request) # 输入一个请求字典,返回一个响应字典

predict返回的响应遵循 Jev 信封结构,共 5 个顶层键:model、answers、usage,以及三个扩展字段backend、timing、calibration。新手最常出错的地方就在于:把所有字段的"最终答案"都当成同一个字段去读。实际上,每个问题的answers条目里,probabilities、confidence、score三者含义完全不同,读错字段会导致业务逻辑偏差。

下面逐个拆解,帮你建立正确的读取姿势。

probabilities:每个选项的校准后概率分布

probabilities是该字段下所有候选选项的概率分布,键为选项原始值,值为校准后的概率,总和恒为 1。它不是"最终答案",而是模型对每个选项的完整态度,是所有其他字段(confidence、decision、score)的计算源头。

以客服工单场景为例,请求里定义了三个问题,响应节选如下:

{ "team": { "type": "choice", "probabilities": { "billing": 0.92, "delivery": 0.08 }, "confidence": 0.92, "decision": "billing", "choice": "billing", "source": "local" }, "urgency": { "type": "score", "probabilities": { "0": 0.05, "1": 0.62, "2": 0.33 }, "confidence": 0.62, "score": 1.33, "legend": { "0": "Low", "1": "Medium", "2": "High" }, "source": "local" } }

三个要点:

  • 键是选项原始值,不是符号。内部推理时选项会被映射为单 token 符号A~Z、a~z、0~9(见 inference.py),但响应已经映射回你传入的原始值,直接按业务值读取即可。
  • 概率总和恒为 1,且只分布在该问题自己的候选项上,不会跨字段。
  • 分布是经过校准的:默认温度2.747760550703是在 1,728 个校准案例上通过最小化 NLL 拟合出来的(详见 README.md 的 Calibration 一节),因此概率可以直接用于阈值判断与风险评估,而不只是相对排序。

confidence:最高候选概率,注意它的"归属"

confidence的定义很简单:该字段所有候选项中最大的那个概率,代码实现就是取 argmax 后的概率值(inference.py):

answer = {'type': kind, 'probabilities': probs, 'confidence': probs[best]}

但新手最容易踩的坑在score 类型上:confidence属于"最可能的那个类别",而报告的期望score数值可能落在类别之间。比如上面urgency的score是 1.33,但confidence是 0.62(属于Medium这一类),并不是"1.33 有多大把握"。

使用场景推荐字段
判断模型"拿不拿得准"、是否转人工confidence
获取最终选中的选项decision(或 choice 类型的choice)
需要连续数值做排序/打分score
二分类是/否的概率noul(yes的概率)
完整分布、自定义聚合probabilities

一个实用技巧:把confidence < 0.5的请求标记为"低置信,需人工复核",这是该模型输出的天然置信度信号。

score:概率加权的期望值,不是"最可能的类别"

score字段只出现在score类型的问题上,它是概率加权的期望数值:

score = Σ(选项数值 × 该选项概率)

继续上面的例子:0×0.05 + 1×0.62 + 2×0.33 ≈ 1.33。这正体现了它与confidence的区别——confidence回答"最信哪个类别",score回答"期望落在什么数值"。

配套字段legend给出了分数值到描述的映射(如上例的{"0": "Low", "1": "Medium", "2": "High"}),方便你在展示层把1.33翻译成"偏 High 的 Medium"。

另外提醒:当criteria用列表传入时,选项值自动成为"0","1", …(inference.py);用对象传入时,键必须是有限数值。score是浮点数,可直接参与比较运算。

decision、choice 与 noul:三个"最终答案"字段

除了三个核心字段,响应里还有三个"答案类"字段,按类型各取所需:

  • decision:所有字段都有。概率最高的选项值;并列时按字典序打破平局(lexicographic tie-breaking),见 inference.py 的argmax实现。
  • choice:仅choice类型。选中的选项值,实际上就是decision的别名。
  • noul:仅noul类型(二元判断)。yes的概率值,介于 0~1 之间,可直接当"肯定倾向强度"使用。

calibration 温度:为什么概率"变陡"了?

响应里的calibration扩展字段记录了校准方式与温度值。Intern-Decision-0.8B 的校准数值序列是(README.md Calibration 一节):

p = softmax(candidate_logits) calibrated_p = softmax(log(p) / T)

这里要特别澄清一个误区:它不是采样温度,而是候选概率校准。它会使分布更"平"一些,更新confidence、noul概率与期望score,但不改变 argmax 决策(inference.py 中甚至有断言防止浮点误差改变 argmax)。如果你需要未校准的原始候选概率,可以用DecisionEngine(temperature=1)加载。

最小运行示例与响应全貌

完整可运行示例(README.md Quick start 一节,依赖见 requirements.txt,需 Python 3.12+):

from inference import DecisionEngine engine = DecisionEngine(device="cuda") request = { "state": "The customer was charged twice and asks for the extra payment back.", "questions": { "team": { "type": "choice", "instructions": "Which team should handle this request?", "criteria": { "billing": "Payments and refunds", "delivery": "Shipping and delivery", }, }, "urgency": { "type": "score", "instructions": "Rate the priority.", "criteria": ["Low", "Medium", "High"], }, "refund_requested": { "type": "noul", "instructions": "Is the customer asking for a refund?", }, }, } response = engine.predict(request) print(response["answers"])

响应顶层结构一览:

顶层键含义
model实际加载的权重标识(Intern-Decision-0.8B)
answers每个问题字段一个条目,含本文详解的各字段
usageinput_tokens、output_tokens、decision_count
backend推理后端,当前固定hf
timing端到端inference_ms
calibration校准方法与温度值

注意一个容易误读的点:usage.output_tokens和usage.decision_count统计的是被打分的问题字段数,而不是生成的文本 token 数——因为该模型不做自由文本生成,只执行一次结构化前向打分。

常见误区清单 🧭

  1. 把score当成"最可能的类别"——它是概率加权的期望值,类别归属请看probabilities或decision。
  2. 把confidence当成对score数值的置信度——它属于最可能的那个类别(score 类型尤其要注意)。
  3. 用choice去读 score/noul 问题——choice只出现在choice类型;通用答案请读decision。
  4. 把概率当采样结果——probabilities是校准后的完整分布,模型并不调用generate()或采样自由文本。
  5. 用output_tokens估算生成量——它计的是打分字段数。

延伸阅读

  • 推理核心与校准逻辑:inference.py,其中DecisionEngine类在 inference.py
  • 响应字段官方说明表:README.md Response format 一节
  • 对话模板(<decision>占位符渲染):chat_template.jinja
  • 模型配置(Qwen3.5 架构、多模态 tokenizer):config.json、added_tokens.json

掌握probabilities(分布)、confidence(最大概率)、score(期望值)三者的分工后,你就能按业务需要灵活地取用 Intern-Decision-0.8B 的输出,既拿最终决策,也拿可信度信号。

【免费下载链接】Intern-Decision-0.8B

项目地址:https://ai.gitcode.com/InternLM/Intern-Decision-0.8B
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询