【大模型生成文本水印科普】你悄悄用大模型完成的作业真的不会被发现吗?(补充)

大家好,这里是喜欢默默潜水的小A。在L站也潜水很久了,也从很多佬友中学到了很多东西。每当看到大佬们无私贡献自己的知识或者资源,我都在想,作为一名佬友,我能为L站分享什么东西?思来想去,总感觉自己太菜了,好像没什么可以分享。但有一天在总结论文时,突然想到,要是给大家科普科普我现在做的东西,会不会有人感兴趣呢?于是带着这念头,我打算以科普的形式,简单易懂的为佬友们介绍一下我目前的研究领域——大模型生成文本水印,中的经典和前沿论文。
有这个想法并决定在L站写科普的原因:一、站内有挺多佬友都是因为AI和大模型应用的使用者;二、想着让更多人了解并对这个领域产生兴趣;三、也是自己回顾所看论文的备忘录。
第一次尝试写这类科普性文章,目前打算尽可能以图例的形式展示,做到未接触过这个领域的人也能看明白。如有不足,请各位佬友指正。也欢迎佬友来探讨~

科普第一帖:大模型生产内容水印背景介绍

作为科普系列的第一篇,我想先给佬友们介绍一下大模型生成内容水印的背景,让大家明白为什么我们要研究它,以及它能干什么,我尽可能简单易懂的描述,让大家能够看明白。

从GPT3.5进入大众视野以来,我们的生活工作学习越来越离不开大模型的帮助。大模型的文本生成质量随着技术的发展越来越高,到现在也越来越难分辨一段文本或者是文章是人类写的还是大模型生成的。这一方面极大的便利了大家的工作学习生活,比如我时常会让大模型帮我写项目本子、根据我的思路生成代码、帮我润色论文等等,对于大家来说,还时常看到佬友们用大模型来沉浸式翻译、写小说、完成大作业、把大模型调教成猫娘 :tieba_024:;但另一方面,大模型生成文本也会给社会带来危害,比如使用大模型生成虚假新闻、错误知识、滥用大模型生成的文本散布低质量内容或者是应付各类作业、生成学术论文用于投稿等等。此外,这些生成的内容充斥在互联网又会导致大模型训练的数据包含这些内容,导致大模型的能力下降。因此是十分需要研究开发有效的技术来保持生成式AI的透明度、问责制和负责任的使用。

应对这些挑战的一种可能的解决方案是简单地记录大模型生成的所有内容,如图所示。 可以检索此类记录来验证是否有任何内容是人工智能生成的。 该解决方案存在许多限制:(1)需要大量存储和跨组织协调; (2) 它引起了隐私问题,因为记录可能会暴露与大模型的私人交互; (3)不能应用于开源模型。

另一种替代方案是对大模型生成的内容进行事后检测,通常依靠(可能学习到的)统计特征来区分人类创建的内容和人工智能生成的内容(说人话就是大模型生成的文本和人说话还是存在一定区别),如下图所示。 在大模型开发的早期阶段,这种方法还是挺有用的——生成的图像经常表现出可识别的伪影,例如渲染手有7个指头,生成的文本包含不同的风格标记。 然而,随着大模型技术的发展,它们的输出变得越来越真实,这些表面的可区分的特征基本上消失了。 人类和 大模型输出之间的界限越来越模糊,依赖于固有差异的检测工具很难跟上大模型发展的步伐。 例如,OpenAI 的人工智能分类器旨在检测人工智能编写的文本,但由于其准确性低且性能不一致而最终被弃用,这凸显了事后方法的局限性。

水印为这个问题提供了一个潜在的更强大和可靠的解决方案。 与被动地尝试检测人类和人工智能生成的内容之间的偶然差异的方法不同,水印涉及在生成时在大模型输出中主动嵌入难以察觉的信号。 此水印过程巧妙地修改了输出,同时保持其预期含义和外观,嵌入隐藏但一致的信号,作为大模型生成内容的可验证标记。注意这种通过这种方式生成的带有水印的内容基本上是人类无法分辨的,但是通过特定的检测手段可以判定一个内容是否是大模型生成。这项技术不受大模型不断发展的能力的限制,而是提供了一种深思熟虑且持久的识别方法。 水印可以稍后检测到,从而无需依赖固有或统计差异即可进行验证,从而提供一种更具弹性的方式来区分机器生成的内容和人类工作。只要大模型服务提供商采用了这项技术,就可以有效的对生成内容进行识别和归因。

那么回到这篇帖子的标题:你悄悄用大模型完成的作业真的不会被发现吗?答案是:如果你恰好使用了带有水印功能的大模型生成了文本,那这些文本是可以被检测出为大模型生成的。 这里注意我说了带有水印功能的大模型,那么现在是否存在常用的大模型公司为大模型加入了这个功能呢?答案是:存在。 谷歌deepmind在24年10月,在Nature发表了一篇名为:Scalable watermarking for identifying large language model outputs的论文,详细介绍了其为大模型生成文本加入的水印技术,同时谷歌deepmind已经将其应用到大模型生成的内容中,包括视频、图片等,详见:SynthID。可以说未来对生成内容的检测是一个必然的需求。

