
Marca de agua semántica con detección robusta al orden sobre unidades de sub-oración
SwordStamp añade detección robusta al orden y unidades de tramos semánticos a las marcas de agua semánticas basadas en embeddings. Este artefacto contiene la configuración exacta del artículo, el código de generación y detección, el conjunto de ataques sin cambios, la evaluación de calidad y la extracción y representación determinista de resultados.
Con una tasa de falsos positivos del 5% y un requisito de preservación de contenido del 90%, el ataque de desplazamiento de embeddings específico del esquema (EDA-S) logra:
| Marca de agua | Tasa de éxito del ataque EDA-S |
|---|---|
| SemStamp | 47,9% |
| k-SemStamp | 33,3% |
| PMark | 46,1% |
| SAMark | 32,6% |
| SwordStamp | 18,7% |
| k-SwordStamp | 10,8% |
En relación con sus líneas base publicadas, SwordStamp y k-SwordStamp reducen el éxito de EDA-S en 29,2 y 22,5 puntos porcentuales, con costes de fidelidad limpia de 1,8 y 4,4 puntos. Sus tasas de detección limpia son del 94,9% y 97,0%. Bajo la prueba de estrés EDA-D con acceso al detector más fuerte, el éxito máximo con control de calidad es del 39,7% en k-SwordStamp frente al 65,5% en k-SemStamp.


Estos resultados cubren continuaciones de noticias en inglés, un modelo de proveedor, dos codificadores de proveedor y un par parafraseador/sustituto EDA.
visualization consume únicamente el paquete CSV/Parquet compilado. Falla ante
celdas faltantes del artículo en lugar de dibujar una figura parcial.
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
Esto escribe tablas auditables en results/paper/tables/ y siete figuras en
PNG y PDF en results/paper/figures/. La rama de revisión anónima incluye
el paquete compilado; una ejecución completa en la rama de lanzamiento crea los mismos archivos
con python -m visualization compile.
El ataque de desplazamiento de embeddings (EDA) es un ataque adaptativo de paráfrasis de texto completo.
En cada unidad de salida
muestrea K continuaciones y conserva el candidato con el mayor desplazamiento de coseno
respecto a su ancla fuente bajo un codificador sustituto. Dado que cada
candidato continúa el prefijo completo de reescritura, un único objetivo puede reformular contenido,
reordenarlo y dividir o fusionar unidades del detector.
EDA sin caja ve el texto marcado y el diseño público de la marca de agua. No consulta al detector ni al generador y no recibe clave secreta, codificador de proveedor ni oráculo de calidad.
Para el anclaje por bolsa, el artículo utiliza attack.bag_agg=min: maximizar la distancia desde
el ancla fuente más cercana. Las ejecuciones sin caja reportadas utilizan
Qwen/Qwen2.5-3B-Instruct, BAAI/bge-base-en-v1.5,
K={1,2,4,8,16,32,64}, temperatura 1,0, top-p 0,95, como máximo 96 tokens por
candidato y como máximo 512 tokens de reescritura.
Otros diseñadores de marcas de agua pueden llamar a EDA directamente:
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; use "bag" for an order-robust design
bag_agg="min",
segmentation_type="sentence",
segmentation_backend="nltk",
)
Para el EDA-S consciente de SwordStamp del artículo, establece anchor="bag",
segmentation_type="semspan", semcut_max_words=15 y
semcut_window=5. Dentro de este repositorio, la CLI equivalente es:
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 es siempre el corpus base y PRESET identifica la celda
marcada. Consulta attacks/README.md para todos los ataques conservados y los campos de configuración.

config/paper.py es la única fuente de verdad. Para cada uno de LSH y k-means,
scripts/experiments/swordstamp.sh ejecuta esta escalera aditiva de cinco peldaños con 64
candidatos de proveedor:
La cuadrícula contiene solo estas diez celdas y una línea base sin marca de agua. PMark es
solo en línea; SAMark utiliza un patrón de bandera por ejecución. Los presupuestos de EDA-D son
K={4,8,16,32,64}.
Los submódulos de comparación adaptan las fuentes de evaluación públicas PMark y SAMark solo en sus límites de conjunto de datos/resultados y en la calibración compartida de falsos positivos; los algoritmos de marca de agua no se modifican.
Los requisitos previos son Git, uv, Python 3.11, CUDA para ejecuciones de modelos, acceso a las revisiones de modelos fijadas y almacenamiento temporal.
git clone --recurse-submodules [email protected]:D-Diaa/SwordStamp.git
cd SwordStamp
bash scripts/setup.sh
uv run --frozen python scripts/check_artifact.py
Prepara las particiones C4 deterministas y disjuntas:
uv run --frozen python scripts/prepare_c4.py --output-dir data
Instala y configura el planificador fijado. El instalador imprime sus efectos secundarios a nivel de usuario antes de cambiar nada:
bash scripts/install_gpu_scheduler.sh --print-plan
bash scripts/install_gpu_scheduler.sh --yes
gpu-scheduler init --gpus 0,1
gpu-scheduler start
Previsualiza y luego envía cada fragmento físico:
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
# Remove DRY_RUN=1 after inspecting the exact DAGs.
Compila, extrae y representa:
uv run --frozen python -m visualization all \
--bundle results/paper --output results/paper
El planificador proporciona CUDA_VISIBLE_DEVICES; no selecciones GPUs sondeando
nvidia-smi. La reproducción completa es una carga de trabajo GPU de varios días. ARTIFACT.md
enumera el hardware, las revisiones de modelos, los resultados esperados y el mapa de afirmación a comando.
scripts/experiments/README.md documenta el comportamiento de reanudación y forzado.
config/, segmentation/, sampling/, watermarking/: SwordStamp.attacks/: EDA y el conjunto de ataques conservado.quality/: evaluación de fidelidad y preservación de contenido.visualization/: compilación solo para el artículo, tablas y figuras de Matplotlib.scripts/experiments/: flujos de trabajo exactos del artículo respaldados por el planificador.external/: submódulos de comparación fijados de PMark y SAMark.El código de primera parte se publica bajo la Licencia MIT. Los modelos, conjuntos de datos, texto
generado y submódulos de comparación conservan sus propios términos; consulta THIRD_PARTY.md.
El software SwordStamp está creado por Abdulrahman Diaa. Los autores del artículo son
Abdulrahman Diaa, Jonathan Petit y Florian Kerschbaum. Los metadatos de cita legibles por máquina
están en CITATION.cff.
| Variante | Ancla y unidad | Configuración |
|---|
| EDA-P | oración posicional | adaptive, anchor=positional, unidad de atacante sentence |
| EDA-S | diseño público del objetivo | oraciones posicionales para SemStamp, k-SemStamp y PMark; bolsa/oración para SAMark; bolsa/tramo semántico para ambas variantes de SwordStamp |
| EDA-D | detector del proveedor | oracle; hereda el codificador, la partición y la segmentación del defensor |