# 藏在选词里的水印

拉普拉斯的迷你世界 · 图版 F70 · 人工智能

> Gemini 选词时比一场小淘汰赛：候选按模型自己的赔率抽出，比分由一把秘密钥匙定。拿着钥匙，能从够长的文字里读出这种偏向。

- 可交互的模型：https://world.lapla.si/zh/watermark/
- 嵌入页：https://world.lapla.si/embed/zh/watermark/
- English：https://world.lapla.si/en/watermark/
- 更新于：2026-11-05

## 01 看不见的签名

从 2024 年 5 月起，Gemini 应用和网页版写出的文字带着水印。它不在字形里，也没有藏起来的符号，读起来就是普通的回答。水印在选词里：在几个都说得通的词之间，选哪一个。

这个办法叫 SynthID-⁠Text，2024 年 10 月发表在《自然》上，同一天开源。它回答的问题是：一段文字是不是用这把钥匙加过水印的模型写的。拿着钥匙的人算一个分数，分数越过门槛，就判为带水印。

台上是本页的比喻机器：左边的字盒按模型的赔率摆着候选词；中间的淘汰赛板一轮轮比分；右边的凸轮由钥匙和前四个词定下比分；胜出的词沿滑槽落到前面的排字条上；最右边的表拿同一把钥匙读回来。真正的模型里没有这些零件。

*SynthID-⁠Text · Gemini 应用和网页版，2024 年 5 月起 · 《自然》，2024 年 10 月*

## 02 每个词都有赔率

语言模型一次写一个词元（一个词或词的一部分）。每一步，它给每个可能的词元一个概率，再按这些概率抽一个。论文图里的例子是英文的“……my favourite tropical fruit is”（我最喜欢的热带水果是）：下一个词是芒果的概率 50%，荔枝 30%，木瓜 15%，榴莲 5%。

是抽，而不总是挑最大的，所以同一个问题每次的回答会不一样。论文的实验只在最可能的 100 个⁠词⁠元里抽（top-⁠k = 100），温度设为 0.5、0.7 或 1.0。词元和概率从哪里来，见“词元与缩放定律”这一页。

台上左边的字盒，每层是一个候选词，牌子的多少按赔率摆：芒果 5 块，荔枝 3 块，木瓜 2 块，榴莲 1 块。水印不碰这些赔率本身，它改的是从里面怎么抽。

*……我最喜欢的热带水果是 → 芒果 50% · 荔枝 30% · 木瓜 15% · 榴莲 5%（论文图 2）*

## 03 一个词的淘汰赛

加水印时，模型不只抽一次。它先按自己的赔率抽出 2ᵐ 个候选，可以重复；候选两两一组比赛，每组里得分高的进下一轮，平局抛硬币决定。第一轮用得分函数 g₁，第二轮用 g₂，一共 m 轮；最后剩下的一个就是写出的词。

论文图 2 是 m = 3：八个候选依次是榴莲、芒果、荔枝、芒果、木瓜、荔枝、芒果、芒果，三轮之后芒果胜出。台上的淘汰赛板照着这个例子：每块牌子上方的翻牌显示它这一轮的得分，红是 1，白是 0；输的牌子落进前面的托盘。

论文的实验用 m = 30 轮。真要一个个比，每个词要抽 2³⁰ ≈ 10.7 亿个候选；论文直接算出比完之后每个词胜出的概率，再从中抽一次，结果的分布相同。

*2ᵐ 个候选 · 两两比，得分高的胜，平局抛硬币 · 台上 m = 3：8 → 4 → 2 → 1 · 论文实验：m = 30*

## 04 钥匙和前四个词

得分不是随便给的。每一步，把前四个词元（H = 4）和一把秘密钥匙一起做哈希，得到一个随机种子；g₁、g₂、g₃……都由这个种子和候选词算出，每个值是 0 或 1，各占一半。

所以同一把钥匙、同样的前四个词，给同一个候选的分数总是一样；换一把钥匙或换了上文，分数就像重新抛了一遍硬币。没有钥匙，看不出哪些词得了 1。图 2 里，芒果三轮的得分是 1、0、1，荔枝 0、1、0，木瓜 0、0、1，榴莲 1、0、0。

