你是否难以分辨一段文本是由人类撰写的,还是 AI 生成的?识别 AI 生成内容对于提升信息可信度、解决归因错误以及抑制错误信息至关重要。
今天,
Google DeepMind https://deepmind.google/ Transformers v4.46.0 https://hf.co/docs/transformers/v4.46.0 SynthID Text https://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 论文 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
水印通过一个
数据类 https://hf.co/docs/transformers/v4.46.0/en/internal/generation_utils#transformers.SynthIDTextWatermarkingConfig
在水印配置中,必须定义两个关键参数:
keys
参数:这是一个整数列表,用于计算 g 函数在模型词汇表上的分数。建议使用 20 到 30 个唯一的随机数,以在可检测性和生成质量之间取得平衡。ngram_len
参数:用于平衡稳健性和可检测性。值越大,水印越易被检测,但也更易受到干扰影响。推荐值为 5,最小值应为 2。
你还可以根据实际性能需求调整配置。更多信息可查阅
SynthIDTextWatermarkingConfig 类 https://hf.co/docs/transformers/v4.46.0/en/internal/generation_utils#transformers.SynthIDTextWatermarkingConfig
将水印应用到文本生成中非常简单。你只需定义配置,并将 SynthIDTextWatermarkingConfig
对象作为 watermarking_config=
参数传递给 model.generate()
,生成的文本就会自动携带水印。你可以在
SynthID Text Space https://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 提供了一个
贝叶斯检测器类 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 生成内容的难度,并与其他方法结合,覆盖更多内容类型和平台。
内容中包含的图片若涉及版权问题,请及时与我们联系删除
评论
沙发等你来抢