По традиции разбавляем контент про старение постом про ИИ.
Многие наверняка слышали, что ИИ-компании планируют вводить (или уже ввели) вотермарки, чтобы контент, созданный при помощи их нейросетей, можно было идентифицировать. Но если с изображениями относительно понятно, как это можно было бы сделать, то как это сделать с текстом? Может быть, определенные LLM используют хитрые ASCII-символы? Или вставляют кодовые фразочки? Например, у меня Claude очень любит вставлять кринжатину наподобие
“your argument has teeth” :)
Но нет, эти методы крайне ненадежны, а гораздо более надежные методы уже давно придуманы учеными - и сегодня мы о них как раз поговорим. Начнем с простого метода, предложенного Kirchenbauer et al https://arxiv.org/pdf/2301.10226.
В самом простом варианте идея выглядит примерно так. В каждый момент LLM должна выбрать очередной токен из своего словаря - условно, из десятков тысяч вариантов. Перед этим мы псевдослучайным образом делим весь словарь на две группы: зеленую и красную.
Причем важно: токен не является зеленым или красным сам по себе. Один и тот же токен в одном месте текста может оказаться зеленым, а через два слова - красным. Разбиение зависит от предыдущего контекста. В самом простом proof-of-concept Kirchenbauer et al. берут предыдущий токен, вычисляют от него хэш и используют его как seed для генератора псевдослучайных чисел. По этому seed словарь делится на две половины. В более защищенной версии сюда добавляется секретный ключ, а функция может зависеть сразу от нескольких предыдущих токенов.
Дальше начинается матемагия. В hard-варианте красные токены просто запрещены: модель обязана выбрать следующий токен только среди зеленых. А теперь самое красивое: чтобы проверить текст, не нужно заново запускать нейросеть вообще. Достаточно знать алгоритм и ключ. Мы токенизируем текст, для каждой позиции воспроизводим то же самое псевдослучайное разбиение словаря и смотрим: оказался ли реально использованный токен зеленым или красным. Если обычный текст никак не знает о нашем секретном правиле, при разбиении 50/50 мы ожидаем примерно половину зеленых токенов. А вот watermarked-модель в hard-варианте дает практически 100%. То есть watermark - это не какая-то спрятанная строка «THIS TEXT WAS WRITTEN BY CLAUDE», а статистическое смещение, распределенное по всему тексту.
У hard-варианта, правда, есть очевидная проблема. Представим, что модель пишет Barack... и практически вся вероятность следующего токена приходится на Obama. Но вот незадача: сегодня по нашему псевдослучайному разбиению Obama оказался красным. Мы запрещаем модели его использовать - и она вынуждена писать какую-нибудь хрень. Особенно плохо это работает в так называемых low-entropy участках текста, где правильное продолжение практически однозначно: формулах, коде, именах, устойчивых выражениях и т. д. Поэтому была предложена soft-версия алгоритма. Красные токены теперь не запрещаются вообще. Вместо этого зеленым токенам перед softmax просто прибавляется константа к логиту.