跳到正文
原文
Hugging Face Blog·· 2024-10-23精选AI 评分69

Google DeepMind 与 Hugging Face 在 Transformers v4.46.0 发布 SynthID Text 文本水印

Introducing SynthID Text

AI 导读

Google DeepMind 与 Hugging Face 在 Transformers v4.46.0 中发布 SynthID Text,可通过 logits processor 为 AI 生成文本添加水印,并用分类器检测。

推荐理由

SynthID Text 集成进 Transformers 后,给出了水印配置、生成与检测的完整接入方式及已知局限。

正文 · AI 翻译

你是否觉得很难判断一段文字是由人类书写的,还是由 AI 生成的?能够识别 AI 生成的内容对于促进信息信任、帮助解决错误归属和虚假信息等问题至关重要。今天,Google DeepMind 和 Hugging Face 非常激动地在 Transformers v4.46.0 中推出 SynthID Text,将于今天晚些时候发布。这项技术允许你使用logits processor为生成任务向 AI 生成的文本应用水印,并使用classifier检测这些水印。

请查看 SynthID Text Nature 论文,了解该算法的完整技术细节,以及 Google 的Responsible GenAI Toolkit,了解更多关于如何在你的产品中应用 SynthID Text 的信息。

工作原理

SynthID Text 的主要目标是将水印编码到 AI 生成的文本中,以帮助你判断文本是否由你的 LLM 生成,同时不影响底层 LLM 的工作方式,也不会对生成质量产生负面影响。Google DeepMind 开发了一种水印技术,它使用一种称为 g-function 的伪随机函数来增强任何 LLM 的生成过程,使得水印对人类不可察觉,但对经过训练的模型可见。这已被实现为一个生成实用工具,它使用 model.generate() API 与任何 LLM 兼容且无需修改,同时还提供了一个端到端示例,说明如何训练检测器来识别带水印的文本。请查看研究论文,了解更多关于 SynthID Text 算法的完整细节。

配置水印

水印通过使用 dataclass 进行配置,该 dataclass 为 g-function 及其在 tournament sampling 过程中的应用方式设定参数。你使用的每个模型都应有自己的水印配置,该配置应安全且私密地存储,否则你的水印可能会被他人复制。

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

  • keys 参数是一个整数列表,用于计算模型词表上的 g-function 分数。建议使用 20 到 30 个唯一的、随机生成的数字,以在可检测性与生成质量之间取得平衡。

  • ngram_len 参数用于平衡稳健性和可检测性;该值越大,水印越容易被检测到,但代价是对变化更脆弱。一个不错的默认值是 5,但它至少需要为 2。

你可以根据你的性能需求进一步配置水印。有关更多信息,请参阅SynthIDTextWatermarkingConfig 类。

研究论文还包括对特定配置值如何影响水印性能的额外分析。

应用水印

应用水印只是对你现有生成调用做出的一个简单更改。一旦你定义好配置,将一个 SynthIDTextWatermarkingConfig 对象作为 watermarking_config= 参数传给 model.generate(),所有生成的文本都将带有水印。请查看SynthID Text Space,获取水印应用的交互式示例,看看你能否分辨出来。

from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    SynthIDTextWatermarkingConfig,
)

# Standard model and tokenizer initialization
tokenizer = AutoTokenizer.from_pretrained('repo/id')
model = AutoModelForCausalLM.from_pretrained('repo/id')

# SynthID Text configuration
watermarking_config = SynthIDTextWatermarkingConfig(
    keys=[654, 400, 836, 123, 340, 443, 597, 160, 57, ...],
    ngram_len=5,
)

# Generation with watermarking
tokenized_prompts = tokenizer(["your prompts here"])
output_sequences = model.generate(
    **tokenized_prompts,
    watermarking_config=watermarking_config,
    do_sample=True,
)
watermarked_text = tokenizer.batch_decode(output_sequences)

检测水印

水印的设计目标是被训练过的分类器检测到,但对人类不可感知。你与模型一起使用的每种水印配置,都需要有一个训练过的检测器来识别该标记。

检测器训练的基本流程是:

  • 确定一种水印配置。
  • 收集一个检测器训练集,按照是否带水印、以及训练或测试进行划分,我们建议至少 10k 个样本。
  • 用你的模型生成不带水印的输出。
  • 用你的模型生成带水印的输出。
  • 训练你的水印检测分类器。
  • 将你的模型连同水印配置和相关检测器投入生产。

Transformers 中提供了一个 贝叶斯检测器类,以及一个 端到端示例,展示如何训练检测器使用特定水印配置来识别带水印文本。使用相同分词器的模型还可以共享水印配置和检测器,从而共享一个共同的水印,只要检测器的训练集包含所有共享该水印的模型的样本。

这个训练好的检测器可以上传到私有的 HF Hub,以便在你的组织内访问。Google 的 Responsible GenAI Toolkit 有更多关于如何在你产品中将 SynthID Text 投入生产的内容。

局限性

SynthID Text 水印对某些变换具有鲁棒性,例如裁剪文本片段、修改少量词语或轻度改写,但此方法确实有局限性。

  • 水印应用在事实性回答上效果较差,因为在不下滑准确性的前提下,可用于增强生成的机会较少。
  • 当 AI 生成的文本被彻底重写或翻译成另一种语言时,检测器置信度分数可能会大幅降低。

SynthID Text 并非为了直接阻止有动机的对手造成危害而构建。然而,它可以增加将 AI 生成内容用于恶意用途的难度,并且可以与其他方法结合,以在内容类型和平台上提供更好的覆盖。

致谢

作者感谢 Robert Stanforth 和 Tatiana Matejovicova 对这项工作的贡献。

来源:Hugging Face Blog · hf-mirror.com