SynthID Text 现已发布|在 AI 生成文本中应用不可见水印的新技术
你是否难以分辨一段文本是由人类撰写的,还是 AI 生成的?识别 AI 生成内容对于提升信息可信度、解决归因错误以及抑制错误信息至关重要。
今天,Google DeepMind 和 Hugging Face 很共同宣布,在 Transformers v4.46.0 版本中,我们正式推出了 SynthID Text 技术。这项技术能够通过使用 logits 处理器 为生成任务添加水印,并利用 分类器 检测这些水印。
详细的技术实现请参考发表在《自然》 (Nature) 上的 SynthID Text 论文,以及 Google 的 负责任生成式 AI 工具包,了解如何将 SynthID Text 应用到你的产品中。
工作原理
SynthID Text 的核心目标是为 AI 生成的文本嵌入水印,从而让你能判断文本是否由你的大语言模型 (LLM) 生成,同时不影响模型的功能或生成质量。Google DeepMind 开发了一种水印技术,使用一个伪随机函数 (g 函数) 增强任何 LLM 的生成过程。这个水印对人类来说不可见,但能被训练好的模型检测。这项功能被实现为一个 生成工具,可使用 model.generate() API 与任何 LLM 兼容,无需对模型做修改,并提供一个完整的 端到端示例,展示如何训练检测器来识别水印文本。具体细节可参考 研究论文。
配置水印
水印通过一个 数据类 进行配置,这个类参数化 g 函数,并定义它在抽样过程中的应用方式。每个模型都应有其专属的水印配置,并且必须安全私密地存储,否则他人可能会复制你的水印。
在水印配置中,必须定义两个关键参数:
keys参数:这是一个整数列表,用于计算 g 函数在模型词汇表上的分数。建议使用 20 到 30 个唯一的随机数,以在可检测性和生成质量之间取得平衡。ngram_len参数:用于平衡稳健性和可检测性。值越大,水印越易被检测,但也更易受到干扰影响。推荐值为 5,最小值应为 2。
你还可以根据实际性能需求调整配置。更多信息可查阅 SynthIDTextWatermarkingConfig 类。研究论文还分析了不同配置值如何影响水印性能的具体影响。
应用水印
将水印应用到文本生成中非常简单。你只需定义配置,并将 SynthIDTextWatermarkingConfig 对象作为 watermarking_config= 参数传递给 model.generate(),生成的文本就会自动携带水印。你可以在 SynthID Text Space 中体验交互式示例,看看你是否能察觉到水印的存在。
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 投入生产的指南。
限制
SynthID Text 的水印在某些文本变形下依然有效,如截断、少量词汇修改或轻微的改写,但也有其局限性:
- 在事实性回复中,水印应用效果较弱,因为增强生成的空间有限,否则可能降低准确性。
- 如果 AI 生成的文本被彻底改写或翻译为其他语言,检测器的置信度可能显著降低。
虽然 SynthID Text 不能直接阻止有目的的攻击者,但它可以增加滥用 AI 生成内容的难度,并与其他方法结合,覆盖更多内容类型和平台。
英文原文: https://hf.co/blog/zh/synthid-text
作者: Sumedh Ghaisas (guest), Sumanth Dathathri (guest), Ryan Mullins (guest), Joao Gante, Marc Sun, Raushan Turganbay
译者: Luke, Hugging Face Fellow
SynthID Text 现已发布|在 AI 生成文本中应用不可见水印的新技术的更多相关文章
- Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布
Microsoft Message Analyzer (微软消息分析器,“网络抓包工具 - Network Monitor”的替代品)官方正式版现已发布 来自官方日志的喜悦 被誉为全新开始的消息分析器 ...
- 利用RNN(lstm)生成文本【转】
本文转载自:https://www.jianshu.com/p/1a4f7f5b05ae 致谢以及参考 最近在做序列化标注项目,试着理解rnn的设计结构以及tensorflow中的具体实现方法.在知乎 ...
- NLP(二十一)根据已有文本LSTM自动生成文本
根据已有文本LSTM自动生成文本 原理 与股票预测类似,用前面的n个字符预测下一个字符 https://www.cnblogs.com/peng8098/p/keras_5.html 代码 from ...
- 数据可视化之 图表篇(三)体验Power BI最新发布的AI图表:分解树
在刚刚发布的11月更新中,PowerBI界面全新改版,采用和Office套件相似的Ribbon风格,除了这个重大变化,还发布了一个AI黑科技图表:分解树(Decomposition Tree). 无论 ...
- 如何生成文本: 通过 Transformers 用不同的解码方法生成文本
简介 近年来,随着以 OpenAI GPT2 模型 为代表的基于数百万网页数据训练的大型 Transformer 语言模型的兴起,开放域语言生成领域吸引了越来越多的关注.开放域中的条件语言生成效果令人 ...
- LLM(大语言模型)解码时是怎么生成文本的?
Part1配置及参数 transformers==4.28.1 源码地址:transformers/configuration_utils.py at v4.28.1 · huggingface/tr ...
- ZeroMQ接口函数之 :zmq_z85_decode – 从一个用Z85算法生成的文本中解析出二进制密码
ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_z85_decode zmq_z85_decode(3) ØMQ Manual - ØMQ/4.1 ...
- Fuel4D 2.1 免费跨平台游戏引擎 现已发布
Fuel4D 2.1 免费跨平台游戏引擎 现已发布 开发环境:纯 C/C++,无JAVA.O-C. 支持 WIN32.安卓 系统. 详情见官方网站:http://www.fuel4d.com 或者进F ...
- JSON C# Class Generator是一个从JSON文本中生成C#内的应用程序
JSON C# Class Generator是一个从JSON文本中生成C#内的应用程序 .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator ...
- Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式
Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式 解决: xlwt 中设置单元格样式主要 ...
随机推荐
- Codeforces Round 886 (Div. 4)
Dashboard - Codeforces Round 886 (Div. 4) - Codeforces A. To My Critics 判断任意两个大于10即可 #include <bi ...
- SPI协议,MCP2515裸机驱动详解
SPI概述 Serial Peripheral interface 通用串行外围设备接口 是Motorola首先在其MC68HCXX系列处理器上定义的.SPI接口主要应用在 EEPROM,FLASH, ...
- Docker不同宿主机网络打通
本方式使用docker Swarm集群的方式创建overlay 网络进行打通 背景 因java微服务使用nacos做配置中心,为了解决Nacos服务注册使用Docker容器内网ip问题,使用此方案 前 ...
- Playwright 浏览器窗口最大化
实现方式 浏览器启动时,加参数 args=['--start-maximized']: 创建上下文时,加参数 no_viewport=True. from playwright.sync_api im ...
- TypeScript 高级教程 – 把 TypeScript 当编程语言使用 (第二篇)
前言 上一篇, 我们提到, TypeScript 进阶有 3 个阶段. 第一阶段是 "把 TypeScript 当强类型语言使用", 我们已经介绍完了. 第二阶段是 "把 ...
- 线段树与离散化技巧 Mayor's posters——poj 2528
问题描述: 有一堵海报墙,从左到右一共有10000000个小块,墙上贴了许多海报,每张海报的高度与墙的高度相同,宽度不同,新帖的海报会将原有的海报覆盖,问当所有人把海报贴完是,墙上可以看到几张海报 输 ...
- Unity中的光源类型(向前渲染路径进行光照计算)
Unity中的光源类型 Unity中共支持4种光源类型: 平行光 点光源 聚光灯 面光源(在光照烘焙时才可以发挥作用) 光源的属性: 位置 方向(到某个点的方向) 颜色 强度 衰减(到某个点的衰减) ...
- SXYZ-12天集训
Day 1(6月25日) 早上四点多钟起床做七点到九点四十的飞机到杭州萧山(空客330) 然后坐一小时车到绍兴一中对面的酒店. 中午曾老师请我们在酒店隔壁吃了一桌家常菜(味道可以),以此庆祝曾老师52 ...
- 【VMware VCF】使用 VCF Import Tool 将现有 vSphere 环境导入为 VI 域。
VCF Import Tool 工具使用两种方式来帮助客户将现有的 vSphere 或 vSphere + vSAN 环境转变为 VMware Cloud Foundation 环境,分别是转换(Co ...
- Go语言中JSON标签的用法与技巧
在Go语言中,JSON标签(JSON tags)是用来指定结构体字段在序列化为JSON时的名称和行为的.JSON标签通常写在结构体字段的后面,用反引号(`)括起来.以下是一些常用的JSON标签: js ...