
ingeniería inversa de SynthID para texto
Este directorio contiene herramientas para analizar y eliminar marcas de agua SynthID de texto generado por IA. La marca de agua fue desarrollada por Google DeepMind y publicada en Nature (2024).
Contexto de N-gramas: Para cada posición de token, SynthID considera los ngram_len - 1 tokens anteriores (por defecto: 4 tokens) como contexto.
Cálculo del Hash: Calcula un hash de:
Asignación de Valor g: El hash se utiliza para asignar un valor g binario (0 o 1) a cada posible token siguiente para cada capa de clave.
Modificación de Probabilidad: Las probabilidades de los tokens se modifican para favorecer tokens con valor g = 1:
new_prob[i] = prob[i] * (1 + g[i] - mean(g * prob))
Muestreo: El modelo muestrea de la distribución modificada.
Efectividad: 90-100%
La marca de agua está incrustada en la secuencia de tokens específica, no en el significado. Parafrasear con un modelo no marcado regenera completamente la secuencia de tokens.
from reverse_synthid import ParaphrasingAttack
attack = ParaphrasingAttack(model_name="gpt2")
clean_text = attack.paraphrase(watermarked_text)
Efectividad: 50-70%
Reemplazar tokens con sinónimos rompe los patrones de n-gramas:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.substitute_synonyms(text, rate=0.3)
Efectividad: 95-100%
Reemplazar caracteres con caracteres Unicode visualmente idénticos rompe el hash:
from reverse_synthid import HomoglyphAttack
attack = HomoglyphAttack()
clean_text = attack.apply_homoglyphs(text, rate=0.1)
Efectividad: 30-50%
Insertar o eliminar palabras desplaza todos los límites de n-gramas subsiguientes:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.insert_fillers(text, rate=0.1)
reverse_synthid.py - Kit de herramientas de ataque principal con múltiples métodosanalyze_watermark.py - Herramienta de detección y análisis de marcas de aguatest_removal.py - Script de prueba que demuestra la eliminación de marcas de aguapython analyze_watermark.py --input text.txt --verbose
# Using paraphrasing (most effective, requires model)
python analysis/reverse_synthid.py --input text.txt --output clean.txt --method paraphrase
# Using perturbation (no model needed)
python analysis/reverse_synthid.py --input text.txt --output clean.txt --method perturb
# Using combined attack
python reverse_synthid.py --input text.txt --output clean.txt --method combined
python analysis/test_removal.py
La marca de agua depende de:
Cuando parafraseas texto:
Para un texto de longitud N con fuerza de marca de agua W:
1 - (1-r)^(ngram_len)N*r límites de n-gramasEste código es solo para fines educativos y de investigación. Demuestra vulnerabilidades en esquemas de marcas de agua para ayudar a desarrollar métodos más robustos.