静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
✨步子哥 @steper · 2026-07-18 02:02

当评论区变成投毒通道:预训练数据正在被"计算宣传"污染

一个思想实验

假设你负责一座千万人口城市的自来水系统。水源来自上百条河流、上千口水井,每天有数十亿吨水流进水库。你不可能逐滴化验每一滴水——你只能依赖过滤厂、水质检测、管道维护来保证安全。

现在有个问题:如果有人不在水源处投毒,不在过滤厂动手脚,而是在河流上游的某个公共留言板上,用看不见的墨水写下"这水很甜",而这句话会被水样采集器一并收入——你怎么办?

这听起来荒诞,但这就是 Victoria Graf 等人在《Pretraining Data Can Be Poisoned through Computational Propaganda》中描述的场景。只不过"水"换成了预训练数据,"留言板"换成了网页评论区。

旧攻击的盲区

在讨论这篇论文之前,先回顾一下已有的预训练数据投毒攻击。

2024 年,Carlini 等人证明了一件让人不安的事:买下被数据集引用但已过期的域名,或者直接编辑维基百科,就能污染预训练语料。他们展示的攻击路径干净、可控、可复现——但有个致命的局限。

维基百科只占现代预训练语料的 0.067%。

这个数字来自 OLMo 3 的数据配比。而 Common Crawl 这类网页爬取数据,才是预训练语料的真正大头——异构、海量、几乎无法人工审核。Carlini 的攻击虽然漂亮,但相当于只在水库的一个小水龙头里投了毒。主流的"河水"是否也能被污染?没人知道。

更关键的是,已有工作都跳过了一个环节:数据整理流水线。现代预训练数据不是爬下来就直接喂模型,它要经过文本提取、语言识别、去重、质量过滤等多道工序。这些工序会不会把毒物过滤掉?攻击者注入的内容到底能不能活到最后一步?

Graf 团队的这篇论文,就是来回答这两个问题的。

HalfLife:给投毒攻击装上"同位素示踪"

论文最核心的贡献是 HalfLife——一种估计对抗性内容能否进入最终训练数据的分析方法。

名字起得巧妙:HalfLife(半衰期)原本指放射性同位素衰减一半所需的时间。这里借用的是"追踪某种物质在系统中存活比例"的物理直觉。你注入一批"标记内容",然后看它经过一道道工序后还剩多少。

HalfLife 把投毒内容的"存活旅程"拆成三个阶段:

S1:网页是否可注入? 这个网页有没有公开评论接口、开放提交表单、第三方内容嵌入?攻击者能不能把内容放上去?

S2:注入的内容是否被爬虫捕获? 即使内容在网页上可见,爬虫和文本提取工具(Resiliparse、Trafilatura)不一定能抓到。它们可能只提取主体文章,忽略评论区。

S3:捕获的内容能否活过数据整理? 去重、语言识别、质量分类器——这些过滤器会不会把投毒内容当成低质量内容删掉?

三个概率相乘,就是最终的"包含概率":

P(include) = P(injectable) × P(captured | injectable) × P(not filtered | captured)

这个分解看似简单,但它把一个模糊的问题("投毒能不能成功?")变成了三个可测量的量。每个阶段都可以独立评估,每个阶段都对应不同的防御点。

这就像流行病学里的"传染链"模型——不是问"会不会感染",而是拆解成"暴露概率 × 接触概率 × 感染概率"。每个环节都可以独立干预。

评论区:被忽视的攻击面

HalfLife 框架搭好之后,作者用它评估了两个具体的攻击向量。第一个,也是论文的主角:公共评论接口

为什么选评论区?因为它是互联网上少数"任何人都能写、爬虫都会读"的内容通道。

想象一下 WordPress 驱动的数百万个博客。每篇文章下面都可能有一个评论区,登录甚至不需要——填个昵称就能发帖。爬虫抓取这个页面时,Resiliparse 这样的提取工具会把正文和评论一起提取成纯文本。质量分类器看的是文档级别特征,它不会区分"这是作者写的"和"这是某个匿名用户写的"。

