Наверное уже многие знают, что в силу недавно вступивших в ЕС законов, регулирующих использование ИИ, провайдеры LLM обязаны помечать ИИ-сгенерированные тексты. Та же Claude недавно обновила справочную информацию о работе своей помечалки сгенерированного ИИ контента, в том числе и текста. Но в подробности его работы почему-то вдаваться не стала, как и размещать в публичном доступе средства добавления и обнаружения этих самых вотермарок.

Не то чтобы я часто балуюсь текстовым нейрослопом, но в последние пару дней поднялось очень много шума в сети по поводу этих вотермарок, и мне стало интересно, насколько сложно от них избавиться. Да и сама идея того, что твой текст могут объявить слопом чисто случайно или в следствии того, что ты отредактировал иишкой его часть, тоже не сильно радует. Поэтому в этой статье мы разберемся, как собственно эти метки работают, и как с ними бороться.

Как работают текстовые ИИ-вотермарки

Поначалу, когда я впервые услышал о текстовых вотермарках, я подумал, что LLM просто вставляет в текст всякие скрытые символы или там длинные тире, но этот метод донельзя дубовый и очевидно, что обходится на раз-два. На самом деле это работает так.

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

Для человека заметить разницу практически невозможно, но для машины, знающей реальное распределение слов/токенов, это не составит труда.

Собственно вот видео, в котором объясняется, как работает вотермаркинг в Gemini.

В видео это объяснено довольно поверхностно, поэтому объясню немного детальнее. Для начала рассмотрим схему попроще, далее перейдем к технологии SynthID, которую использует Google.

KGW (red-green watermarking)

У нас есть фиксированный секретный ключ K. При генерации текста смотрим на последние H токенов, и на основании ключа K и этих токенов при помощи хэш функции получаем seed, далее разбиваем словарь на две половины, условно красную и зеленую. Затем ко всем логитам зелёных токенов прибавляем небольшую константу δ, после чего сэмплируем как обычно. Красные токены при этом остаются доступными - если единственный осмысленный токен происходит из красной части, модель его выберет. Смещение δ повышает шанс на выбор зелёного токена, но не запрещает красный.

Дальше переходим к выбору следующего токена. На следующем шаге набор из m последних токенов уже другой, поэтому и раскраска тоже будет другая.

Проверка: зная ключ K, восстанавливаем раскраску на каждой позиции и считаем долю зелёных токенов по всему тексту. У человека она будет около 50%, у модели с вотермаркой - заметно выше. Дальше проводим статистический тест и считаем z-score, p-value и вот это вот всё. Если отличия стат значимы - значит текст вотермаркнутый.

SynthID

SynthID работает несколько иначе.

Также как и в KGW, у нас есть фиксированный секретный ключ K, последние H токенов, которые вместе с ключом задают seed. А также у нас есть m псевдослучайных g-функций (по сути хэш-функций), приписывающих каждому токену словаря значение 0 или 1. При генерации текста из выходного распределения токенов модели вытягивается 2^m кандидатов (в реализации от гугла m = 30), причём с повторениями. Они разбиваются на пары, в каждой паре побеждает набравший большее значение функции g₁, ничьи разрешаются случайно. Дальше победители играют следующий слой, победителя на этом слое определяет функция g₂, и так до финала.

А при проверке текста, зная ключ, восстанавливаем значения g-функции для каждого токена и усредняем их по всему тексту и проводим стат тест. Если среднее находится в районе 0.5, значит с текстом все в порядке. Если значительно выше - значит текст вотермаркнутный.

Более подробно можно почитать здесь.

Теперь по поводу детектора от Anthropic. Как точно он работает, мы не знаем, это закрытая информация. Могу только сослаться на мнение экспертов в этой области, которые склоняются к тому, что в Anthropic используют похожую схему.

Как их обходить

Вполне очевидно, что придется либо жестко редактировать либо переписывать текст другими словами. Что предлагаю я.

Для начала предобработать исходный текст, чтобы удалить самые очевидные признаки сгенерированного ИИ контента: длинные тире, символы нулевой ширины, нестандартные пробелы и т. д.

Следующие три шага направлены на борьбу с самой сутью вотермаркинга - специфическим распределением токенов. Вот как это работает:

  • Отправить текст в переводчик (например, Google Переводчик) и перевести его на промежуточный язык

  • Перевести текст обратно с промежуточного языка на исходный

  • При необходимости переписать текст с помощью LLM, которая гарантированно не добавляет водяные знаки в свои ответы (например, модели с открытыми весами вроде DeepSeek-v4). Это поможет сделать итоговый текст более читаемым (если его качество снизилось в результате двойного перевода) и удалить оставшиеся следы вотермаркинга, если они каким-то образом сохранились

