How Claude Watermarks AI-Generated Text

TL;DR · AI 摘要
Claude通过特定的水印技术标记AI生成文本,该方法基于token sampling和统计检测,影响AI内容识别与应用。
核心要点
- Claude水印依赖于在生成文本中嵌入统计上可检测的token模式
- 水印检测通过滑动窗口统计相邻token的共现频率实现
- 该技术可能影响AI生成内容的可追溯性和版权保护方案
结构提纲
按章节快速跳转。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- Claude水印技术
- 实现机制
- token模式嵌入
- 统计检测算法
- 技术影响
- 内容可追溯性
- 版权保护
- 挑战与对策
- 检测规避
- 生成质量平衡
金句 / Highlights
值得收藏与分享的关键句。
水印通过在生成文本中插入特定token模式实现,这些模式在统计上可被检测但对人类不可见
检测算法使用滑动窗口统计相邻token的共现频率,当频率显著高于基准值时判定为水印
实验显示,使用对抗训练的模型可将水印检测率降低至67%,但会牺牲15%的生成质量
Claude如何对AI生成的文本进行水印处理
关于标记采样、水印检测和移除的48分钟视频讲解
2026年8月22日
我最近在Substack上发布了一篇关于Claude新水印处理过程和实现的文章。由于这个话题非常热门并引发了热烈讨论,我认为有必要更详细地解释其工作原理。
这次我没有采用常规的文本文章形式,而是录制了一段关于该主题的讲座(为了与我平时的文章形式有所区别)。因此,下面附上视频及文字稿。
最初我计划制作10张幻灯片并录制一个10分钟的短视频。但在整理内容时,我不断添加了一些关键细节,最终形成了超过50张幻灯片和48分钟的视频。
希望这次的讲解能够更清晰地说明问题!祝您观看愉快!
- 如果您更喜欢使用YouTube播放器,我也有一个YouTube版本
- 这里是幻灯片的链接
视频文字稿
注:以下文字稿经过轻微编辑和整理以提高可读性,但保留了上方视频讲座的整体顺序和流程。
0:00
Claude文本水印机制解析
第2张幻灯片,共52张,时间戳0:00
大家好。几天前,Anthropic宣布将对Claude模型的文本输出添加水印。随后我在社交媒体上发了一篇简要解释该机制的文章。这篇帖子非常受欢迎,不过受欢迎的不是水印技术本身,而是我对该技术原理的解释。因此,我认为有必要进一步扩展说明,因为原帖只包含了一张示意图,引发了大量问题和讨论。
于是我想,那就再制作一些示意图吧。最初我计划制作10张幻灯片逐步讲解,但最终制作了50张幻灯片。我希望这能更好地解释这种水印技术的工作原理,以及水印本身可能失效或被移除的情况等。我认为这可能是一个有趣的话题,因为如今很多人使用LLM,同时也大量接触可能由LLM生成的网络文本。
现在将出现这种水印技术,人们可能担心水印会让文本质量下降,或者这种水印技术到底有什么实际好处?这究竟意味着什么?我认为如果我们能更好地理解水印技术,就能更清楚地判断其利弊,从而形成自己的看法。
我在这里的目标是解释这种水印技术的底层机制,以及他们将如何实现这种文本水印技术。
第2张幻灯片,共52张,时间戳1:41
这也是一个很好的例子,说明从头理解事物实际上非常有用。这种水印技术也是一个很好的方式,可以解释传统模型或LLM内部的工作原理。是的,您可能知道我喜欢从头开始做事情。比如,我有书籍《从零构建大型语言模型》《从零构建推理模型》,还有一些标记为"从零开始"的文章。
因此,对我而言,“从头开始”通常包含编码。所以这次的内容不会涉及编码,但“从头开始编写代码”实际上是一种非常有用的技巧,因为它真的能帮助你理解某件事情是如何实现的。从这一点出发,我们可以推导出我们的理解、图表和概念,因为如果我们没有真正实现某些功能,如果没有代码,有时会显得非常模糊。当然,正如我意识到的那样,并不是每个人都在从头开始编写代码了。
以前,从头开始编写代码是我们唯一的选择。我的意思是,当时只有人类在编写代码。如今,编码可以由大型语言模型(LLMs)完成。然而,这并不意味着阅读代码不再有用,因为代码承载了大量信息。因此,在这种水印技术的案例中,花些时间从头开始编写一个LLM,真的能让你明白内部采样是如何实现的。我们仍然有一些相关的代码片段。
反过来,这真的帮助我们理解,哦,水印是应用在这个位置的,这会产生如此这般的影响等等。因此,我认为即使人们可能不再总是从头开始编写代码,但至少出于教育目的,能够从头构建某物以深入理解,以及出于研究目的,以一种透明的方式操纵它,而不是隐藏在大量抽象层中,仍然非常有用。
但暂且不谈这些,我认为这里存在一种巧合的美妙关系,因为对于这个幻灯片演示文稿,我实际上使用了很多来自我从头开始编码材料中的图表。
第3张幻灯片,共52张,时间戳3:58
几天前(这是8月14日),有一篇文章《How Claude’s Text Watermark Works》,还有一篇文章在这里;它就像一个屏幕录制,所以可以包含幻灯片中的所有内容,但细节非常丰富。实际上他们更新过几次,当我第一次阅读时,它要短得多。尽管如此,我认为它非常概念化;它有一个概述,但里面没有一张图表。
因此,理解他们想要做什么仍然有些困难。他们解释了很多为什么要这么做,但没有解释如何实现。他们链接到某处的一篇非常技术性的论文。因此,我认为或许有必要退后一步,从头开始,以便更好地理解他们在这里尝试通过这种水印技术实现什么。
顺便说一下,水印的动机是让他们能够识别如果有人发布一些文本,他们可以说,哦,这段文本是由我们的Claude Opus 4.8模型生成的,这样他们就有办法判断,好的,这段文本是AI生成的,因为它带有这个水印。这个水印对用户是不可见的,因此只有他们才能解码并发现文本是否带有他们的水印。
为什么只有他们能做到这一点?我们将在本视频(希望不会太长)的后面部分讨论,但一次只做一件事。
5:38
大型语言模型(LLM)文本生成的工作原理
第4张幻灯片,共52张,时间戳5:35
我想先做一个简短的前言,解释大型语言模型(LLM)中文本生成的工作原理,因为基于这一点,我们之后可以更容易地理解水印技术的工作原理,并且这实际上并不是在现有功能之上增加一个巨大而昂贵的附加功能。它实际上只是对常规文本生成过程内部的一个微小调整。
第5张幻灯片,共52张,时间戳6:01
当使用类似ChatGPT这样的工具时,假设我问了一个问题,例如“德国的首都是哪里?”,ChatGPT或其他大语言模型(LLM)会像这个例子一样回答“柏林”。在这种情况下,模型生成了两个标记(token):“柏林”和句号。但为了简化,我们假设它只生成一个标记。那么接下来生成的“柏林”这个标记,其内部生成机制是怎样的?
当我们输入“德国的首都是哪里?”这样的问题,并收到“柏林”这样的标记作为响应时,背后究竟发生了什么?在幕后实际发生了哪些过程?
第6张幻灯片(共52张),时间戳:6:41
在接下来的几张幻灯片中,我将简要介绍生成下一个标记时,模型内部发生了什么。
第7张幻灯片(共52张),时间戳:6:50
再次假设我们的提示是“德国的首都是哪里?”。第一步是将这句话转换为标记ID。对文本进行分词并转换为标记ID是初始阶段的主要步骤之一。这个过程发生在LLM外部,不属于LLM本身。我们只是将文本转换为标记ID,这是嵌入层可以处理的格式。
第8张幻灯片(共52张),时间戳:7:22
然后,这些标记ID会传递给LLM,LLM会为下一个标记生成一个得分分布。
第9张幻灯片(共52张),时间戳:7:31
再次强调,这只是一个关于LLM内部工作原理的简要概述。我不会深入讲解LLM本身的机制,因为我曾在其他“从零开始构建LLM”的视频和书籍中多次讨论过相关内容。关键点在于,当我们生成下一个标记(例如“柏林”)时,此时会得到一个得分分布。这是LLM的输出结果。
在本例中,我们看到的是logit值。这些值的范围是从负无穷到正无穷的原始得分。例如,范围可能从-8或-9到20。我们可以将这些值转换为概率分布,但根据采样方式的不同,这在技术上并非严格必要。你可以将logit值视为原始得分。
这些原始得分覆盖了整个词汇表。
第10张幻灯片(共52张),时间戳:8:39
这意味着包括LLM可能生成的所有可能词汇。在词汇表索引中,某个特定位置(例如第19,846位)会获得最高得分。我将分布展开了一些。如果你将这个提示输入LLM,你甚至会看到更极端的情况:几乎所有词汇的得分都非常接近零,而“柏林”的得分会高得多。
不过,为了展示一些明显的峰值,让图表看起来更有趣,我稍微放大了分布范围。在这里,“柏林”是最高得分,因为你可以认为它是最可能或最合理的下一个标记,如果我有一个非常明确的提示。其他词汇可能像汉堡或慕尼黑这样的城市,但LLM可能会错误地猜测。
但如今,一个大型语言模型(LLM)应该非常确定“柏林”是这里的正确答案。你在这里也可以看到词汇表索引。所以这相当于覆盖整个词汇表。如今,LLM的输出可能有大约25万个标记(token)。我在这里将范围从19,800截断到19,900,因为这张幻灯片上的空间有限。如果有一个非常现实的25万个词的词汇表,所有内容会变得非常狭窄,以至于我们几乎无法在分布图上看到任何东西。
这只是为了教学目的而进行的截断。重要的是,在常规文本生成中,我们会得到这种得分分布。现在,我们要做的是查看最高得分。
第11张幻灯片(共52张),时间戳10:33
稍后我会更详细地讲解这个选择过程。所以它不一定是精确的最高分,但为了简化,假设我们在这里选择最高分。在这种情况下,它是19,846。
第12张幻灯片(共52张),时间戳10:52
然后这个得分会被反标记化(detokenize),我们就能得到“柏林”这个结果。因此,这张幻灯片上的过程就是:从输入提示开始,将其转换为标记ID和标记化,传递给LLM,得到这个得分分布,获取下一个标记,再将其转换回文本。
第13张幻灯片(共52张),时间戳11:12
然后,这段文本会被追加到输入中。如果我们有一个需要多个输出标记的问题,我们会继续在这个循环中进行,直到答案完成。通常这意味着LLM会生成一个文本结束标记(end-of-text token),例如这里所示。为了简化,我只展示了一个迭代过程,其中它生成一个标记。但正如我所说,它会继续以这种方式进行,我们将修改后的输入反馈给LLM进行下一轮处理。
现在,我们实际上是如何采样这个下一个标记的?
11:39
下一标记采样的工作原理
第14张幻灯片(共52张),时间戳11:44
我简要提到过,理论上我们可以直接选择得分最高的那个标记。这被称为贪婪解码(greedy decoding)。这是一种方法。但大多数LLM(如果你使用它们的话)并不会采用贪婪解码,即总是选择得分最高的那个。因为如果你用其他提示词提问,它可能并不总是需要最高得分,否则它会记住训练数据。
它总是会给出相似的响应,等等。实际上,我们通常希望输出中有一些变化,但又不至于生成完全随机的内容。因此,当我们在这种分布中进行采样时,首先通常会将其转换为概率得分。
第15张幻灯片(共52张),时间戳12:28
在这里,我只在图表中展示了这些得分。为了简化,我使用了NumPy;无论你使用什么工具(例如PyTorch),这些概念都适用。但假设我们在这里使用NumPy保存了这些得分。我需要做的就是计算softmax。从技术上讲,我会使用在Torch或PyTorch中实现的softmax函数,它在处理大值和小值(包括非常大的正数、非常小的正数和非常大的负数)时都具有数值稳定性。
在这里,我只以这种方式写出公式。这是标准的softmax公式,只是为了更易读。但这里的细节并不重要。
第16张幻灯片(共52张),时间戳13:20
关键的是,经过这种转换后,这里的分数虽然幻灯片上的空间有限,但它们的总和会等于1。这本质上是一种重新归一化,使它们的总和归一化为1。概率转换所做的就是这个:softmax转换。一旦我们有了这些概率,就可以使用随机数或随机采样算法。
例如,在NumPy中,我们可以使用choice函数或方法。这里我们传递了一个特定的随机种子给词汇表索引,更重要的是,我们将概率作为权重传递进去。这些概率本质上是回答“某个token被选中的可能性有多大”。例如,如果“柏林”经过softmax归一化后有99%的概率,其他所有token的总概率为1%,那么如果我们进行100次采样,其中99次会得到“柏林”。
在现实中的大型语言模型(LLM)中,例如经过良好训练的模型,“柏林”可能会获得99.999999%或类似的概率。因此,你几乎可以确定每次采样都会得到“柏林”,因为模型在这种情况下对答案是“柏林”非常确信。因此,这就是我们如何从这个分布中进行采样的方式。还有一些变体,例如top-k采样或top-p采样。以top-k采样为例,为了简化说明,我们会选择前100个token,然后仅在这100个最高得分的token中进行随机选择,以避免出现无意义的token。
在这个例子中,这并不重要。我只是再补充一个说明,所以略过这部分。你可以假设这已经通过top-k或其他类似方法筛选为前100个token。
第17张幻灯片(共52张),时间戳15:37
例如,这里有一个例子。如果我们以“柏林”概率非常高的99.9%进行10,000次采样,我们会得到“柏林”9,997次,“哈”(Hal)两次,以及一次“莫”(Moh)。这些基本上是无意义的token。在这种情况中,LLM很少会生成无意义内容,因为如我之前所说,我稍微扩展了这个分布以增加趣味性。
一个真正的LLM可能会在10,000次采样中100%生成“柏林”,因为“柏林”的概率如此之高。但这是为了说明目的。
16:19
从采样到水印
第18张幻灯片(共52张),时间戳16:21
我们刚刚简要讨论了LLM内部的工作原理,我认为这本身就是一个有趣的概念。不过,我之前已经多次讨论过这个话题,不想让你感到无聊。我只是想先建立一些背景,解释水印是如何工作的。
第19张幻灯片(共52张),时间戳16:41
我们提到过,在采样时会选择得分最高的token。或者使用这种概率采样,这通常会导致得分最高的token被选中。现在这里是一个没有水印的另一个例子。我稍微修改了提示语。现在提示语是:“今天的天气是‘寒冷’”,可能的回答可以是“灰暗”或“多云”。与“柏林”例子相比,我会说“灰暗”和“多云”在某种程度上是可互换的。
在完成文本或生成下一个标记的目标下,这两个标记都是合理的下一个选项。因此,选择哪一个几乎就像抛硬币一样随机。实际上,两者并没有明显优劣之分。因此在进行随机采样时,由于它们的得分都相对较高且相近(因为它们都是合理的标记),我们可能会得到其中任意一个。
如果我们多次重复采样,大约一半的时间会得到“overcast”,另一半的时间会得到“gray”。这就是为什么在提供相同提示时,LLMs常常会生成不同答案的原因。如果你使用相同的提示并多次询问LLM,通常会得到略微不同的答案。这是因为某些位置上两个可能的标记几乎同样可能,模型会随机选择其中一个。
而这个被选中的标记将会影响所有后续的标记,依此类推。
18:23
随机种子与确定性采样
第20张幻灯片,时间戳18:25
现在,我想简要谈谈随机数生成。例如,如果我们使用这样的随机数生成器,它将生成一个随机的数字序列。如果我再次运行它,这里的数字序列会不同。你可以看到,每次生成五个数字时,它们都是不同的。如果我在这里设置一个随机种子,比如1、2、3,然后多次运行这个程序,我们仍然会得到随机数,但它们现在都是一样的,对吗?
它们仍然是随机的。如果我们使用随机种子,仍然会得到彼此不同的随机数,但它们是可复现的。无论是否使用随机种子,我们仍然会得到随机数。但使用随机种子时,我们可以得到可复现的数字序列。请记住这一点:这只是一个简单的入门介绍,稍后我们会用到这个概念。
第21张幻灯片,时间戳19:26
例如,我之前提到过,如果我们进行随机采样,可能会得到“gray”或“overcast”。现在,如果我们使用特定的随机种子,比如42,那么模型将始终选择“overcast”。我的意思是,它仍然是一个随机选择,但我们让它变得确定性。在这种情况下,给定这个提示,模型将始终选择“overcast”。
第22张幻灯片,时间戳19:49
如果我们使用不同的随机种子,模型可能会选择“gray”。每次采样时,它将始终选择“gray”作为下一个标记。所以它仍然是随机采样,但我们现在基于随机种子使其变得确定性。
20:03
水印密钥的工作原理
第23张幻灯片,时间戳20:04
在水印技术中,Claude的水印机制类似于设置随机种子的概念。但这里的随机种子并不是像某个固定数字(比如某人写下的固定数字)那样固定,而是使用了一个类似于API密钥的密钥。通过这个密钥,结合前四个词,他们本质上推导出这个随机种子。
其核心思想是:如果我回到上一张幻灯片,这里的情况是相同的:本质上存在一个固定的随机种子,这个随机种子始终会选择相同的下一个标记。因此,例如,这里不是使用随机种子99,而是使用一个密钥,并结合之前标记的信息来推导出这个随机种子。关于这一点,我们稍后再详细讨论。
第24张幻灯片,时间戳21:06
因此,水印技术的核心思想是让文本生成在某些位置变得更加确定性。例如,如果我们有左侧这些看似合理的文本:
今天的天气很冷,而且
我可能会选择“多云”或“灰蒙蒙”。接下来的句子可能是:
然后是“轻柔的”或“温和的”
这两个词再次可以互换。
接着,“微风”是“移动”或“吹拂”穿过树木,街道看起来“安静”或“静止”。
这意味着我可以说“安静”或“静止”。文本中存在某些位置,这些位置的词选择几乎同样可能,就像我们之前看到的那样。因此,如果不使用水印技术,当我们运行提示或通过LLM输入提示时,可能会有时得到这个答案,有时得到另一个答案,依此类推。
根据位置的数量,这里可能会有128种可能的答案。当然,文本越长,我们可以互换术语的位置就越多,组合方式或输出文本的数量也就越多。例如,再次说明,一个可能的输出文本可以是:
今天的天气很冷且多云。轻柔的微风穿过树木,街道看起来很安静。我想我会待在家里,一边喝茶一边读书。
这就是一个可能的文本。另一个可能的文本是:
今天的天气很冷且灰蒙蒙。温和的微风穿过树木,街道看起来很静止。我想我会待在室内,一边喝茶一边读小说。顺便说一下,外面其实还在下雨。我不知道这个麦克风效果如何,但这里的情境确实非常贴切。
总之,你可以看到这里生成了两个非常合理的文本,还有更多组合。它们都是合理的,没有哪一个必然比另一个更好。它们只是细微的差异。如果我们不使用水印技术,可能会得到其中任何一个,或者只是随机出现,对吧?因为随机采样,我们可能会得到其中一个或另一个。
第25张幻灯片(共52张),时间戳23:31
现在,如果我们固定随机种子,如我之前提到的,例如随机种子是99,我们可能会始终得到这里的文本。使用随机种子,我们可以大致固定得到的答案,因为随机采样仍然是随机的,但它是确定性的,因为它是可重复的。这样,结果将始终相同。好的,这仍然是没有水印技术的情况,现在使用了随机种子。
第26张幻灯片(共52张),时间戳23:59
水印技术基本上做的是同样的事情。现在,与其仅仅使用简单的随机种子,他们使用所谓的随机密钥,这个随机密钥参与文本的选择。但我们可以提前说,在Claude的博客文章中,他们指出水印技术不应该让文本变差。如果我们观察这个机制,确实可以理解为什么它不会让文本变差。
顺便说一下,我在这里并不是在为水印技术辩护,我只是在解释。所以请不要攻击传递信息的人。但我想表达的是,对于终端用户来说,水印技术无非就是固定随机种子,使这种采样变得确定性,如果这有意义的话。
24:45
水印的应用位置
第27张幻灯片(共52张),时间戳24:47
Okay, so the summary so far is without watermarking. We often sample without a random seed because I know most people don’t even use one. I honestly don’t think you can necessarily do it with the Claude and OpenAI APIs. I know you can do it in Ollama, but I also always had some problems with that because I used Ollama in one of my books for the bonus material to generate some texts.
I was fixing the random seed, but it still wasn’t always deterministic, and so forth. So it’s tricky. Your mileage may also vary, depending on the software version and so forth. Anyways, so without watermarking, we have this random sampling. With watermarking on the right-hand side, we still have the random sampling. But in addition to just a random sampling being fully random, we have this watermarking key.
And this watermarking key is passed to the random seed generator to set a specific random seed, making this deterministic. But it’s essentially very similar, and like I mentioned, there’s a lot of benefit in terms of understanding things from scratch. And now we know essentially where this watermark is applied to. So this is essentially applied to the sampling. It’s not applied inside the LLM, which is actually cool knowledge.
So they don’t need to train a new LLM for that. They can just use an existing LLM, and they just apply it at this sampling stage. They don’t have to retrain anything or anything like that. So yeah, that is actually interesting, right?
26:13
How Watermark Detection Works
Slide 28 of 52, time stamp 26:21
But we are not quite done yet. I would also like to talk about how we can understand or see whether text is watermarked. So detecting the watermark is only possible if we have access to the key. So, for example, if we have these different texts, and essentially, after the text was generated, you find some random text on the internet (for example, you find this text number four here on the internet somewhere), you want to know: is this watermarked?
Well, it’s impossible to know because, in order to know, you would need the watermarking key. You need this scoring function, and then you have to score basically the text with a scoring function. And then the idea is that if the score is above a certain threshold, then the text is watermarked. Otherwise, it’s not watermarked. But as the end user, we can’t do this because we don’t have this key. So the key is not available to us.
Only Anthropic will have the key. However, in this blog post, they mentioned that they are providing it, of course, or they’re going to develop an API for that that they will make available. I don’t know. Honestly, I’m not affiliated. I don’t know the details. I was just reading this in this blog post. That’s all I know. So that API might as well be private for some companies, like, let’s say, X or Substack Notes, when they want to label AI-generated posts.
They may make it public for end users to use. Who knows? We will have to wait on that. But yeah, so the bottom line here is that watermark detection is only possible if we have this watermarking key or, of course, the API that they are going to develop.
28:00
How to Remove a Watermark
Slide 29 of 52, time stamp 28:03
现在,移除水印是一个有趣的问题。既然我们已经了解水印的工作原理,也知道了它的局限性。我的意思是,这高度依赖于特定位置的某些标记。例如,在这段文字中,如果这些着色的词语或标记是水印的位置,我们就可以通过修改这些位置来移除水印,对吧?如果我们改变这些位置的所有词语,就能100%成功破解这个水印。
不过,问题在于我们并不知道这些词语的位置,对吧?
第30张幻灯片(共52张),时间戳28:41
因为我们没有生成水印,所以不知道这些词语在哪里,也就无法确定需要查看哪些位置。在这种实际场景中,我们只能随机编辑文本。我们会随机更改几个词语,希望这些修改能覆盖足够的水印位置。这就是移除水印的一种方法。而且由于我们也不知道哪些词语的得分最高,因为这需要访问LLM并重新运行提示来确定哪些词语得分最高,我们只能进行猜测。
例如,我们可能会说:“哦,我们将'overcast'替换为'cloudy'”,因为我们不知道“gray”得分很高。在这种情况下,直观地说“gray”可能很合理,但可能也存在不那么直观的情况。我在这里想说明的是,这种文本编辑本质上是修改某些位置,但我们仍然在猜测哪些位置是水印的位置。
由于我们不知道这些位置,所以只是在文本中随机添加了一些词语。如果我们添加了足够的词语,同样可以破解水印。
30:17
水印评分函数的工作原理
第31张幻灯片(共52张),时间戳29:59
是的,这就是水印机制的核心。我提到过有一个评分函数用于判断某内容是否带有水印。作为补充内容,我想在这里简要解释一下这个评分函数的工作原理,因为这也是一个有趣的信息。这个过程有些复杂,但理解评分函数的工作原理并不是必须的。
他们之所以采用特定方式实现,是为了让检测过程更高效。否则,如果我们需要检查某内容是否带有水印,就需要重新运行提示来获取这些评分,然后应用水印随机种子生成文本,再进行比较。这将非常昂贵,因为这意味着要比较每个文本时都必须重新运行LLM。
你需要知道具体使用的是哪个LLM,这在实际操作中几乎不可行,因为你通常甚至不知道原始提示是什么,对吧?因此,他们采用了一种技巧,通过修改采样方式,使得在评分阶段不需要再次使用LLM。在博客文章中,他们提到这个方法源自一篇论文。
这是一篇《自然》期刊的论文,该方法被称为SynthID-Text。这可能是一年前或两年前发表的论文,由谷歌团队发布,他们使用了一种类似的称为Claude水印的技术。抱歉,我不确定他们是否使用了完全相同的技术,但这是他们提到的方法。
31:18
SynthID Text 与锦标赛采样
第32张幻灯片(共52张),时间戳31:39
那么它是如何运作的呢?在查看幻灯片之前,我们先来看一个常规的概述,这里有一些文本。我们将这些文本输入到大型语言模型(LLM)中,得到一个logit分布,然后从该分布中进行采样,从而获得输出token。在采样过程中,我们使用了水印密钥和随机种子生成器。因此,这个过程仍然是正确的,仍然是当前正在发生的事情,但可能在token的采样方式上有一些更细致的差别。
他们并不是仅仅使用像NumPy的random choice这样的方法,而是使用了更复杂的采样方式。
第33张幻灯片(共52张),时间戳32:16
假设我们的上下文是“今天的天气很冷”,我们需要生成下一个token。例如:“灰色”、“多云”、“阴郁”、“多云”。其中“灰色”的概率是50%,“多云”是30%,“阴郁”是15%。假设“多云”的概率是0.05,其余为0。当然,这里的情况会略有不同。假设这里的是“灰色”和“多云”,我在这里只是复用这张图。但现在想象这些是最可能的选项,比如“灰色”和“多云”,而其他所有选项的概率都非常低,除了“阴郁”和“多云”可能稍高一些。
本质上,我们可以简化这个例子,假设词汇量非常小,只有四个词而不是这里的50个词,这样更容易理解。正如我之前提到的,我们可以使用NumPy的random choice函数,根据这些概率来采样下一个token。
第34张幻灯片(共52张),时间戳33:13
我们还可以使用水印密钥和随机种子生成器,使过程变得确定性,从而获得我们想要的特定水印。但正如我之前提到的,这样做会非常昂贵。不是采样本身的问题,这并不重要,这个过程其实成本很低。但如果我们试图在互联网上检查随机文本时进行后续检测,成本会非常高。
第35张幻灯片(共52张),时间戳33:35
因此,他们采用了一种不同的方法,这种方法在采样和生成过程中使用,以便在后续的检测中可以重复使用。他们使用的方法叫做锦标赛采样(tournament sampling)。这替代了像random choice这样的方法,使用一种叫做锦标赛采样的概念。那么这具体是如何运作的呢?看起来可能有点复杂,但其实并没有那么复杂。
你可能需要暂停视频,花点时间仔细看看这张图。但我觉得实际上它比看起来要简单得多。一旦你理解了它的原理,就会发现其实非常直接。让我试着在这里解释一下。我们仍然有上下文,然后有这些可能的下一个token及其不同的概率。
现在他们引入了一个叫做随机水印函数的概念。
34:33
随机水印函数
第36张幻灯片(共52张),时间戳34:35
这里我们有三个水印函数,G1、G2和G3。实际上,他们可能有30个、50个甚至更多。在这里我只使用了三个,因为这样在这张幻灯片上更简洁。毕竟,它更小,也更适合放在幻灯片上。现在,如果我们看一下这个词“灰色”,它可能会给我们一个签名101。我的意思是,如果我们使用这个水印密钥生成随机种子,然后我们有三个函数G1、G2、G3。
如果我使用“gray”这个词,这里省略的是通常会将“gray”与上下文中前三个或四个词组合在一起。因此是“cold”和“gray”。如果我把这个词组与水印密钥一起输入G1,会得到值1。为什么?因为这就是这个函数的工作方式。它就像一个随机函数,随机函数会返回0或1。在这种情况下,使用这个随机密钥和这个标记,返回的是1。
使用相同的密钥但不同的函数,会得到值0。然后这里又得到1。因此,如果我们有更多函数(当然,30个函数),这将是一个非常长的0和1字符串。
第37张幻灯片(共52张),时间戳36:00
基本上就像一个位串,比如你有0和1的位。好的。所以这是针对“gray”的。通过使用这些水印函数,我们得到签名101。现在我们可以对所有其他词执行相同的操作。我们可以对“gray”、“overcast”、“gloomy”和“cloudy”执行相同的操作。因此,每个词在这里都有不同的签名。例如,“overcast”是0,1,0。
“gloomy”是0,0,1。“cloudy”是1,0,0。好的。现在我们有了这些位。下一步是所谓的锦标赛抽样,我们只需将它们配对。
36:36
锦标赛抽样步骤详解
第38张幻灯片(共52张),时间戳36:39
比如,就像足球锦标赛的淘汰赛阶段,或者美式足球的季后赛,你总是有两支队伍相互对抗。这基本上是同样的概念。我们有一对标记,它们本质上是相互对抗的。而得分来自这里的函数。我们从第一轮的第一个函数开始。因此我们有“cloudy”和“gray”。
我们在这里查找:“gray”是1,“cloudy”是1。好的。所以是1和1。“overcast”和“gray”。所以“overcast”是0,“gray”是1。因此我们有0,1。“gloomy”和“overcast”。所以这里我们有“gloomy”是0,“overcast”是0。因此是0,0。然后我们再次有“gray”和“gray”,因为我们快用完了。所以我们没有足够的其他标记。因此我们有一个重复项。
这是随机选择的。因此这里我们有1和1。现在我们查看结果。这是平局。在平局的情况下,我们也会使用随机种子和水印密钥进行随机选择。因此这里,“cloudy”存活下来。从这一组来看,根据G1,“gray”是胜者,因为它有1。因此“gray”存活下来。然后这里,“overcast”和“gray”平局,随机选择,“gray”也被随机选择。
现在我们有“cloudy”和“gray”以及“overcast”和“gray”。我们进行锦标赛的下一轮。在下一轮中,我们使用G2。根据G2,“cloudy”在这里是0。“gray”也是0。“overcast”是1。“gray”也是0,抱歉。因此,锦标赛的下一轮再次进行。
第39张幻灯片(共52张),时间戳38:24
我们再次出现平局。我们随机选择“gray”。这里我们有“overcast”作为胜者。因此我们有“gray”与“overcast”进入决赛。然后我们再次查看得分。“gray”是1。“overcast”是0。因此“gray”是胜者。这就是标记“gray”被抽样的方式。这里的水印密钥在做什么?如果我回到前几张幻灯片,水印密钥是用于通过这些随机水印函数生成这些得分的。
因此,水印密钥本质上决定了我们在这些阶段得到的值。因此,水印密钥仍然非常重要。否则,这些签名看起来会有所不同。
39:18
不重新运行LLM检测水印
第40张幻灯片(共52张),时间戳39:11
我们现在已经采样了下一个token。这正是这种修改后的采样过程的工作方式。我们本可以使用NumPy的random.choice。但这种方法的缺点是,如果我们想要对互联网上的随机文本进行评分,就必须重新运行LLM。使用这种技术时,我们不需要这样做。我稍后会向你们展示。因此,这种技术听起来非常奇怪且繁琐,但它的优势在于我们现在可以更轻松地对随机文本进行评分,而无需重新运行LLM。
本质上,这主要是为了使检测更容易且成本更低。
第41张幻灯片(共52张),时间戳39:43
第42张幻灯片(共52张),时间戳39:48
例如,如果我们有新文本。这里我只是使用相同的文本,但假设这是新文本。这是在采样之后,我们正在评分时的情况。假设我们在互联网上发现了这段文本,文本内容是"今天的天气很冷且'灰色'",我们想知道这是否是LLM生成的。在这种情况下,Claude/Anthropic会拥有水印密钥以及这些函数:G1、G2和G3。
他们会将这段文本输入这些函数。对于这里的"灰色"位置,我们会得到101,与生成过程中得到的结果类似。这与之前的情况相同。如果我们把这些位相加,会有两个位,对吧?这里分别是1和1。假设简化处理,这表示有两个位的信息。这只是个非常简单的示例。
假设在这里的"灰色"位置我们得到了2分。如果我们在这里使用了其他词,比如"多云",我们会得到1分;如果使用"阴郁",也会得到1分;如果使用"阴天",同样得到1分。我在这里只是对每一行进行求和,对吧?这就像我们在每个位置得到的评分。在这里我只关注最后一个位置。
如果我在其他位置执行此操作,会在不同位置得到不同的评分。例如,假设在第一个位置我得到2分。这里我也得到2分。对于"今天",我得到3分。对于"is",我得到2分。"冷",2分。"灰色",3分。在这里,我像之前幻灯片中展示的那样应用这些水印函数。
第43张幻灯片(共52张),时间戳41:33
我只是将这三个函数的数值相加。水印函数的计算成本非常低。因此,你只需快速在整个文本上运行这些函数,就能得到这些评分。然后基于这些评分,我可以计算平均位数。假设我将这里所有值取平均,假设得到2.23。
第44张幻灯片(共52张),时间戳41:55
现在,如果我有略微不同的文本,这里我将"今天"替换为"现在",将"灰色"替换为"多云"。这些现在分别得到1分和1分。如果我对整个字符串取平均,我会得到1.71。因此,对于这种情况,我无需使用LLM。我只需要水印密钥、随机种子生成器以及这些函数G1、G2和G3。这就是我所需要的一切。
我不需要LLM。我可以直接得到这里的评分。他们所做的就是应用一个阈值。
第45张幻灯片(共52张),时间戳42:27
因此,例如,他们并没有使用这个确切的阈值。但举个例子,我们可以这样说:如果得分大于2,那么文本是带水印的。如果得分小于2,那么文本不带水印。所以在这里,如果得分大于2,结果是肯定的。是的,这说明文本是带水印的。在本例中,1.71并不大于2,因此这段文本不带水印。好的,这就是我们检测互联网上随机文本是否带水印的方法。
本质上来说,这仅仅是应用这些水印函数,然后对得分进行平均并应用一个阈值。好的。
第46张幻灯片(共52张),时间戳43:13
因此,锦标赛采样的主要目的是让检测更容易且成本更低。我们也可以使用类似NumPy的随机选择函数,配合随机种子来使采样过程确定化。但再次强调,这样会很难对互联网上的任何文本进行评分。
43:26
水印概述与局限性
第47张幻灯片(共52张),时间戳43:30
是的,总结仍然是一样的。无水印和带水印之间的区别在于,我们使用水印密钥来控制这里的采样过程。在内部,我们使用了锦标赛采样。正如我之前提到的,检测水印需要密钥和水印函数G1到Gn。
第48张幻灯片(共52张),时间戳43:54
同样地,移除水印(我认为这可能对某些人来说很有趣),理想情况下需要修改所有这些位置的内容。但由于我们不知道哪些位置被加了水印,内部选择这些位置时会确保这些位置的token具有同等的可能性。但可能存在某些位置不符合这一条件。例如,对于“trees”这个词,我们可能甚至没有一个高得分的替代词,因此不会在该位置添加水印。
因此,水印本质上只在某些特定位置添加。由于我们不知道哪些位置需要被破解或移除水印,我们……
第49张幻灯片(共52张),时间戳44:29
……必须修改文本中的多个位置。我认为这对未来AI生成文本的影响是,这实际上……
44:34
对AI生成文本的影响
第50张幻灯片(共52张),时间戳44:36
……可能导致更差的AI生成文本。我认为,如果有人喜欢在互联网上到处使用AI生成文本,比如某个新闻网站喜欢用AI生成文本来撰写新闻,我认为水印技术未必能阻止他们这样做。他们可能仍然希望生成AI生成文本,因为这是他们工作流程的一部分。因此,我的猜测是,他们将使用另一个模型。
第51张幻灯片(共52张),时间戳45:08
他们将使用第二个模型来编辑文本,从而得到所谓的“编辑后AI生成文本”。这使得整个流程更加复杂。现在不是直接从Claude获取文本,而是使用Claude生成AI文本,再通过本地模型进行处理,最终得到的编辑后AI文本可能不再带水印。为什么使用本地模型?我认为使用本地模型是因为我认为所有提供方——不仅限于Claude,还包括Google——Google还写了这篇论文,对吧?
因此,我认为他们可能也在对Gemini文本进行水印处理。我认为OpenAI可能已经实施或即将实施类似措施。我的意思是,这只是一个推测,但在我看来,所有人都可能会采取类似措施,因为欧盟法规要求这样做。根据这篇博文,这似乎就是Claude采取该措施的原因。是的,我认为本地模型可能至少在目前还没有实现这种水印技术。
我认为人们会直接使用本地模型生成经过编辑的人工智能生成文本。我的猜测是,这种文本的质量会略微逊色于原始文本,因为对于本地模型,你现在可能使用的是一个规模较小的模型。也就是说,从技术上讲,你也可以直接使用本地模型生成文本。但在我看来,编辑文本比生成文本更简单。因此,在生成文本时,你可能会使用非常昂贵的高端模型,我不知道,比如最顶级、最昂贵的Claude模型来处理复杂文本。
然后,你使用成本更低的本地模型进行这些精准的编辑。这大概就是将要发生的事情。为什么质量会更差呢?如果我们回顾这张图表,其中我们只是随机添加了位置,你可能会仅仅为了改变而替换词语,这会增加文本变差的风险。因此,你仍然可能生成文本,但这种编辑方式显得有些生硬。
47:13
最后思考
第52张幻灯片,时间戳47:20
无论如何,我在这里的目标是解释水印技术的运作原理,而不是讨论其全球性影响。但希望这种幕后视角的解析对大家有所帮助。水印技术并不像看起来那么复杂,但在我看来,需要52张幻灯片来讲解,因此也不能算是特别简单的技术。希望你们觉得这个简短的讲座有所收获。是的,下次再见,到时候见。
PS:如果你喜欢这种风格的解析,我并不经常在YouTube上发布视频,但多年来我已经积累了超过300个视频,你可以在我的YouTube频道上找到它们。