
engenharia reversa do SynthID para texto
Este diretório contém ferramentas para analisar e remover marcas d'água SynthID de texto gerado por IA. A marca d'água foi desenvolvida pelo Google DeepMind e publicada na Nature (2024).
Contexto de N-gramas: Para cada posição de token, o SynthID considera os ngram_len - 1 tokens anteriores (padrão: 4 tokens) como contexto.
Cálculo de Hash: Ele calcula um hash de:
Atribuição de valor G: O hash é usado para atribuir um valor g binário (0 ou 1) a cada possível próximo token para cada camada de chave.
Modificação de Probabilidade: As probabilidades dos tokens são modificadas para favorecer tokens com valor g = 1:
new_prob[i] = prob[i] * (1 + g[i] - mean(g * prob))
Amostragem: O modelo amostra da distribuição modificada.
Eficácia: 90-100%
A marca d'água está embutida na sequência específica de tokens, não no significado. Parafrasear com um modelo não marcado regenera completamente a sequência de tokens.
from reverse_synthid import ParaphrasingAttack
attack = ParaphrasingAttack(model_name="gpt2")
clean_text = attack.paraphrase(watermarked_text)
Eficácia: 50-70%
Substituir tokens por sinônimos quebra os padrões de n-gramas:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.substitute_synonyms(text, rate=0.3)
Eficácia: 95-100%
Substituir caracteres por caracteres Unicode visualmente idênticos quebra o hash:
from reverse_synthid import HomoglyphAttack
attack = HomoglyphAttack()
clean_text = attack.apply_homoglyphs(text, rate=0.1)
Eficácia: 30-50%
Inserir ou remover palavras desloca todos os limites subsequentes de n-gramas:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.insert_fillers(text, rate=0.1)
reverse_synthid.py - Conjunto principal de ferramentas de ataque com múltiplos métodosanalyze_watermark.py - Ferramenta de detecção e análise de marca d'águatest_removal.py - Script de teste demonstrando remoção de marca d'águapython analyze_watermark.py --input text.txt --verbose
# Usando paráfrase (mais eficaz, requer modelo)
python analysis/reverse_synthid.py --input text.txt --output clean.txt --method paraphrase
# Usando perturbação (nenhum modelo necessário)
python analysis/reverse_synthid.py --input text.txt --output clean.txt --method perturb
# Usando ataque combinado
python reverse_synthid.py --input text.txt --output clean.txt --method combined
python analysis/test_removal.py
A marca d'água depende de:
Quando você parafraseia um texto:
Para um texto de comprimento N com força de marca d'água W:
1 - (1-r)^(ngram_len)N*r limites de n-gramasEste código é apenas para fins educacionais e de pesquisa. Ele demonstra vulnerabilidades em esquemas de marca d'água para ajudar a desenvolver métodos mais robustos.