同样的四个词在一篇回答里再次出现时，这一步不加水印（重复上下文屏蔽），免得同一个偏向反复出现、让文字绕圈子。台上，钥匙转动凸轮；排字条上的黄铜框罩住前四个词，用线连到凸轮柱上。

*种子 = 哈希（钥匙，前 4 个⁠词⁠元） · g 值：0 或 1，各一半 · 重复的上下文不加水印*

## 05 赔率没有变

每组两个候选时，有一个好性质：把所有可能的钥匙平均起来，每个词被写出的概率正好等于模型原来的赔率。一个词在某一轮得 1 的时候占的便宜，和得 0 的时候吃的亏一样大，平均起来正好相抵。

对一把固定的钥匙和一段固定的上文，赔率是偏的。图 2 的这一步，按论文的公式算，芒果从 50% 变成约 82%，荔枝从 30% 变成约 8%。偏的方向每一步都不同，看上去仍然是随机的；只有拿着钥匙才知道往哪边偏。

论文证明，每组两个候选时，单个词的分布平均不变；加上重复上下文屏蔽，一整篇回答也不变。每组多于两个候选，水印更强，但会改变分布。更早的“绿名单”水印（2023）直接调高一部分词的赔率，也会改变分布。代价是：同一个问题问多次，回答之间的差别会小一点。

*所有钥匙平均：50% · 30% · 15% · 5% · 这把钥匙、这段上文：约 82% · 8% · 8% · 2%*

## 06 拿钥匙读回来

检测不需要模型，只要文字、钥匙和算种子的办法。把每个词元在每一轮的 g 值都算出来，取平均：普通文字平均是 0.5；带水印的文字更高，因为写的时候，得 1 的词更容易胜出。

文字越长，证据越多。门槛按“普通文字只有 1% 会越过”来定，越长门槛越低。论文的测试用 Gemma 7B 的对话版，温度 0.7，人写的回答作对照，误报定在 1%：200 个⁠词⁠元时认出 69.64%，400 个⁠词⁠元时 86.64%；温度 1.0 时是 87.39% 和 97.52%。这里用的是一个从数据里学出来的贝叶斯打分，比简单平均强。

台上右边的表，黑针是平均分，红针是门槛。读头沿排字条一个词一个词往右走，黑针跟着动，红针随长度往下降。这里读的是本页玩具模型写的一行（每个词 3 轮），不是 Gemini。

*普通文字：平均 0.5 · 门槛：误报 1% · Gemma 7B，温度 0.7：200 个⁠词⁠元 69.64%，400 个⁠词⁠元 86.64%*

## 07 两千万次回答

水印会不会让回答变差？研究者在 Gemini 的线上系统里做了一次实验：一部分请求随机交给带水印的模型，同样多的交给不带水印的，再看用户点的赞和踩。一共分析了约 2000 万⁠次回答。

赞的比例相差 0.01%（带水印的略高），踩的比例相差 0.02%（带水印的略低），都不显著。另一项测试里，评审员并排比较 Gemma 7B 对 3000 个问题的两种回答，语法和连贯、相关、正确、有用、总体五个方面都没有显著差别。

它也几乎不慢：在 4 块 TPU v5e 上，Gemma 7B 每个词元要 15.527 毫⁠秒，加上 30 轮淘汰赛是 15.615 毫⁠秒，多 0.57%。它也能和推测解码一起用，接受率差不多，只是水印弱一些；推测解码见“推测解码”这一页。

*约 2000 万⁠次回答 · 赞：相差 0.01% · 踩：相差 0.02% · 都不显著 · 3000 题并排评审：无显著差别 · 延迟 +0.57%*

## 08 读不出的时候

只有一个正确答案时，没有可挑的词。问“法国的首都是哪里”，或者让它背一首现成的诗，几乎每一步都只有一个选择；淘汰赛里的候选全是同一个词，比不出偏向。台上换成了乘法表：字盒里几乎只有一种牌子，表的黑针停在 0.5 附近。

