Claude 不可见文本水印技术详解
近期,Anthropic 开始为 Claude 的文本输出植入不可见水印,并于 8 月 14 日对外公开了这套机制的技术原理。该方案基于 Google DeepMind 提出的 SynthID-Text 技术路线。
这套水印既不会在文本中插入特殊字符,也不会在生成结束后对文本做二次修改 —— 它的植入全程发生在模型选择下一个 token 的采样过程中。
先从一个直观例子说起
假设 Claude 正在生成句子:
今天下午的天气比较……
后续可以接的合理表述有很多:
阴阴沉多云灰蒙蒙
这类位置的 token 选择本身就存在随机性。常规生成模式下,系统会根据模型输出的概率分布结合随机采样,选出最终的 token。
加入水印机制后,最终输出的句子依然可能是:
今天下午的天气比较阴。
即便关闭水印重新生成,也有可能得到完全一致的句子。
单看最终文本,完全看不出 “水印” 的痕迹 —— 所有区别都发生在选择 “阴” 这个 token 的决策过程里。
水印系统会结合水印密钥(watermark key)与已生成的上下文,生成当前采样步骤所需的伪随机信号。单个 token 的选择几乎看不出肉眼差异;只有连续生成几百、几千个 token 后,对应的统计特征才会逐步累积显现。
这正是文本水印和传统内容水印的核心区别:水印不是嵌入文本的某段内容,而是生成过程留下的统计信号。
水印的作用环节:token 采样
大语言模型生成文本时,会先根据上下文计算下一个 token 的概率分布,再从分布中选出最终输出的 token。
举个例子,针对句子:
今天的天气有点……
模型可能输出如下概率分布:
| Token | 概率 |
|---|---|
| “凉爽” | 35% |
| “阴沉” | 25% |
| “闷热” | 15% |
| “舒适” | 10% |
| 其他 | 15% |
这张表是采样环节的输入。前面 “阴 / 阴沉 / 多云 / 灰蒙蒙” 的例子,是为了说明水印可利用的低风险选择空间,二者并非同一组示例。
SynthID-Text 正是在这个采样环节植入水印。
它首先结合当前上下文与水印密钥生成随机种子(random seed),再通过伪随机水印函数为每个候选 token 计算 g-value,这些数值会参与后续的 token 选择流程。
论文将整套方案拆分为三个核心模块:
- 随机种子生成器(random seed generator)
- 采样算法(sampling algorithm)
- 评分函数(scoring function)
前两个模块负责生成带水印的 token,第三个模块用于水印检测。
核心采样方法:Tournament Sampling
SynthID-Text 的核心采样机制名为 Tournament Sampling(锦标赛采样)。
论文以 3 层结构演示了该过程:系统先从原始语言模型的分布中独立采样出 2³ = 8 个候选 token(候选可能重复),再通过多轮淘汰选出最终结果:
8 个候选
↓
4 个赢家
↓
2 个赢家
↓
1 个最终 token每一轮将候选两两配对,根据各自对应的 g-value 决定胜负;平局时随机选择。最终留下的 token,就是这一步的输出结果。
3 层仅为论文中的示意。若无特殊说明,论文实验默认采用 30 层锦标赛结构。
需要注意的是,层数与检测能力并非简单的正相关关系。搭配不同的评分函数时,层数增加后的表现也有差异,检测收益不会无限提升。
论文中的随机种子采用滑动窗口(sliding-window)方法生成,实验配置的上下文窗口 H 为 4,即使用最近的若干个 token 结合水印密钥,生成当前步骤的随机种子。
整个流程可以简化为:
最近的上下文 + 水印密钥
↓
随机种子
↓
g-value 计算函数
↓
锦标赛采样环节
↓
下一个输出 token选出下一个 token 后,再重复上述流程生成后续内容。
不是简单的「给特定 token 加权」
如果只是给部分 token 加权,逻辑非常直接:提高一组 token 的选中概率,降低另一组的概率即可。
但 SynthID-Text 支持配置为 非失真(non-distortionary) 和 失真(distortionary) 两种模式。前者会尽可能保留模型原有的文本生成质量,后者则允许牺牲一部分质量,以换取更强的可检测性。Google 已针对非失真配置完成了大规模线上验证。
论文讨论了不同层级的 “非失真” 特性,实验采用的是 单序列非失真(single-sequence non-distortionary) 配置。在水印随机种子的平均意义下,单个 token 的边际分布可以保持与原始大模型完全一致,同时让生成序列留下可检测的水印信号。
因此它的逻辑并不是简单地修改概率,比如:
“凉爽” 35% → 40%水印利用的是采样过程中原本就存在的随机结构,而非维护一张固定的 “水印词表”。
论文通过 重复上下文掩码(repeated context masking) 实现这种非失真特性。当相同的上下文窗口再次出现时,可以跳过水印植入,避免同一上下文反复受到同一套水印机制的影响。单序列配置也采用了这种掩码机制;如果要对更多序列同时保持非失真特性,则需要更强的掩码策略。
这套方案也存在代价。论文指出,该配置在兼顾文本质量与检测能力的同时,会一定程度降低不同回答之间的多样性。
因此落地时需要综合权衡检测能力、文本质量、生成多样性与计算复杂度四个维度。
检测器如何识别水印?
检测器拿到待检测文本后,会先对文本重新做 token 化处理。
随后结合水印密钥与相同的种子生成规则,重新计算每个 token 对应的 g-value,再将结果汇总为最终的检测分数。
SynthID-Text 提供了多种评分函数。论文默认实验采用的是 可学习贝叶斯评分(learned Bayesian scoring),需要用带水印与不带水印的样本提前训练。均值评分(mean score)则更简单,直接根据 token 对应的 g-value 计算均值即可。
贝叶斯评分能利用更多模型生成分布的信息,论文实验中的检测效果更优;代价是部署前需要额外的数据与训练成本。
检测器关注的不是相邻 token 之间的语义关联,而是:
被选中的 token,是否在统计上更倾向于获得水印函数给出的高 g-value。 普通人类文本中,这些数值的分布接近随机;而带水印的文本会呈现出明显的统计偏差。
还要注意,水印检测和 AI 文本检测并不是一回事。
AI 文本检测器是根据文本本身的语言特征,判断内容 “像不像 AI 生成的”;水印检测器则需要搭配对应的水印密钥,检查文本是否符合某个特定生成系统留下的统计模式。
SynthID-Text 的检测端不需要重新运行生成文本的底层大模型,仅需 token 化后的文本、水印密钥以及对应的种子生成规则等信息即可。
Anthropic 也计划后续提供水印检测 API。
水印可以被去除吗?
可以,去除效果取决于文本的修改程度。
单纯的复制、粘贴不会改变文本内容,水印不会因为复制操作消失。
轻度编辑也未必能完全移除水印。按 Anthropic 的说法,只有完整重写文本、几乎替换每一个词时,水印才会被彻底去除。
反过来也成立:如果 Claude 只修改了少量词语,新增的带水印 token 数量太少,检测信号可能会低于检测阈值。
因此 “检测不到水印” 通常对应两种情况:文本本身不含这套水印,或是 Claude 对文本的修改幅度太小,留下的信号不足以被检出。
水印不是独立存在于文本里的标记,而是生成过程留下的统计结构。文本修改得越多,原有的生成痕迹就越难保留。
反过来,检测到水印,也不能证明某段话就是 Claude 原创的。这套机制无法区分 “Claude 直接生成了这段文字” 和 “Claude 对原文做了大幅改写” 两种情况。
同理,检测不到水印,也不能证明文本一定不是 AI 生成的。
翻译场景也是如此。如果由 Claude 生成目标语言文本,水印会在目标文本的生成过程中重新产生,而非从原文中继承过来。
为什么短文本、代码场景水印更弱?
水印的植入依赖 token 选择中的随机性空间。
如果某个位置几乎只有一个合理答案,模型的选择空间就会非常有限。
比如:
Isaac Newton 最著名的著作是《Principia _》。
这里几乎只能填入 Mathematica。如果为了植入水印强行换成其他词,就可能出现事实错误。
通常文本越长,能积累的水印证据就越充分;生成分布的熵(entropy)越高,可用于植入水印的选择空间也越大。
Anthropic 也提到,代码、事实性极强的内容,以及以语法纠错为主的任务中,可自由选择的 token 更少,水印信号也会更弱。
因此不能认为 “Claude 输出的每一个 token 都带有同等强度的水印”。
水印会影响生成质量吗?
这里需要区分两组不同的实验:SynthID-Text 的研究结论,与 Anthropic 针对 Claude 自身的测试结果。
SynthID-Text 论文做了大规模质量评估,包括约 2000 万条真实 Gemini 交互的线上实验,以及人工并排对比有水印与无水印的回答。线上 A/B 实验中,用户的点赞、点踩反馈未出现统计显著差异;人工并排比较也未发现明显的质量差别。
而 Anthropic 针对 Claude 水印方案的内部测试显示,未观察到明显的质量影响。
二者并非同一组实验:前者是 Google 针对 SynthID-Text 做的大规模实证评估,后者是 Anthropic 针对自身 Claude 实现的内部测试。
非失真采样可以降低水印对单次生成质量的影响,但依然可能影响不同回答之间的多样性。“水印完全没有代价” 并不是准确的表述。
对推理部署的影响
水印作用于采样层,不需要重新训练模型,也无需修改模型权重。
从工程实现上看,它可以嵌入在如下流程中:
模型前向计算
↓
logits 输出
↓
解码 / 采样环节
↓
水印采样逻辑
↓
输出 tokenSynthID-Text 论文测试了实际推理开销。在 Gemma 7B-IT 模型、4 块 v5e TPU 的测试环境下,普通生成的单 token 延迟为 15.527 ms,加入 30 层锦标赛采样后为 15.615 ms,延迟仅增加约 0.57%。
这是论文测试环境下的结果,不代表所有模型与推理框架的实际开销。
论文还讨论了推测采样(speculative sampling)与水印结合的相关问题。
对于自行维护推理服务的开发者来说,只要能控制采样层,就可以将水印作为生成时采样逻辑的一部分加入,无需重新训练模型。
如果仅调用第三方 API,能否自行加入同类水印,取决于服务商是否开放了采样层的控制权限。拿到 API 返回的文本后再做后处理,和 SynthID-Text 这种生成时植入水印的方案并不等价。
水印密钥为何需要保密?
检测过程必须依赖水印密钥。
SynthID-Text 的相关配置也需要妥善保存。原因很简单:如果生成规则与密钥全部公开,攻击者就会知道检测器的检测逻辑,进而可以针对性地规避水印。
“文本带有水印” 和 “任何人都可以验证水印” 是两件完全不同的事。
Anthropic 公开了技术路线,但并未公开 Claude 内部使用的全部水印参数。
此外,水印本身不包含任何用户或组织的身份信息。它是标识生成来源的统计信号,而非分配给用户的数字身份凭证。
Claude 水印的覆盖范围
Anthropic 的水印方案覆盖 Claude 的全量文本生成场景,并非仅针对欧盟用户。
根据目前公开的安排,2026 年 8 月 2 日及之后发布的新模型,从发布之日起就支持水印;此前已发布的模型处于过渡阶段,Anthropic 会在接下来的几个月内逐步补齐水印能力。
对于调用 Claude API 的开发者来说,输出是否带水印,首先取决于所调用的具体模型,无法在应用层自行决定是否添加。
Anthropic 同时强调,这套水印不会增加额外的 token,也不会在文本中加入隐藏字符。
文本水印与图片水印的区别
Anthropic 本次介绍的,是针对 Claude 文本输出的水印技术。
图片等其他模态可以采用不同的来源溯源技术,比如 C2PA 签名元数据。C2PA 与生成式文本水印解决的是不同层面的问题:前者将来源信息作为内容的签名元数据携带,后者则将统计信号植入生成过程中。
不能把 “Claude 水印” 理解成一套适用于所有模态的统一算法。
Claude 与 SynthID-Text 的关系
按 Anthropic 的官方表述,Claude 的文本水印是 SynthID-Text 方案的一个实现版本。
Google DeepMind 的论文公开了完整的 SynthID-Text 方法,包括随机种子生成器、g-value 计算、锦标赛采样与评分函数等全部核心逻辑。
但这不代表 Claude 沿用了论文中的所有参数与内部配置,Anthropic 并未公开这些细节。
更准确的表述是:
Claude 采用了 SynthID-Text 的技术路线,但不能将 SynthID-Text 论文里的所有实现参数,直接等同于 Claude 的内部实现。
从最终文本来看,水印不会增加特殊字符,也不会多出一段隐藏内容。它全程发生在生成阶段:模型每一次选择下一个 token 时,水印系统都会参与随机采样过程,最终让整段文本留下可被检测的统计结构。
对开发者而言,最核心的认识是:
水印不是文本里的一个标记,而是生成 token 时留下的一层统计信号。