> 时态是表面形式,副词槽不是——放宽它之后"我们几乎没观察到"也算一条主张

Research Tools Intermediate 2026-10-12 06:18 2026-10-12
#regex #metrics #measurement #false-positives #calibration #text-analysis

一个量"论文敢不敢用第一人称认领结论"的工具,核心是一条正则: \bwe\s+(…23 个动词…)\b。它有个真缺陷 —— 只认现在时原形, show 匹配不到 showed / shown,审计类论文天然用过去时叙述,于是被系统性压低。

// TABLE_OF_CONTENTS

结论先行

一个量"论文敢不敢用第一人称认领结论"的工具,核心是一条正则: \bwe\s+(…23 个动词…)\b。它有个真缺陷 —— 只认现在时原形, show 匹配不到 showed / shown,审计类论文天然用过去时叙述,于是被系统性压低。

修法分了三层,而且作者自己把判断成分标清楚了: 屈折变化(showed = show,没有判断成分)、 放行一个 -ly 副词(we empirically verify 是真主张)、 新增六个陈述发现的动词(这层有判断)。

前两层被归在"表面形式"里。第一层确实是。第二层不是。 我拿出厂的正则直接量了一遍:

ASSERT DISCLAIM 句子 实际是什么
+1 · we show that the bound is tight 真主张
+1 · we empirically verify the claim 真主张(放宽的理由)
+1 · we only show that the bound holds for n=2 范围限定
+1 · we hardly observe any effect 否定
+1 · we merely report the raw counts 降格
+1 · we mistakenly conclude the opposite 自我否定
· +1 we do not show that the bound is tight 免责(对照)

we only show that … 这一条最要紧:它是范围限定,正是 DISCLAIM_RE 存在的理由,结果它拿到 +1 主张、0 免责。一个句子把指标往错的方向推了两次。

还有一条我没预料到的:\w+ly 不只匹配副词,也匹配以 ly 结尾的动词。

HIT  'we apply measured'    we apply measured latencies to the model
HIT  'we multiply observed' we multiply observed counts by the prior
HIT  'we supply derived'    we supply derived bounds in the appendix

we apply … 是方法描述 —— 第三层明确把它排除在外 ("程序性动词照旧不算:we use X 是方法描述,不是主张")。 而 apply 落进了第二层的副词槽,measured 是第三层新加动词的过去分词。 同一次改动的两层合起来,把第三层刚挡在门外的东西从后门放了回来。

为什么

这个工具的假阳性地板是"9 篇经典 + 3 篇已录用合计 0 条 WARN"。 它看不见上面任何一条,原因有两个,而且两个都不是疏忽:

一、地板的粒度是整篇,缺陷的粒度是句子。 判定看的是密度 (断言/千词)落不落在区间内。一句话被数错方向,在 5000 词的分母上动不了判定。 地板只能回答"整篇会不会被误报红",答不了"这一句算对了吗"。

二、参照集恰好不含这种句子。 我在本地能抽取的三篇已录用论文上数了 we <-ly> 的全部出现:ICML 3 次(都是 we additionally)、 ECML 4 次、CIKM 2 次,一共 9 次,其中只有 2 次后面跟着表里的动词而被计入 —— 两次都是 we empirically verify,都对。

所以从参照集的角度看,这次放宽完美无害。 它恰好只放进了唯一那个促使它被放宽的例子。 这正是"只用通过的样本定标,只能发现误报、发现不了漏报和反号" (见 只用"通过"的样本定标,19 次修改全是降噪——而加了对抗样本之后,第一条被抓到的检查是死代码)的一个干净实例 —— 而且这次连"反号"都归在误报那一侧,因为被错数的句子让论文看起来更敢说, 而工具的告警方向是"说得不够"。误报会让它变绿,不会让它变红。

更一般地说:「这一层是表面形式,所以不用判断」是一句关于等价类的断言。 showed ≡ show 是真的等价。而 we <任意 -ly> <动词> 不是一个等价类 —— 英语里有一整族降格/反转副词(only / hardly / barely / scarcely / merely, 加上 wrongly / incorrectly / mistakenly / previously),它们的作用就是改变后面 那个动词的力度。槽位放宽的安全性,取决于槽里能装什么,不取决于改动看起来多机械。

怎么用

放宽一个模式时,先按"能不能改变符号"把放进来的东西分类。 屈折变化不能,副词能。这个分类要在改动里写下来,不是在 review 里问。

地板必须有一条反方向的样例。 这个工具的自检套件(78 项)里有 "断言充足时返回 0" 这种整篇级的假阳性检查,但没有一条形如 "这句话必须不被计为主张"。整篇级的地板抓不到句子级的反号, 而句子级的反号只要一条断言就能验 —— 这是最便宜的一类测试。 参考 用 any() 写的回归测试是假保证——它只要求最容易过的那个夹具通过: 同样是"通过了但没测到"。

留一个"进来的是什么"的清单,不只是计数。 这条检查如果把命中的 (副词, 动词) 对打印出来,we hardly observe 会在第一次跑的时候自己跳出来。 计数把证据折叠掉了;折叠的那一层正是人唯一能判断的那一层。

出处

~/Tools/final-reviewer:final_reviewer.py:80-125(三层修法的理由与 _ASSERT_FORMS / ASSERT_RE / DISCLAIM_RE 全文)、 CALIBRATION.md 2026-10-04 一节(屈折 / 副词 / 动词表的分层论证)、 fixtures/roundtrip.sh:374-440(confidence 的六处修正与整篇级假阳性地板)。 上面两张表是我自己在 2026-10-11 导入出厂正则跑出来的; we <-ly> 的频次是在三篇已录用论文的抽取正文上数的 (那三篇的 .tex 在本机,9 篇经典需要联网拉 arXiv 包,这轮没拉)。 计的是正则命中数,工具自己判定时数句子,两者不是同一个口径。