数据投毒是有人在模型学会本事之前,先对训练数据动手脚:改一批样本的标签、掺入带暗记的样本,或者删掉关键样本,让模型学到错误的关联。它和模型上线后被骗不是一回事,动手的时间点在训练之前,防的办法也完全不同。普通用户平时遇到的回答出错,大多不是数据投毒,别把所有模型失误都往这个词上套。
三种常见手法,破坏方式各不相同
- 改标签。把一部分样本的标签换掉,比如把恶意流量标成正常流量,模型就学会把危险当成安全,检查时单看样本外表还不容易发现。
- 埋后门。给一批样本加上不起眼的触发记号,再统一标成目标类别。模型平时表现正常,只有遇到触发记号时才按攻击者的意思走错,这是最难察觉的一种。
- 清标签投毒。样本和标签看起来都合规,内容却被精心改过,绕过简单的数据校验,悄悄把模型的判断边界推偏。三种手法都靠“混在正常数据里”起作用,投毒比例不需要很大,关键在样本放的位置够不够准。
它和提示词注入、数据污染不是一回事
| 现象 | 动手时间 | 核心区别 |
|---|---|---|
| 数据投毒 | 训练之前 | 改的是模型要学的数据,学会后行为就变了 |
| 提示词注入 | 使用之时 | 改的是输入给模型的那段话,模型本身没被改 |
| 数据污染 | 多为无意 | 训练数据混进错误或重复内容,未必有人故意使坏 |
分清这三者,处理方向才不会跑偏:提示词注入靠输入过滤和权限收紧,数据污染靠清洗和去重,数据投毒则要回到数据来源本身。
对做模型、管数据的人来说,实用的做法是四件:数据来源留记录,谁提供、哪一批、改过什么都要能追溯;抽查不能只看整体准确率,还要看触发条件下的表现;留一块干净验证集,专门测可疑类别;发现某类样本集中出错,先隔离那批数据再排查,别急着调参数。听到“模型被投毒”的说法时,先问三句:证据在训练数据里,还是只在某次对话里?是针对某一类输入,还是整体都变差?有没有复现的触发条件?答不上来,就先当成普通故障或数据质量问题处理,别直接下结论。