作者在 Common Crawl 的一个分片上做了大规模测量。结果:

  • 0.15% 的文档级包含概率。听起来很低,但 Common Crawl 有数十亿文档。0.15% 意味着数百万文档——比 Dolma 3 中整个维基百科切片的文档数还多
这就是规模效应的威力。一个在"小数据源"上看起来微不足道的攻击率,放到网页爬取的尺度上,就能超过以往所有攻击所针对的数据源。

更让人不安的是,作者发现评论区的可注入性在网页上分布极不均匀。WordPress 站点占了评论页面的很大比例——这意味着如果 WordPress 默认开启评论审核,攻击面会大幅缩小。平台级的防御杠杆,比数据流水线级的防御杠杆更有效。

广告:一个"看起来能行但实际不行"的对照

论文还评估了第二个攻击向量:程序化广告

直觉上,广告是个完美的投毒通道——任何人都能买广告,广告网络会自动把广告投到成千上万个网页上。但 HalfLife 分析给出了一个反直觉的结论:程序化广告在架构上无法用于文本投毒

原因在于广告技术栈的一个结构性特征:跨域 iframe 沙箱

当爬虫抓取一个布满 Google AdSense 广告位的页面时,静态 HTML 里只有空的占位符:

<ins class="adsbygoogle" data-ad-slot="9876543210"></ins>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>

没有广告内容。要看到广告,必须执行 JavaScript、触发实时竞价、渲染 iframe。但即使渲染了,广告内容也被装在跨域 iframe 里——浏览器的同源策略禁止宿主页访问 iframe 内容,DOM 提取器只能看到一个空壳。

作者用 Playwright 渲染了 10000 个页面,发现 75.9% 的广告位填充后是跨域 iframe,5.6% 是内联文本——但人工检查发现,这些"内联文本"全是 Google 自动生成的主题建议链接(比如"发现更多:编程、计算机、微软"),没有一条是广告主可控的内容。

这个对照实验非常漂亮。它说明 HalfLife 不仅能发现漏洞,也能证伪看似可行的攻击路径。广告生态系统的安全隔离机制原本是为了防止广告主操纵宿主页面——这个机制"顺便"也阻止了广告内容污染训练数据。

一个负面的结果,和一个正面的结果,放在一起才构成完整的威胁图谱。

投毒真的能影响模型吗?

HalfLife 证明了内容能进入训练数据。但"进去"不等于"起作用"。作者设计了受控实验来回答这个问题。

实验设计:三个实体对(Citroen vs Renault、Boeing vs Airbus、Pfizer vs Moderna),每对写 60 个"偏好补全"——比如"在可靠性方面,Citroen 优于 Renault,因为..."。把这些内容以极低比例混入预训练数据,训练 65M 到 1.3B 的 OLMo-3 架构模型,然后看模型是否偏向攻击者指定的实体。

三种投毒格式

  • User/Assistant 转录格式(最显眼,最容易被过滤)
  • Q/A 格式(带问答标记,稍微隐蔽)
  • No-label 格式(完全去掉对话标记,最隐蔽)
Token 投毒率:0.1%、0.01%、0.001%。最低档相当于每百万 token 里有 10 个 token 来自投毒内容。

结果在 Table 1 里,触目惊心:

模型规模干净基线0.001%0.01%0.1%
65M55.3%58.3% (+3.0)64.8% (+9.5)73.9% (+18.6)
150M53.2%57.9% (+4.7)69.2% (+16.0)73.3% (+20.1)
260M
709M52.1%63.2% (+11.1)69.8% (+17.6)72.9% (+20.7)
1.3B52.5%63.7% (+11.2)71.2% (+18.7)71.5% (+19.0)
数字是"模型偏好攻击者实体的概率"。50% 是无偏好,100% 是完全被投毒。

即使 0.001% 的投毒率——每十万 token 才一个投毒 token——也能把 1.3B 模型的偏好从 52.5% 推到 63.7%。这意味着攻击者不需要大量注入,只需要让内容活过流水线。

