这篇推文关于文本水印原理讲的很清楚。
生成文本的时候,模型每要输出下一个 token,就拿前面已经生成的所有词加上一个密钥,算出一个哈希值。这个哈希值会把词表里的词随机分成两组,比方说绿组和红组。然后模型在选下一个词时,悄悄提高绿组词被选中的概率。最终输出的文本看起来完全正常,但统计上会偏向绿组词。
检测的时候反过来。拿着同一个密钥,对文本里的每个词重新算一遍哈希,还原出当时的绿组和红组。如果整篇文本中绿组词的占比显著超过 50%,就判定这段文本带有水印。
几个常见疑问:
- 改写能破解水印吗?
大部分情况下可以。因为你一改词,前面的 token 序列变了,哈希也跟着变,绿组红组就对不上了。但也有改进方案用统计模型而不是确定性函数来生成哈希,让水印对改写有一定的适应能力。
- 水印会降低文本质量吗?
理论上会,因为模型不再完全自由地选最优词,而是被约束在绿组里选。但 Google 在两万条文本的人类反馈实验中称,大多数人感知不到质量下降,因为表达同一个意思的词有很多种组合。不过在短文本或者高度确定的输出上(比如1+1=2),水印确实会失效。
- 密钥会被逆向破解吗?
理论上需要指数级数量的样本才能还原绿组红组的划分,所以直接暴力破解不现实。但如果检测器公开了,攻击者可以通过不断试探来摸索出规律。
工程难点
第一,大模型是流式输出文本的,一个词一个词往外蹦,没法像学术方案那样等整段写完再调整。
第二,如果密钥泄露,水印就废了,所以需要多组密钥轮换。
第三,代码类输出不能随意换词,否则代码会出错,水印只能加在注释、变量名这类可替换的部分。
如果 Anthropic 公开检测器,等于给了攻击者一个免费的练习靶,水印会被快速找到绕过策略。
如果像 Google 的 SynthID 那样把检测器留在内部,更安全一些,但学术界已经有论文展示了不需要检测器也能零样本破解水印的方法。
密集改写(同义词替换加句法重组)可以有效消除水印,免费的改写工具就能绕过 Google 的 SynthID。
前沿实验室对此心里有数,也没指望水印能拦住刻意绕过的人。大多数普通用户不会专门去除水印,而欧盟监管方也只需要足够好就行。
水印更多是一种应对欧盟监管的合规动作。