Введение в проблему водяных знаков для LLM
Пока разработчики спорят о том, как надежно маркировать дипфейки и тексты нейросетей, в продакшн стремительно врываются автономные ИИ-агенты, способные самостоятельно писать код, крутить инфраструктуру (и падать в 3 часа ночи от нехватки памяти) и распоряжаться бюджетами. Прямо сейчас мы внедряем системы защиты от плагиата в самое сердце софта, даже не задумываясь о побочных эффектах. Экосистема искусственного интеллекта развивается с головокружительной скоростью: еще пару лет назад главной задачей было заставить языковую модель (LLM) генерировать связный и полезный текст, но сегодня фокус сместился на безопасность, авторские права и борьбу с дезинформацией. Одним из самых обсуждаемых инструментов в этой сфере стали криптографические и статистические водяные знаки (watermarking) для текстов, создаваемых нейросетями.
Концепция водяных знаков кажется элегантной и простой: во время генерации текста алгоритм незаметно для человека меняет вероятности выбора определенных слов (токенов), формируя уникальный математический паттерн. Этот паттерн можно легко обнаружить с помощью специального детектора, доказав, что текст написал искусственный интеллект, а не человек. Регуляторы и разработчики возлагают на эту технологию огромные надежды в контексте борьбы с фейк-ньюс, академическим мошенничеством и спамом.
Однако за пределами базовых сценариев «вопрос-ответ» в чат-ботах индустрия переходит к принципиально новой парадигме — автономным ИИ-агентам. ИИ-агенты не просто пишут тексты на заказ; они планируют задачи, вызывают внешние инструменты (function calling), ведут диалоги друг с другом и принимают критические решения на основе сгенерированного контента. И вот здесь возникает фундаментальный вопрос, которому уделяется катастрофически мало внимания: как внедрение водяных знаков в LLM влияет на поведение самих ИИ-агентов? (Спойлер: примерно так же, как попытка заставить сеньора писать весь код на Brainfuck — работать будет, но с болью).
В этой статье мы глубоко разберем механику текстовых водяных знаков, проанализируем их скрытое влияние на когнитивные способности агентов, рассмотрим реальные кейсы деградации производительности и предложим пути решения этой архитектурной проблемы.
Анатомия водяных знаков: Как незаметное вмешательство меняет энтропию текста
Прежде чем оценивать влияние на агентов, давайте разберем, как работают водяные знаки на уровне токенизации и вероятностного распределения. Большинство современных методов (например, алгоритм Керна и др.) используют разделение словаря токенов модели на две группы во время инференса: «зеленый список» (green list) и «красный список» (red list).
Алгоритм псевдослучайным образом (на основе хэша предыдущих токенов) делит словарь на две части и искусственно повышает логиты (logits) токенов из зеленого списка. В результате модель с большей вероятностью выбирает слова из этой группы. Для человека текст остается абсолютно естественным и читаемым, но для детектора наличие статистически аномального количества токенов из зеленого списка является стопроцентным доказательством работы ИИ.
На первый взгляд, сдвиг вероятностей на доли процента не должен ломать логику модели. Но давайте посмотрим на это с точки зрения теории информации. Языковая модель выбирает каждый следующий токен на основе распределения вероятностей (softmax). Энтропия этого распределения определяет «креативность» и точность модели.
Как это выглядит на уровне кода
Простой пример модификации логитов при применении водяных знаков на Python:
import torch
def apply_watermark(logits, green_list_tokens, bias=2.0):
"""
Искусственно повышает логиты для токенов из зеленого списка.
"""
for token_id in green_list_tokens:
logits[token_id] += bias
return logits
# Пример использования в цикле генерации (надеемся, этот костыль не попадет в продакшн)
# outputs = model(input_ids)
# next_token_logits = outputs.logits[:, -1, :]
# modified_logits = apply_watermark(next_token_logits, current_green_list)