
обратная разработка SynthID для текста
Этот каталог содержит инструменты для анализа и удаления водяных знаков SynthID из текста, созданного ИИ. Водяной знак был разработан Google DeepMind и опубликован в Nature (2024).
N-граммный контекст: Для каждой позиции токена SynthID учитывает предыдущие ngram_len - 1 токенов (по умолчанию: 4 токена) в качестве контекста.
Вычисление хеша: Вычисляется хеш от:
Назначение G-значения: Хеш используется для присвоения бинарного g-значения (0 или 1) каждому возможному следующему токену для каждого уровня ключа.
Изменение вероятности: Вероятности токенов изменяются в пользу токенов с g-значением = 1:
new_prob[i] = prob[i] * (1 + g[i] - mean(g * prob))
Сэмплирование: Модель производит выборку из модифицированного распределения.
Эффективность: 90-100%
Водяной знак встроен в конкретную последовательность токенов, а не в смысл. Перефразирование с помощью модели без водяного знака полностью перегенерирует последовательность токенов.
from reverse_synthid import ParaphrasingAttack
attack = ParaphrasingAttack(model_name="gpt2")
clean_text = attack.paraphrase(watermarked_text)
Эффективность: 50-70%
Замена токенов синонимами нарушает n-граммные паттерны:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.substitute_synonyms(text, rate=0.3)
Эффективность: 95-100%
Замена символов на визуально идентичные символы Unicode нарушает хеш:
from reverse_synthid import HomoglyphAttack
attack = HomoglyphAttack()
clean_text = attack.apply_homoglyphs(text, rate=0.1)
Эффективность: 30-50%
Вставка или удаление слов сдвигает все последующие границы n-грамм:
from reverse_synthid import TokenPerturbationAttack
attack = TokenPerturbationAttack()
clean_text = attack.insert_fillers(text, rate=0.1)
reverse_synthid.py — Основной набор инструментов для атак с несколькими методамиanalyze_watermark.py — Инструмент обнаружения и анализа водяных знаковtest_removal.py — Тестовый скрипт, демонстрирующий удаление водяного знакаpython analyze_watermark.py --input text.txt --verbose
# Использование перефразирования (наиболее эффективно, требует модель)
python analysis/reverse_synthid.py --input text.txt --output clean.txt --method paraphrase
# Использование возмущения (не требует модели)
python analysis/reverse_synthid.py --input text.txt --output clean.txt --method perturb
# Использование комбинированной атаки
python reverse_synthid.py --input text.txt --output clean.txt --method combined
python analysis/test_removal.py
Водяной знак основан на:
При перефразировании текста:
Для текста длины N с силой водяного знака W:
1 - (1-r)^(ngram_len)N*r границ n-граммЭтот код предназначен только для образовательных и исследовательских целей. Он демонстрирует уязвимости схем водяных знаков, чтобы помочь в разработке более устойчивых методов.