若水清菡
2025-09-05
来自北京
import random def watermark_generate(text, key="mysecretkey"): # 为每10个token插入一个水印“信号”词 tokens = text.split() random.seed(key) idxs = random.sample(range(len(tokens)), min(2, len(tokens)//5)) for idx in idxs: tokens[idx] = tokens[idx] + "[W]" # 简单插入水印标记 return " ".join(tokens) def watermark_detect(text, key="mysecretkey"): tokens = text.split() found = [t for t in tokens if "[W]" in t] return len(found) >= 1 txt = "这是一条AI生成的文本,用于演示水印检测原理。" wm_txt = watermark_generate(txt) print("带水印文本:", wm_txt) print("检测结果:", watermark_detect(wm_txt)) 跑这个代码发现加水印效果失败了,原代码中水印插入逻辑存在缺陷:当文本分词后token数量较少时,random.sample可能返回空列表导致未插入水印。可以改成下面的这样 def watermark_generate(text, key="mysecretkey"): """为文本添加水印""" tokens = text.split() if not tokens: # 空文本处理 return text # 确保至少插入一个水印 n = len(tokens) min_marks = max(1, min(5, n // 5)) # 水印数量:至少1个,最多5个 idxs = random.sample(range(n), min_marks) # 插入水印标记 for idx in idxs: tokens[idx] = tokens[idx] + "[W]" return " ".join(tokens) 除了文本,图片、视频、代码等 AI 生成内容是否也可以做水印溯源?有何不同? 这个问题一下就想到之前网上传的沸沸扬扬的员工桌面背景会加水印,肉眼看不到,用特殊程序可以看到水印信息,员工发了内部截图到网上HR一下就逮着了。
展开
共 1 条评论