English translation is not available yet. Showing Russian content.

Как работает model watermarking для LLM (идентификация модели-источника)?

Краткий тезис

Model watermarking — это метод встраивания уникальной сигнатуры в текст, генерируемый конкретной LLM, чтобы впоследствии можно было определить, какая именно модель его создала. В отличие от обычного watermarking (обнаружение AI-текста вообще), model watermarking привязывает сигнатуру к конкретной модели. Технически это реализуется через добавление редких токенов или паттернов, специфичных для модели, а детекция основана на статистическом тесте, характерном для данной модели. Применяется для отслеживания утечек, защиты интеллектуальной собственности и атрибуции контента.


1. Термин: Watermarking в контексте LLM

Watermarking (водяной знак) — это техника внесения скрытой, незаметной для человека метки в выходные данные модели. В LLM водяной знак встраивается в последовательность токенов (слов или подслов). Цель — сделать так, чтобы сгенерированный текст можно было однозначно связать с источником.

Различают два подхода:

  • Общий watermarking — детектирует, что текст создан любой LLM (например, через статистику распределения токенов).
  • Model watermarking — идентифицирует конкретную модель (например, GPT-4, LLaMA-2 или кастомную fine-tuned версию).

Термин «Сигнатура» (signature) — уникальный паттерн, встроенный в текст, который позволяет отличить одну модель от другой.


2. Отличие model watermarking от обычного watermarking

ХарактеристикаОбычный watermarking (AI-текст)Model watermarking
ЦельОпределить, что текст сгенерирован LLM (любой)Определить, какой именно LLM сгенерирован текст
СигнатураОбщая для всех LLM (например, смещение вероятностей)Уникальная для каждой модели (набор редких токенов)
ДетекцияСтатистический тест на «неестественность» распределенияПоиск специфических токенов/паттернов, характерных для модели
УстойчивостьМожет быть сломан перефразированиемБолее устойчив, если токены выбраны с учётом семантики
ПрименениеБорьба с плагиатом, детекция AI-контентаОтслеживание утечек, атрибуция, защита авторских прав

Термин «Tokens|Редкие токены» (Tokens|rare tokens) — токены, которые имеют низкую вероятность в обычном языке, но модель намеренно их использует в определённых контекстах.


3. Как встраивается водяной знак (embedding)

Основной метод — модификация процесса генерации на этапе выбора следующего токена. Модель получает секретный ключ (или хеш от предыдущих токенов) и на его основе выбирает токен из небольшого множества «разрешённых» редких токенов. Это множество уникально для каждой модели.

3.1. Алгоритм на основе секретного ключа

  1. Генерация ключа: для каждой модели генерируется уникальный секретный ключ K.
  2. Выбор позиций: на каждом шаге генерации вычисляется хеш от предыдущих n токенов и ключа K. Полученное значение определяет, нужно ли на этой позиции вставить водяной знак.
  3. Вставка: если позиция выбрана, модель выбирает токен из заранее определённого списка «водяных» токенов W (редкие, но осмысленные слова). Если позиция не выбрана — генерация идёт обычным образом.
  4. Контроль качества: чтобы не нарушить связность текста, водяные токены вставляются только в местах, где они грамматически и семантически уместны (например, после точки или в начале предложения).

3.2. Пример псевдокода

import hashlib

def generate_with_watermark(model, prompt, key, watermark_tokens, interval=5):
    tokens = tokenize(prompt)
    for step in range(max_length):
        # Вычисляем хеш от последних 3 токенов и ключа
        context = tokens[-3:] + [key]
        hash_val = int(hashlib.sha256(' '.join(context).encode()).hexdigest(), 16)
        
        # Решаем, вставлять ли водяной знак на этом шаге
        if hash_val % interval == 0:
            # Выбираем случайный токен из списка водяных
            forced_token = watermark_tokens[hash_val % len(watermark_tokens)]
            # Проверяем, что токен не нарушает грамматику (упрощённо)
            if is_plausible(tokens, forced_token):
                tokens.append(forced_token)
                continue
        
        # Обычная генерация
        next_token = model.generate_next(tokens)
        tokens.append(next_token)
    return detokenize(tokens)

Термин «Хеш-функция» (hash function) — преобразует произвольные данные в число фиксированной длины. Используется для детерминированного выбора позиций вставки.


4. Детекция водяного знака (detection)

Детекция — это процесс проверки, содержит ли текст сигнатуру конкретной модели. Для этого нужно знать секретный ключ K и список водяных токенов W.

4.1. Статистический тест

  1. Разбиение текста на токены.
  2. Вычисление ожидаемого количества водяных токенов при случайном распределении (например, если водяные токены составляют 1% всех токенов, то в тексте длиной 1000 токенов ожидается ~10 вставок).
  3. Подсчёт фактического количества водяных токенов на позициях, где они должны были быть (согласно ключу).
  4. Сравнение: если фактическое количество значительно превышает ожидаемое (например, p-value < 0.01), то текст признаётся сгенерированным данной моделью.

4.2. Пример детекции

