AI 文本水印是怎么工作的

查看原文 HN 讨论

文章摘要

这是一篇由 James Padolsey 撰写、带交互演示的科普长文,回答一个直觉上不可能的问题:纯文本里怎么可能藏水印?文本没有像素可以埋数据,复制粘贴之后任何元数据都不会存活,每一个字符都明明白白摆在眼前,标记还能藏在哪儿?

但水印确实是真的。谷歌从 2024 年起就在 Gemini 应用和网页端给文本打水印(其 API 目前是有文档记载的例外),而到 2026 年 8 月,新版 Claude 模型开始在模型层面给文本打标记,旧模型随后跟进。这些标记不可见、能在复制中存活,之所以能做到,是因为它们根本不住在字符里——它们住在词与词之间的选择里。

文章分五步拆解。第一步:写作是一连串小选择。 模型写到句子中途时并不知道”下一个词”,它有一个带偏好的候选清单,就像自动补全。一页文本里有几百个这样的小岔路口,其中很多岔路上有若干个同样说得通的选项——这些”余量”就是原材料。谁能影响骰子怎么落,谁就能在不改变文本含义的前提下藏进一个模式。

第二步:一把密钥去影响这些选择。 经典配方来自 Kirchenbauer 等人 2023 年的论文:在每个岔路口,用密钥驱动的数学把候选词分成绿色和红色两组——这是只有持钥人能复现的任意染色——然后把骰子略微偏向绿色。两点让它变得隐蔽:第一,偏移很轻,红色词仍可能胜出,只是概率略低;第二,染色不是词的固定属性,密钥是从紧邻的前几个词计算出来的,所以同一个候选词在一种前缀下是绿色、在另一种前缀下是红色。文章还介绍了两个”兄弟方案”:谷歌实际投产的 SynthID 用一个微型的秘密”锦标赛”代替偏移——从模型自己的概率抽取几个候选,用密钥打分,赛制安排得使得在密钥抽取上取平均后每个词的概率恰好保持模型原本的意图;而 Aaronson 在 OpenAI 做的方案更进一步,直接从密钥导出骰子本身。数学不同,原理一致:标记活在选择里。

第三步:持钥人可以数数。 检测根本不阅读文本、不判断文风,检测器只是用持钥人的染色方式重放一遍,然后数有多少词落在绿色上。没有水印(或用错密钥)时绿色应该赢一半左右,就是抛硬币。文章特别标注了一个诚实的注脚:演示里的偏移画得很强以便肉眼可见,实际投产的水印偏得温和得多,因而需要更多文本——在这个 50/50 的演示模型里,一份 1500 词的文档只会显示约 55% 的绿色。微小的倾斜只有靠长度才能变得有说服力,这就是短文本确实难以判定的原因。

第四步:编辑对水印做了什么。 因为每个词的染色来自紧邻的前几个词,一个位置只有在原始措辞的一小段窗口(该词加上它的邻居)完整存活时才算作证据。文章给了一个五档编辑深度的滑块演示,从”改错别字”到”完全重写”。在真实实现上(开源模型上的 MarkLLM 的 KGW 与 EXP 方案,经 declaude 的完全重写路径洗过):约 0.5% 的窗口存活,检测器准确率从几乎确定跌到抛硬币。已发表文献在形状上是一致的——轻度或单遍改写只是稀释而非删除水印,在 Kirchenbauer 等人的实验中,只要文本够长检测器就能恢复,甚至人工改写在大约 800 个 token(约 600 词)之后也会重新变得可检测。真正能抹掉标记的是”不共享任何原始措辞片段的重新构造”。作者也明确画出边界:这些数字来自可测量的开源实现,Anthropic 的生产方案未公开,外界目前无法针对 Claude 自己的标记跑这个测试。

第五步:这在实践中意味着什么。 作者列了五条:(1)只有持钥人能检查,你的老师、编辑或任何”AI 检测器”网站都跑不了这个测试,需要提供商的密钥或提供商自己运营的检查服务;谷歌为 SynthID 运行了一个早期访问检测门户,Anthropic 说检测工具即将推出。(2)水印检查不是”AI 检测器”,GPTZero 那类工具从文风猜测且出了名地不可靠,水印则恰恰相反,是一个刻意设计、密钥门控的统计检验,不要把两者混为一谈。(3)发现标记意味着”被处理过”,而不是”被写出来”——Anthropic 自己的文档就指出,被 Claude 校对或翻译过的人类文本也会沾上标记;而标记的缺席证明的更少。(4)短文本和低选择度文本携带的标记很少——代码、引文、事实列表这类只有一种正确续写的文本,给骰子留的余量太小。(5)有些标记能挺过重写:那些以词本身而非邻居为键的方案抗改写性强得多,但弱点是染色被到处复用,从足够多的输出中可以被逆向出来。

HN 评论精华

(原文抓取成功。交互演示部分为网页动态元素,本文基于其文字说明总结。)