文本 AI 水印难以真正生效:SynthID 与 Unicode 同形字符技巧的现实困境
围绕欧盟 AI 法案 Article 50,分析文本水印的技术难题、谷歌 SynthID 工作原理以及 OpenAI、A…
欧盟 AI 法案将于 2026 年 8 月开始具备强制执行力,其中第 50 条要求所有 AI 输出「可被检测为人工生成」。这意味着在欧盟开展业务的 LLM 提供商必须给文本输出加上水印——一种用来识别 AI 内容的隐藏签名。文本水印因此成为一个在工程上极难完美解决、却又存在多种部分方案的问题。
为什么文本水印很难做
图像水印相对容易,因为数字图像存在大量人眼不可见的噪声,可以在固定位置嵌入细微的颜色或像素签名。文本则完全不同:它是高度压缩的载体,对一句话的任何改动都几乎会被读者察觉。因此,文本水印本质上是受限条件下的隐写问题——既要藏住信号,又不能损害可读性。
一种朴素的想法是规定「每第五个字母是 e」,但这样会让输出满是错字。可以让模型自己想办法把水印嵌入合理语句,强大的模型能处理这种约束,但会消耗本该用于回答用户问题的推理预算,并显著降低模型表现。
必须用水印才能检测 AI 文本吗
理论上,Anthropic 可以尝试把待检测文本送回每个模型,看模型对每个 token 的预测分布与原文匹配程度,从而判断是否为该模型生成。但这一方法假阳性过高:「所有可能的 Claude Sonnet 答案」空间远大于「所有可能的水印化答案」空间,人类写出「像 Claude 风格」文本的概率远高于人类恰好复现某种水印模式的概率。同时,逐个模型跑一遍的成本极其高昂,而欧盟 AI 法案最终还要求厂商向所有欧盟公民提供免费水印服务,这种「跑模型」路线在经济上不可行。
SynthID 的工作方式
目前已知明确声称对文本加水印的提供商只有 Google,使用的工具是 SynthID。其原理基于 LLM 的采样过程:模型在每一步会输出整个词表(量级约十万)的概率分布,再从中选出下一个 token。SynthID 为每个候选 token 根据其前几个 token 计算一个「分数」(例如将 token ID 与前三个 token ID 之和取模 5),采样策略改为「在前五个最可能的 token 中挑 SynthID 分数最高者」。检测时只需对整段文本计算累计分数,异常高即可判定为 AI 生成。这种检测算法非常轻量,可大规模运行。
Google 的官方说法是 SynthID 的打分足够随机,不会让模型变笨,但这一点存疑:用户常用 temperature=0 推理,总是选最可能的下一个 token,此时根本留不下指纹;如果坚持加水印,就只能违背用户偏好去选次优 token。
Unicode 同形字符隐写
既然不能轻易改动 token,是否还有其他隐蔽指纹的方式?文章作者认为 OpenAI 和 Anthropic 可能在用一些 Unicode 技巧,例如把普通空格(U+0020)替换为三一空格(U+2004)或 CJK 表意空格等视觉上几乎一致、编码却不同的字符。这是一种「同形字符」隐写手法,肉眼不可见,但字符统计层面留下痕迹。
这类方法的脆弱性也显而易见:任何后续的复制、粘贴、重新排版,甚至简单的「去除不常见 Unicode」处理都可能擦掉水印。与 SynthID 一样,水印终究是嵌入在文本上的一个统计偏差,人类改写、翻译或轻度编辑都会大幅降低检出率。要让水印真正「可检测」地长期存活,单纯靠输出侧嵌入并不足够,可能需要结合来源侧的元数据签名、内容哈希与平台级监管协同。
展望
欧盟 AI 法案落地前的窗口期里,各大 AI 实验室需要在「不显著降低模型表现」「不破坏用户体验」「可被廉价检测」三者之间找到平衡。文本水印能否成为合规基础设施,取决于检测算法能否承受改写、翻译和轻度编辑的冲击——而从目前的方案来看,这条路并不乐观。