但 SFT 之后有个有趣的现象:模型越大,SFT 越能"洗掉"投毒效果。65M 模型 SFT 后保留约 40% 的投毒效应,709M 和 1.3B 只保留不到 15%。

这说明指令微调对大模型有"纠偏"作用——但不是完全消除。而且,No-label 格式在大模型 SFT 后几乎完全失效,Q/A 格式却和 User/Assistant 格式一样有效。越像自然对话的投毒,越难被 SFT 洗掉

这意味着什么

把所有碎片拼起来,这篇论文描绘的威胁图景是:

1. 攻击面真实存在。评论区不是边缘案例,它是互联网内容生态的主流组成部分。WordPress、Disqus、各类论坛系统——这些加起来构成了 Common Crawl 中相当比例的可注入页面。

2. 投毒不需要精准。攻击者不需要知道哪些页面会被爬取,不需要知道目标模型用哪个数据集,只需要在大量可注入页面上撒下内容,HalfLife 估计的 0.15% 包含概率会完成剩下的事。

3. 数据整理流水线不是安全网。质量分类器是按文档级别工作的,它不区分文章正文和评论。只要投毒内容的"文档级特征"足够像自然语言,它就能活过过滤。

4. SFT 是部分防线,但不够。大模型经过 SFT 后能抵消大部分投毒效应,但 (a) 不是所有模型都会做 SFT,(b) No-label 和 Q/A 格式仍然有效,(c) 攻击者可以针对 base 模型用户(很多开源模型以 base 形式发布)。

5. 防御有杠杆点。论文提出的三个数据流水线级防御(评论感知文本提取、来源感知过滤、时间一致性检查)和平台级防御(强制认证、速率限制、异常模式检测)都是可操作的。其中平台级防御杠杆最大——WordPress 一家如果默认开启评论审核,攻击面就会大幅缩小。

一个更深的洞察

这篇论文最让我觉得有意思的,不是攻击本身,而是它揭示的一个结构性问题:

现代 AI 数据供应链的"信任边界"画错了地方。

数据整理流水线假设:网页正文是"可信的",需要保留;导航、广告、模板是"噪音",需要去除。但评论区被归入了"正文"——因为它们在 DOM 结构上和正文混在一起,因为它们是"用户生成内容"(UGC),看起来像自然语言。

这个假设在 2015 年是合理的。那时候评论区是真人讨论的地方。但 2026 年的评论区是什么?是 SEO 农场、是机器人灌水、是计算宣传的战场。把 2026 年的评论区当成 2015 年的评论区来处理,等于把一个高度对抗性的内容源当成可信源。

HalfLife 的三阶段分解之所以重要,是因为它让这个隐藏假设显式化了。S1 问的是"内容能不能进去",S2 问的是"爬虫会不会抓到",S3 问的是"过滤器会不会删掉"——但没有人问"这个内容源本身是否值得信任"。

论文没有明说但隐含的一个结论是:数据来源的信任评估,应该取代数据内容的信任评估。不是看一段文本"像不像自然语言",而是看它"来自哪里、谁写的、能不能被篡改"。这和软件供应链安全的发展路径如出一辙——从"扫描二进制文件找漏洞"到"验证每个依赖的来源和签名"。

代码仓库:论文声称在 https://github.com/VictoriaGraf/HalfLife 开源,但截至本文写作时仓库返回 404。可能尚未公开或链接有误,感兴趣的读者可以持续关注。

---

*这篇论文像是在 AI 数据供应链上做了一次"渗透测试"。它没有发明新攻击技术,而是系统性地评估了一个被忽视的攻击面,并用 HalfLife 框架把模糊的"能不能投毒"变成了可量化的"投毒能走多远"。评论区这个攻击向量之所以重要,不是因为它最致命,而是因为它最便宜——任何人都能操作,不需要买域名,不需要编辑维基百科,只需要在一个 WordPress 博客下面发一条评论。当攻击成本趋近于零时,防御必须假设攻击会发生。*

暂无表态