原创 Hugging Face 2024-11-05 22:30 美国
使用 SynthID Text,将不可见水印嵌入 AI 生成文本,轻松检测并防止信息误用。
你是否难以分辨一段文本是由人类撰写的,还是 AI 生成的?识别 AI 生成内容对于提升信息可信度、解决归因错误以及抑制错误信息至关重要。
今天,
详细的技术实现请参考发表在《自然》 (Nature) 上的
工作原理
SynthID Text 的核心目标是为 AI 生成的文本嵌入水印,从而让你能判断文本是否由你的大语言模型 (LLM) 生成,同时不影响模型的功能或生成质量。Google DeepMind 开发了一种水印技术,使用一个伪随机函数 (g 函数) 增强任何 LLM 的生成过程。这个水印对人类来说不可见,但能被训练好的模型检测。这项功能被实现为一个model.generate()
API 与任何 LLM 兼容,无需对模型做修改,并提供一个完整的
配置水印
水印通过一个
在水印配置中,必须定义两个关键参数:
keys
参数:这是一个整数列表,用于计算 g 函数在模型词汇表上的分数。建议使用 20 到 30 个唯一的随机数,以在可检测性和生成质量之间取得平衡。
ngram_len
参数:用于平衡稳健性和可检测性。值越大,水印越易被检测,但也更易受到干扰影响。推荐值为 5,最小值应为 2。
你还可以根据实际性能需求调整配置。更多信息可查阅
应用水印
将水印应用到文本生成中非常简单。你只需定义配置,并将 SynthIDTextWatermarkingConfig
对象作为 watermarking_config=
参数传递给 model.generate()
,生成的文本就会自动携带水印。你可以在
from transformers import ( AutoModelForCausalLM, AutoTokenizer, SynthIDTextWatermarkingConfig,)
# 初始化模型和分词器
tokenizer = AutoTokenizer.from_pretrained('repo/id')
model = AutoModelForCausalLM.from_pretrained('repo/id')
# 配置 SynthID Textwatermarking_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 提供了一个
限制
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