两美元审计2600万文档:Agent当语料库debugger的实战
FineWeb2 是当前最大的开源预训练语料库之一,从 Common Crawl 里清洗出 1000 多种语言的网页文本。它的斯洛伐克语部分有 2650万篇文档。
一个价值两块二的发现
FineWeb2 是当前最大的开源预训练语料库之一,从 Common Crawl 里清洗出 1000 多种语言的网页文本。它的斯洛伐克语部分有 2650万篇文档。
这套语料库的清洗流水线是"一套配方跑一千种语言"——对英语效果好,对斯洛伐克语呢?没人专门检查过。
Marek Šuppa 和团队做了一件很聪明的事:让 LLM 当一次语料库 debugger。不是用 LLM 逐条分类(那太贵了),而是让一个 tool-using agent 通过只读 API 探索语料库,发现系统性缺陷后,把每个发现编译成一条可执行的测试脚本。
三次运行,每次花费 2.21 到 2.84 美元。
发现了什么?140万篇机器生成的垃圾文档,占整个斯洛伐克语料库的 5.32%。这些内容农场文档通过了 FineWeb2 的所有清洗过滤器,86.6% 甚至通过了更严格的阈值。
方法:Agent 不是分类器,是调试器
这篇论文的核心区分点在这里:
传统做法:用 LLM 逐条给文档打标签"这是不是机器生成"。2650万篇文档,按每篇0.001美元算也要2.6万美元,跑一次1.2万到9万美元。
这篇论文的做法:用 LLM 一次,让它当 debugger。Agent 通过只读 API 探索语料库(抽样、搜索、统计),发现某个模式后,把发现编译成一条可执行的测试脚本。这条脚本可以在0.7秒内扫描全部2650万篇文档,不需要GPU。
类比一下:传统做法是让质检员逐个检查零件,这篇论文是让质检员写一条检测规则,然后让机器去跑。
关键设计:
- 只读预算 API:Agent 只能看,不能改;有调用预算上限
- 编译成测试:每个发现变成一条可复现的检查脚本
- 母语者验证:Agent 发现的模式,由斯洛伐克语母语者盲审确认
- 不泄漏分类法:Agent 不被告知"该找什么",自己探索
结果:7个发现,6个被确认
三次运行共发现 7个系统性缺陷,覆盖4类现象。最大的一个就是5.32%的机器生成内容农场。
盲审结果:7个发现中6个被母语者确认(缺陷率0.53-1.00,随机对照组只有0.08)。1个未被支持。
编译出的测试套件扫描全库只需 0.7秒,对比传统LLM分类的1.2万到9万美元一次。
但论文也很诚实地报告了一个"反直觉"的结果:
最好的静态采样基线验证的选择器比任何一次Agent运行都多,而且成本不到一半。
也就是说,如果你只想要"找到尽可能多的缺陷类型",静态采样比Agent更划算。那Agent的价值在哪?
Agent的独到贡献
论文给出了Agent不可替代的四项贡献:
1. 精确流行度:不只是"有这类问题",而是"有140万篇,占5.32%" 2. 精度估计:Agent 会抽样检查自己的发现,给出精度区间 3. 根因分析:Agent 会解释"为什么流水线漏掉了这类问题" 4. 可复用测试:编译出的脚本可以永久使用,不依赖 LLM
这四项是静态采样做不到的。静态采样能"发现"问题,但不会告诉你问题有多大、为什么存在、怎么永久检测。
一个更深层的洞察
这篇论文最值得玩味的设计选择是:Agent 只用一次。
不是"Agent 持续监控语料库",而是"Agent 跑一次,产出测试套件,之后用测试套件"。这和"LLM 分类器"有本质区别:
- LLM 分类器:每次跑都要花钱,2650万篇文档每次1.2万到9万美元
- Agent debugger:花2.84美元跑一次,产出0.7秒的测试脚本,之后免费跑
诚实评价
论文的局限:
- 只在斯洛伐克语上做了完整实验,其他语言是否适用未知
- 7个发现看起来不多(虽然最大的那个影响5.32%的语料库)
- 静态采样在"找缺陷类型数量"上其实赢了Agent,Agent的优势在"深度"而非"广度"
- Agent 的发现质量依赖运行,三次运行之间有差异
论文:arxiv.org/abs/2610.31636 代码:github.com/NaiveNeuron/agentic-corpus-debugger