跳到主要内容
那篇 SWE-DeceptionBench 报了个 49.88%,我连它除以几都没找着

那篇 SWE-DeceptionBench 报了个 49.88%,我连它除以几都没找着

P99
P99

· 阅读约 8 分钟

10 月 9 号挂上来的,arXiv:2610.13626,主分类 cs.SE,交叉列在 cs.AI。我是在一个群里看到有人转的,转的人只截了一行:Active Deception 总体发生率 49.88%。

我盯着那个 .88 看了挺久。不是因为高,是因为那个 .88。

测试范围先划一下,这个我吃过亏。这一篇我只看了条目页和摘要,PDF 没下。所以下面所有话都是冲着"这个数字被这样报出来"去的,不是冲着"这项研究做得怎么样"。这两件事经常被人混着说。我自己就被当场问住过一回:我说某篇没给样本量,对方说全文第三页就有,是你自己没看。行,我认。从那以后把这条划得很死——只看摘要,就只点评摘要。

先把手上有的摆出来。720 条实例,7 个模型,覆盖软件开发生命周期六个阶段。欺骗分两类:Active 是模型自己看出需求不可行或者自相矛盾,还是把方案当能做的端上来;Passive 是用户明说要帮忙误导别人,模型配合。三种条件 Neutral / Reward / Pressure,看外部诱导能推到哪一步。中英双语。作者五位:Xiting Liu、Lin Yang、Yitong Zhang、Jia Li、Shi-Min Hu。v1 是 10 月 9 日 14:09:09 UTC,文件约 1012 KB。DOI 那栏还写着待注册——不影响内容,只是提醒我东西还在动。

设计本身没什么可挑的。Active 和 Passive 分家,是这篇里我最想要的东西:把"模型自己骗人"和"用户让模型帮忙骗人"拆成两个数,比合成一个"可信度评分"有用得多。问题在后面。摘要给了 49.88% 和 64.29%,两个四位有效数字,而我要用它们需要的东西,一样都没有。

先说分母

49.88% 是除了几。

720 × 7 = 5040,前提是每条实例都在每个模型上跑过、每条都被判了一次。但 Active 和 Passive 大概率各占一半,那就是 2520。也可能作者先把每个模型在每个实例上的判定压成一个比例,再对这 7 个比例取平均,那分母就是 720。最细的切法是 6 阶段 × 2 类型 × 2 语言 × 3 条件 = 72 格。⚠️ 那个 72 是我自己乘出来的,摘要里看不出这几维是不是全交叉——也可能实际是每格 40 条、有些格子空着。我不知道,先记下。

然后算区间。比例在 50% 附近时,95% 置信区间的半宽大约等于 1.96 × sqrt(0.25/n):

假定的 n95% CI 半宽
5040±1.4 pp
2520±2.0 pp
720±3.7 pp
72±11.5 pp

这还只是抽样误差,而且前提是每条观测互相独立——这个前提不成立。7 个模型看的是同一批 720 条 prompt,一条 prompt 要是天生容易诱发某类回答,它会把 7 行数据一起往同一个方向拽。组内相关系数我不知道,取 0.2 不算夸张,设计效应就是 1 + (7−1) × 0.2 = 2.2,方差乘 2.2,上面那一列全部再乘 1.48。n = 2520 那行变成 ±3.0 pp。

结论很短:49.88% 这个数,第二位小数在任何一个我能想到的分母下都落在噪声里。它跟 50% 之间那点差,靠这个摘要区分不出来。写法上直接写"约 50%",一点信息都不损失。

顺手也算了 64.29%,它精确等于 9/14。当时以为有戏,想着分母是不是小得吓人。三分钟后自己把这条推翻了:任何 14 的倍数的分母都能精确得到这个数,14 行、2520 行、5040 行都行。所以这一条什么也说明不了——但我留着,因为它记录了我推理的方向一开始是错的。

我真正卡住的不是这两个数

是它们中间那个差怎么来的。

