技术博客深入分析现有文本水印方案的核心缺陷:基于 token 分布的水印可通过同义词替换、LLM 重写等方式轻易去除。
欧盟《人工智能法案》将于 2026 年 8 月开始强制执行,距离现在只有一个月¹。新规最大的要求之一是第 50 条,要求所有 AI 生成的内容必须“能够被检测为人工生成”。换句话说,如果 LLM 提供商想在欧盟开展业务,就必须对其输出内容添加水印²:某种隐藏签名,可用于识别 AI 生成内容。
LLM 文本水印是一个有趣的问题。像最好的工程问题一样,它在理论上难以完美解决,但有多种部分解决方案:例如 Google 的 SynthID,以及(如我将论证的)来自 OpenAI 和 Anthropic 的一些隐蔽 Unicode 技巧。在今年年底之前,看看 AI 实验室如何权衡这些取舍,将是一件有趣的事。
我在去年年底写过关于 AI 水印的文章《AI 检测工具无法证明文本是由 AI 生成的》。图像很容易加水印,因为数字图像包含大量人眼无法察觉的噪声。例如,你可以应用这样的水印:“这二十个像素在这些精确位置上始终共享一种颜色”。文本则难得多。与图像不同,文本是一种高度压缩的媒介:对句子做任何修改,人类都会注意到(有一种例外情况,我们稍后会提到)。那么你怎样才能给它加水印呢?
这基本上是一个文本隐写术问题(隐藏秘密代码),更困难的是明文不能被任意操纵。对内容所做的任何修改都会影响输出的质量。例如,"每第五个字母是 'e'" 会是一个不错的水印,但直接应用会导致 AI 输出充满拼写错误。能否让模型自己学会如何嵌入水印?强大的 AI 模型足够聪明来处理这类约束³,但这样做会消耗本可用于解决用户问题的推理时间,并且会使模型的表达能力看起来大打折扣⁴。
你真的需要水印吗?如果你是 Anthropic,并且被要求能够验证你的模型是否产生了某个特定的文本块,你不能简单地运行每个模型来生成回复,通过测量模型预测的 token 与文本中每个 token 的匹配程度来判断吗?
没那么简单。"对一个问题所有可能的 Claude Sonnet 回答"的空间远大于"对一个问题所有可能的带水印回答"的空间。换句话说,对于读起来像 AI 写的人类文本,你会得到太多假阳性。人类意外写出像 Claude 那样的文字的可能性,远大于人类意外复制出一个水印。
对于每个 AI 提供商来说,用"运行模型"的方法对文本添加水印,成本也高得令人望而却步。欧盟《人工智能法案》最终将要求 Anthropic 这样的实验室向每个欧盟公民提供免费的水印服务(见 Commitment 2)。对于"运行模型"这种方案,你无法做到这一点。
据我所知,唯一表示对文本输出添加水印的 AI 提供商是 Google,他们使用的工具叫 SynthID。以下是它的工作原理。
当 LLM 生成文本时,它实际上是在生成一系列 token(单词或单词片段)。在每个步骤中,模型本身不会输出单个 token,而是输出其词汇表中所有(比如)100,000 个 token 的完整列表,每个 token 都标注了它作为下一个 token 的概率。ChatGPT 或 Claude Code 这样的工具会从最可能的选项中半随机地选择,以产生输出。这种半随机采样过程可以以可检测的方式受到影响。
例如,我们可以选择这样的采样策略:"我们选择第二可能的 token,然后是第一个,然后是第二个,然后是第一个,以此类推"。这仍然会产生高质量的输出,但你能够用模型重新运行生成的文本来验证这个模式是否成立。然而,这会使验证成本非常高,而且对输出的任何轻微调整都会破坏模式,从而破坏指纹。有更好的方法吗?
是的。SynthID 是一个为每个 token 分配"分数"的过程,基于它之前的 token(例如,将 token 的 ID 与其前三个 token 的 ID 相加,然后取模 5)⁵。要应用水印,模型采用这样的采样策略:"在前五个最可能的 token 中,选择 SynthID 分数最高的一个"⁶。然后可以通过计算一段文本的聚合 SynthID 分数来检测水印。如果分数异常高,就很可能 是 AI 生成的。
这基本上是识别 LLM 常用 em-dash 的另一个版本,只是它依赖的是人类无法识别的单词之间的微妙数学关系。由于分配分数的过程很简单,水印检测的成本非常低。
Google 对 SynthID 为何不会让模型变笨有一个复杂的数学理由:据称 SynthID 评分足够随机,可以像正常的伪随机 token 采样器一样工作,只是会在输出上留下可检测的指纹。但当然这很可疑。例如,通常会将温度设为零进行推理,这总是选择模型最可能的下一个 token。在这种情况下,你根本不能留下指纹(或者你必须忽略用户的偏好,选择第二或第三个选项)。
如果你无法改变模型输出,你还能对内容进行指纹识别吗?嗯,在某种程度上。我非常怀疑 OpenAI 和 Anthropic 有时在应用花哨的 Unicode 技巧。例如,你可能遍历并用三分字宽空格 (unicode U+2004) 或 CJK 表意空格 (unicode U+3000) 替换正常的" "空格(unicode U+0020)。这些被称为"同形异义字",你可以在这里找到更多。
当然,很多人类生成的文本也使用同形异义字。但在其中编码一种模式(比如"每三个空格变成一个三分字宽空格")是很简单的,这种模式在野外出现的可能性要低得多。与 SynthID 水印一样,基于同形异义字的水印可以非常便宜地被检测到。基于同形异义字的水印比 SynthID 更便宜:你可以完全在客户端完成。
我不认为这是阴谋论。Claude Code 肯定在用这个方法来标记来自中国用户的可疑请求(利用"今天的日期"中撇号的同形异义字,不过他们后来已经撤销了)。在过去的几年里,我注意到当我从 ChatGPT 复制文本块并粘贴到 VSCode 时,有时 VSCode 会将某些或所有空格标记为不常见的 Unicode 字符⁷。OpenAI 和 Anthropic 是否使用同形异义字作为 AI 生成的 watermark?我不确定。但他们肯定在使用同形异义字。
AI 法案(具体来说,其相关的实践守则)要求水印"嵌入在内容中,并且难以与内容分离"。然而,文本水印可以 trivially 被移除。
要移除 unicode 同形异义字水印,你只需将所有同形异义字替换为它们"真正的"字符等价物。如果你可以使用任何足够弱的 un-watermarked LLM⁸,你可以通过要求该 LLM 改写文本内容来去除 SynthID 水印。由于水印 inherent 于微妙的词汇选择,重新措辞内容会去除水印。你甚至可以手动完成,尽管在这一点上它不再真正是 AI 生成的内容。由于会有某种免费的公共水印测试工具,你可以不断调整直到结果为阴性。
此外,AI 法案要求水印技术"在技术可行的范围内具有互操作性"。这意味着 AI 提供商必须发布他们的水印过程,甚至可能尝试标准化应用相同类型的水印。我只是看不到这如何与 LLM 文本水印所依赖的那种通过模糊实现安全相容。与图像和视频水印不同,文本水印将永远可以 trivially 被移除。
AI 法案和实践守则谈论了很多"数字签名元数据"。这里的想法是你可以在文件的元数据本身中包含 AI 披露,最好是以无法篡改的方式(例如,通过对文件内容进行哈希签名)。这个签名元数据过程基本上就是 C2PA Content Credentials。虽然你可以移除 C2PA 元数据,但你(理论上)无法伪造它,所以带有"由人类创建"元数据的文件是可以信任的,而完全没有元数据的文件则可以受到怀疑。
这篇文章已经太长了,无法深入探讨我对 C2PA 的看法,但我确实想说 C2PA 不能替代文本水印。它只真正适用于文件。用实践守则的话来说,那是"一种支持附加元数据的数据格式(例如音频、图像、视频或容器化文本)"。聊天工具的输出(以及 AI agents 的大部分输出)不是容器化文本,而是普通的常规文本,因此无法签名。将 ChatGPT 输出签名看起来是什么样的?没有什么 artifact 可以传递。
我认为一个有趣的问题是 Claude Code 是否必须为你生成的任何 HTML 文件或 PDF 进行 C2PA 签名。这看起来有点难。但无论如何,AI 法案也要求某种实际的水印。
那么今年会发生什么?如果我不得不猜测,我会说每个 AI 提供商(不仅仅是 OpenAI 或 Anthropic 这样的实验室,还包括 Fireworks 或 Groq 等第三方提供商)都会在其推理堆栈前放置一个 SynthID token 采样器。这可能仅限于欧盟用户,但也可能不是,因为 SynthID 至少与正常的 top-k token 采样方法一样好。
AI 提供商随后会提供一个"检查水印"页面,重新对用户提供的文本进行 token 化,运行评分,并检查是否超过某个阈值。根据互操作性条款被认真对待的程度,提供商甚至可能标准化相同的 SynthID 设置,在这种情况下,可能会有一个单一的欧盟托管的"水印此文本"页面。
我不认为基于 unicode 的水印会被视为符合 AI 法案,但一些不想设置 SynthID 的提供商可能会尝试。无论如何,技术用户将能够随意去除水印,并且会有大量工具供非技术用户使用此目的。
¹ 新系统可以到 12 月;现有系统有额外宽限期。
² 第 50 条的正文我不认为明确要求这一点,但第 133 号 recital 和实践守则很清楚地表明他们在寻找水印。
³ 即使有额外的高阶思考,GPT-5.5 也无法用每第五个字母是"e"的方式来解释 SynthID,但 GPT-5.5-Pro 产生了这个令人困惑的偈语:"这些隐藏的代码标记模型生成的图像、声音、电影、散文。探测痕迹:也许是模型生成的片段。也许擦除痕迹;也许留下痕迹。因此只有痕迹?不。"
⁴ 我把与 AI 安全 guardrails 的类比留给你作为练习。
⁵ 这是一个玩具示例。实际上有多种不同的(但仍然是数学上简单的)评分方法组合在一起,包括一个随机种子。为什么包含种子?否则水印会偏向相同的 token 集合。
⁶ token 在多轮淘汰赛中相互评分,但我认为这是更多的实现细节,而不是理解 SynthID 工作原理核心直觉所必需的。
⁷ 当这成为公开知识时,OpenAI 声称这只是模型的一个 quirks,当然这是可能的。
⁸ 所有 AI 提供商可能都需要在法律上添加水印,但即使是很小的本地模型也足够好来改写文本。
如果你喜欢这篇文章,可以考虑订阅关于我新帖子的电子邮件更新,或在 Hacker News 上分享。
以下是与这篇文章共享标签的相关帖子的预览。
AI 推理显然是有利可图的
许多人声称 AI 推理是无利可图的,因此必须由投资者的大量傻瓜资金来补贴,他们相信未来某个 AI 模型将主导世界经济。当那些傻瓜资金消失时,AI 产品也会消失。按照这种观点,LLM 本质上太贵了(就金钱、电力和水而言),无法在消费产品中使用。事实上,它们今天只能通过外部化成本来使用:将金钱外部化到 VC 基金,现在又外部化到零售 ETF 投资者,将电力外部化到电力消费者,将水外部化到数据中心建设的社区。继续阅读...