任务合同、数据切片与分类指标
评估之前先定义错误。客服分类看标签,抽取看字段,问答看证据,Agent看目标与副作用;“回复看起来不错”无法指导回归。基线可以是规则、旧模型、人工或直接API,不必从复杂Agent开始。
分类指标为什么不能只看accuracy
完整标准库实验,positive代表需要人工处理。
python
truth=[True,False,False,False]
pred=[False,False,False,False]
def metrics(y,p):
if len(y)!=len(p) or not y:raise ValueError("unpaired or empty")
tp=sum(a and b for a,b in zip(y,p))
fp=sum(not a and b for a,b in zip(y,p))
fn=sum(a and not b for a,b in zip(y,p))
precision=tp/(tp+fp) if tp+fp else 0.0
recall=tp/(tp+fn) if tp+fn else 0.0
return {"accuracy":sum(a==b for a,b in zip(y,p))/len(y),
"precision":precision,"recall":recall,
"f1":2*precision*recall/(precision+recall) if precision+recall else 0.0}
r=metrics(truth,pred)
assert r["accuracy"] == .75 and r["recall"] == 0
print(r)全部预测“不需人工”得到75%准确率,却漏掉唯一高风险请求。precision问报出的正例有多少是真的,recall问真实正例找回多少;零分母按本题约定返回0,报告需说明定义。多类别macro先逐类计算再平均,micro先汇总计数,大类可能主导micro。
数据集如何避免误导
每条样本保存ID、输入、期望、证据、任务切片、敏感级别与版本。真实请求、人工边界、合成和红队来源分开标记;空输入、冲突、歧义、长上下文、无答案与撤权不能被正常样本淹没。标注指南规定正确、部分、拒答和错误的边界,两人独立标注后仲裁分歧。
训练、prompt调试与最终评估集分开,近重复也会泄漏;频繁看同一隐藏集再修改prompt会把它变成开发集。按用户、来源或时间分割比随机拆相邻重复段落更可靠。固定模型、prompt、工具、索引和评估器版本,保存原输出供误差分析。
抽取除了字段类型还比较缺失、额外字段与单位;校准检查置信度是否匹配真实正确率,模型说90%不能直接当概率。生成任务需要rubric,不能用字符串完全相等惩罚正确改写。
练习
预测改为[True,True,False,False],precision应0.5、recall为1、F1为2/3;再验证长度不等会失败。