def detect_watermark(text, key, watermark_tokens, interval=5):
    tokens = tokenize(text)
    count_expected = 0
    count_found = 0
    
    for i in range(interval, len(tokens), interval):
        context = tokens[i-3:i] + [key]
        hash_val = int(hashlib.sha256(' '.join(context).encode()).hexdigest(), 16)
        if hash_val % interval == 0:
            count_expected += 1
            if tokens[i] in watermark_tokens:
                count_found += 1
    
    # Биномиальный тест
    from scipy.stats import binom_test
    p_value = binom_test(count_found, count_expected, p=len(watermark_tokens)/vocab_size, alternative='greater')
    return p_value < 0.01  # True если водяной знак обнаружен

Термин «p-value» — вероятность получить наблюдаемое (или более экстремальное) количество совпадений при условии, что текст не содержит водяного знака. Маленькое p-value указывает на наличие сигнатуры.


5. Устойчивость к атакам (robustness)

Model watermarking должен быть устойчив к попыткам удалить или изменить сигнатуру. Основные атаки:

АтакаОписаниеУстойчивость
Перефразирование (paraphrasing)Замена слов и перестройка предложенийСнижает, но не уничтожает, если водяные токены семантически важны
Обрезка (truncation)Удаление начала или конца текстаЧастичная, если водяной знак распределён равномерно
Вставка шума (noise injection)Добавление случайных токеновМожет быть обойдена, если шум не затрагивает ключевые позиции
Атака на ключ (key extraction)Попытка восстановить секретный ключ по множеству текстовТребует большого объёма данных; защита — регулярная смена ключа

Для повышения устойчивости используют:

  • Избыточное встраивание — несколько водяных знаков в одном тексте.
  • Семантические водяные знаки — выбор токенов, которые трудно заменить без потери смысла (например, редкие синонимы).
  • Динамический ключ — ключ меняется в зависимости от контекста.

Термин «Семантический водяной знак» (semantic watermark) — встраивание не просто редких токенов, а целых паттернов (например, определённые синтаксические конструкции), которые сохраняются при перефразировании.


6. Применение model watermarking

  • Отслеживание утечек (leakage tracking): если ваша модель используется нелегально (например, через API без лицензии), водяной знак позволяет доказать, что контент сгенерирован именно вашей моделью.
  • Защита интеллектуальной собственности: fine-tuned модели могут содержать уникальные водяные знаки, чтобы предотвратить кражу.
  • Атрибуция контента: в научных или новостных текстах можно указать, какая модель их создала.
  • Аудит безопасности: обнаружение несанкционированного использования модели в продуктах третьих сторон.

7. Ограничения и риски

  • Снижение качества текста: вставка редких токенов может сделать текст неестественным. Нужен баланс между незаметностью и детектируемостью.
  • Вычислительные затраты: генерация с водяным знаком требует дополнительных вычислений (хеширование, проверка).
  • Атаки на детектор: злоумышленник может обучить модель-имитатор, которая генерирует текст без водяного знака, но похожий на оригинальную модель.
  • Этические вопросы: водяные знаки могут использоваться для скрытой идентификации авторов, что нарушает приватность.

Термин «Имитатор» (imitation model) — модель, обученная на выходах защищённой модели, чтобы генерировать похожий текст, но без водяного знака.


8. Сравнение с другими методами идентификации

МетодПринципПреимуществаНедостатки
Model watermarkingВстраивание сигнатуры в текстВысокая точность, устойчивостьСнижение качества, требует ключа
Статистический анализАнализ распределения токеновНе требует модификации моделиМенее точен, легко обходится
МетаданныеДобавление скрытых полей в APIПростотаЛегко удаляются
Биометрические признакиИспользование уникальных ошибок моделиСложно подделатьТребует большого объёма данных

Пет-проект для закрепления

Задача: Реализовать простой model watermarking для небольшой LLM (например, GPT-2) и проверить его детекцию.

Инструменты: Python, Hugging Face Transformers, библиотека hashlib, scipy для статистического теста.

Шаги:

  1. Выберите модель (например, distilgpt2).
  2. Сгенерируйте список редких токенов (например, 50 токенов с частотой < 0.01% в корпусе).
  3. Реализуйте функцию generate_with_watermark, которая вставляет один из этих токенов каждые 10 шагов, используя секретный ключ.
  4. Сгенерируйте 100 текстов с водяным знаком и 100 без него.
  5. Реализуйте детектор, который подсчитывает количество водяных токенов на ожидаемых позициях и вычисляет p-value.
  6. Оцените метрики: точность (precision), полноту (recall), F1-score.

Ожидаемый результат: Детектор должен правильно классифицировать тексты с водяным знаком и без него с точностью >90%. Вы также сможете оценить, насколько водяной знак влияет на качество текста (через perplexity или человеческую оценку).


Связь с другими вопросами

ВопросТема
614Как работает watermarking для обнаружения AI-текста?
615Какие атаки на LLM существуют и как от них защищаться?
612Как обеспечить безопасность LLM при развёртывании?
611Что такое red teaming для LLM?
610Как защитить модель от инверсионных атак?

Навигация