SynthID:用于为 LLM 生成的文本添加水印和检测此类文本的工具

生成式人工智能 (GenAI) 可以以前所未有的规模生成更多种类的高度多样化内容。虽然大多数此类用途都是出于合法目的,但我们担心这可能会导致虚假信息和归因错误问题。添加水印是缓解这些潜在影响的一种方法。我们可以将人眼无法察觉的水印应用于 AI 生成的内容,检测模型可以为任意内容评分,以指明其被添加水印的可能性。

SynthID 是 Google DeepMind 推出的一项技术,可通过将数字水印直接嵌入到 AI 生成的图片、音频、文本或视频中来为 AI 生成的内容添加水印并对其进行识别。SynthID Text 已开源,以便开发者使用文本生成水印功能。如需更完整地了解该方法的技术说明,请参阅Nature 中的论文。

Hugging Face Transformers v4.46.0+ 中提供了 SynthID Text 的正式版实现,您可以在官方 SynthID Text Space 中试用。GitHub 上还提供了参考实现,对于希望将此技术引入其他框架的开源维护者和贡献者来说,可能很有用。

水印应用

实际上,SynthID Text 是一种 logits 处理器,会在 Top-K 和 Top-P 之后应用于模型的生成流水线,它使用伪随机 g 函数增强模型的 logits,以编码水印信息的方式帮助您确定文本是否由模型生成,而不会显著影响文本质量。如需查看该算法的完整技术说明以及对不同配置值对性能的影响的分析,请参阅论文

水印已配置为对 g 函数及其在生成期间的应用方式进行参数化。您使用的每个水印配置都应安全且私密地存储,否则其他人可能会轻松复制您的水印。

您必须在每个水印配置中定义两个参数:

  • keys 参数是一个由唯一的随机整数组成的列表,用于计算模型词汇表中的 g 函数得分。此列表的长度决定了所应用的水印层数。如需了解更多详情,请参阅论文中的附录 C.1。
  • ngram_len 参数用于平衡稳健性和可检测性;值越大,水印越容易被检测到,但对更改的抵抗力越弱。长度为 5 是一个不错的默认值。

您可以根据自己的性能需求进一步配置水印:

  • 抽样表由 sampling_table_sizesampling_table_seed 这两个属性配置。您应使用至少为\( 2^{16} \) 的 sampling_table_size,以确保在抽样时获得无偏差且稳定的 g 函数,但请注意,抽样表的大小会影响推理时所需的内存量。您可以使用任何整数作为 sampling_table_seed
  • 为了提高可检测性,context_history_size 前面的令牌中的重复 n-gram 不会添加水印。

使用模型生成带有 SynthID 文本水印的文本无需进行额外训练,只需向模型的 .generate() 方法传递一个水印配置,即可激活 SynthID 文本 logits 处理器。如需查看有关如何在 Transformers 库中应用水印的代码示例,请参阅博文聊天室

水印检测和可验证性

水印检测具有概率性。Hugging Face TransformersGitHub 中提供了贝叶斯检测器。此检测器可以输出三种可能的检测状态(带水印、不带水印或不确定),并且可以通过设置两个阈值来自定义行为,以实现特定的假正例率和假负例率。如需了解详情,请参阅论文中的附录 C.8。

使用同一标记生成器的模型还可以共用水印配置和检测器,从而共用同一个水印,前提是检测器的训练集包含来自共用该水印的所有模型的样本。

训练完检测器后,您可以选择是否向用户(以及更广泛的公众)公开检测器,以及如何公开。

  • 完全私密选项不会以任何方式释放或公开检测器。
  • 半私有选项不会释放检测器,但会通过 API 公开检测器。
  • 公开选项会发布检测器,以供他人下载和使用。

您和贵组织需要根据您支持相关基础架构和流程的能力,确定哪种检测验证方法最适合您的需求。

限制

SynthID 文本水印对一些转换(剪裁文本片段、修改几个字词或轻微改写)具有很强的抵抗力,但这种方法也有局限性。

  • 对事实性回答应用水印的效果较差,因为在提高生成能力的同时不降低准确性的机会较少。
  • 如果对 AI 生成的文本进行彻底重写或翻译成其他语言,检测器置信度得分可能会大幅降低。

SynthID Text 并非旨在直接阻止有动机的攻击者造成伤害。不过,这可以使 AI 生成的内容更难被用于恶意用途,并且可以与其他方法结合使用,以便在内容类型和平台上实现更好的覆盖率。