Download docs/CALIBRATION.md from roudone/PabJev-4b: direct link, hf CLI and curl.
- Browser
- Download file 5.13 kB
-
https://huggingface.co/roudone/PabJev-4b/resolve/main/docs/CALIBRATION.md
- Command line
-
hf download hf://roudone/PabJev-4b/docs/CALIBRATION.md
-
curl -L -o CALIBRATION.md https://huggingface.co/roudone/PabJev-4b/resolve/main/docs/CALIBRATION.md
温度校准与概率校准结果
1. 最终部署结论
本发布模型是 short150 best(step 150)。独立温度校准流程已经完成真实 logits 收集、global/per-type 拟合、select 选择和 test 验收。
最终选择是 raw T=1.0,线上不应用拟合温度。 model_manifest.json、checkpoint_state.json 和服务端均保持 temperature=1;client.py 直接执行 softmax(logits)。
温度公式为 p = softmax(logits / T)。如果只修改 manifest 而不修改 softmax 前的计算,不会产生校准效果。本包刻意拒绝非 1 温度,以固定已验证的发布契约。
2. 拟合得到但未采用的候选
| 范围 | 候选温度 T | 是否部署 |
|---|---|---|
| global | 1.27782223 | 否 |
| choice | 1.43393793 | 否 |
| noul | 1.27202315 | 否 |
| score | 0.99092258 | 否 |
| 最终 raw(global 与所有题型) | 1.0 | 是 |
校准数据共 29,875 条问题,invalid=0;fit/select/test 分别为 17,842 / 6,068 / 5,965。OpenJev 与 stage-2 在 fit/select 中各使用 0.5 domain-macro 权重,避免大 domain 支配结果。测试集只用于最终验收,没有根据 test 重新调温。
3. select:为什么保留 raw
| 方案 | Accuracy ↑ | NLL ↓ | Brier ↓ | ECE ↓ | Calibration ↑ |
|---|---|---|---|---|---|
| raw T=1(最终) | 0.928301 | 0.225644 | 0.105183 | 0.023519 | 95.4508 |
| global T=1.277822 | 0.928301 | 0.217776 | 0.106195 | 0.026693 | 95.0431 |
| per-type | 0.928301 | 0.215359 | 0.106267 | 0.027746 | 94.9723 |
选择规则要求 global 相对 raw 的 NLL、Brier、Calibration score 均不退化;per-type 还需要相对 global 有明确收益。候选温度虽然改善了混合 NLL,但 Brier 与 Calibration 退化,因此未通过门槛。温度缩放不改变 argmax,所以三种方案的 Accuracy 相同。
Domain 条件性
- OpenJev select 上,global 温度改善了 NLL、Brier、ECE 和 Calibration。
- stage-2 select 上,同一个 global 温度使这四项全部退化。
- 真实服务请求没有可靠的 domain 路由标签,因此不能把 OpenJev-only 的收益直接推广到混合流量,也不能据此声称所有数据域都永远不需要校准。
4. 最终 test(raw T=1)
| Accuracy | NLL | Brier | ECE | Calibration | Score MAE | Score within-1 |
|---|---|---|---|---|---|---|
| 0.928121 | 0.187029 | 0.090812 | 0.017322 | 96.1804 | 0.084364 | 0.996835 |
这些数字来自独立温度校准数据集,不是下节的 231 条 JevBench 服务结果,不能直接混排比较。
机器可读证据:
reference_results/temperature_calibration.json:候选、选择原因、select/test 汇总;reference_results/temperature_report.json:完整校准报告;reference_results/calibration_data_manifest.json:原数据划分和哈希追溯。
calibration_data_manifest_sha256 是路径清理前的原始来源 manifest 哈希;发布副本因内部路径脱敏而有不同哈希,其值另记为 published_calibration_data_manifest_sha256,并纳入根目录 SHA256SUMS。
原始 29,875 条校准记录及真实 logits cache 不随模型发布;本包保留聚合结果,不提供一键重拟合入口。evaluate.py 在新数据上计算的也是当前 T=1 模型的指标,不会自动拟合新温度。
5. JevBench 服务 Calibration(T=1)
在单张 A800、vLLM 0.30.0、BF16 backbone、FP32 pointer head、并发 1 下,231/231 条概率有效:
| 指标 | 数值 |
|---|---|
| Calibration score(0–100,越高越好) | 90.7539 |
| 10-bin ECE(越低越好) | 0.071062 |
| 平均 gold-distribution fidelity(越高越好) | 0.886139 |
| public raw / pseudo-sealed raw | 90.3684 / 91.1564 |
| 无效概率 / 超时 | 0 / 0 |
计算口径:
- ECE 使用 10 个置信度桶,桶内使用真实平均 confidence 和真实 accuracy,不用桶中心代替;
- fidelity 为
mean(1 - JS(gold || predicted) / ln 2); - Calibration 为
100 × [0.5 × (1-ECE) + 0.5 × mean_fidelity]; - 无有效概率的样本不会被剔除,fidelity 记 0;只有标签、全都没有有效概率时 Calibration 为 0。
Reliability bins
| confidence 区间 | n | 平均置信度 | 实际准确率 | accuracy - confidence |
|---|---|---|---|---|
| [0.3, 0.4) | 2 | 0.379246 | 0.000000 | -0.379246 |
| [0.4, 0.5) | 4 | 0.456742 | 0.500000 | +0.043258 |
| [0.5, 0.6) | 8 | 0.543263 | 0.750000 | +0.206737 |
| [0.6, 0.7) | 8 | 0.637047 | 0.500000 | -0.137047 |
| [0.7, 0.8) | 13 | 0.752515 | 0.846154 | +0.093639 |
| [0.8, 0.9) | 11 | 0.852498 | 0.545455 | -0.307044 |
| [0.9, 1.0] | 185 | 0.989939 | 0.945946 | -0.043993 |
并发 4 的连续批处理会改变部分 BF16 数值:参考运行中一道边界题翻转,Calibration=91.0260、ECE=0.065394。严格精度回归应使用并发 1,并发 4 主要用于吞吐测试,不能通过事后调温掩盖批组成差异。
完整逐题概率和 reliability bins 见 reference_results/short150_c1.json;第二次并发 1 运行与其完整概率逐项 max_abs=0.0。