文字太短，证据不够。改写也会削弱它：删掉一些词、稍作改写，还能认出；彻底改写或翻译成另一种语言后，置信度会大大下降。论文里，让 Gemini Ultra 逐句改写之后，要长得多的文字才认得出。

它只认得用这把钥匙加过水印的模型写的字。读不出水印，不说明是人写的：别的模型、没开水印的模型写的字也读不出。读出水印，也只是分数越过门槛，有一定的误报率。钥匙必须保密，否则别人能仿造；它也不是为挡住有心的攻击者设计的。开源模型由别人自己运行，很难要求都加水印。

*只有一个答案：没有可挑的词 · 太短 · 彻底改写、翻译 · 只认这把钥匙 · 读不出不等于人写的*

## 09 拆开来看

台上：左边是阶梯形的胡桃木字盒，每层一行象牙色的牌子，按赔率摆，右端是出牌的黄铜口；中间是淘汰赛板，有黄铜托架、滑道、翻牌和闸门；右边的凸轮柱上有三片带缺口的黄铜凸轮和一把钥匙；前面是排字条，带读头和罩住前四个词的框；最右边是检测表；板前是接落选牌子的毡面托盘。机器只是比喻：真正的模型里没有牌子，也没有一场场看得见的比赛。

*字盒 · 淘汰赛板 · 凸轮和钥匙 · 排字条 · 检测表 · 托盘*

## 10 实验台

这里是本页写的一个玩具模型，不是 Gemini：一个只会写水果句子的小语法，或者一张乘法表。一个词就是一个词元，每个词比 3 轮（8 个候选），钥匙是本页定的。

开关水印、换一种文字、改掉一部分词、调长度，看平均分在第几个词越过门槛（普通文字只有 1% 会越过）。

*玩具模型 · 每个词 3 轮 · 门槛：误报 1% · 不是 Gemini*

**试一试**：实验台上开着水印写一行开放的句子，看得分在多少个词元时越过门槛；再换成“只有一个答案”的乘法表，会怎样？

## 模型省略了什么

台上的机器是本页的比喻：字盒、淘汰赛板、凸轮、表都是画出来的零件，不是 SynthID-⁠Text 的结构。机器每个词只比 3 轮，用的是论文图 2 的例子；论文的实验是 30 轮，而且直接算出比完之后的概率，并不真的抽 10 亿个候选。字盒里牌子的多少是按赔率取整的。表上用的是简单的平均分和按二项分布定的门槛；论文的主要结果用的是学出来的贝叶斯打分。读头读的是玩具模型写的一行；玩具的词很少，一把钥匙的分数会偏向一边，所以本页的钥匙是从 60 把里挑的，让普通文字的平均分在两种语言里都接近 0.5。

## 几个容易误会的地方

水印认的是“用这把钥匙加过水印的模型写的”，不是“机器写的”：读不出水印，不说明是人写的。读出水印也是统计判断，有一定的误报率（论文的测试定在 1%，对照是人写的回答）。水印不改模型给每个词的赔率，平均下来也不改写出每个词的概率；它改的是对这把钥匙来说，在几个说得通的词之间选哪一个。只有一个正确答案、太短、被彻底改写或翻译的文字，水印读不出或很弱。钥匙要保密，它不是为挡住有心的攻击者设计的。

## 常见问题

### 什么是 SynthID-Text？

这个办法叫 SynthID-⁠Text，2024 年 10 月发表在《自然》上，同一天开源。它回答的问题是：一段文字是不是用这把钥匙加过水印的模型写的。