Чтобы проверить эту идею я разработал простое приложение, которое автоматизирует этот процесс. В нём можно выбрать, какие именно шаги использовать, и настроить каждый из них отдельно (например, выбрать конкретный переводчик или модель LLM для перефразирования).

Оно создано на основе Streamlit и LangChain, GUI выглядит вот так:

Просто задаешь нужные настройки, вставляешь текст в поле и нажимаешь кнопочку "Process". Дальше она все сделает сама. Дополнительно напишет, какие символы были удалены из текста, а также покажет промежуточные результаты перевода.

Результаты

На HuggingFace есть несколько моделей, в которые встроен механизм SynthId, например gemma-2b-it. Также оттуда можно достать детектор вотермарок. Я проверил работу приложения для разных вариантов перевода (с английского на немецкий, китайский или русский), в качестве модели для перефразирования использовал DeepSeek-V4-Flash. Результаты представлены ниже.

Результаты тестов приложения
Результаты тестов приложения

Как видно из таблички, вотермаркнутый текст детектится на 100%, простой перевод с английского на родственный ему немецкий и обратно не меняет почти ничего, а вот в случае перехода с немецкого на китайский или русский, ситуация улучшается. После дополнительного переписывания нейронки следы вотермарки исчезают почти всегда. Да в принципе можно обойтись совсем без перевода и просто попросить нейронку переписать текст, и это также уничтожит вотермарку.

Выводы

Чтобы победить дракона нейрослоп, нужно самому стать нейрослопом. Или писать все руками. Или просто не париться по поводу вотермарок.

P.S.: В комментариях справедливо отмечают, что по сути ничего не поменялось: AI-слоп на входе, AI-слоп на выходе. На самом деле, кое-что изменилось: я свел более трудную задачу избавления от вотермарок (которая решается жестким редактированием), к более легкой задаче приведения текста в человекоподобный вид (которая решается точечными правками).

Проект с результатами есть на гитхабе, лежит по этой ссылке. Сами результаты можно найти в ноутбуке в папке watermark_detector.

