大家好,这里是喜欢默默潜水的小A。在L站也潜水很久了,也从很多佬友中学到了很多东西。每当看到大佬们无私贡献自己的知识或者资源,我都在想,作为一名佬友,我能为L站分享什么东西?思来想去,总感觉自己太菜了,好像没什么可以分享。但有一天在总结论文时,突然想到,要是给大家科普科普我现在做的东西,会不会有人感兴趣呢?于是带着这念头,我打算以科普的形式,简单易懂的为佬友们介绍一下我目前的研究领域——大模型生成文本水印,中的经典和前沿论文。
有这个想法并决定在L站写科普的原因:一、站内有挺多佬友都是因为AI和大模型应用的使用者;二、想着让更多人了解并对这个领域产生兴趣;三、也是自己回顾所看论文的备忘录。
第一次尝试写这类科普性文章,目前打算尽可能以图例的形式展示,做到未接触过这个领域的人也能看明白。如有不足,请各位佬友指正。也欢迎佬友来探讨~
科普第一帖:大模型生产内容水印背景介绍
作为科普系列的第一篇,我想先给佬友们介绍一下大模型生成内容水印的背景,让大家明白为什么我们要研究它,以及它能干什么,我尽可能简单易懂的描述,让大家能够看明白。
从GPT3.5进入大众视野以来,我们的生活工作学习越来越离不开大模型的帮助。大模型的文本生成质量随着技术的发展越来越高,到现在也越来越难分辨一段文本或者是文章是人类写的还是大模型生成的。这一方面极大的便利了大家的工作学习生活,比如我时常会让大模型帮我写项目本子、根据我的思路生成代码、帮我润色论文等等,对于大家来说,还时常看到佬友们用大模型来沉浸式翻译、写小说、完成大作业、把大模型调教成猫娘
;但另一方面,大模型生成文本也会给社会带来危害,比如使用大模型生成虚假新闻、错误知识、滥用大模型生成的文本散布低质量内容或者是应付各类作业、生成学术论文用于投稿等等。此外,这些生成的内容充斥在互联网又会导致大模型训练的数据包含这些内容,导致大模型的能力下降。因此是十分需要研究开发有效的技术来保持生成式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官网给的生成文本的水印过程演示:

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,这样开发人员就可以利用这项技术进行构建,并将其纳入自己的模型中。感兴趣的佬友可以去试试。