到这里佬友们可能会问了:如果我不直接复制大模型生成的文本,而是一个字一个字的打字输出,是不是就能破坏嵌入的水印了?如果我拿到大模型生成的文本,再将其翻译成另一种语言,是不是就可以避免检测?如果我只是使用大模型生成了部分内容,其他内容是我自己写的,或者我只选择了大模型生成的内容中的片段,是否还能检测到水印?对于以上问题,我的答案是:理论上,这些方式处理后的内容,仍然能够被检测到水印。

那么是否有方法能够比较有效的破坏水印呢?这就要让我们在后续科普中,对这些水印技术进行介绍后,大家自然就能够看到哪些方式对这类技术的破坏较强,哪些没有作用。因为研究生活任务繁重,更新可能较慢甚至弃坑,如果有佬友对这类技术感兴趣或者是也是从事该领域的研究,我会尽量更新,也欢迎来一起共建文档。

———————————这是分割线————————————

自从本文发布以来,收到了很多佬友的鼓励与提问,也让我感受到自己的研究貌似有点点小用hhh,也同时感受到:通过回答和探讨问题,发现了自己对之前看完的论文的理解可能存在不到位,需要反复回看和推敲。不过近期实在是忙不过来,无法进行第一篇论文科普的文章,但看到许多佬友的期待,再加之回过头再看了自己写的,感觉对大模型水印的描述有点太泛了。于是打算以SynthID为例,极简的描述一下现有的水印方案是如何在文本中嵌入水印并检测的,希望能让佬友们对水印的思路有个更具体的了解。

首先,需要补充一个很简单的前置知识:大模型在生成一段文本时,是一个token一个token的生成的,每个token都是从一个词汇表中选择的。为了便于理解,大家可以简单的把token看作一个单词(虽然这是不准确的),词汇表就是大语言模型自己的词典,它生成的所有单词都来自这个词典。那么更进一步,大模型是如何选择单词的呢?我们到大模型生成文本的过程中来,给定一个的prompt,大模型开始生成文本。假设现在生成了t-1个单词的文本,那么接下来大模型需要生成第t个单词,此时大模型根据prompt和前面的生成t-1个单词的内容,去从词汇表中选择合适的单词作为第t个单词,那么这一过程中,大模型会为词汇表中的单词分配其对应的logits,logits可以简单的理解为大模型对单词的打分,分越高的单词说明越适合被选择作为第t个单词。如果将这些logits归一化,那就能够得到单词的概率分布,每个单词有一个自己的被选中的概率,越合适的单词,选中的概率越大。 然后大模型再使用合适的采样方法,选择出最终的第t个单词。如此往复,大模型就生成了整个文本。下图展示了生成一个token的示例:

那么对于水印是如何在生成的过程中加入到文本的呢?我贴上SynthID官网给的生成文本的水印过程演示:
Fig_1

PS:如果感兴趣也可以看看SynthID官网的宣传视频 https://www.youtube.com/watch?v=9btDaOcfIMY&t=88s,里面也有介绍。

我们看到,在不影响输出质量、准确性和创造性的情况下,SynthID 其实是通过调整每个预测标记的概率分数,去影响生成,以此来实现水印嵌入。

至于SynthID是通过什么样的方法去调整并选择到token的,一个简单的概括就是它使用了多个伪随机的打分器,让这些token进行多轮淘汰赛,每轮竞赛使用不同的打分器,选择最终“胜出”(最后一轮打分最高)的token。更详细的内容请允许我把这部分内容放到这篇论文的科普中讲解。

那么检测水印如何进行呢,对于一个可疑的文本,只需要遍历每个token,使用同样的伪随机打分器,对其进行同样的淘汰赛,累加所有token的分数,分越高的文本,越有可能是采用了这些伪随机打分器的进行水印的大模型生成的文本。这里的伪随机打分器,其实就是上面水印概述图中的水印密钥。有了水印密钥,其他模型生成的文本,或者是人类文本被误判的概率就会极大的降低,因为你很难恰好让其他模型或者不带水印的模型生成的文本中的大量token都被打高分。这个特点也希望能稍微解答后来者和回帖中部分佬友的疑惑。以下是Syntid官方的一个演示效果展示:


值得一提的是,SynthID现在集成到huggingface的transformers库中,同时在huggingface上提供了这项技术https://huggingface.co/spaces/google/synthid-text,这样开发人员就可以利用这项技术进行构建,并将其纳入自己的模型中。感兴趣的佬友可以去试试。

111 个赞

太牛啦!!!L站就需要这种硬核但易懂的科普:tieba_087::tieba_087::tieba_087:

8 个赞

感谢回复~希望能给佬友一点收获

4 个赞

通俗易懂

3 个赞

感谢佬分享

2 个赞

将AI生成的文本

用自己微调的2个不同厂商的开源模型

重新整理语言输出成2份文章

隔段,采用不同模型生成的段落,交叉排列生成新的文章

再用 python 脚本进行同义词替换

8 个赞

感谢讲解