Комментарии (15)


  1. avshkol
    12.08.2026 11:26

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

    Но если моделей, их вариантов и версий множество (да ещё и настройки температуры можно крутить), то кто будет обладать полной базой данных вероятностей выбора сотен тысяч слов для детекции этих вотермарков?


    1. beatwad Автор
      12.08.2026 11:26

      А зачем обладать полной базой данных вероятностей для все моделей, температур и т.д.? Достаточно обладать информацией о распределении слов в обычном, не написанном ИИ тексте, их совместной встречаемости и т.д. И соответственно если вдруг встречаешь текст, в котором частота появления отдельных слов или их сочетаний резко отличается от нормальной - значит это вероятно нейрослоп.


      1. avshkol
        12.08.2026 11:26

        "Обычные тексты" простираются от библейских до Корнея Чуковского, — распределение отдельных слов и словосочетаний в них будет размазано по широкому n-мерному пространству...

        (Заметьте, что я вставил в текст длинное тире...)


        1. beatwad Автор
          12.08.2026 11:26

          Неправильно объяснил, без разницы, насколько тексты разнообразны. Там это как работает, если в деталях: есть фиксированный ключ, есть последние m токенов в тексте, дальше на основании этого ключа и последних токенов разбивают словарь на две примерно равные части, условно красную и зеленую. И следующий токен выбирают только из зеленой части. При выборе следующего токена раскраска меняется и как бы не получается, что всегда одни и те же токены выбирают.

          А дальше на проверке, зная ключ и зная предыдущие токены просто смотрим из какой половины раскраски данный токен - зеленой или красной. И вот, если раз за разом на протяжении 10-20-30 токенов стабильно получается так, что токен всегда из зеленой части, очень похоже, что текст сгенерирован. Причем даже если какие-то слова в тексте менять, что-то выкидывать и т.д., все равно останется множество подпоследовательностей в которых эти зеленые токены будут идти подряд один за другим. Поэтому от ватермарки так сложно избавиться.

          Добавил это объяснение в текст статьи, а то действительно не очень понятно, как это все так ловко работает.


          1. avshkol
            12.08.2026 11:26

            Всё равно не понял:

            • У кого есть этот ключ (условно, есть ли у антропика ключ от джемини?) и кто сможет проверить текст?

            • Как это работает с кодом? (там не разгуляешься!)


            1. beatwad Автор
              12.08.2026 11:26

              • нет, это закрытый ключ, он лежит где-то на серверах провайдера, так что только условный Антропик может проверить вывод модели того же Антропика

              • С кодом хреново это все будет работать, но там тебе и вряд ли кто-то предъявит за то, что нейрокой кодишь)


  1. maxnoosphere
    12.08.2026 11:26

    А двойной перевод через Google Translate — он тока русский->английский->русский, или можно любой промежуточный? Просто интересно, если через китайский гонять, ватермарк снесёт сильнее чем через английский, или это уже не важно и все равно одинакого ровно сносит?


  1. beatwad Автор
    12.08.2026 11:26

    Любой в принципе можно, в настройках задается


  1. SER_26
    12.08.2026 11:26

    Как их обходить

    Хорошо бы ещё написать, а зачем "их обходить"? Типа, если нельзя использовать ИИ, но хочется?

    На самом деле это работает так.

    А откуда автор информацию получил, которую описывает далее? Так как основной вопрос - а это точно все классы таких схем описаны или только один из них?

    Следующие три шага направлены на борьбу с самой сутью вотермаркинга - специфическим распределением токенов. 

    1) Автор сам проверил, что это работает? Типа: "Вот текст пестрит метками и это обнаружено внешней системой (не автора), а вот после программы автора это внешнее обнаружение уже не работает".

    2) ИИ написал текст, затем его дважды перевели, далее другой ИИ его переписал...
    а) Предположу, что такая борьба "визуально" заметна будет человеку (как минимум, некоторым) стилистически и т.д. из-за чего-то внесённого странного во всей этой цепочке переделок.

    б) Очевиден риск потери смысла. Игра "испорченный телефон" широко известна. При этом искажение может быть и не очевидным.


    1. beatwad Автор
      12.08.2026 11:26

      Хорошо бы ещё написать, а зачем "их обходить"? Типа, если нельзя использовать ИИ, но хочется?

      Ну да, почему нет? Просто в последние два дня поднялось много шума вокруг всего этого, и мне стало интересно, насколько сложно от этой самой вотермарки избавиться.

      А откуда автор информацию получил, которую описывает далее? Так как основной вопрос - а это точно все классы таких схем описаны или только один из них?

      Справедливо, добавил в статью ссылку на статью по SynthID от гугла + описал еще одну похожую схему. Что там у Антропика, неизвестно, но есть основания полагать, что что-то похожее.

      Автор сам проверил, что это работает? Типа: "Вот текст пестрит метками и это обнаружено внешней системой (не автора), а вот после программы автора это внешнее обнаружение уже не работает".

      Справедливо, добавил в статью тесты. В репозитории они тоже доступны, можно поиграться, если интересно.

      ИИ написал текст, затем его дважды перевели, далее другой ИИ его переписал...
      а) Предположу, что такая борьба "визуально" заметна будет человеку (как минимум, некоторым) стилистически и т.д. из-за чего-то внесённого странного во всей этой цепочке переделок.

      б) Очевиден риск потери смысла. Игра "испорченный телефон" широко известна. При этом искажение может быть и не очевидным.

      Да, будет заметна, но задачи сделать текст человекоподобным и не стояло. Все что я сделал, это просто свел более сложную задачу избавления от вотермарок к более легкой задаче приведения текста к нормальному виду, которая решается точечными правками, а не тотальным переписыванием текста.


      1. SER_26
        12.08.2026 11:26

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

        Тройное переписывание даже в изначально человекоподобный текст внесёт искажения. Т.е. Вы пишете, что не планировали улучшать качество, а я о том, что качество упадёт.


        И спасибо за ответы на вопросы. Не очень, правда, понятно стало, как проверять текст, если разные LLM используют немного разные методы. Грузить в каждый детектор от основных производителей по отдельности или детектор сразу на все методы (KWG, SynthID и т.д.) проверяет?


        1. beatwad Автор
          12.08.2026 11:26

          Если текст сгенерирован определенной LLM, то проверять надо соответствующим ей детектором (то есть детектор от Google подходит только для Gemini, детектор от Anthropic - только для Claude и т.д.), только он способен распознать наличие вотермарки. Ну и соответственно для переписывания текста нужно использовать другую LLM с открытыми весами, так как в нее вотермарку впихнуть проблематично. Тут правда встает вопрос, а почему бы сразу не генерить текст такой LLM или просто писать руками, но, как я уже писал, статья не про это.


          1. SER_26
            12.08.2026 11:26

            Практически тогда это пока не очень удобно.
            ЕСЛИ есть подозрение, что текст сгенерирован, ТО подозревающий должен обойти все LLM c этими марками в мире, и у каждой проверить на детекторе.
            Пора инструмент-проверяльщик делать, который сам будет все эти LLM обходить:-)


  1. daniilshat
    12.08.2026 11:26

    Для начала предобработать исходный текст, чтобы удалить самые очевидные признаки сгенерированного ИИ контента: длинные тире, символы нулевой ширины, нестандартные пробелы и т. д.

    Да, ещё можно удалить точки, запятые, кавычки, писать всё капсом и с ошибками. Пренебрегаем пунктуацией, типографикой и орфографией ради того, чтобы слоп никто не спалил


    1. SER_26
      12.08.2026 11:26

      Ага. Вместо того, чтобы написать самому нормально:-)
      (или переписать черновик ИИ, внимательно проверяя, что он там нагенерировал)