4. 模型水印

该部分介绍语言模型的水印

在语言模型生成的内容中嵌入人类无法察觉,但却可以被算法检测的到的“水印”。

1. 本教程目标

  1. 水印嵌入:在语言模型生成内容时嵌入水印

  2. 水印检测:检测给定文本的水印强度

  3. 水印评估:评估水印方法的检测性能

  4. 评估水印的鲁棒性(可选)

2. 准备工作

2.1 了解X-SIR代码仓库

https://github.com/zwhe99/X-SIR

X-SIR仓库包含以下内容的实现

  • 三种文本水印算法:X-SIR, SIR和KGW

  • 两种水印去除攻击方法:paraphrase和translation

2.2 环境准备

requirements.txt里的版本均为建议版本,并非强制要求。

3. 实操案例

使用KGW算法在语言模型生成内容中嵌入水印

3.1 数据准备

将待输入给语言模型的提示(prompt)组织成jsonl文件:

  • 每行是一个json object,并至少包含名为“prompt”的键

  • 后续内容以data/dataset/mc4/mc4.en.jsonl文件为例。此文件一共包含500条数据,如果觉得模型处理时间过长,可以考虑自行缩减数据。

3.2 水印嵌入

  • 选择模型和水印算法。这里我们选择baichuan-inc/Baichuan-7B模型,以及KGW水印算法

  • 生成内容,并嵌入水印

    • 此命令将模型生成的内容保存至输出文件:gen/$MODEL_ABBR/kgw/mc4.en.mod.jsonl

    • 输出文件的格式如下,其中response为模型的输出内容:

3.3 水印检测

水印检测即给定一段文本,计算该段文本的水印强度(z-score)。

  • 计算有水印文本的水印强度

  • 计算无水印文本的水印强度

  • 输出的文件格式为:

  • 肉眼查看一下两个文件水印强度的区别

3.4 水印评估

  • 输入水印检测的z-score文件,计算检测准确度,绘制ROC曲线

4. 评估水印的鲁棒性(可选)

对水印文本进行paraphrase和translation攻击后,重新评估其检测效果

4.1 准备工作

我们使用gpt-3.5-turbo-1106模型对水印文本进行paraphrase和translation。也可以自行选择其它工具。

  • 设置openai的apikey

  • 修改attack/const.py中的RPM (requests per min) and TPM (tokens per min)

4.2 进行攻击(以翻译为例)

  • 将水印文本翻译成中文

  • 重新评估

  • 比较攻击前后水印性能的变化

5. 进阶练习

  • 查看X-SIR文档,学习使用其它两种(X-SIR,SIR)算法,并评估其在不同攻击方法下的性能

Last updated