评测独立性 (Anthropic Demystifying evals 2026-01)
Day 154 的 ADR 拍板了「用独立 κ harness 替换自评闭环」,但那还是文档层的决议。今天在 B16 曲线上把它落到运行:用 src/agent/eval/cohensKappa.ts 真的去跑 V4 标注 vs 人工金标,算出裁判与人标的 Cohen's κ。这是把治理原则(评测独立性)变成可量化数字的一步——也是整套 AML harness 能否被称为「有独立验证证据」的临界点
阶段: B16 · 治理一页纸 + AI 原型 + 可用性(Day 151-160) 标签: #eval-independence #cohens-kappa #judge-calibration #deepseek-v4
今日导引(由浅入深)
Day 154 的 ADR 拍板了「用独立 κ harness 替换自评闭环」,但那还是文档层的决议。今天在 B16 曲线上把它落到运行:用 src/agent/eval/cohensKappa.ts 真的去跑 V4 标注 vs 人工金标,算出裁判与人标的 Cohen's κ。这是把治理原则(评测独立性)变成可量化数字的一步——也是整套 AML harness 能否被称为「有独立验证证据」的临界点。诚实底线先说清:judge-human κ 仍 gated,需 ≥50 手标金标才有统计意义,本日是把工具跑通 + 记录基线,不是宣布达标。今天的最小可判定产出:跑通后产出 κ 数字 + agent-evals/reports/ 新报告(待 key + 手标),现有可引真实数字 V4-Flash 79.3% / V4-Pro 89.7%。
1. 机理精读
自评闭环为什么会系统性高估。 自评闭环 = 同一规则/模型既出预测又当裁判。问题不在「偶尔出错」,而在偏差有方向:裁判与被测共享同样的 prompt 偏好、同样的盲区、同样的失败模式,于是裁判倾向于「认可」被测的输出,分数被一致地往上抬。这违反两条原则:MRM 的「有效挑战」(验证者须独立)+ Anthropic「Demystifying evals」(2026-01) 的评测独立性。修法是把角色拆开:被测(DeepSeek-V4)+ 独立评审(另一模型或人工金标)。
一个直觉化的高估示例。 设某类 SAR 草稿其实漏引了关键交易(应判 fail)。若裁判与被测同源:
- 它们对「什么算关键交易」有同样的盲区 → 裁判也认不出漏引 → 判 pass。
- 该错误不是随机的,每遇同类盲区都同向判 pass → 通过率被系统性抬高。
换成独立人工金标:人能看出漏引 → 判 fail → 暴露真实失败。两者之差就是自评的高估量级——κ 正是用来量化「裁判与人到底差多少」。
为什么用 Cohen's κ 而不是简单准确率。 如果只看「裁判与人标一致的比例」(po),会被偶然一致污染——两个评分者就算瞎猜,在类别不平衡时也可能有很高的 po。Cohen's κ 扣除偶然一致:κ = (po − pe) / (1 − pe),其中 pe 是按各自边际分布计算的「期望偶然一致」。
κ 的解读尺度(Landis & Koch 经验区间):
- κ < 0:比瞎猜还差(系统性反相关)
- 0–0.20:极弱(slight)
- 0.21–0.40:一般(fair)
- 0.41–0.60:中等(moderate)
- 0.61–0.80:可观(substantial)——本仓「裁判可信」下界取 0.6
- 0.81–1.00:近乎完美(almost perfect)
κ 量化的是「裁判超出偶然的真实一致性」——这才是「裁判可信吗」的正确度量;只看 po 会把不平衡数据上的「高一致假象」当成可信。
κ 的阈值与样本量。 行业经验:κ≥0.6 才算裁判「可信」(substantial agreement);κ<0.6 表示裁判不可信,须修 rubric 或人审兜底。但点估计本身不够——小样本的 κ 方差大。所以 2026 趋势是双门槛:κ≥0.6 且 bootstrap 95% CI 下界也站得住。这正是为什么本仓要 N≥50 手标:N 小则 CI 宽,点估计 κ=0.6 也可能 CI 跨到 0.3,不能信。
与 A/B 教训的呼应。 B15 的真实 A/B(V4-Pro vs V4-Flash,N=29,Δ+10.3pp,95% CI[0,20.7])已经吃过「N 不足→不显著」的亏——CI 下界压到 0。同样的统计纪律搬到 κ 上:N=29 不够,κ 的 N 也不能更少。这条纪律是贯穿 B14-B16 的统一底线:任何对比/校准都要看 CI,不看点估计。值得强调的是,A/B 比的是「两模型表现差」,κ 比的是「裁判与人一致度」,二者数学对象不同,但**「小 N → CI 宽 → 结论不可下」**的失效模式完全一致——这也是为什么本批反复用同一把统计尺子。
模型版本纪律。 用 deepseek-v4-pro / deepseek-v4-flash,禁用 legacy deepseek-chat / deepseek-reasoner(2026-07-24 退役)。版本号必须显式,这是 MRM 模型清单的一部分。
资源出处:Anthropic "Demystifying evals"(2026-01);deepseek-v4-pro / deepseek-v4-flash(legacy deepseek-chat/-reasoner 2026-07-24 退役)。
2. 推导 / 手算 / 代码走读
src/agent/eval/cohensKappa.ts 是本日核心工具,逐条走读真实符号 + 行为:
cohensKappa(a, b): KappaPoint——输入两个等长标注数组(裁判 vs 人标),长度不等抛'cohensKappa: rater arrays must be equal length',空数组抛'need >=1 paired observation'。返回{kappa, po, pe}。- po 计算:遍历配对,
a[i]===b[i]即 agree,po = agree/n。 - pe 计算:分别统计两评分者各类别的边际频率
c1/c2,pe += (c1(c)/n)*(c2(c)/n)对每个类别 c 累加——即「按边际独立假设的期望偶然一致」。 - κ 与退化处理:
denom = 1 − pe;若denom===0(两者都只用同一类别,margins 退化)则 κ 约定为po===1 ? 1 : 0;否则κ=(po−pe)/denom。源码注释明确这是 κ 在退化边际下的约定。 cohensKappaWithCI(a, b, {bootstrap, rng})——percentile bootstrap:重采样 N 个配对观测 B 次(默认bootstrap=2000),对每次重采样算 κ,排序后取 2.5/97.5 百分位作ci95。rng可注入(默认Math.random),所以纯 + 确定性可单测。bootstrap 非正整数抛错。percentile(sorted, p)——对升序数组做线性插值百分位;空数组返回 NaN,单元素返回该元素。- 手算最小例(验函数行为,固定值非测量):a=[S,S,N,N,S], b=[S,N,N,N,S],n=5,agree=4 → po=0.8;a 边际 S:3/N:2,b 边际 S:2/N:3 → pe=(3/5)(2/5)+(2/5)(3/5)=0.24+0.24=0.48;κ=(0.8−0.48)/(1−0.48)=0.32/0.52≈0.615。这演示了「即便 po=0.8,扣除偶然后 κ 才 0.62」——正卡在可信下界附近,说明为什么不能只看 po。
KappaResult 的字段语义(落报告用):{kappa, po, pe, n, ci95, bootstrapSamples}——报告里每一项都要写,因为审查人要同时看点估计(kappa)、观测一致(po)、偶然一致(pe)、样本量(n)、置信区间(ci95)。只报 kappa 一个数=隐瞒不确定性。
为什么 N=50 是门槛(用 CI 宽度反推)。 bootstrap CI 宽度大致随 1/√N 收窄:
- N=10:CI 可能宽达 ±0.3,点估计 κ=0.6 时下界跌破 0.3,不可信。
- N=29(A/B 同源教训的样本量):CI 仍偏宽,κ 下界可能压到 0.4 附近。
- N=50:CI 收到可接受范围,κ=0.6 的下界有望站上「moderate→substantial」边界。
这就是 ADR 的 Consequences 写「需 ≥50 手标」的定量理由——不是惯例,是为了让 CI 下界达标。
走读结论:cohensKappa.ts 已存在、纯函数、可单测,工具就绪;缺的只是输入——V4 的标注转录 + ≥50 条人工金标,这两者 key/手标 gated。
3. 今日实战
- 通过 provider-agnostic runner(默认 deepseek)跑
pnpm eval:agent,让 DeepSeek-V4 对评测任务出标注转录。 - 准备 ≥50 条人工金标(手标),与 V4 标注组成等长配对数组。
- 用
src/agent/eval/cohensKappa.ts的cohensKappaWithCI(judgeLabels, humanLabels)算 κ + bootstrap 95% CI。 - 把 κ 数字 + CI 落报告到
agent-evals/reports/;若 κ<0.6 或 CI 下界过低,则记「裁判不可信,须修 rubric / 人审兜底」并回到 Day 154 ADR 复盘。 - 模型 id 显式用
deepseek-v4-pro/deepseek-v4-flash,禁用 legacy id。
跑通后报告应长这样(占位模板,数字 gated)。
judge: deepseek-v4-pro | gold: human (N=??)
kappa = 0.6x po = 0.?? pe = 0.??
n = 50 ci95 = [0.??, 0.??] bootstrap = 2000
verdict = ??? (kappa >= 0.6 ? trustworthy : recalibrate rubric)
报告必须同时呈现 kappa / po / pe / n / ci95,且写明判据(≥0.6 可信,否则修 rubric 或人审兜底)。以上为模板,所有 0.?? 待真实跑出,不臆造。
4. 今日实测 / 产出
- 待跑(需 key + ≥50 手标金标)——
cohensKappa.ts✅ 已存在(纯函数可单测),但 judge-human κ 需 ≥50 hand labels 才有意义;跑通后产出 κ 数字(目标记录基线 e.g. κ=0.6x)+agent-evals/reports新报告文件。 - 现有真实评测数字(可直接引用):V4-Flash 79.3% / V4-Pro 89.7%(judge=pass)。
- 状态诚实:本日不宣布 κ 达标;κ=0.6x 是目标基线占位,非已测结果。手算 κ≈0.615 仅为演示公式,非真实模型一致性。
本日自检清单(可勾对)。
-
cohensKappa.ts单测绿(纯函数,无 key)。 - runner 默认 provider=deepseek,模型 id 用 v4-pro/-flash(非 legacy)。
- V4 标注转录——待
pnpm eval:agent(需 key)。 - ≥50 条人工金标——待手标。
- κ + ci95 报告落
agent-evals/reports/——前两项就绪后产出,本日仍 gated。
5. 常见误区 / 陷阱
- 用
evalBaseline循环自评数字充当「独立验证」——同源自评违反有效挑战,会系统性高估,正是本批要整改的对象。 - 只看准确率 po 不看 κ——偶然一致会把不可信的裁判伪装成「高一致」;必须扣除偶然。
- N<50 就报 κ 点估计——小样本 κ 方差大,必须配 bootstrap CI;A/B 的 N=29 已证明小 N 不显著。
- 用 legacy
deepseek-chat/deepseek-reasoner(2026-07-24 退役)——改用deepseek-v4-pro/-flash,版本号必须显式。 - 用裁判 = 被测同一个模型同一个 prompt——这等于换皮的自评闭环;独立评审要么换模型、要么用人工金标,且 prompt/温度不应与被测耦合。
- 报告只写 kappa 不写 n / ci95 / po / pe——隐瞒不确定性,审查人无法判断该 κ 是否可信。
6. 学习资源(每条带 YYYY-MM)
- Anthropic "Demystifying evals"(2026-01)——评测独立性 + 裁判需人标校准的主线论证。
- Cohen, J., "A Coefficient of Agreement for Nominal Scales"(经典 1960;作为 κ 理论打底,主线用 2026-01 Anthropic)。
- OCC Bulletin 2026-13 "Model Risk Management"(2026-04)——有效挑战/独立验证,本日治理依据。
- DeepSeek-V4 模型卡 / OpenRouter id(deepseek-v4-pro / -flash;legacy deepseek-chat/-reasoner 2026-07-24 退役)。
- 本仓
src/agent/eval/cohensKappa.ts+src/aml/groundTruthEval.ts(2026-06)——κ 工具与外部金标 eval。 - Landis & Koch, κ 解读区间(经典 1977;用于 substantial≥0.6 下界判据,主线统计纪律以 2026 双门槛为准)。
SOTA检查 (2026-06 更新)
- 当前主流方案:Anthropic "Demystifying evals"(2026-01)仍是评测独立性论证主线,current;Cohen's κ + bootstrap CI 双门槛为 2026 裁判校准标准。
- 是否仍 SOTA:是。独立被测 + 独立评审 + κ 校准是当前 LLM-judge 可信度的公认范式;2026 增量趋势是 κ + bootstrap CI 双门槛,以及对裁判 prompt 做去耦审计(避免裁判暗中复用被测的推理)。
- 过时黑名单(AVOID):① 用 evalBaseline 循环自评数字充当「独立验证」;② legacy
deepseek-chat/deepseek-reasonerids(2026-07-24 退役),改用deepseek-v4-pro/-flash;③ 只报 κ 点估计不报 CI。 - 下次复查点:跑出真实 κ 后(需 key + ≥50 手标)复盘是否达 0.6 下界;复查 DeepSeek 模型 id 是否再有退役/更名;2026-07-24 legacy id 退役日核对迁移完成。
衔接
- 昨天:Day 154 — 一页纸治理设计(三框收敛 + ADR 决议「用独立 κ harness 替换 evalBaseline 自评」)。
- 今天:把 ADR 落到运行——用
cohensKappa.ts跑 V4 标注 vs 人工金标算 κ(待 key + ≥50 手标),现有真值 V4-Flash 79.3% / V4-Pro 89.7%。 - 明天:Day 156 — 原型工具与可用性测试法(NN/g think-aloud 5 人法),把 harness 面板生成真交互原型,治理转向产品可用性。