
reverse engineering di SynthID per il testo
Questa directory contiene strumenti per analizzare e rimuovere le filigrane SynthID dai testi generati dall'IA. La filigrana è stata sviluppata da Google DeepMind e pubblicata su Nature (2024).
Contesto n-gram: Per ogni posizione del token, SynthID considera i token precedenti ngram_len - 1 (predefinito: 4 token) come contesto.
Calcolo dell'hash: Calcola un hash di:
Assegnazione del valore g: L'hash viene utilizzato per assegnare un valore g binario (0 o 1) a ogni possibile token successivo per ogni livello di chiave.
Modifica delle probabilità: Le probabilità dei token vengono modificate per favorire i token con valore g = 1:
new_prob[i] = prob[i] * (1 + g[i] - mean(g * prob))
Campionamento: Il modello campiona dalla distribuzione modificata.
Efficacia: 90-100%
La filigrana è incorporata nella specifica sequenza di token, non nel significato. Parafrasare con un modello non filigranato rigenera completamente la sequenza di token.
from reverse_synthid import ParaphrasingAttack
attack = ParaphrasingAttack(model_name="gpt2")
clean_text = attack.paraphrase(watermarked_text)
Efficacia: 50-70%
Sostituire i token con sinonimi rompe i pattern n-gram:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.substitute_synonyms(text, rate=0.3)
Efficacia: 95-100%
Sostituire i caratteri con caratteri Unicode visivamente identici rompe l'hash:
from reverse_synthid import HomoglyphAttack
attack = HomoglyphAttack()
clean_text = attack.apply_homoglyphs(text, rate=0.1)
Efficacia: 30-50%
Inserire o rimuovere parole sposta tutti i confini n-gram successivi:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.insert_fillers(text, rate=0.1)
reverse_synthid.py - Toolkit principale per gli attacchi con più metodianalyze_watermark.py - Strumento di rilevamento e analisi della filigranatest_removal.py - Script di test che dimostra la rimozione della filigranapython 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 filigrana si basa su:
Quando parafrasi un testo:
Per un testo di lunghezza N con forza della filigrana W:
1 - (1-r)^(ngram_len)N*r confini n-gramQuesto codice è destinato esclusivamente a scopi educativi e di ricerca. Dimostra le vulnerabilità degli schemi di filigranatura per aiutare a sviluppare metodi più robusti.