☰
Laya RL Agent 评估指南:In-task / Zero-shot 指标、校准温度与延迟的源码级解读
2026/9/30 22:31:26 网站建设 项目流程
  • 人工智能
  • 机器学习
  • 强化学习
  • NLP
  • 内容安全

【免费下载链接】laya

项目地址:https://ai.gitcode.com/hf_mirrors/convaiinnovations/laya
点击查看免费下载

本文以仓库 eval/results.md 的评估报告为骨架,系统解读 Laya 非自回归决策模型(RL Agent)在In-task(任务族内)与Zero-shot(任务族完全留出)两种评估协议下的精度、校准(ECE / Brier / NLL)与延迟表现,并结合 rl_common.py、rl_agent_api.py 及 rl_agent_config.json 等源码与配置文件,讲清每项指标的计算方式、校准温度的作用与延迟数据的真实含义。读完本文,你将能看懂这份成绩单的每一列、每一行,并能用仓库自带工具在自己数据上复现同样的评估流程。

一、评估总览:一份"校准后"的完整成绩单

eval/results.md记录的是一套**校准后(after calibration)**的评估结果。所谓校准,是指模型原始输出的概率分布经过温度缩放后,让"置信度"与"真实正确率"对齐——这正是 ECE(Expected Calibration Error,期望校准误差)等指标要量化的东西。

评估分两条线:

  • In-task:在训练中出现过的任务族上评测,共 13 个任务族、23,024 个问题(与 eval/results.json 中questions_evaluated.eval_in: 23024一致);
  • Zero-shot:训练时完全留出的任务族(task families held out of training entirely),共 4 个任务族、2,400 个问题(eval_zs: 2400)。

每条评估线都给出四类指标:accuracy(准确率)、ECE(校准误差)、NLL(负对数似然),以及汇总行的Brier 分数与50% 覆盖率下的准确率。指标的具体计算方式在第四节结合源码展开。

二、In-task 评估:13 个任务族的完整指标

eval/results.md的 In-task 部分如下(数值与eval/results.json中by_task_family.eval_in一一对应):

task familyquestionsaccuracyECENLL
conversation outcomes36000.4820.0190.693
email triage26910.7320.0170.595
emotion and tone18250.9060.0180.238
inference and fact checking30220.8830.0540.340
instruction-following tasks6000.8780.0460.302
intent and routing14750.9910.0090.181
moderation and safety27080.9670.0610.153
reading comprehension7700.8470.0830.409
response quality scoring31460.5810.0231.009
robustness checks7440.8510.1081.058
search relevance7330.6280.0660.728
sentiment and rating9610.4420.4383.545
topic classification7490.9390.0290.196

Overall: accuracy 0.753, ECE 0.030, Brier 0.308, accuracy at 50% coverage 0.947

几点值得注意的观察:

  • 强项集中在结构化决策任务:intent and routing(0.991)、moderation and safety(0.967)、topic classification(0.939)、emotion and tone(0.906)表现突出,且 ECE 普遍较低(0.009–0.061),说明这些任务上模型既准又"知道自己有多准"。
  • 弱项对应主观、长尾任务:sentiment and rating(0.442)最弱,且 ECE 高达 0.438、NLL 高达 3.545——意味着该任务上模型的置信度与正确率严重脱节;conversation outcomes(0.482)、response quality scoring(0.581)也明显低于均值。
  • "准"与"校准"不一定同步:robustness checks准确率尚可(0.851),但 ECE 0.108 是全表偏高的几个之一;reading comprehension也有类似情况(ECE 0.083)。这说明对这些任务族,模型高置信区间内混入了相当比例的错误样本,恰恰是需要置信度门控或人工复核的场景。

三、Zero-shot 评估:完全留出的任务族

eval/results.md的 Zero-shot 部分(对应by_task_family.eval_zs):

task familyquestionsaccuracyECENLL
emotion and tone6000.5830.3181.976
instruction-following tasks6000.8630.0450.319
moderation and safety6000.7970.1711.415
sentiment and rating6000.3620.2911.798

Overall: accuracy 0.651, ECE 0.204, Brier 0.532, accuracy at 50% coverage 0.818

Zero-shot 的定位是泛化性探针:这 4 个任务族在训练中完全未出现,因此所有成绩都来自模型对任务形式的先验理解,而不是对训练数据的记忆。对比 In-task:

  • 准确率整体下滑:0.753 → 0.651,其中emotion and tone从 0.906 掉到 0.583,sentiment and rating从 0.442 掉到 0.362;
  • 校准显著恶化:ECE 从 0.030 升到 0.204,Brier 从 0.308 升到 0.532。可靠性图(见上文第二张图)中,零样本曲线的蓝色数据点在低置信度区间明显偏离完美校准对角线——模型在零样本场景下"过度自信"的倾向更明显;
  • instruction-following tasks是例外:0.863 / ECE 0.045,与 In-task 表现(0.878 / 0.046)几乎持平,说明该任务族的泛化能力扎实。

