SwordStamp 为基于嵌入的语义水印增加了对顺序鲁棒的检测和语义跨度单元。本工件包含论文的确切配置、生成和检测代码、未修改的攻击套件、质量评估,以及确定性的结果提取和绘图。
在 5% 的误报率和 90% 的内容保留要求下,特定方案的嵌入位移攻击(EDA-S)达到:
| 水印 | EDA-S 攻击成功率 |
|---|---|
| SemStamp | 47.9% |
| k-SemStamp | 33.3% |
| PMark | 46.1% |
| SAMark | 32.6% |
| SwordStamp | 18.7% |
| k-SwordStamp | 10.8% |
相对于其已发表的基线,SwordStamp 和 k-SwordStamp 将 EDA-S 成功率分别降低了 29.2 和 22.5 个百分点,而干净保真度成本仅为 1.8 和 4.4 个百分点。它们的干净检测率分别为 94.9% 和 97.0%。在更强的检测器访问 EDA-D 压力测试下,k-SwordStamp 的最大质量门控成功率为 39.7%,而 k-SemStamp 为 65.5%。


这些结果涵盖英文新闻续写、一个提供商模型、两个提供商编码器,以及一对 EDA 改写器/替代模型。
visualization 仅使用编译后的 CSV/Parquet 数据包。如果论文单元格缺失,它会报错而不是绘制不完整的图形。
uv sync --frozen --only-group plot --no-install-project
uv run --no-sync python -m visualization extract \
--bundle results/paper --output results/paper
uv run --no-sync python -m visualization render \
--bundle results/paper --output results/paper
这会在 results/paper/tables/ 下写入可审计的表格,并在 results/paper/figures/ 下以 PNG 和 PDF 格式生成七张图。匿名审阅分支包含编译后的数据包;在发布分支上完整运行会通过 python -m visualization compile 创建相同的文件。
嵌入位移攻击(EDA)是一种自适应整篇文本改写攻击。在每个输出单元,它采样 K 个续写,并保留在替代编码器下与其源锚点余弦位移最大的候选。由于每个候选都延续完整的改写前缀,一个目标函数可以改写内容、重新排序内容,以及拆分或合并检测单元。
无盒 EDA 可以看到标记文本和公开的水印设计。它不查询检测器或生成器,也收不到任何密钥、提供商编码器或质量预言机。
对于 bag 锚定,论文使用 attack.bag_agg=min:最大化与最近源锚点的距离。已报告的无盒运行使用 Qwen/Qwen2.5-3B-Instruct、BAAI/bge-base-en-v1.5、K={1,2,4,8,16,32,64}、温度 1.0、top-p 0.95、每个候选最多 96 个 token,以及最多 512 个改写 token。
其他水印设计者可以直接调用 EDA:
from attacks.paraphrasing.adaptive import adaptive_attack_paraphrase
attacked = adaptive_attack_paraphrase(
texts,
base_model="Qwen/Qwen2.5-3B-Instruct",
surrogate_model="BAAI/bge-base-en-v1.5",
num_candidates=32,
anchor="positional", # EDA-P;对顺序鲁棒设计使用 "bag"
bag_agg="min",
segmentation_type="sentence",
segmentation_backend="nltk",
)
对于论文的 SwordStamp 感知 EDA-S,设置 anchor="bag"、segmentation_type="semspan"、semcut_max_words=15 和 semcut_window=5。在此仓库内,等效的 CLI 为:
uv run python -m attacks DATA_PATH --config PRESET \
--set attack.paraphraser=adaptive \
--set attack.custom_model=Qwen/Qwen2.5-3B-Instruct \
--set attack.surrogate_model=BAAI/bge-base-en-v1.5 \
--set attack.num_candidates=32 \
--set attack.anchor=bag --set attack.bag_agg=min \
--set segmentation.attacker_type=semspan \
--set segmentation.attacker_backend=nltk
DATA_PATH 始终是基础语料库,PRESET 标识带水印的单元格。有关所有保留的攻击和配置字段,请参阅 attacks/README.md。

config/paper.py 是唯一的事实来源。对于 LSH 和 k-means 中的每一种,scripts/experiments/swordstamp.sh 运行这个五级加法阶梯,包含 64 个提供商候选:
网格仅包含这十个单元格和一个无水印基线。PMark 仅限在线;SAMark 每次运行使用一种标志模式。EDA-D 预算为 K={4,8,16,32,64}。
比较子模块仅在数据集/结果边界和共享误报校准处适配公开的 PMark 和 SAMark 评估源码;水印算法未做更改。
先决条件包括 Git、uv、Python 3.11、用于模型运行的 CUDA、对固定模型版本的访问权限,以及临时存储。
git clone --recurse-submodules [email protected]:D-Diaa/SwordStamp.git
cd SwordStamp
bash scripts/setup.sh
uv run --frozen python scripts/check_artifact.py
准备确定性的、不相交的 C4 分区:
uv run --frozen python scripts/prepare_c4.py --output-dir data
安装并配置固定的调度器。安装程序在更改任何内容之前会打印其用户级副作用:
bash scripts/install_gpu_scheduler.sh --print-plan
bash scripts/install_gpu_scheduler.sh --yes
gpu-scheduler init --gpus 0,1
gpu-scheduler start
预览,然后提交每个物理分片:
for shard in c4-val-def-256 c4-val-def-256b c4-val-def-512; do
BASE="data/$shard" DRY_RUN=1 bash scripts/experiments/swordstamp.sh
BASE="data/$shard" DRY_RUN=1 bash scripts/experiments/pmark.sh
BASE="data/$shard" DRY_RUN=1 bash scripts/experiments/samark.sh
done
# 检查确切的 DAG 后移除 DRY_RUN=1。
编译、提取和渲染:
uv run --frozen python -m visualization all \
--bundle results/paper --output results/paper
调度器提供 CUDA_VISIBLE_DEVICES;不要通过探测 nvidia-smi 来选择 GPU。完整复现是一个多天的 GPU 工作负载。ARTIFACT.md 列出了硬件、模型版本、预期输出以及声明到命令的映射。scripts/experiments/README.md 记录了恢复和强制行为。
config/、segmentation/、sampling/、watermarking/:SwordStamp。attacks/:EDA 和保留的攻击套件。quality/:保真度和内容保留评估。visualization/:仅限论文的编译、表格和 Matplotlib 图形。scripts/experiments/:基于调度器的精确论文工作流。external/:固定的 PMark 和 SAMark 比较子模块。第一方代码在 MIT 许可证下发布。模型、数据集、生成的文本和比较子模块保留其各自的条款;请参阅 THIRD_PARTY.md。
SwordStamp 软件由 Abdulrahman Diaa 编写。论文作者为 Abdulrahman Diaa、Jonathan Petit 和 Florian Kerschbaum。机器可读的引用元数据位于 CITATION.cff 中。
| 变体 | 锚点和单元 | 配置 |
|---|
| EDA-P | 位置句子 | adaptive、anchor=positional、攻击者单元 sentence |
| EDA-S | 目标方的公开设计 | SemStamp、k-SemStamp 和 PMark 使用位置句子;SAMark 使用 bag/sentence;两种 SwordStamp 变体使用 bag/semspan |
| EDA-D | 提供商检测器 | oracle;继承防御方编码器、分区和分段 |