
Rétro-ingénierie de SynthID pour le texte
Ce répertoire contient des outils pour analyser et supprimer les filigranes SynthID des textes générés par l'IA. Le filigrane a été développé par Google DeepMind et publié dans Nature (2024).
Contexte N-gramme : Pour chaque position de jeton, SynthID considère les ngram_len - 1 jetons précédents (par défaut : 4 jetons) comme contexte.
Calcul du hachage : Il calcule un hachage de :
Affectation de la valeur g : Le hachage est utilisé pour attribuer une valeur g binaire (0 ou 1) à chaque jeton suivant possible pour chaque couche de clé.
Modification de probabilité : Les probabilités des jetons sont modifiées pour favoriser les jetons avec g-value = 1 :
new_prob[i] = prob[i] * (1 + g[i] - mean(g * prob))
Échantillonnage : Le modèle échantillonne à partir de la distribution modifiée.
Efficacité: 90-100%
Le filigrane est intégré dans la séquence spécifique de jetons, pas dans le sens. Paraphraser avec un modèle non filigrané régénère complètement la séquence de jetons.
from reverse_synthid import ParaphrasingAttack
attack = ParaphrasingAttack(model_name="gpt2")
clean_text = attack.paraphrase(watermarked_text)
Efficacité: 50-70%
Remplacer les jetons par des synonymes brise les motifs n-grammes :
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.substitute_synonyms(text, rate=0.3)
Efficacité: 95-100%
Remplacer les caractères par des caractères Unicode visuellement identiques brise le hachage :
from reverse_synthid import HomoglyphAttack
attack = HomoglyphAttack()
clean_text = attack.apply_homoglyphs(text, rate=0.1)
Efficacité: 30-50%
Insérer ou supprimer des mots décale toutes les limites suivantes des n-grammes :
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.insert_fillers(text, rate=0.1)
reverse_synthid.py - Ensemble principal d'attaques avec plusieurs méthodesanalyze_watermark.py - Outil de détection et d'analyse de filigranetest_removal.py - Script de test démontrant la suppression du filigranepython 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
Le filigrane repose sur :
Lorsque vous paraphrasez un texte :
Pour un texte de longueur N avec une force de filigrane W :
1 - (1-r)^(ngram_len)N*r limites de n-grammesCe code est uniquement à des fins éducatives et de recherche. Il démontre les vulnérabilités des schémas de filigranage pour aider à développer des méthodes plus robustes.