佬友提到的思路很好,能够攻击成功部分水印方案。按照学术中的攻击大致可以分为两种攻击:

  1. 重新整理语言输出成两份文章,这实际上是对文本进行释义攻击(比如:原本生成的语句是:She was happy. 变成 She felt delighted)
  2. 将2份文章的段落交叉排列,实际是将两份释义后的文本重新组合为一份文本
  3. 同义词替换攻击。

但就目前的先进的理论研究而言,这两类攻击是已经不足以破坏水印了。
首先,现有水印方案大多都是语义级别的,只要释义攻击不严重破坏原始文本的语义,这类攻击时无法完全导致水印无法检测的,同理,同义词替换也不太能完全破坏水印。然后是交差排列重组,这其实不影响水印的检测。

4 个赞

水印就相当于一些有标志性的锚定点之内,不去除就能看出来吗?那会不会有一些人专门去研制那些用于破坏水印的ai工具 :thinking:

那这种岂不是误伤很多

假如AI使用了一个人的大量内容训练,这个人再自己写文章,文笔肯定都是近似的,这就会被判定为AI了

1 个赞

佬友的提的这个问题很不错,我逐一回答一下:
首先”不去除就能看出来“,人是看不出来的,但是检测算法能判断出来。
第二个,破坏的工具就是我们研究中提到的攻击手段的应用,首先需要明确一点是,目前大模型生成文本水印是前沿性技术,攻击和防御是不断相互对抗的过程。对于现有的一些算法和方案,可能同义词替换、删除、重写等攻击就能够破坏水印,但随着方案的发展,也有新的方案能够抵御这些攻击。
对于破坏水印的AI工具,这对水印后文本存在能够学到的特征的水印方案,这是可行的。但在更新的方案中,有很多基本在理论上做到了”不可检测性“,即不给定密钥和有限次查询中,水印是不可检测的,在这些论文中确实没有提及使用模型训练一个对抗性的去水印的工具,所以不太能确定是否能训练一个AI工具能够有效去除这些方案的水印。

5 个赞

佬友问的这个问题是很有意思的,这是关于AI提供方是恶意的情况。如果一个大模型提供商恶意使用一个人的内容进行大量训练,同时自己提出一个仅仅基于语义判断的水印方案,使得对这些语义相近的内容的判断都是AI,我认为这是可能的。

但这和我这里所提到的大模型生成内容水印的威胁模型是不同的,我这里所说的是AI提供方是善意的,水印针对的是生成文本被滥用的情况。

那如果换一种说法:如果大模型在训练时,在对某个知识上引入了过多某个人的内容,导致生成的内容与某个人的内容在语义上很相似,这会导致误伤吗?这里就涉及到一个概念:误报率(FPR),意思是将人类文本判断为AI生成。对于这种情况,在现有前沿的水印方案中,对误报率都有严格的控制并且基本不会有很大的误判。

原因
水印方案能够有效解决误报率的能力有俩(不一定同时包含):

  1. 水印方案是带有密钥的,密钥决定了应该生成什么样的文本,一个直观但不严谨的说法是,密钥使生成的文本具有某种模式,而人类书写的文本不具有这种模式,即使语义很像,但造成误报的概率不高。但值得一提的是,检测率和误报率确实是需要权衡的东西。根据所需要应用的环境,可以具体的调节。
  2. 水印方案可以嵌入有意义的消息,经过水印文本是能够检测出具体的消息的,但是人类文本不可能正巧检测出对应的消息。这类方案能进一步解决误报的问题。

图片水印应该比较成熟了,文本水印目前还没看到成熟方案。
这个问题非常有挑战,效率+质量+鲁棒性=不可能

是的,所以也是研究的热点,不过目前deepmind提出的synthID看论文的说明的话确实有点意思,也已经是产品了,应该还是有点用

具体原理不是很了解,但是短文本或者像素内容很少的图片,水印方案是不是就不太可行了呢?

1 个赞

是的,很敏锐,水印要嵌入到文本中或者图片中,要能很好的检测到的一个条件就是有足够的,什么意思呢,就是一个文本的内容的不确定程度(就比如“She is happy and wanna go out to play sports”的熵就比“L站的站长是Neo”的熵更高,因为后者更倾向于答案,答案是固定的,熵就低)或者是图片像素的冗余程度(图片这里我不是专业的,只是不专业 的表达)。那么影响熵的其中一个因素就是长短,如果一个文本太短了,能够提供的熵有限,那么水印就很难嵌入。这也是目前研究中所提及的挑战之一,很多研究者也在想法子在低墒文本中嵌入水印。

5 个赞

不错不错,继续加油。学到了

不错的知识帖 :+1: 解决了我的疑惑

如果用AI翻译文本,输出后的文本里会有水印吗

同样的,如果翻译的文本的足够,也是带有水印的,不过我的直觉上(并未仔细论证),翻译文本所提供的熵相对偏低,水印嵌入更困难一点。水印的嵌入过程在文本生成阶段(当然,这都取决于大模型服务提供商真的采用了水印技术)。同理,将文本交给大模型润色,如果满足条件,也应该会带有水印。

2 个赞