Comments 24
Возможно, я ничего не понял - но: для слома вотермарка, возможно - надо не менять некоторые слова, а просто переставлять их (особенно если используются ещё несколько предыдущих). Одна такая перестановка в начале текста (не cold and overcast, а overcast and cold) - и вся остальная вотермарка - насмарку. Конечно, надо ещё угадать, что переставлять - но, скорее всего, если перефразировать самую первую фразу в тексте - вуаля. Вообще анализ вотремарка (по идее) должен был бы происходить, например, не от начала к концу текста, а от конца к началу - это бы исключало всякий осмысленный контекст и вмешательство ИИ, делало бы проверку строгой и независимой. Однако никакой возможности для этого я лично не вижу.
Кроме того, каждый следующий текст (на основе того же промпта) может отличаться от предыдущего уже хотя бы потому, что модели развиваются и дообучаются. И учесть "версию модели" не удастся (слишком они громоздкие, чтобы их все хранить).
Гораздо проще тупо запоминать все тексты, которые когда-либо выдала данная модель. Хотя бы на уровне хэшей. И тупо проверять по базе хэшей. Знаю - это тоже приличный идиотизм. Но по ощущению - идиотизм не хуже данных вотермарков...
Там не совсем так работает. Тест проходит скользящим окном (а не всем префиксом) по тексту и для каждого окна высчитывает сигнал "следующий токен был сгенерирован", поэтому перестановка слов ломает знак только в паре соседних позиций, а не во всём тексте. Плюс тест вероятностный, а не точный - он суммирует сигналы по всем окнам и на выходе выдает "насколько вероятно, что в тексте есть ватермарка". Более того, поскольку нам не известен ключ, мы не можем обнаружить все маркирующие места и поменять их. Кажется более-менее рабочий способ только попросить переформулировать текст другую llm, про которую известно, что она ватермарку не проставляет.
А что если удалять некоторые предложения? Скажем нейронке сгенерировать тест на 100 вопросов, а возьмём каждый десятый. Как счёт поведет себя в этом случае?
Пока что трудно сказать наверняка, насколько этот тест устойчив к манипуляциям с текстом -- антропик еще не открыл апи, и без конкретных экспериментов этого не понять.
Но я бы предположил, что "маркерные" места равномерно распределены, и если взять достаточно большие куски вроде абзацев, ватермарка статистически сможет себя проявить.
В статье примерно было видно, что в одном предложении 2+ сигнала. Поэтому оперировать предложениями бесполезно.
Спасиьо за разбор!
Минусы, у внедрения, конечно же есть, что бы ни говорили Антропики.
Во-первых, у нас забрали температуру и другие параметры сэмплинга. Когда забирали - писали что "современным моделям это не надо" и "они тренируются под определенную температуру", но теперь стало ясно почему на самом деле убрали.
Во-вторых, судя по всему пострадает разнообразие генерации на одинаковом входе. Хочу я 50 раз запустить одну и ту же задачу на разных сидах чтобы проверить консистентность ответа, а сиды теперь не разные. Наверное, секретных сидов все же не один, но уже и не миллион.
Иноеречно, кто-то пробовал генерировать ответ и смотреть через сколько циклов он начнет повторяться?
Знать, какой текст сгенерирован иишкой - в общем-то полезно. Не понимаю, что некоторые авторы так возбудились на это? В идеале вообще было бы здорово, чтоб после каждого сгенерированного текста стояла подпись, которую при желании, можно было бы дешифровать в "<модель LLM>, <agent> [Skills used], <user prompt summary>"
А история то про кругу ходит. В лохматые года сеошники заменяли слова синонимами, чтобы засрать интернет. Потом поисковики стали умнее. Теперь эти древние говнометы снова расчехлят, но уже под другую цель
И что в будущем помешает держать на компьютере модель без всяких ключей, которая будет переписывать готовый текст. Ватермарки должны быть глобальные в таком случае, привязаны к целым абзацам, причем не точно, а вероятностно. К примеру, статья о бутерброде с сыром, 10 абзацев с последовательностью: введение, выбор хлеба, выбор сыра, виды сыра, нарезка хлеба и т.д. то есть сама структура статьи должна выдавать ИИ.
Если я правильно понял логику - очень элегантное решение. Причем чем креативнее текст, тем больше туда можно встроить паттернов и шанс детекта будет только выше, даже если для человеков текст будет выглядеть как полностью авторский.
Правда, все равно будут false-positive, так что люди смогут спорить что они это сами написали просто попав в тот самый процент. Или что они написали все сами, а иишкой только ошибки и неточности исправили.
Но эти тексты потом читаются людьми и люди со временем перенимают манеру подачи информации ИИ и потом сами пишут тексты. Получается что такой ватермарк окажет влияние на культуру речи человека и со временем, чтобы снова научиться детектить ИИ тексты этот ватермарк для ИИ генерации текстов придется убрать)
Не должны. Люди ищут закономерности, а там их не будет - смысл токенов никак не участвует в выборе, по сути он будет случайный - как цифры числа Пи. И люди воспринимают слова, а там вообще будут токены.
Да и сколько будет промахов при детекте. Вспомните про правильные длинные дефисы и прочее, по которым "дектектили".
Идея с синонимами хороша. Но обычно только для английского текста, где токены это отдельные слова. В русском тексте все сложнее будет... Но тоже может работать
Тут наверно только пересказ текста поможет любой другой моделью
То есть эта технология работает только там, где генеративная модель выбирала случайный токен из нескольких равнозначных вариантов? Но они же не всегда равнозначны?
У меня вопрос - а разве для определителя водяного знака, кроме текста и секретного ключа не нужен еще контекст этого текста плюс системный промпт? Ведь привести LLM в исходное состояние без стартового seed не получится?
Т.е. перевести гугл-транслейтом туда-сюда и всё, нет больше водяного знака?
Кстати, а для сгенерированных изображений уже подобное есть?
Особых слов на самом деле нет. На каждом токене модель кидает свой подкрученный кубик. И далее всё зависит от того, был ли у неё выбор. Например: "Погода была холодная и ___" - вариантов много (серая, облачная, дождливая). Кубик реально влияет на выбор и выбранное слово с большей вероятностью окажется согласованным с ключом. При проверке такое слово даёт условно, +1 очко. Или "свет проходит сквозь ___ деревьев" тут только кроны. Кубик кидается, но выбора нет, слово одно. При проверке оно даёт очки как случайное.
Никто заранее не решает здесь метим, здесь нет. Метка размазана по всем словам, просто где-то она прям густая, где-то около нулевая.
Мы могли бы обойтись
random.choiceиз NumPy, но у этого подхода есть недостаток: если мы захотим заскорить случайный текст из интернета, придётся заново запускать LLM.С этой же техникой — не придётся.
Это ключевой момент, и именно он неясен. Оба подхода базируются на том, что известны 4 варианта следующего слова с их вероятностями - откуда возьмётся эта информация при проверке текста без запуска LLM, причём именно той, которая использовалась при создании текста?
Как работает текстовый водяной знак в Claude