作品阶段标注:可演示原型(已用于日常工作)—— 本文所有判定结果均来自真实 API 调用,覆盖我自己待投手稿中 6 条 Related Work 断言。
一、需求从哪来:写 Related Work 时,我的每条引用都可能出错
我是一名做开放世界目标检测(Open-World Object Detection,OWOD)的研究生,正在准备投稿。论文写到最后阶段,最消耗心力的不是方法,而是Related Work 里的每一句话。
一篇 Related Work 有几十条对他人工作的引用,每一条都包含三类容易出错的事实:
- 数字类断言:比如"该方法仅增加 0.1% 额外参数"——数字一旦记错,审稿人一眼就能看出来;
- 方法归属类断言:“XX 在 M-OWODB 上接近饱和”——这句话对不对,取决于原始论文的真实结论;
- 设计细节类断言:“XX 要求训练前固定未知类数量”——说错设计细节,等于替作者造谣。
人工核验的痛点是:每条断言要打开搜索引擎、逐条比对来源、判断哪个来源权威、确认时间和出处,一条平均 10~20 分钟,还容易漏。更重要的是,我自己想找证据的时候,搜索引擎的结果质量参差不齐——博客、搬运站、同名论文混在一起,很难快速判断"这句话到底有没有权威来源支持"。
所以我想做一个工具:输入一条论文断言,输出"已核验 / 存疑"判定 + 完整证据链,把 20 分钟的人工活压缩到几秒钟;顺便解决投稿前查截稿日期、CCF 分级的零碎查询。
二、为什么需要搜索:核验的本质是"多来源交叉验证"
事实核验的本质,不是"搜到一条相关结果",而是用多个独立权威来源对同一断言做交叉验证。这就要求检索能力具备三个特性:
- 多来源:同一个断言要用不同措辞分别检索(我称之为"双盲查证"),避免拿同一查询的重复结果冒充多来源;
- 可溯源:每条结果必须带 URL、时间、站点、相关度,证据链能点开复查;
- 可过滤:能限定学术行业、能指定域名、能控制时效。
元宝搜索的 SearchPro 服务(腾讯云对外开放的搜索 API)恰好满足这些要求:调用一次返回 title / date / url / site / score / passage,支持industry=acad学术过滤、site域名限定、freshness时效控制。接入方式也很简单——服务 API KEY,直接POST即可,不需要复杂的签名流程:
importrequestsimportosfromdotenvimportload_dotenv load_dotenv()resp=requests.post("https://api.wsa.cloud.tencent.com/SearchPro",headers={"Authorization":f"Bearer{os.getenv('WSA_API_KEY')}","Content-Type":"application/json"},json={"Query":"UC-OWOD open world object detection","Industry":"acad"},timeout=15,)pages=resp.json()["Response"]["Pages"]# 每条含 title/date/url/site/score(真实密钥已安全存放于本地环境变量,本文所有截图与结果均来自真实调用。)
三、怎么实现:一个能装进投稿工作流的核验管线
整个项目用 Python 3.12 实现,拆成两层:CLI 批量核验(跑整条断言列表)+Gradio 交互演示(三个 Tab)。核心链路只有四步:
第一步:鉴权与检索封装(api_client)。统一处理重试、超时、调用计数,把腾讯云返回的错误码映射成中文提示(UnauthorizedOperation / RequestLimitExceeded 等),写论文期间配额用完了能立刻知道。
第二步:意图识别与查询词构造(query_builder)。同一个断言生成 3 种不同措辞的查询 + 数字精简查询 + 领域/数据集限定查询。比如断言"FOMO reports that a plain foundation-model detector nearly saturates M-OWODB",会同时检索原句、原句加"arXiv"、以及消歧查询"fomo m-owodb"。这一步是整个工具的"侦查能力"来源。
第三步:权威分级与内容门槛(verifier)。维护学术/官方域名白名单(arXiv、DOI、ACM、IEEE、Springer、OpenReview、官方项目仓库等),区分"权威来源 / 普通来源 / 弱来源(博客、搬运站)"。判定时要求:证据必须同现断言的主体词 + 指标词 + 数据集词(断言含数字时数字必须真的出现在权威证据里),且至少来自2 个独立权威域名。任一条件不满足就降级为"存疑"并写明原因——宁可漏判,不可误判。
第四步:输出与私域知识库(report + kb)。每条断言输出判定卡(含证据链,可点开复查)和 CSV 核对表;另外把我自己的论文手稿main.tex清洗成可检索的知识库(21 个段落),回答"MEMO 如何更新原型库?"这类论文内部细节问题时,先答论文原文,再用公共检索补外部佐证——这就是混合问答。
四、得到什么:6 条真实断言,2 条已核验、4 条存疑——每条都有原因
我拿自己 CVPR 手稿的 Related Work 提取了 6 条可核验断言,跑了一遍完整流程。这是全文最硬的部分:判定全部来自真实检索。
| 断言 | 判定 | 核验说明 |
|---|---|---|
| iCaRL 保留少量旧样本并重训 | ✅ 已核验 | 多源一致(arXiv / DOI / Nature) |
| Dual Memory 用双记忆发现新类别 | ✅ 已核验 | 多源一致(arXiv / DOI) |
| MR-GDINO 仅增加 0.1% 额外参数 | ⚠️ 存疑 | 数字未在权威来源摘要片段中出现(召回限制,人工复核) |
| FOMO 报告纯基础模型检测器近乎饱和 M-OWODB | ⚠️ 存疑 | 正确拦截:权威证据全是同名"FoMo"遥感论文,无任何 M-OWODB 内容 |
| UC-OWOD 训练前须固定未知类数量 | ⚠️ 存疑 | 证据真实(原始论文 DOI 在列),但仅单权威源,保守判法 |
| RandBox 用随机区域建议训练 Fast R-CNN | ⚠️ 存疑 | 同上,证据真实但权威源覆盖不足 |
(完整核对表含每条的证据数、独立来源域名、首条证据 URL,见文末。)
迭代过程本身就是结果:按真实失败改了三轮
工具不是一次写对的,是按真实检索结果迭代出来的,这三轮最能说明问题:
- 第一轮暴露 3 个查询缺陷:
freshness=y3时效过滤把 2017 年的 iCaRL、2023 年的 RandBox 原始论文直接筛掉,只召回不相关的近期文章;doi.org不在权威白名单,出版商的官方 DOI 链接被当成普通来源;arXiv 子域名(aps.arxiv.org)被误算成独立来源。修复后,RandBox 和 iCaRL 从"存疑"转为"已核验"。 - 第二轮暴露"同名误判":FOMO 最初被判 ✅,但点开证据链发现全是"FoMo"(遥感森林监测、机器人导航数据集、表格异常检测)——短方法名撞名严重,证据根本没出现断言里的数据集 M-OWODB。于是给判定加了内容门槛:定性断言也必须验证证据同现数据集/关键内容。修复后 FOMO 正确转为存疑。
- 第三轮平衡精度与召回:内容门槛一刀切导致 UC-OWOD、RandBox 被误降级(证据是原始论文但片段覆盖不足),改为"短主体词(FOMO/Dual)才要求关键内容同现,专属长名(UC-OWOD/RandBox)主体匹配即可"。
投稿决策与混合问答两个附加场景
- 投稿决策:输入"CVPR 2026",返回 26 条去重结果,含官网新闻(cvpr.thecvf.com 官方"CVPR 2026 收到 16,000 篇投稿")、截稿信息、高校录用动态,按相关度排序——投稿前查截稿日期和官方通知,一次搞定。
- 混合问答:问"MEMO 如何更新原型库?",私域知识库直接答出论文 Anti-Forgetting 分析(DEUS 从 Task2 的 61.0 掉到 Task4 的 50.5,相对下降 17.2%,而 MEMO 仅小幅下降)和 SACD 自适应发现细节;公共检索则补充外部来源。这里有个有意思的发现:公共搜索里"MEMO"被同名产品(MIT 的 LLM 记忆框架 MeMo)淹没——这恰恰说明私域知识库不可替代:你的论文细节,公共搜索帮不上忙。
五、实际效果:真的抓到了手稿里的问题
工具最大的价值,是它真抓到了一个我自己没发现的问题:
手稿 Related Work 里写着:“Zohar et al. adapt foundation detectors directly to OWOD in FOMO and report that a plain foundation-model detector nearly saturates M-OWODB”。核验结果显示这条断言找不到任何权威支持——进一步人工查证发现:FOMO 论文真实存在(斯坦福 AI 实验室官网:https://ai.stanford.edu/~orrzohar/projects/fomo/),但官方页写明其"未知类 mAP 约为基线的 3 倍,仍有显著提升空间";OW-OVD(CVPR 2025 补充材料)给出 FOMO 在 M-OWODB 上的 U-mAP 仅 2.6;且 FOMO 有 FOMO/LLM 与 FOMO/IN 两种变体,并非"plain"检测器。"近乎饱和"这个说法与权威来源矛盾,这句话必须在投稿前改写或重新核实引用。
效率对比同样直观:6 条断言,工具批量核验一次调用 23 次检索(活动期内配额 6000 次/月,无压力),全程几十秒;人工逐条核对同样内容,按一条 10 分钟算需要两个小时以上,还未必查得全。
工具也有明确的局限,我在设计上选择"保守":数字类断言(如 0.1% 额外参数)受搜索摘要片段截断影响,数字常常不在片段里,此时工具不冒险判"已核验",而是判"存疑"并给出证据链和原因,由人工点开确认。这不是缺陷,是设计选择——事实核验工具的价值恰恰在于"宁可漏判,不可误判",把不确定的信息明确标注出来。
六、结语
这个项目的定位很简单:把写论文时的"查证焦虑"交给一个带证据链的检索管线。它证明了一件事——搜索 API 的正确用法不只是"搜一搜",而是把它变成可编程的、带判定逻辑的事实核验基础设施。
未来我会继续做三件事:把整篇论文的\cite全部批量跑一遍生成引用审计表;给数字核验加"证据页内容抓取"(解决摘要片段截断);把私域知识库扩展到全部实验笔记。欢迎交流:评论区留下你写论文时最头疼的引用问题,我可以用这套工具帮你核验。
附录:真实运行截图
附录:6 条断言完整核对表(CSV 节选)
| 断言 | 判定 | 证据数 | 首条证据 |
|---|---|---|---|
| MR-GDINO … 0.1% extra parameters | ⚠️ 存疑 | 29 | arxiv.org/html/2610.00982v1 |
| FOMO … nearly saturates M-OWODB | ⚠️ 存疑 | 32 | portal.acm.org/doi/10.1609/aaai.v39i27.35002 |
| UC-OWOD … fixed before training | ⚠️ 存疑 | 17 | doi.org/10.1007/978-3-031-20080-9_12 |
| RandBox … random region proposals | ⚠️ 存疑 | 32 | arxiv.org/html/2410.11301v1 |
| Dual Memory … working and semantic memories | ✅ 已核验 | 21 | arxiv.org/html/2506.10484 |
| iCaRL … retrains on past exemplars | ✅ 已核验 | 25 | doi.org/10.1609/AAAI.V37I8.26216 |
作品阶段:可演示原型(已用于日常工作)。运行方式:python run_cli.py verify "断言"或python app.py打开 Gradio 演示页。仓库地址:https://github.com/goodgoodstudier/yuanbao-factcheck