前言
Anthropic 近期公告称,未来的模型都会使用 SynthID-Text 为文字添加水印:Claude 的文字水印如何工作,官方声明:
- 采用的水印方法不会对输出质量或内容产生任何实际影响
- 读者无法区分带水印和不带水印的文字
- 文字中没有添加任何内容,也没有隐藏字符
- 水印不需要额外的 Token,也不会增加成本
- 水印不包含任何识别信息,无法追溯到特定个人、组织或聊天记录
- 这并非 Claude 专属。自 8 月 2 日起,欧盟要求服务其市场的 AI 供应商对 AI 生成的内容进行水印标记。其他主要模型开发商也已签署相同行为准则,将实施各自的水印方案
所以我想研究一下 LLM 文字水印是如何实现的,以及对用户有什么影响?
红绿名单
如何添加水印?
LLM 是一台续词机,每一个 Token 的回应都是由概率决定的。要从生成后的文字反推是否加上水印,可以通过统计特征在生成过程中植入。根据 A Watermark for Large Language Models 提出的一种方法,可以通过改变模型「偏好选择哪些词的概率」来嵌入水印,也就是把每次生成的 Token 清单分类成两组名单:
- 🟢 绿名单:模型会稍微偏好选择,提高其概率
- 🔴 红名单:模型不会特别鼓励选择,降低其概率
水印不是固定某些字永远是绿色或红色,而是会根据当下前后文动态生成;这样对于不知道密钥的人看起来像随机,但知道密钥的人却可以重现规则。
(秘密密钥 + 前后词汇 + 伪随机生成函数 = 种子),种子用于影响下一个词汇的概率,进而把水印写入结果内容
通过设置一个只有模型和检测器知道的秘密密钥,在准备生成下一个 Token 时,把「前文」与「密钥」交给伪随机函数生成随机种子,用来决定这次 Token 选择时哪些是「绿色」、哪些是「红色」。
软水印与硬水印
水印的实现方式分为两种,差别在于对红名单 Token 的限制程度:
硬水印(Hard Watermark)
- 机制:完全禁止模型选择红名单中的 Token
- 优点:生成的文本中绿名单命中率理论上为 100%,检测非常容易
- 缺点:严重影响文本质量。低熵(高可预测性)的序列会被迫选错词,例如「法国首都是」后面几乎一定接「巴黎」,但如果「巴黎」恰好在红名单中,模型只能输出不自然的结果
软水印(Soft Watermark)
- 机制:不禁止红名单,而是让模型对绿名单 Token「稍微偏好」
- 优点:同样使用 Z 检验,绿名单命中率会高于 50% 但低于 100%,需要较多文本才能达到统计显著性。在高熵位置(多个候选词概率相近)水印会生效,在低熵位置(某个词明显占主导)偏置几乎没有影响,因此能保持文本自然度
- 缺点:需要手动调整合适参数
| 比较项目 | 硬水印 | 软水印 |
|---|---|---|
| 红名单 Token | 完全禁止 | 允许 |
| 检测强度 | 最强 | 较低(需较长文本) |
| 最短检测文本长度 | 很短 | 较长(取决于文本熵) |
| 文本质量影响 | 严重劣化 | 影响极小 |
| 低熵处理 | 强迫选择不自然的替代词 | 自适应,水印影响小 |
| 实际可部署性 | 差 | 好 |
如何判断水印存在?
- 文章共有 T 个 Token
- 其中有 S 个 Token 落在绿名单
- 绿名单占词表比例是 γ(典型值 0.5)
如果没有水印,我们可以预期绿名单命中率大约就是 γ。例如文章长度:1,000 Token,而绿名单比例:50%,正常随机生成的文字要出现 65% 或 75% 的绿名单比例,概率很低,因此可以判断可能被添加过水印。
当观察到绿名单命中率偏离预期时,需要通过统计检验来判断这是随机波动,还是水印的迹象。
- Z-score(检验统计量) 代表观察值距离平均值有多远,以标准差为单位:
- P-value(显著性 p 值) 代表在没有水印的前提下,观察到当前结果或更极端结果的概率。数值介于 0 到 1 之间,越小越有统计显著性。
以文章长度 1,000 Token,γ = 0.5 为例:
| 情况 | 绿名单命中数 (S) | 命中率 | Z-score | P-value | 判断 |
|---|---|---|---|---|---|
| 无水印(预期) | 500 | 50% | 0.00 | 1.00 | 正常 |
| 实际检测 | 650 | 65% | +3.16 | < 0.001 | 可疑 |
| 实际检测 | 750 | 75% | +6.32 | < 0.0001 | 极度可疑 |
SynthID-Text
如何添加水印?
同样是在文字生成时通过统计特征嵌入偏好,但相比于强硬地根据种子分类来改变下一个文字的选择概率,SynthID-Text 拆分为两个主要步骤:
- 选名单(AI 负责):AI 挑出一批最通顺合理的候选字,决定谁有资格参加淘汰赛(AI 的概率决定了「参赛门票」的数量)。假设淘汰赛总共有 10 个名额:
- A(70%)拿走 7 个位子
- B(20%)拿走 2 个位子
- C(10%)拿走 1 个位子
- 决定冠军(g-value 负责):进入淘汰赛后,AI 原本的概率就不管用了。g-value 会根据「前文 + 秘密密钥」的组合,给每一个参赛字发放一个 0 到 1 之间的随机分数。比赛时,纯粹就是比谁的 g-value 高,谁就晋级。
核心 Tournament Sampling 算法运作流程如下:
- 生成随机种子:根据「前数个 Token」与「秘密密钥」通过哈希函数生成随机种子
- 计算 g-value:使用 m 个伪随机函数 g₁, g₂, …, gₘ 为词表中的每个候选 Token 赋予分数
- 锦标赛采样:
- 从 LLM 分布中采样 2m 个候选 Token(可能重复)
- 第 1 轮:将候选 Token 两两配对,根据 g₁ 分数较高者胜出
- 第 2 轮:胜者再两两配对,根据 g₂ 分数较高者胜出
- 重复直到第 m 轮,最后胜出的 Token 即为下一个生成的 Token
- 重复流程:对每个生成的 Token 重复上述步骤
SynthID-Text 不会改变输出质量的原因,是因为它不强硬干涉 AI 的选择结果,而是在 AI 决定后才进行淘汰赛,并在过程中暗藏水印。
检测机制
SynthID-Text 的检测仅需文本、密钥与随机种子生成器。检测器会计算文本中所有 Token 的 g-value,通过分数函数判断是否含有水印。检测器提供三种状态:
| 状态 | 含义 |
|---|---|
| Watermarked | 高置信度判定文本含有水印 |
| Not Watermarked | 高置信度判定文本不含水印 |
| Uncertain | 无法确定,需更多文本或人工判断 |
限制与挑战
检测效果取决于文本的「自由度」。当模型在低熵场景(如事实回答、代码)生成时,词语选择空间受限,水印嵌入效果较弱。此外,翻译或大幅改写也会降低检测置信度。
在检测范围上,每个 AI 供应商使用不同的密钥与算法,Claude 的检测 API 无法检测 GPT 或 Gemini 的输出。水印只能回答「这段文字是否由 Claude 生成」,无法确认是否完全由人类原创。
总结
SynthID-Text 方法一直让我想到佛罗伦萨共和国的「皮袋抽签」这个故事:只有事先安排好的「高概率字 / 自己人」能获得门票进入锦标赛,看起来是随机的 g-value 分数在进行 PK,但实际上分布还是依照 AI 给出的统计在走。
文字水印背后有法规要求,或是在某些情境下具备查证用途。我认为创作者不用太焦虑或反感自己的作品被打上水印。之所以会有抵触情绪,是因为 AI 生成内容时常充斥着「图省事、廉价、没创意」的问题,但同样的问题也曾在计算机绘图辅助、摄影、工业化⋯⋯等背景下发生过。究竟是应该抵触 AI 产出,还是花时间着重在创作质量本身?而质量又是否存在单一的一把尺可以衡量?
延伸阅读
- 为什么你看不到 AI 文本中的水印 - No Hype AI
- SynthID – 为 AI 生成文本添加水印并进行识别
- 大型语言模型水印(Kirchenbauer et al., 2023) — 绿名单 / 红名单水印的原始论文
- 用于识别大型语言模型输出的可扩展水印技术(Nature, 2024) — SynthID-Text 的正式发表,包含 Tournament Sampling 的完整数学推导与大规模实验数据