llm watermarking

LLM 水印技术:AI 生成内容的溯源方案

概述 随着 LLM 生成内容的大量涌现,如何区分人类与 AI 生成的文本成为版权保护、学术诚信和内容安全的关键挑战。LLM 水印技术通过在生成过程中嵌入统计信号,使后续检测能够判断文本是否由特定模型生成。 2025-2026 年,Google DeepMind 的 SynthID-Text 和 OpenAI 的文本分类器代表了两大技术路线:嵌入水印 vs 后置检测。 一、水印技术分类 类型 原理 优势 局限 基于词表分割 将词表分为绿/绿名单,偏好绿名单词 理论保证、可证明检测 对改写攻击敏感 基于概率偏移 微调采样概率分布 对文本质量影响小 检测需要较长文本 基于语义 嵌入语义级特征 抗改写较强 实现复杂 基于格式 标点、空格等微调 零质量损失 易被格式化清除 二、核心技术:词表分割水印(KGW) 由 Kirchenbauer 等人 2023 年提出,是当前最主流的 LLM 水印方案。 2.1 算法原理 水印嵌入过程: 1. 将词表 V 分为绿名单 G 和红名单 R(基于哈希) 2. 在生成时,对绿名单词的 logit 加 δ 3. 从调整后的分布中采样 水印检测过程: 1. 统计文本中绿名单词的比例 2. 使用 z 检验判断是否超过统计阈值 2.2 代码实现 import torch import torch.nn.functional as F from hashlib import sha256 class KGWWatermark: """ Kirchenbauer et al. 水印方案实现 """ def __init__( self, vocab_size: int, green_list_ratio: float = 0.25, delta: float = 2.0, seeding_scheme: str = "simple_1", hash_key: int = 15485863, # 第100万个质数 ): self.vocab_size = vocab_size self.green_list_ratio = green_list_ratio self.green_list_size = int(vocab_size * green_list_ratio) self.delta = delta self.seeding_scheme = seeding_scheme self.hash_key = hash_key def _get_green_list(self, prev_token: int) -> set: """ 基于前一个 token 生成绿名单 使用哈希确保伪随机但确定性 """ h = sha256(f"{self.hash_key}{prev_token}".encode()).hexdigest() # 用哈希值生成伪随机序列 torch.manual_seed(int(h[:8], 16)) perm = torch.randperm(self.vocab_size) return set(perm[:self.green_list_size].tolist()) def watermark_logits(self, input_ids: torch.Tensor, logits: torch.Tensor) -> torch.Tensor: """ 在 logits 上添加水印 input_ids: [batch, seq_len] 已生成的 token logits: [batch, seq_len, vocab_size] 模型输出 """ batch_size, seq_len, _ = logits.shape watermarked_logits = logits.clone() for b in range(batch_size): for t in range(seq_len): if t == 0: continue # 第一个 token 不加水印 prev_token = input_ids[b, t - 1].item() green_list = self._get_green_list(prev_token) # 对绿名单 token 的 logit 加 delta for token_id in green_list: watermarked_logits[b, t, token_id] += self.delta return watermarked_logits def detect(self, text_tokens: torch.Tensor, z_threshold: float = 4.0) -> dict: """ 检测文本中是否包含水印 """ n = len(text_tokens) if n < 10: return {"detected": False, "reason": "文本过短"} green_count = 0 for i in range(1, n): prev_token = text_tokens[i - 1].item() curr_token = text_tokens[i].item() green_list = self._get_green_list(prev_token) if curr_token in green_list: green_count += 1 # z 检验 expected = self.green_list_ratio * (n - 1) std = (self.green_list_ratio * (1 - self.green_list_ratio) * (n - 1)) ** 0.5 z_score = (green_count - expected) / std if std > 0 else 0 return { "detected": z_score > z_threshold, "z_score": z_score, "green_count": green_count, "total_tokens": n - 1, "green_ratio": green_count / (n - 1), "threshold": z_threshold, } # 使用示例 watermarker = KGWWatermark(vocab_size=50257, green_list_ratio=0.25, delta=2.0) # 生成时加水印 # watermarked_logits = watermarker.watermark_logits(input_ids, logits) # next_token = sample_from(watermarked_logits) # 检测时 # result = watermarker.detect(text_token_ids, z_threshold=4.0) # print(f"水印检测: {result['detected']}, z-score: {result['z_score']:.2f}") 三、SynthID-Text 方案 Google DeepMind 在 2024-2025 年推出的 SynthID-Text 采用更精细的概率偏移方案: ...

2026-06-25 · 4 min · 848 words · 硅基 AGI 探索者
deepfake threat 2026

Deepfake 威胁 2026:AI 换脸/拟声的攻与防

2026 年 Deepfake 威胁态势 Deepfake 技术在 2026 年已达到真假难辨的水平。开源工具(FaceFusion、Roop-Unleashed)让任何人都能在消费级 GPU 上生成高质量换脸视频,语音克隆只需 3 秒样本音频。 威胁分类 威胁类型 技术手段 危害等级 2026 趋势 社交工程诈骗 语音克隆+视频换脸 高 诈骗金额突破百亿 政治虚假信息 政要换脸/配音 极高 选举年高发 名誉损害 色情换脸 高 受害者多为女性 身份欺诈 实时换脸过 KYC 高 金融损失扩大 证据伪造 篡改视频证据 严重 司法系统受冲击 Deepfake 技术现状 视频换脸 2026 年主流换脸技术: 技术 原理 质量 计算需求 GAN-based 对抗训练生成人脸 中-高 中 Diffusion-based 扩散模型逐步生成 高 高 3D Morphable 3D 人脸模型变换 中 低 One-shot 单图驱动换脸 中-高 低 Real-time 实时推理+融合 中 中(需 GPU) 扩散模型方法已成为质量天花板,但 GAN 方法在实时场景中仍有优势。 ...

2026-06-25 · 3 min · 471 words · 硅基 AGI 探索者
llm watermark guide

LLM 水印技术指南:AI 生成内容的溯源

为什么需要水印 AI 生成内容与人类写作难以区分时,溯源变得至关重要:学术诚信、虚假信息追踪、合规要求(欧盟 AI Act)、平台治理。 水印技术在不改变文本可读性的前提下,嵌入可验证的信号。 水印原理 核心思路:在生成过程中偏置 token 选择概率,使特定统计模式出现。 无水印: P(token) → 采样 → 文本 水印: P(token) + 绿名单偏置 → 采样 → 文本(含隐藏信号) 检测: 统计绿名单 token 频率 → 判断是否含水印 文本水印分类 类型 原理 鲁棒性 质量 统计水印 修改 token 概率分布 中 高 语义水印 同义词替换/句式变换 中高 中 格式水印 零宽字符/Unicode变体 低 极高 Kirchenbauer 水印详解 2023 年提出的最广泛引用方案。 生成过程 import torch class KirchenbauerWatermark: def __init__(self, vocab_size=50272, greenlist_ratio=0.25, strength=2.0, hash_key=15485863): self.vocab_size = vocab_size self.ratio = greenlist_ratio self.strength = strength self.hash_key = hash_key def _get_greenlist(self, prev_token: int) -> torch.Tensor: rng = torch.Generator() rng.manual_seed((self.hash_key * prev_token) % (2**32)) perm = torch.randperm(self.vocab_size, generator=rng) size = int(self.vocab_size * self.ratio) return perm[:size] def watermark_logits(self, input_ids, logits): prev_token = input_ids[:, -1].item() greenlist = self._get_greenlist(prev_token) logits[:, greenlist] += self.strength return logits 关键参数 参数 含义 推荐值 γ (greenlist_ratio) 绿名单占词表比例 0.25 δ (strength) 绿名单 logit 加值 2.0 hash_key 伪随机密钥 大素数 检测方法 class WatermarkDetector: def detect(self, text_tokens, config): green_count = 0 total = 0 for i in range(1, len(text_tokens)): greenlist = config._get_greenlist(text_tokens[i-1].item()) if text_tokens[i].item() in greenlist: green_count += 1 total += 1 gamma = config.ratio z = (green_count - gamma * total) / (total**0.5 * gamma * (1-gamma)**0.5) return {'z_score': z, 'is_watermarked': z > 4.0, 'tokens': total} 检测阈值 z-score 阈值 假阳性率 所需 tokens 2.0 ~2.3% 20+ 4.0 ~0.003% 50+ 6.0 ~1e-9 200+ 鲁棒性挑战 攻击 描述 影响 复制粘贴 直接复制 无影响 同义词替换 替换部分词汇 z-score 下降 翻译攻击 翻译再翻回 水印基本丢失 改写攻击 另一 LLM 改写 水印显著减弱 混合攻击 50% AI + 50% 人类 z-score 被稀释 提升鲁棒性 增大 δ:更强偏置但牺牲质量 低熵文本增强:在确定性强处加大水印 多粒度水印:token+句子+段落级别 语义级水印:编码在语义选择中 隐私与政策 隐私风险 水印可追溯来源,可能暴露用户身份 检测者权限:谁有权检测? 政策要求 地区/平台 要求 欧盟 AI Act AI 生成内容必须可检测 中国《生成式AI管理办法》 标识 AI 生成内容 OpenAI 承诺提供水印工具 Google DeepMind SynthID 水印技术 实战建议 水印不是银弹:只能检测"是否由特定模型生成",不能证明"不是 AI 生成" 组合使用:统计水印 + 格式水印 + 元数据标记 密钥管理:密钥泄露等于水印失效 定期评估:水印强度与文本质量的平衡需持续监控 准备应对攻击:去水印技术在进化,水印方案需迭代 合规先行:根据地区法规确定水印强度和可见性 用户体验:水印不应降低文本质量,δ 值需充分测试 水印技术需要与内容溯源、数字签名、平台政策配合,才能构建可信的 AI 内容生态。 加入讨论 这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。 ...

2026-06-24 · 2 min · 295 words · 硅基 AGI 探索者
鲁ICP备2026018361号