结论很清楚:Laya 在未见过的任务族上保持可用精度,但"概率可信度"需要重新校准后再投入生产。这也呼应了仓库 README 中"先在自己的数据上重拟合温度、再信任概率"的建议。

四、核心指标怎么算:源码级解读

这些指标并非黑盒,全部可以在 rl_common.py 中找到实现:

  • ECE(期望校准误差):按置信度分箱(默认 15 个箱子),对每个箱子计算"平均置信度与箱子内正确率的绝对差"的加权平均,见 rl_common.py#L161-L170 的ece_score。因此"ECE 0.030"意味着:平均而言,模型说出的置信度与真实正确率只差约 3 个百分点。
  • NLL(负对数似然):模型对真实答案给出的对数概率的负值,惩罚"对正确项给低概率"的行为。sentiment and rating的 NLL 3.545 与response quality scoring的 1.009 是全表最高,说明这两个任务上模型经常把概率押错地方。
  • Brier 分数:预测分布与真实分布(one-hot 或软标签)的平方误差之和,同时惩罚"错误"与"过度自信"。
  • 50% 覆盖率下的准确率:按置信度从高到低排序,只回答最自信的前 50% 样本时的准确率。In-task 为0.947、Zero-shot 为0.818,远高于无条件准确率(0.753 / 0.651),这正是"置信度门控"的价值所在。仓库中对应的风险-覆盖曲线实现是aurc(rl_common.py#L203-L209),上述可靠性图右半部分即该曲线的可视化(In-task AURC 0.083、Zero-shot AURC 0.192)。

这套指标与训练目标同源:模型在训练时用**严格真评分规则(strictly proper scoring rules)**作为奖励(log score + spherical score,序数score类问题再加 ranked probability score),实现见 rl_common.py#L138-L157 的proper_reward。因为只有"如实上报概率"才能最大化期望奖励(README 中称之为 RLCD,Reinforcement Learning for Calibrated Decisions),所以校准能力是被训练目标直接"逼"出来的,而不是评估时临时补的。

五、校准温度:results.json 里"被校准"的到底是什么

eval/results.md强调"Metrics after calibration",而校准的具体参数记录在 eval/results.json 与 rl_agent_config.json 中:

"calibration_temperature": [1.6369030475616455, 1.2514300346374512, 1.983399510383606]

这是一个按问题类型(question type)分组的温度向量。在 rl_common.py#L17 中,问题类型被编码为QTYPES = {"choice": 0, "score": 1, "noul": 2},三个温度分别对应 choice(选项选择)、score(序数评分)、noul(是/否二元判断)三类问题。推理时,rl_agent_api.py#L62-L64 将原始 logits 除以对应温度后再做 softmax:

z = logits[r, :k] / self.temperature_by_options.get(temp_bucket(qt, k), self.temperature[qt]) p = np.exp(z - z.max()); p = p / p.sum()

更精细的是temperature_by_options:温度还按选项数量细分(temp_bucket见 rl_common.py#L358-L361),例如:

bucket温度
choice:21.906
choice:3-51.760
choice:6-101.000
choice:11+0.101
score:3-51.251
noul:21.983

温度大于 1 会"压平"分布(抑制过度自信),温度小于 1 则"锐化"分布。choice:11+的 0.101 值得特别注意:当选项很多时模型给出的原始概率过于分散,需要用小于 1 的温度把分布重新收紧。这解释了为什么 rl_agent_config.json 顶层temperature数组与results.json的calibration_temperature完全一致(1.6369 / 1.2514 / 1.9834)——前者就是校准后写回配置的产物。

需要说明的边界:这套温度是在本评估数据集上拟合的(README 亦提示"Ships over-confident",原始 ECE 显著更高)。换到自己的业务数据时,应重新拟合温度再上线。

六、延迟评估:p50 / p95 与批处理

eval/results.md的延迟部分原文如下:

{ "1_questions": { "p50_ms": 38.4, "p95_ms": 42.1 }, "10_questions": { "p50_ms": 156.0, "p95_ms": 158.4 }, "50_questions": { "p50_ms": 721.4, "p95_ms": 733.0 } }

解读要点:

  • 单问题延迟约 38.4 ms(p50)/ 42.1 ms(p95),符合 Laya 非自回归单次前向传播(single forward pass)的设计目标——不逐 token 生成,因此没有解码延迟;
  • 批处理近乎线性且 p95 与 p50 极为接近:10 问 156.0 ms(约 15.6 ms/问)、50 问 721.4 ms(约 14.4 ms/问),且 p95 只比 p50 高 2–12 ms,说明延迟分布非常稳定,适合做服务端 SLO;
  • 这套延迟来自results.json的latency_ms字段,与1_questions的 38.4 ms 也直接对应了 README 中"~33 ms 级单次前向"的量级描述。

若想了解延迟的来源,可以看推理侧的实现:RLAgent.system_one(rl_agent_api.py#L41-L77)把一次调用中的所有问题拼进同一个 batch、做一次前向(collate_items后单次model(...)),这正是 50 问只花 721 ms 的结构性原因。

七、行动策略(act policy):自动化率与升级成本

eval/results.json末尾还记录了行动策略评估结果:

"act_policy": { "eval_in": { "automation_rate": 1.0, "accuracy_when_acting": 0.8032331136738056, "accuracy_when_escalating": null, "accuracy_all": 0.8032331136738056 } }

含义:In-task 评估中,模型在100% 的样本上都选择了"自动执行"(不升级人工),自动执行时的准确率为 0.803。行动头的成本结构定义在 rl_agent_config.json:act_costs.escalate = 0.5(升级一次的成本)、cost_wrong_act = 3.0(错误行动的惩罚),模型在训练中需要权衡"升级成本"与"误判代价"。行动头在 DecisionModel 中实现(act_head),它同时看到池化后的序列表示和自身答案分布的摘要特征(top-1 概率、top-1 与 top-2 差值、归一化熵等),从而学会"什么时候该交给人"。需要留意的是,README 的 Honest Limits 明确指出act_probability目前"几乎恒为 1.0、携带的信号有限",建议以confidence而非act_probability做门控依据。

八、如何在自己数据上复现这套评估

仓库是只读的,但评估链路本身可以完整复现:

  1. 指标函数开箱即用:ece_score、aurc、confidence_from_probs、spearman、auroc等全部实现在 rl_common.py(纯 NumPy 实现、无 sklearn 依赖),可直接对任意 (置信度, 正确标签) 二元组计算;
  2. 推理入口:加载权重后调用RLAgent.system_one(state, questions)(rl_agent_api.py#L41),一次返回所有问题的choice/score/noul答案与概率分布;questions采用 Jev 兼容的请求结构(type/instructions/criteria);
  3. 批量评测:predict_items(rl_common.py#L369-L408)按真实 token 长度排序、在max_tokens与max_seqs约束下分批前向,并打印吞吐(tok/s)与 ETA,适合大规模评测;
  4. 配置对齐:评估时的上下文预算、温度、混合精度等全部来自各模型目录下的rl_agent_config.json(根目录 English 版为max_len 512 / head_max_len 192 / bf16,typed-decisions版为max_len 1024 / head_max_len 256),复现前先核对这份配置;
  5. 可对照的工件:eval/results.json保留了逐任务族、逐指标的原始数值与四舍五入前的精度,可作为你复现结果的对照基准。

九、结论与解读边界

回到eval/results.md这份成绩单,可以提炼出四条结论:

  1. In-task 已高度可用且校准优秀:总体 accuracy 0.753、ECE 仅 0.030,按置信度门控到 50% 覆盖率时准确率升至 0.947,适合直接部署;
  2. Zero-shot 是"能力下限"而非生产配置:0.651 精度、0.204 ECE 说明任务族泛化存在,但概率必须重校准;sentiment and rating(0.362)与conversation outcomes(0.482)无论 In-task 还是 Zero-shot 都是最需要人工复核的弱项;
  3. 校准不是免费的:calibration_temperature(1.637 / 1.251 / 1.983)与temperature_by_options是这份报告的"校准后"属性的来源,务必理解它只对拟合时所在的数据分布有效;
  4. 延迟优势来自架构:38.4 ms(p50,1 问)到 721.4 ms(50 问)的单次前向批处理,是非自回归决策模型相对逐 token 生成方案的先天优势。

最后提醒边界:本文所有数字均以 eval/results.md 与 eval/results.json 的原始记录为准;文中的图来自 eval/reliability_eval_in.png 与 eval/reliability_eval_zs.png(可靠性 + 风险-覆盖曲线,标注 ECE 与 AURC)。指标实现细节可继续阅读 rl_common.py 与 rl_agent_api.py,训练配置见 rl_agent_config.json。

  • 人工智能
  • 机器学习
  • 强化学习
  • NLP
  • 内容安全

【免费下载链接】laya

项目地址:https://ai.gitcode.com/hf_mirrors/convaiinnovations/laya
点击查看免费下载

相关推荐

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

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

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

立即咨询