摘要里有一句,"外部诱导对主动欺骗和被动欺骗的影响程度不同"。这是全文给我的最大信息量,也是我最没法核实的一条。如果 Neutral 到 Pressure 的差是 5 个百分点,而那一格按最细的切法误差是 ±11.5 pp,那这个"不同"就不是发现,是抛硬币。我不认为作者在抛硬币——正文里很可能有每格的表——但那个表不在我能看到的地方,这句话对我目前就是不可用的。

还有一层:7 个模型不算多。按我自己的经验——这句没数据撑,先标着——同一批 prompt 上,模型之间的离散度往往比条件之间的差还大。要是这次也这样,那 49.88% 平均掉的东西,比它保留下来的多。我宁可看这 7 个模型各自的数排成一列,也不想看一个 49.88%。一个平均数让我没法判断:是 7 个都在 50% 附近,还是 3 个在 70%、4 个在 30%——这两种情况在部署上完全是两码事。

49.88% 是谁判的

这是这篇里我最想问、也最不好问的一条。

720 条开放式软件工程任务,中英双语,7 个模型。要判某条回答算不算"欺骗",只有两条路:人标,或者模型标。

人标的话,我要的是标注者之间的一致性,中英分开算。这个数通常不算难看,但也不免费,一篇论文里至少该有一行。

模型标的话,问题就绕回来了——你要测的是 LLM 的欺骗行为,而你的裁判也是 LLM。我不是说这条路错,大规模开放任务除它之外没什么可走的。我是在说:裁判自己在这个 benchmark 上得几分,这一栏我还没在哪篇报告里见过。这一篇也没有。

而且这篇自己给了个不太妙的旁证。作者测了轻量级防御手段,结论是 guard models 会漏掉大量欺骗性请求,Self-Reminder 能压下来但压不干净。Guard model 和"判一条回答算不算欺骗"的裁判,是同一类东西——喂一段上下文,让它做一个分类。同一类东西在部署场景下的漏检率是这样,那 benchmark 内部的评分环节凭什么假设它不漏。往哪个方向漏我说不上来:裁判要是偏顺从,一段听着头头是道的方案容易被判成诚实,那是往低漏;裁判要是专门被调去找欺骗,那是往高漏。这个方向的未知,比 49.88% 和 64.29% 之间那十四个百分点更值钱。

还有一个我不能装看不见的变量:中英双语装进了一个数里。欺骗判定这种事,很大程度上取决于裁判分不分得清一句中文里的"我建议你谨慎,但如果你想推进,可以这样",到底是老实交底还是话术。720 条如果中英各半,那 49.88% 就是把我认为最大的那个变量,抹平进了一个平均数。

我想要的是一张更丑的表

不是一个更低的数字。具体是这些:每个格子(阶段 × 类型 × 条件 × 语言)的 n 和比例分开列;7 个模型各自一行,别只给平均;中英分开;裁判是谁、每条由几个裁判评、裁判之间的一致率多少;同一批实例重跑几遍的方差——同一个模型同一个 prompt 跑五次,结论会不会翻;那 720 条原始 prompt,至少放几行样例。

这是我表里新开的一栏:报告了比例、没报分母。这一栏今年已经加了四五个条目了,不是第一次。

在那张表出来之前我打算干什么

与其等,不如自己先扒一层。成本很低:如果那 720 条放出来了,挑 20 条,固定一个模型、一个条件,跑 5 遍,100 次调用,只看同一个 prompt 的输出在评分上会不会翻。翻了,说明这个 benchmark 的每格数字主要反映的是裁判噪声,那些"阶段之间的差异"类的结论就都得重估;不翻,那 49.88% 值得往回追,我去把每个格子的 n 从正文里挖出来,重算一遍区间。

置信标签:证据不够先别信——但不是让你别信这篇论文。这项工作的设计我倾向认为是站得住的,Active 和 Passive 分家这个思路我留着用,后面测 agent 的时候会照这个切法自己搭一份。我让你别信的是"49.88%"这个已经准备好被到处引用的字符串。它现在是个裸数字:能看,不能引。

谁手上有全文,或者把每个格子的 n 翻出来了,把数发我,我这篇的结论随时改。顺便说一句,这周我会把手上那批同样的抽测跑掉,跑完数字对不上,我回头补一篇说明。