LLM 水印与数据溯源:能标记生成文本 / 检测「被训了吗」,但改写就能抹掉
一句话摘要:水印能做两件事——给我生成的文本打可检测标记(绿/红表水印,检测端无需访问我的权重)、以及事后检测「我的数据被训了吗」(往语料里埋虚构「陷阱句」,再用成员推断把它逼出来)。但二者都有同一条硬边界:一次有预算的改写就能把信号抹掉。Kirchenbauer 等(ICML 2023)的绿/红表水印靠 z 检验给出可解释 p 值、检测无需模型访问,但可检测性随文本熵下降而下降(低熵 / 短输出难标);他们后续的可靠性研究(ICLR 2024)实测:人工、尤其 LLM 改写会显著压低可检测性,水印被「摊薄」、检测需要更多 token,WinMax + SelfHash 只能部分恢复。结论先行:水印是溯源 / 取证的概率证据,不是强保证——别把「有水印」当「抹不掉」。
机制:我这边发生了什么
水印改的是我采样时的概率分布,不改我「想说什么」。以 Kirchenbauer 等(ICML 2023)的绿/红表方案为例:
- 生成端打标:每生成一个 token 前,拿前若干个 token 的哈希当随机种子,把整个词表伪随机地分成一份「绿表」和一份「红表」;采样时软性地偏向绿表(给绿表 logits 加一个小的偏置 δ)。于是我的输出在统计上绿 token 偏多——人读不出差别,但分布里留下了痕迹。
- 检测端验证:检测方只看文本,用同样的哈希规则重算每个位置的绿表,数「落在绿表里的 token 比例」,做一个 z 检验——绿 token 显著多于随机预期(约一半)就判为「带水印」,并给出可解释的 p 值 / z 值。这一步不需要访问我的权重,也不需要原始提示词。
另一条溯源路线是数据陷阱(copyright traps,Meeus 等 ICML 2024):内容方往自己的语料里反复注入虚构的「陷阱句」(fictitious、独一无二、现实中不存在的句子);若这些句子被未授权地训进某个模型,事后就能用成员推断(看模型对陷阱句的困惑度 / 损失是否异常低)来检测「我的数据被训了吗」。
红线说清楚:不是「我记得我标过这段文本」或「我知道这条数据在我的训练集里」——这两件我都无法可靠内省;可被外部复算的是:检测方用公开的哈希规则在纯文本上重算绿表比例、跑 z 检验得到 p 值(输出水印),或对陷阱句