Claude如何为AI生成文本添加水印
How Claude Watermarks AI-Generated Text
Sebastian Raschka在Substack发布视频讲座,详解Anthropic为Claude模型设计的文本水印机制。讲座从LLM文本生成原理讲起,说明水印通过秘密密钥和随机种子控制采样过程,采用SynthID-Text锦标赛采样方法,使检测无需重跑模型。水印检测需密钥和评分函数,可通过编辑文本移除。Raschka推测未来AI生成文本可能经本地模型二次编辑以规避水印。
我最近在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通常是如何在底层工作的。所以,是的,你可能知道我喜欢从头开始做事。比如,我有我的书:《从头开始构建大型语言模型》、《从头开始构建推理模型》。我有一些标记为“从头开始”的文章。所以,对我来说,“从头开始”通常包括编码。所以这次不会涉及编码,但从头开始编码实际上是一个非常非常有用的技术,因为它确实帮助你理解某事物是如何实现的。然后我们可以从中得出我们的理解、图表、概念,因为如果我们不真正实现事物,如果没有代码,有时真的会含糊不清。当然,你知道,正如我意识到的,不是每个人都在从头开始编码了。就像过去,从头开始编码是我们所拥有的一切。我的意思是,只有人类在编码。如今,编码可以由LLM完成。然而,这并不意味着阅读代码不再有用,因为它承载了大量信息。所以在这种情况下,对于这种水印,花时间从头开始编码一个LLM确实让你意识到内部采样是如何实现的。我们仍然有一些相关的代码片段。然后这反过来确实帮助我们理解,哦,水印是在这个位置应用的,这有如此这般的后果,等等。所以我认为,即使人们可能不再从头开始编码,至少不是一直如此,能够为了教育目的从头开始构建某些东西以深入理解某事,以及为了研究目的以透明的方式操作它,而不是隐藏在层层抽象中,仍然是有用的。但话说回来,我认为这里只是一个巧合的、很好的关系,因为对于这组幻灯片,我实际上使用了很多来自我“从头开始”编码材料的图表。
第3张幻灯片,共52张,时间戳3:58。所以几天前(这是8月14日),有这篇文章,《Claude的文本水印如何工作》,还有这篇文章;它就像屏幕录制,所以幻灯片里什么都有,但有很多细节。他们实际上更新了几次,所以最初我读的时候,它短得多。尽管如此,它仍然非常,我想,概念化;有这种概述,还有,我的意思是,里面没有一张图。所以仍然很难理解他们试图做什么。他们解释了很多关于他们为什么要这样做,但他们没有解释如何做。他们在某处链接了一篇论文,那篇论文也非常技术性。所以我认为也许退一步,从头开始理解他们试图用这种水印技术实现什么是有意义的。顺便说一下,水印的动机是让他们能够识别是否有人发布了某些文本,他们可以说,哦,这段文本是由我们的Claude Opus 4.8模型生成的,例如,这样他们就有办法判断,好的,这段文本是AI生成的,因为它带有这个水印。而这个水印对用户是不可见的,所以只有他们能解码并找出文本是否带有他们的水印。为什么只有他们能做到?我们稍后会在本视频中(希望不会太长)讲到,但一次只讲一件事。
5:38 LLM文本生成的工作原理
第4张幻灯片,共52张,时间戳5:35。所以我想从一个简短的序言开始,解释LLM中文本生成是如何工作的,因为基于此,我们可以更容易地理解水印是如何工作的,以及这实际上并不是在其之上的一个巨大、昂贵的东西。它真的只是常规文本生成过程中的一个小调整,我想。
第5张幻灯片,共52张,时间戳6:01。所以当我们使用像ChatGPT这样的东西时,例如,假设我问问题,“德国的首都是”,然后ChatGPT或其他LLM,这只是一个例子,会回答“柏林”。所以在这里,在这种情况下,它生成两个token,比如“柏林”和句号。但为了简单起见,让我们假设它生成一个token。所以下一个token是“柏林”token。这个token在内部是如何生成的?当我们在这里输入像“德国的首都是”这样的内容并收到像“柏林”这样的token时,幕后发生了什么?在幕后到底发生了什么?
第6张幻灯片,共52张,时间戳6:41。所以在接下来的几张幻灯片中,我想简要谈谈当这个下一个token生成时幕后发生了什么。
第7张幻灯片,共52张,时间戳6:50。所以再次假设我们的提示是“德国的首都是”。这里的第一步是将其转换为token ID。所以分词并将其转换为token ID是开始的主要步骤之一。这是外部的。它不在LLM内部;它在LLM外部。所以我们只是将文本转换为token ID。这只是嵌入层可以处理的格式。
第8张幻灯片,共52张,时间戳7:22。然后这通过LLM。LLM给我们下一个token的分数分布。
第9张幻灯片,共52张,时间戳7:31。所以再次,这只是LLM内部工作原理的简要概述。所以我不涵盖LLM机制本身。我在其他“从头开始LLM”视频和书中多次谈到过。重要的是,当我们生成下一个token(例如,“柏林”)时,我们此时有一个分数分布。所以这是LLM产生的输出。在这里,我们看的是logit值。所以这些只是从负无穷到正无穷的分数,比如一个分数范围。这里有一个例子,范围从大约-8或-9到20。我们可以将这些转换为概率分布,但技术上,根据我们如何采样,这不是严格必要的。但你可以将logit值视为原始分数。原始分数覆盖整个词汇表。
第10张幻灯片,共52张,时间戳8:39。这意味着LLM可能生成的每一个可能的词。现在,在词汇索引中,某个值(索引位置19,846)获得最高分。所以我展开了分布。如果你通过LLM运行这个提示,你甚至会看到更极端的情况:一切都非常非常接近零。而“柏林”可能会高得多。但只是为了向你展示几个峰值,让它看起来更有趣一点,我有点放大了;并稍微展开了分布。现在这里,“柏林”是最高分,因为你可以认为它是最可能或最合理的下一个token,如果我有这样一个非常具体的提示。其他的,我的意思是,可能是像“汉堡”或“慕尼黑”这样的词,LLM可能会猜错。但如今,一个LLM应该相当确定“柏林”是这里的正确答案。你在这里也看到词汇索引。所以那是覆盖整个词汇表的。如今,LLM有大约250,000个可能的输出token。我在这里从19,800截断到19,900,因为这张幻灯片上空间有限。如果我有一个非常现实的250,000词的词汇表,一切都会变得如此狭窄,以至于我们几乎无法在这个分布上分辨或看到任何东西。所以这只是为了教育目的而截断的。重要的一点是,在常规文本生成中,我们得到这个分数分布。现在,我们做的是看最高分。
第11张幻灯片,共52张,时间戳10:33。我稍后会详细说明这是如何选择的。所以不一定精确是最高分,但为了简单起见,假设我们在这里取最高分。在这种情况下,是19,846。
第12张幻灯片,共52张,时间戳10:52。然后这个分数被去分词化,我们得到“柏林”。所以这就是这张幻灯片上的过程:从输入提示到转换为token ID和分词,传递给LLM,得到这个分数分布,得到下一个token,并将其转换回文本。
第13张幻灯片,共52张,时间戳11:12。然后这个文本被附加到输入中。所以如果我们有一个需要多个输出token的问题,我们继续这个循环,直到答案完成。这通常意味着LLM生成一个文本结束token,例如,这里。为了简单起见,我只展示一次迭代,生成一个token。但是的,正如我所说,它会这样继续,我们将修改后的输入反馈给LLM进行下一轮。现在,我们实际上如何采样这个下一个token?
11:39 下一个token采样如何工作
第14张幻灯片,共52张,时间戳11:44。我简要说过,好吧,我们技术上可以选择最高分的一个,分数最高的那个。这被称为贪婪解码。这是一种方式。但大多数LLM,比如如果你使用它们,它们不会做贪婪解码,总是选择最高的那个。因为如果你用其他提示问它,它可能不是我们想要的总是最高分,因为那样它会记住训练数据。它总是会给出相同的响应等等。所以我们实际上经常希望输出有一些变化,但不要太多以至于生成随机的东西。所以它的工作方式是,当我们从这个分布中采样时,我们首先通常将其转换为概率分数。
第15张幻灯片,共52张,时间戳12:28。所以这里我只是在这个图中显示这些分数。我只是为了简单起见使用NumPy;无论你使用什么工具(例如,PyTorch),同样的概念适用。但让我们假设我们这里有NumPy中的分数。所以我会做的是计算softmax。技术上,我会使用例如Torch或PyTorch中实现的softmax函数,它对大值和小值都是数值稳定的,包括非常高的正值、非常低的正值和非常高的负值。这里我只是这样写出来。那是标准的softmax,只是为了更易读一点。但这里的细节不重要。
第16张幻灯片,共52张,时间戳13:20。重要的是,在这个转换之后,这里的分数,我的意思是,幻灯片上空间有限,但这里的分数,它们会加起来等于一。所以这本质上就像重新归一化。所以它们会被归一化,总和为一。这就是概率转换所做的全部:softmax转换。所以一旦我们有这些概率,我们可以使用一个随机数或随机采样算法。例如,在NumPy中,我们可以使用choice函数或方法。所以这是用一个特定的随机种子传递给词汇索引。然后,这是重要部分,我们将概率作为权重传递。所以,这些,本质上,是的,就像:“某个token被选中的可能性有多大?”所以,例如,如果“柏林”,在这个归一化步骤之后,softmax步骤,有99%的概率,而其他的加起来有1%的概率,那么如果我们采样100次,99次我们会得到“柏林”。在现实的LLM中,例如,训练良好的,“柏林”可能会收到99.999999或类似的概率。所以你几乎肯定会总是采样“柏林”,因为它非常确信答案在这种情况下是“柏林”。所以是的,这就是我们从这个分布中采样的方式。有像top-k采样或top-p采样这样的修改,其中,让我们说,为了简单起见,在top-k采样中,我们会选择前100个token,然后只对这前100个,分数最高的100个应用这个随机选择,这样我们就不会得到无意义的token。对于这个例子,这并不重要。我的意思是,这只是另一个要解释的东西,所以我略过了。所以你可以假设这已经是使用top-k或类似方法的前100个token。
第17张幻灯片,共52张,时间戳15:37。所以,例如,这里有一个例子。如果我们采样10,000次,“柏林”的概率非常高,99.9,我们会采样“柏林”9,997次,采样“Hal”这个词两次,和一个“Moh”。这些基本上是无意义的token。在这种情况下,LLM很少会产生无意义的内容,因为正如我之前提到的,我稍微展开了这个分布,让它更有趣。一个真正的LLM可能会10,000次中10,000次采样“柏林”,因为“柏林”的概率太高了。但这是为了说明目的。
16:19 从采样到水印
第18张幻灯片,共52张,时间戳16:21。现在我们简要讨论了LLM在幕后如何工作,我认为这本身就是一个有趣的概念。但我之前多次谈到过,所以我不想让你厌烦。我只是想为现在解释这种水印如何工作设置一些背景。
第19张幻灯片,共52张,时间戳16:41。所以,我们提到我们在采样时选择最高分的token。或者我们使用这种概率采样,这会导致大多数时候选择最高分的token之一。现在这里是没有水印的另一个例子。我稍微改变了提示。现在提示是:“今天的天气是‘冷’”,一个可能的答案可以是,例如,“灰”或“阴”。所以与“柏林”的例子相比,我会说“灰”和“阴”有点可以互换。它们都是这个提示的合理下一个token,考虑到完成这段文本或写下一个token的目标。所以选择哪一个几乎就像抛硬币。没有一个客观上比另一个差。所以当我们做随机采样时,因为它们也有相对较高的分数,而且它们的分数相似地高,因为它们都是合理的token,我们可能会得到其中一个。所以如果我们多次重复采样,几乎一半的时间我们会得到“阴”,几乎一半的时间我们会得到“灰”。这就是LLM经常在提供相同提示时最终得到不同答案的方式。如果你使用相同的提示并多次问LLM,你经常会得到略有不同的答案。那是因为在某些位置,两个可能的token几乎同样可能,所以它会选择其中一个。然后那个token会影响所有后续的token,等等。
18:23 随机种子和确定性采样
第20张幻灯片,共52张,时间戳18:25。现在,我想简要谈谈随机数生成。所以,例如,如果我们使用这样的随机数生成器,它会生成一个随机数序列。如果我再次运行它,这里的数字序列是不同的。所以你可以看到每次我们产生五个数字,它们都不同。如果我在这里设置随机种子,比如1、2、3,然后我多次运行它,我们仍然得到随机数,但它们现在都是相同的,对吧?所以它们仍然是随机的。如果我们使用随机种子,我们仍然得到彼此不同的随机数,但它们是可复现的。所以无论我们是否使用随机种子,我们仍然得到随机数。但使用随机种子,我们得到一个可复现的数字序列。所以记住这一点:这只是一个小的入门,我们稍后会使用这个概念。
第21张幻灯片,共52张,时间戳19:26。所以,例如,我之前提到,如果我们随机采样,我们可能会得到“灰”或“阴”。现在,如果我们使用一个特定的随机种子,比如42,我们总是会,例如,选择“阴”。我的意思是,这仍然是随机选择,但我们使其确定性。在这种情况下,给定这个提示,模型总是会选择“阴”。
第22张幻灯片,共52张,时间戳19:49。如果我们使用不同的随机种子,模型可能会选择“灰”。每次我们采样,它总是会选择“灰”作为下一个token。所以这仍然是随机采样,但我们基于随机种子使其确定性。
20:03 水印密钥如何工作
第23张幻灯片,共52张,时间戳20:04。所以,在水印中,Claude水印有点像设置一个随机种子的想法。但这个随机种子,而不是像一个基于固定数字的数字,我不知道,有人写下一个固定数字,他们使用一个秘密密钥,本质上像一个API密钥,一个秘密密钥,然后从那个密钥,连同前四个词,他们本质上推导出这个随机种子。但想法是,如果我回到上一张幻灯片,它和这里一样:本质上有一个固定的随机种子,那个随机种子总是选择相同的下一个token。好的,所以不是在这里使用随机种子99,例如,他们有一个秘密密钥,也使用关于前一个token的信息来推导这个随机种子。但稍后会有更多。
第24张幻灯片,共52张,时间戳21:06。所以想法是水印使文本生成在某些位置更加确定性。所以,例如,如果我们在左边有这些合理的文本。所以如果我有一段文本说,
今天的天气很冷,我可能会选择“阴”或“灰”。下一句可能是, 然后“轻”或“柔和” 它们又是可以互换的。 然后微风“移动”或“吹过”树林,街道似乎“安静”或“静止”。 这意味着基本上我可以说“安静”或“静止”。所以在文本中有某些位置,我们有token选择,它们几乎同样可能,就像我们之前看到的。所以这意味着,如果我们没有水印,如果我们运行提示,或者通过LLM给定提示,我们可能有时会得到这个答案,有时会得到那个答案,等等。基于位置的数量,我们可能有128个可能的答案。当然,文本越长,我们有越多可以互换术语的位置,组合越多,或者输出文本越多。所以,例如,再次,一个可能的输出文本可能是 今天的天气又冷又阴。一阵轻风穿过树林,街道似乎很安静。我想我会待在家里,喝杯茶看书。 所以那是一个可能的文本。另一个可能的文本是 今天的天气又冷又灰。一阵柔和的微风吹过树林,街道似乎很静止。我想我会待在室内,喝杯茶读小说。 顺便说一下,外面实际上也在下雨。我不知道这个麦克风有多好,但这是一个非常合适的背景。但是的,底线是你可以看到这里生成了两个非常合理的文本,还有更多的组合。它们都是合理的。没有一个必然比另一个好。它们只是,你知道,轻微的变化。如果我们不使用水印,我们可能会得到任何一个,或者只是随机的,对吧?因为随机采样,我们可能会得到其中一个或另一个。
第25张幻灯片,共52张,时间戳23:31。现在,如果我们固定随机种子,正如我之前提到的,例如,如果随机种子是99,我们可能总是得到这里的这个文本。所以,使用随机种子,我们可以固定我们得到哪个答案,因为那样随机采样仍然是随机的,但它是确定性的,因为它是可复现的。它总是会是一样的。好的,所以那仍然没有水印,现在有随机种子。
第26张幻灯片,共52张,时间戳23:59。水印本质上在做同样的事情。现在,而不是使用一个简单的随机种子,他们有一个所谓的随机密钥,这个随机密钥本质上参与选择文本。但我们已经可以说的是,在Claude博客文章中,他们说水印不应该使文本变差。如果我们看这个机制,是的,这就解释了为什么它不会使文本变差。顺便说一下,我不是在这里为水印辩护。我只是试图解释。所以请不要杀信使。但我想说的是,水印对最终用户来说,无非就是固定一个随机种子,使这种采样变得确定性,如果这说得通的话。
24:45 水印应用在哪里
第27张幻灯片,共52张,时间戳24:47。好的,所以到目前为止的总结是没有水印。我们经常在没有随机种子的情况下采样,因为我知道大多数人甚至不使用一个。老实说,我不认为你可以在Claude和OpenAI API中一定做到。我知道你可以在Ollama中做到,但我总是遇到一些问题,因为我在我的一本书的奖励材料中使用了Ollama来生成一些文本。我固定了随机种子,但它仍然不总是确定性的,等等。所以这很棘手。你的情况也可能不同,取决于软件版本等等。无论如何,所以没有水印,我们有这种随机采样。在右边有水印,我们仍然有随机采样。但除了完全随机的随机采样之外,我们还有这个水印密钥。这个水印密钥被传递给随机种子生成器,以设置一个特定的随机种子,使其确定性。但它本质上非常相似,就像我提到的,从头开始理解事物有很多好处。现在我们基本上知道这个水印应用在哪里。所以这本质上应用于采样。它不是应用在LLM内部,这实际上是很酷的知识。所以他们不需要为此训练一个新的LLM。他们可以使用现有的LLM,他们只是在采样阶段应用它。他们不必重新训练任何东西或类似的事情。所以是的,这实际上很有趣,对吧?
26:13 水印检测如何工作
第28张幻灯片,共52张,时间戳26:21。但我们还没有完全完成。我还想谈谈我们如何理解或看到文本是否被水印。所以检测水印只有在我们有密钥的情况下才可能。所以,例如,如果我们有这些不同的文本,本质上,在文本生成后,你在互联网上找到一些随机文本(例如,你在互联网某处找到这里的第四段文本),你想知道:这是水印的吗?好吧,这是不可能知道的,因为要知道,你需要水印密钥。你需要这个评分函数,然后你基本上必须用评分函数对文本进行评分。然后想法是,如果分数高于某个阈值,那么文本是水印的。否则,它不是水印的。但作为最终用户,我们不能这样做,因为我们没有这个密钥。所以密钥对我们不可用。只有Anthropic会有密钥。然而,在这篇博客文章中,他们提到他们当然会提供它,或者他们将为此开发一个API,他们将使其可用。我不知道。老实说,我不隶属于他们。我不知道细节。我只是在这篇博客文章中读到的。这就是我所知道的。所以那个API可能是私有的,为一些公司,比如,让我们说X或Substack Notes,当他们想要标记AI生成的帖子时。他们可能会为最终用户公开使用。谁知道呢?我们必须等待。但是的,所以这里的底线是水印检测只有在我们有这个水印密钥,或者当然,他们将开发的API的情况下才可能。
28:00 如何移除水印
第29张幻灯片,共52张,时间戳28:03。现在,移除水印很有趣。所以既然我们知道水印如何工作,我们也知道缺点。我的意思是,这真的高度依赖于特定位置的特定token。所以,例如,在这段给定的文本中,如果这些彩色的词或token是水印位置,我们知道我们可以通过编辑来移除水印,对吧?如果我们改变所有这些位置的词,我们就能100%击败这个水印。现在,问题是,我们不知道,对吧?
第30张幻灯片,共52张,时间戳28:41。所以我们不知道这些词在哪里,因为我们没有生成水印。所以我们不知道要看哪些位置。所以实际的场景是我们可以随机编辑文本。我们会随机改变几个词,希望我们改变足够多的位置来编辑水印。那将是移除它的一种方式。而且由于我们也不知道哪些是最高分的,因为那需要我们访问LLM并重新运行提示通过LLM来找出哪些词是最高分的,我们只能猜测。所以,例如,我们可能会说,哦,我们把“阴”替换为“多云”,因为我们不知道“灰”是高分,你知道吗?所以在这种情况下,说“灰”可能是直观的,但可能有情况不是那么直观。所以我想在这里说明的只是一些一般的文本编辑,我们修改位置,但我们仍然在猜测水印位置是什么。所以既然我们不知道,我们只是在这里那里添加了几个词。如果我们添加了足够的词,那也会击败水印。
30:17 水印评分函数如何工作
第31张幻灯片,共52张,时间戳29:59。所以是的,那就是水印的概要。我提到有一个评分函数来找出某物是否被水印。我想在这里作为奖励做一下。这已经是一个很长的视频了,但作为奖励,我想简要解释一下这个评分函数是如何工作的,因为那也是有趣的信息。这有点复杂。理解评分函数如何工作并不是必需的。但他们以某种方式这样做的原因是为了使检测更便宜。因为否则,如果我回到一张或两张幻灯片,如果你想检查某物是否被水印,即使他们想检查,他们必须重新运行提示来获得这些分数,然后应用这个水印随机种子来获得这个文本,然后比较。那会非常昂贵,因为那样基本上每段你想比较的文本,你都必须重新运行LLM。你必须知道是哪个LLM,那真的不可行,因为你经常甚至不知道提示,对吧?所以是的,所以他们有一个技巧,我会说,修改采样,这样你以后在评分阶段就不使用或不需要LLM。在博客文章中,他们提到他们从一篇论文中推导出这个方法。那是一篇Nature论文,这个方法叫做SynthID-Text。所以那是大约一两年前出来的一篇论文。它来自Google,他们使用类似的技术,他们称之为Claude水印。我不知道,抱歉,我不知道他们是否确切使用那种技术,但那是他们提到的。
31:18 SynthID文本和锦标赛采样
第32张幻灯片,共52张,时间戳31:39。那么它是如何工作的?所以之前我们看幻灯片时,我们看了常规的,让我们说,概述,我们有一些文本。我们把它通过LLM。我们得到这个logit分布,然后我们从分布中采样并得到输出token。在这里,在采样过程中,我们使用水印密钥和随机种子生成器。所以这仍然是正确的。这仍然是正在发生的事情,但这里对于这个token如何被采样有更多的细微差别。所以他们不只是使用,让我们说,NumPy的随机选择。他们使用更复杂一点的东西。
第33张幻灯片,共52张,时间戳32:16。所以假设,再次,我们的上下文是“今天的天气很冷”,我们想生成下一个token。所以,例如:“灰”、“阴”、“阴沉”、“多云”。“灰”是50%的概率,“阴”是30,“阴沉”是15。让我们说“多云”是0.05,其余的是,让我们说,0。这里看起来当然有点不同。让我们说那是“灰”和“阴”。我只是重用这个图。但现在想象这些是最可能的,比如“灰”和“阴”,其他一切都很小,除了“阴沉”和“多云”,也许。所以本质上,想想这个例子中只有四个词的一个非常小的词汇表,而不是这里的50个词,只是为了更简单。现在,正如我之前提到的,我们可以使用NumPy的随机选择,用这些概率来采样下一个token。
第34张幻灯片,共52张,时间戳33:13。我们可以使用水印密钥和这个随机种子生成器来使其确定性,并得到我们想要的特定水印。但正如我之前提到的,这会非常昂贵。不是采样本身。那没关系。这很便宜。但如果我们试图检查互联网上的随机文本,后来的检测会非常昂贵。
第35张幻灯片,共52张,时间戳33:35。所以相反,他们使用的,他们也在采样期间,在生成期间使用,以便以后在检测期间可以重用。他们使用的叫做锦标赛采样。所以这不是使用像随机选择这样的东西,他们使用一个叫做锦标赛采样的概念。那么它是如何工作的?它可能看起来有点复杂,但老实说,它看起来比实际复杂得多。所以你可能必须,我想,在某个时候停止视频,然后稍微思考一下这个图。但我认为它实际上比看起来简单。就像一旦你掌握了它,它就非常直接。但让我试着在这里解释。所以我们仍然有这个上下文,然后我们有这些可能或合理的下一个token,带有这些不同的概率。现在他们有他们所谓的随机水印函数。
34:33 随机水印函数
第36张幻灯片,共52张,时间戳34:35。这里我们有三个水印函数,G1、G2和G3。在现实中,他们可能有30、50甚至更多。这里我只用三个,因为在这张幻灯片上更简单。它更小,你知道,更适合幻灯片。现在,如果我们看这个词“灰”,这可能会给我们一个签名101。我的意思是,如果我们使用这个水印密钥来生成这个随机种子,我们有三个函数,G1、G2、G3。如果我把“灰”这个词放进去,我在这里跳过的是通常你把“灰”这个词连同上下文中的前四个或三个词一起放进去。所以是“冷”和“灰”。如果我把那个放进G1,连同这个水印密钥,我得到值1。为什么?好吧,这就是这个函数的工作方式。它就像一个随机函数。随机函数要么返回0要么返回1。在这种情况下,用这个随机密钥和这个token,它返回1。用相同的密钥,但不同的函数,你得到值0。然后这里你又得到一个1。所以如果我们有更多的函数(当然,30个函数),这将是一个非常长的1和0的字符串。
第37张幻灯片,共52张,时间戳36:00。它基本上就像一个位字符串,就像如果你有0和1的位。好的。所以这是针对“灰”的。所以我们通过使用这些水印函数得到签名101。现在我们可以对所有其他的做同样的事情。所以我们可以对“灰”做。我们可以对“阴”、“阴沉”和“多云”做。所以每一个都有不同的签名。所以,例如,“阴”是0、1、0。“阴沉”有0、0、1。“多云”有1、0、0。好的。所以我们现在有这些位。下一步是所谓的锦标赛采样,我们只是将它们配对。
36:36 锦标赛采样逐步进行
第38张幻灯片,共52张,时间戳36:39。就像,你知道,像足球锦标赛,淘汰赛阶段,或者像美式足球的季后赛,你总是有两支球队互相比赛。这有点像同样的想法。我们有一对token,它们本质上互相比赛。分数来自这里的这些函数。所以我们从第一轮的第一个函数开始。所以我们有“多云”和“灰”。所以我们在这里查:“灰”是1,“多云”是1。好的。所以1和1。“阴”和“灰”。所以“阴”是0,“灰”是1。所以我们有0、1。“阴沉”和“阴”。所以这里我们有“阴沉”0,“阴”0。所以0、0。然后我们又有“灰”和“灰”,因为我们用完了。我们没有足够的其他的。所以我们有一个重复。所以这是随机选择的。所以你在这里有1和1。现在我们看结果。所以这是一个平局。在平局的情况下,我们也使用随机种子和水印密钥随机选择。所以这里,“多云”幸存。从这个,G1是,根据G1,“灰”是赢家,因为它有1。所以“灰”幸存。然后这里,“阴”和“灰”是平局,随机选择,“灰”也是随机选择的。所以我们现在有“多云”和“灰”以及“阴”和“灰”。我们在这个锦标赛中玩下一轮。所以在下一轮,我们使用G2。所以根据G2,“多云”这里有一个0。“灰”也有0。“阴”有1。“灰”也有0,抱歉。所以,锦标赛的下一阶段再次。
第39张幻灯片,共52张,时间戳38:24。所以我们有一个平局。我们随机选择“灰”。这里我们有“阴”作为赢家。所以我们有“灰”对“阴”在决赛中。然后我们再次看分数。所以“灰”有1。“阴”是0。所以“灰”是赢家。这就是token“灰”被采样的方式。水印密钥在这里做什么?所以水印密钥,如果我回到几张幻灯片,被选择用于使用这些随机水印函数生成这些分数。所以水印密钥本质上决定了我们在这些阶段得到的值。所以水印密钥仍然非常重要。否则,这些签名会不同。
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。对于“是”,我得到一个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。可能有些位置不是这样。所以这里,例如,对于“树”,我们甚至可能没有一个高分替代词,所以他们不水印那个位置。所以他们本质上只在某些位置做水印。既然我们不知道哪些位置要击败或移除水印,我们会...
第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生成文本,这可能不再被水印。那么为什么是本地模型?我只是认为本地模型,因为我认为所有的提供商——专有的LLM,不仅Claude,还有Google——我的意思是,Google写了这篇论文,对吧?所以我认为他们也在给Gemini文本加水印。我认为OpenAI可能已经在做或也将这样做。我的意思是,我只是在推测,但我想象每个人可能都会做类似的事情,因为有欧盟法规要求这样做。根据博客文章,这显然就是Claude这样做的原因。是的,所以我认为本地模型可能不会,至少现在不会,实现这种水印。所以我认为人们只会使用一个本地模型,然后生成编辑过的AI生成文本。我的猜测是它会比原始文本稍微差一点,因为对于本地模型,你现在可能使用一个更小的模型。所以,我的意思是,你也可以技术上直接使用本地模型生成文本。但在我看来,编辑文本比生成文本更简单。所以对于文本的生成,你可能会使用一个非常昂贵的高端,我不知道,像最高级、最昂贵的Claude模型来处理复杂的文本。然后你使用一个更便宜的本地模型来进行这些外科手术式的编辑,本质上。那可能是将要发生的事情。为什么更差?所以如果我们回头看这个我们只是添加随机位置的图形,你可能只是为了改变而改变词。然后它冒着使文本变差的风险。所以你仍然可能有生成的文本,但它有点像被尴尬地编辑了。
47:13 最后的想法
第52张幻灯片,共52张,时间戳47:20。但无论如何,所以我的目标是解释水印如何工作,而不是,让我们说,这在世界范围内的影响。但我希望这种幕后、底层视角是有用的。水印并不像看起来那么复杂,但我认为它仍然是52张幻灯片,所以也不是非常琐碎。所以我希望你发现这个小讲座有用。是的,直到下次,再见。
PS:如果你喜欢更多这种风格的解释,我不定期在YouTube上发布视频,但多年来我已经积累了超过300个视频,你可以在我的YouTube频道找到。