见：[01 看不见的签名](https://world.lapla.si/zh/watermark/#sign)

### 水印是怎样加进文字里的？

加水印时，模型不只抽一次。它先按自己的赔率抽出 2ᵐ 个候选，可以重复；候选两两一组比赛，每组里得分高的进下一轮，平局抛硬币决定。

见：[03 一个词的淘汰赛](https://world.lapla.si/zh/watermark/#tournament)

### 加水印会改变模型写出每个词的概率吗？

每组两个候选时，有一个好性质：把所有可能的钥匙平均起来，每个词被写出的概率正好等于模型原来的赔率。一个词在某一轮得 1 的时候占的便宜，和得 0 的时候吃的亏一样大，平均起来正好相抵。

见：[05 赔率没有变](https://world.lapla.si/zh/watermark/#fair)

### 怎样检测文字里的水印？

检测不需要模型，只要文字、钥匙和算种子的办法。把每个词元在每一轮的 g 值都算出来，取平均：普通文字平均是 0.5；带水印的文字更高，因为写的时候，得 1 的词更容易胜出。

见：[06 拿钥匙读回来](https://world.lapla.si/zh/watermark/#read)

### 读不出水印，说明是人写的吗？

它只认得用这把钥匙加过水印的模型写的字。读不出水印，不说明是人写的：别的模型、没开水印的模型写的字也读不出。

见：[08 读不出的时候](https://world.lapla.si/zh/watermark/#limits)

## 资料来源

1. [S. Dathathri 等（2024）：Scalable watermarking for identifying large language model outputs，《自然》634，818⁠–⁠823（淘汰赛采样、图 2 的例子、检测率、Gemini 线上实验、并排评审、延迟）](https://www.nature.com/articles/s41586-024-08025-4)
2. [同一篇的补充材料（打分函数、表 I5 的检测率、不失真的证明、改写实验）](https://static-content.springer.com/esm/art%3A10.1038%2Fs41586-024-08025-4/MediaObjects/41586_2024_8025_MOESM1_ESM.pdf)
3. [Google DeepMind（2024）：Watermarking AI-⁠generated text and video with SynthID（在 Gemini 中使用；对事实性问题、彻底改写和翻译效果较弱）](https://deepmind.google/discover/blog/watermarking-ai-generated-text-and-video-with-synthid/)
4. [Google AI for Developers：SynthID 文本水印的说明（配置、钥匙要保密、检测器的三种结果）](https://ai.google.dev/responsible/docs/safeguards/synthid)
5. [google-⁠deepmind/synthid-⁠text（GitHub，Apache 2.0）：参考实现和检测器](https://github.com/google-deepmind/synthid-text)
6. [Hugging Face（2024）：Introducing SynthID Text（Transformers v4.46.0 里的实现）](https://huggingface.co/blog/synthid-text)
7. [J. Kirchenbauer 等（2023）：A Watermark for Large Language Models，ICML 2023（“绿名单”水印）](https://arxiv.org/abs/2301.10226)

## 数据

Tournament sampling, the worked example (Fig. 2), detection rates, the live Gemini experiment, the side-⁠by-⁠side ratings and the latency after S. Dathathri, A. See, S. Ghaisas, P.-S. Huang, R. McAdam, J. Welbl et al., “Scalable watermarking for identifying large language model outputs”, Nature 634, 818⁠–⁠823 (2024), and its Supplementary Information (CC BY 4.0). Deployment, limits and the factual-⁠prompt examples: Google DeepMind, “Watermarking AI-⁠generated text and video with SynthID” (14 May 2024), and the SynthID Text documentation (Google AI for Developers). The open release: google-⁠deepmind/synthid-⁠text (Apache 2.0) and Hugging Face Transformers v4.46.0. The green-⁠list watermark, for contrast: J. Kirchenbauer, J. Geiping, Y. Wen, J. Katz, I. Miers and T. Goldstein, “A Watermark for Large Language Models”, ICML 2023. The brass tournament machine, its type case, cams and gauge are this page’s model, a metaphor, not a picture of SynthID-⁠Text; the bench’s fruit grammar and times table are toys written for this page. Material presets and the model kit as on the site’s other model plates (public/looks/CREDITS.md).

## 许可 CC BY-NC 4.0

本页的文字、图片和模型采用 CC BY-NC 4.0 许可：可以免费用于教学和其他非商业用途，可以修改，请注明出自 world.lapla.si。上面列出的第三方素材仍按各自的许可。

https://creativecommons.org/licenses/by-nc/4.0/deed.zh-hans

## 引用这幅图版

拉普拉斯的迷你世界，图版 F70《藏在选词里的水印》，https://world.lapla.si/zh/watermark/，CC BY-NC 4.0，2026-11-05 更新。
