
Семантический водяной знак с устойчивым к порядку обнаружением на уровне субпредложений
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 с доступом к детектору, максимальный успех с учётом качества составляет 39.7% для k-SwordStamp против 65.5% для k-SemStamp.


Эти результаты охватывают продолжения новостей на английском языке, одну модель провайдера, два энкодера провайдера и одну пару парафразер/суррогат 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/ и семь графиков в форматах PNG и PDF в results/paper/figures/. Ветка анонимного рецензирования включает скомпилированный пакет; полный запуск на ветке релиза создаёт те же файлы с помощью 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 токенов на
кандидата и не более 512 токенов переписывания.
Другие разработчики водяных знаков могут вызывать 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",
)
Для EDA-S с учётом SwordStamp из статьи установите 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
# Удалите DRY_RUN=1 после проверки точных DAG.
Скомпилируйте, извлеките и отобразите:
uv run --frozen python -m visualization all \
--bundle results/paper --output results/paper
Планировщик предоставляет CUDA_VISIBLE_DEVICES; не выбирайте GPU путём опроса
nvidia-smi. Полное воспроизведение — это многодневная 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 создано Абдулрахманом Диаа. Авторы статьи:
Абдулрахман Диаа, Джонатан Пети и Флориан Кершбаум. Машиночитаемые метаданные
цитирования находятся в CITATION.cff.
| Вариант | Якорь и единица | Конфигурация |
|---|
| EDA-P | позиционное предложение | adaptive, anchor=positional, единица атакующего sentence |
| EDA-S | публичный дизайн цели | позиционные предложения для SemStamp, k-SemStamp и PMark; bag/sentence для SAMark; bag/semspan для обоих вариантов SwordStamp |
| EDA-D | детектор провайдера | oracle; наследует энкодер защиты, разбиение и сегментацию |