你是否难以分辨一段文本是由人类撰写的,还是 AI 生成的?识别 AI 生成内容对于提升信息可信度、解决归因错误以及抑制错误信息至关重要。
今天,Google DeepMind和 Hugging Face 共同宣布,在Transformers v4.46.0版本中,我们正式推出了SynthID Text技术。这项技术能够通过使用logits 处理器为生成任务添加水印,并利用分类器检测这些水印。
Google DeepMindhttps://deepmind.google/Transformers v4.46.0https://hf.co/docs/transformers/v4.46.0SynthID Texthttps://deepmind.google/technologies/synthid/logits 处理器https://hf.co/docs/transformers/v4.46.0/en/internal/generation_utils#transformers.SynthIDTextWatermarkLogitsProcessor分类器https://hf.co/docs/transformers/v4.46.0/en/internal/generation_utils#transformers.SynthIDTextWatermarkDetector
详细的技术实现请参考发表在《自然》 (Nature) 上的SynthID Text 论文,以及 Google 的负责任生成式 AI 工具包,了解如何将 SynthID Text 应用到你的产品中。
SynthID Text 论文https://www.nature.com/articles/s41586-024-08025-4负责任生成式 AI 工具包https://ai.google.dev/responsible/docs/safeguards/synthid
工作原理
SynthID Text 的核心目标是为 AI 生成的文本嵌入水印,从而让你能判断文本是否由你的大语言模型 (LLM) 生成,同时不影响模型的功能或生成质量。Google DeepMind 开发了一种水印技术,使用一个伪随机函数 (g 函数) 增强任何 LLM 的生成过程。这个水印对人类来说不可见,但能被训练好的模型检测。这项功能被实现为一个生成工具,可使用 model.generate()
API 与任何 LLM 兼容,无需对模型做修改,并提供一个完整的端到端示例,展示如何训练检测器来识别水印文本。具体细节可参考研究论文。
生成工具https://hf.co/docs/transformers/v4.46.0/en/internal/generation_utils#transformers.SynthIDTextWatermarkLogitsProcessor端到端示例https://github.com/huggingface/transformers/tree/v4.46.0/examples/research_projects/synthid_text/detector_training.py研究论文https://www.nature.com/articles/s41586-024-08025-4
配置水印
水印通过一个数据类进行配置,这个类参数化 g 函数,并定义它在抽样过程中的应用方式。每个模型都应有其专属的水印配置,并且必须安全私密地存储,否则他人可能会复制你的水印。
数据类https://hf.co/docs/transformers/v4.46.0/en/internal/generation_utils#transformers.SynthIDTextWatermarkingConfig
在水印配置中,必须定义两个关键参数:
keys
参数:这是一个整数列表,用于计算 g 函数在模型词汇表上的分数。建议使用 20 到 30 个唯一的随机数,以在可检测性和生成质量之间取得平衡。ngram_len
参数:用于平衡稳健性和可检测性。值越大,水印越易被检测,但也更易受到干扰影响。推荐值为 5,最小值应为 2。
你还可以根据实际性能需求调整配置。更多信息可查阅SynthIDTextWatermarkingConfig 类。研究论文还分析了不同配置值如何影响水印性能的具体影响。
SynthIDTextWatermarkingConfig 类https://hf.co/docs/transformers/v4.46.0/en/internal/generation_utils#transformers.SynthIDTextWatermarkingConfig
应用水印
将水印应用到文本生成中非常简单。你只需定义配置,并将 SynthIDTextWatermarkingConfig
对象作为 watermarking_config=
参数传递给 model.generate()
,生成的文本就会自动携带水印。你可以在SynthID Text Space中体验交互式示例,看看你是否能察觉到水印的存在。
SynthID Text Spacehttps://hf.co/spaces/google/synthid-text
from transformers import ( AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig,)# 初始化模型和分词器
tokenizer = AutoTokenizer.from_pretrained('repo/id')
model = AutoModelForCausalLM.from_pretrained('repo/id')# 配置 SynthID Text
watermarking_config = SynthIDTextWatermarkingConfig( keys=[654, 400, 836, 123, 340, 443, 597, 160, 57, ...],
ngram_len=5,)# 使用水印生成文本
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)
检测水印
水印设计为对人类几乎不可察觉,但能被训练好的分类器检测。每个水印配置都需要一个对应的检测器。
训练检测器的基本步骤如下:
收集一个包含带水印和未带水印文本的训练集,分为训练集和测试集,推荐至少 10,000 个示例。
Transformers 提供了一个贝叶斯检测器类,并附带一个端到端示例,展示如何使用特定水印配置训练检测器。如果多个模型使用相同的分词器,可以共享水印配置和检测器,前提是训练集中包含所有相关模型的样本。这个训练好的检测器可以上传到私有的 Hugging Face Hub,使其在组织内部可用。Google 的负责任生成式 AI 工具包提供了更多关于将 SynthID Text 投入生产的指南。
贝叶斯检测器类https://hf.co/docs/transformers/v4.46.0/en/internal/generation_utils#transformers.BayesianDetectorModel端到端示例https://github.com/huggingface/transformers/tree/v4.46.0/examples/research_projects/synthid_text/detector_training.py负责任生成式 AI 工具包https://ai.google.dev/responsible/docs/safeguards/synthid
限制
SynthID Text 的水印在某些文本变形下依然有效,如截断、少量词汇修改或轻微的改写,但也有其局限性:
在事实性回复中,水印应用效果较弱,因为增强生成的空间有限,否则可能降低准确性。如果 AI 生成的文本被彻底改写或翻译为其他语言,检测器的置信度可能显著降低。
虽然 SynthID Text 不能直接阻止有目的的攻击者,但它可以增加滥用 AI 生成内容的难度,并与其他方法结合,覆盖更多内容类型和平台。
英文原文: https://hf.co/blog/synthid-text
作者: Sumedh Ghaisas (guest), Sumanth Dathathri (guest), Ryan Mullins (guest), Joao Gante, Marc Sun, Raushan Turganbay
译者: Luke, Hugging Face Fellow