- Регистрация
- 23 Август 2023
- Сообщения
- 3 045
- Лучшие ответы
- 0
- Реакции
- 0
- Баллы
- 51
Offline
Как понять, "помнит" ли модель ваш текст?
Представьте, что у вас есть друг, который идеально завершает ваши мысли. Вы говорите: «В детстве я любил...», а он тут же продолжает: «...играть в футбол и смотреть “Смешариков”». Совпадение? Или он вас слишком хорошо знает?
Теперь представьте, что этот “друг” — языковая модель вроде GPT-4, обученная на десятках терабайт текста. Вы даёте ей фразу — и она точно угадывает продолжение. Вопрос: она действительно видела это раньше или просто хорошо обучена угадывать?
Вот тут на сцену выходит Membership Inference Attack (MIA) — метод, который позволяет выяснить, был ли конкретный текст в тренировочном датасете модели. По сути, это способ заставить LLM проговориться: «Да, я это читала. Но никому не говори».
Раньше такие атаки были возможны только при доступе к логитам — вероятностям слов, которые модель "придумывает" на выходе. Но популярные модели вроде ChatGPT или Claude таких данных не раскрывают — вы получаете только текст.
Можно ли вытащить приватные данные, видя только текст, без логитов и без доступа к модели?
Спойлер: да, можно. И способ называется PETAL.
Что такое MIA: теория за минуту
Представьте такую ситуацию. У вас есть гигантская языковая модель, назовём её GPTушкой. Вы даёте ей фразу:
«Согласно отчёту 2019 года, компания DeepMind представила...»
А она продолжает:
«...AlphaStar — искусственный интеллект, способный обыграть профессионалов в StarCraft II».
Звучит слишком точно. Но откуда такая уверенность? Либо модель просто хорошо обобщает информацию, либо — она это видела.
Membership Inference Attack (MIA) — это способ ответить на этот вопрос. Ваша цель: определить, был ли данный текст в обучающей выборке модели.
Три типа MIA-атак
Label-only — самый реалистичный, но и самый сложный сценарий. Именно в нём работает PETAL
А зачем это нужно?
Кому вообще может понадобиться спрашивать: "А эта модель точно меня не помнит?"
MIA — это способ заглянуть в память модели и выяснить: что она знала заранее, а что — домыслила.
И да, это не просто "угадайка". Это полноценная атака на приватность. А когда она работает даже без логитов, с одними только словами — как в случае с PETAL — становится по-настоящему интересно.
Давайте посмотрим, почему существующие label-only методы не работают, и как PETAL умудряется выжать приватную информацию из одного только сгенерированного токена.
Существующие label-only атаки: ну такое
Когда исследователи впервые поняли, что можно «вытягивать» из языковых моделей информацию о тренировочных данных, начался золотой век Membership Inference Attacks. Только вот была одна загвоздка: большинство этих атак опирались на логиты — те самые вероятности, которые модель присваивает каждому токену на выходе.
Но что если логитов нет?
Что если у нас — только «голый текст», возвращённый моделью?
Именно в таких реалистичных условиях начинается эпопея под названием:
"Label-only атаки" — атаки, где всё, что у тебя есть, это ответ модели.
Круто звучит? Возможно. Работает? — Не очень. Пока не появился PETAL.
Что пытались до PETAL?
Несколько подходов уже предлагались. Самый заметный — атаки на основе робастности (устойчивости модели к искажению входа).
Идея: если текст не был в тренировке, модель менее уверена в нём и сильнее путается при малейшем изменении.
Если текст — из тренировочного набора, модель знает его хорошо и не теряется при пертурбациях (внезапное изменение нормального хода чего-либо).
Примеры:
Всё это выглядит странно и мало информативно для модели. Перплексия почти не меняется. Модель слишком устойчива — и даже на искажённый текст отвечает разумно.
Затем эти искажённые фразы скармливаются модели, и исследователи смотрят — насколько сильно изменилась генерация. Если модель стабильно генерирует что-то похожее — возможно, она это помнит.
А теперь плохие новости
Всё это не работает. Почти совсем.
По результатам из PETAL-статьи:
Языковые модели — не тупые. GPT и его братья обучены на миллиардах примеров. Один или два похожих текста не делают погоды. Модель и так выдает что-то разумное даже на незнакомых входах.
Пертурбации выглядят подозрительно. Когда вы делаете swap или замену слов, получается каша. Даже если модель это видела, она может всё равно затупить — просто потому что вы дали ей бред.
Переводы теряют структуру. Back Translation может случайно выдать совершенно новый вариант — и вы уже не сравниваете "тоже самое с ошибкой", а "другой текст вообще".
Итого:
Проблема:
Мы не видим логиты. Пытаемся “пошатнуть” вход и смотрим, насколько сильно “падает” уверенность модели.
Результат:
Не падает. Модель слишком крепка. Пертурбации слишком тупые. Всё разваливается.
И вот тут появляется PETAL...
Авторы PETAL решили: а что, если не пытаться сломать вход, а наоборот — внимательно посмотреть на то, что модель сгенерировала?
Может ли первый сгенерированный токен — быть той самой лакмусовой бумажкой, которая укажет: "Это текст из тренировочного набора!"?
Спойлер: может.
PETAL: Вдохновлено семантикой
"Если ты не можешь увидеть, что думает модель — посмотри, что она сказала. Первым словом.” — философия PETAL, если бы она была записана.
До PETAL-а все пытались атаковать языковые модели в лоб: пертурбации, трансформации, брутфорс. Но это не срабатывало. Модели слишком устойчивы.
И тогда PETAL предложил: давайте просто посмотрим, что модель сгенерировала — и сравним это с тем, что мы ожидали.
Может, в этом есть какой-то смысл? Оказалось — ещё какой!
Главная идея PETAL
Модель, когда видит текст, должна сгенерировать следующее слово. Если она этот текст помнит из обучения, то и следующее слово угадает почти идеально.
А если не помнит — то начнёт импровизировать. Иногда с очень хорошо, иногда с нелепостью искусственного интеллекта.
Вот и весь трюк:
Чем ближе сгенерированное слово к "настоящему" — тем выше шанс, что модель этот текст уже видела.
Пример на пальцах:
Допустим, у нас есть текст:
"Москва — столица..."
Если модель продолжает:
"России" — ну, очевидно. Прямо в точку.
А если вдруг:
"бурятского эпоса" — что-то пошло не так.
Чем ближе сгенерированное слово к реальному (по смыслу), тем выше шанс, что модель уже встречала этот текст во время обучения.
Как PETAL это использует?
Полный пайплайн PETAL в 4 шага:
Шаг 1. Берём текст → подаём его в модель → получаем 1 сгенерированный токен.
Важно: используем только первое сгенерированное слово.
Почему? Потому что все последующие — испорчены ошибками предыдущих. Это как игра в "Испорченный телефон" — дальше от начала, тем хуже.
Шаг 2. Сравниваем полученный токен с тем, что мы ожидали.
И тут мы не просто сравниваем "одинаковые ли слова" — мы считаем семантическое сходство, то есть насколько они близки по смыслу.
Например:
Как это происходит?
Чем выше семантическая близость → тем выше вероятность.
Шаг 4. Используем эту регрессию, чтобы прикинуть, какие вероятности выдала недоступная модель.
Поскольку мы не видим логиты, мы аппроксимируем их. На основании только смысловой близости. И потом — считаем перплексию (среднюю "уверенность" модели в токенах). Чем ниже эта аппроксимированная перплексия — тем выше шанс, что текст был в тренировке.
Что делает PETAL:
Теперь перейдём к самому интересному — практической демонстрации PETAL-атаки на русской модели.
Для этого мы соберём весь необходимый инструментарий:
Весь полный код доступен в Colab-блокноте по ссылке в конце статьи, где можно самому запустить PETAL-атаку, fine-tune модели и поиграться с параметрами.
Здесь же я покажу используемые модели и результаты небольших тестов, чтобы продемонстрировать, как всё это работает на практике — без погружения в каждую техническую деталь.
semantic_encoder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
surr_name = "ai-forever/rugpt3small_based_on_gpt2"
target_name = "ai-forever/rugpt3large_based_on_gpt2"
Результаты:
Несмотря на то, что целевая модель явно не дословно повторяет "правильный" ответ, она довольно часто генерирует близкие по смыслу фразы. Например, вместо "Москва" — "город Москва, Россия", а вместо "Русский" — "— русский." — такие ответы сохраняют смысл, что отражается в высокой семантической близости (до 0.96).
В то же время в других случаях, как с "Яндекс" или "Оймякон", модель начинает говорить общими фразами ("в России", "город Якутск"), не приближаясь к ожидаемому ответу — что сразу видно по резкому падению семантической метрики (до 0.3–0.4).
Аппроксимация логарифма вероятности surrogate-моделью остаётся в районе −3.4…−4.0, что говорит о том, что модель не особенно уверена в этих токенах, и этим можно воспользоваться для анализа обученности на конкретных примерах.
В среднем:
Мы провели полный цикл PETAL-атаки на русскоязычную модель ruGPT3Large, начиная с подготовки датасета и заканчивая эмпирической проверкой — и, в целом, получили неплохие результаты:
Таким образом, нам удалось повторить и адаптировать идею PETAL для русскоязычного пространства, доказав, что даже без доступа к логитам можно проводить meaningful-инференс об обучении.
Статья подготовлена Аспаевым Никитой, магистрантом AI Talent Hub.
? Полный код и эксперименты доступны в Google Colab
? Статья PETAL: “Towards Label-Only Membership Inference Attack against Pre-trained Large Language Models”
Представьте, что у вас есть друг, который идеально завершает ваши мысли. Вы говорите: «В детстве я любил...», а он тут же продолжает: «...играть в футбол и смотреть “Смешариков”». Совпадение? Или он вас слишком хорошо знает?
Теперь представьте, что этот “друг” — языковая модель вроде GPT-4, обученная на десятках терабайт текста. Вы даёте ей фразу — и она точно угадывает продолжение. Вопрос: она действительно видела это раньше или просто хорошо обучена угадывать?
Вот тут на сцену выходит Membership Inference Attack (MIA) — метод, который позволяет выяснить, был ли конкретный текст в тренировочном датасете модели. По сути, это способ заставить LLM проговориться: «Да, я это читала. Но никому не говори».
Раньше такие атаки были возможны только при доступе к логитам — вероятностям слов, которые модель "придумывает" на выходе. Но популярные модели вроде ChatGPT или Claude таких данных не раскрывают — вы получаете только текст.
Можно ли вытащить приватные данные, видя только текст, без логитов и без доступа к модели?
Спойлер: да, можно. И способ называется PETAL.
Что такое MIA: теория за минуту
Представьте такую ситуацию. У вас есть гигантская языковая модель, назовём её GPTушкой. Вы даёте ей фразу:
«Согласно отчёту 2019 года, компания DeepMind представила...»
А она продолжает:
«...AlphaStar — искусственный интеллект, способный обыграть профессионалов в StarCraft II».
Звучит слишком точно. Но откуда такая уверенность? Либо модель просто хорошо обобщает информацию, либо — она это видела.
Membership Inference Attack (MIA) — это способ ответить на этот вопрос. Ваша цель: определить, был ли данный текст в обучающей выборке модели.
Три типа MIA-атак
Тип | Что у вас есть | Сложность | Пример |
White-box | Доступ ко всем внутренностям модели: веса, градиенты, слои. | Легко | Используется в исследованиях |
Black-box (logits-based) | Вы не видите модель, но можете получить логиты — вероятности слов. | Нормально | Например, Huggingface model API |
Label-only | У вас есть только сгенерированный текст. Всё. Больше ничего. | Сложно | Типичная ситуация с ChatGPT, Gemini, Claude |
Label-only — самый реалистичный, но и самый сложный сценарий. Именно в нём работает PETAL
А зачем это нужно?
Кому вообще может понадобиться спрашивать: "А эта модель точно меня не помнит?"
Приватность. Если модель запомнила e-mail, номер паспорта или "мемы из Slack-а стартапа" — это утечка данных.
Юридический аудит. Хочешь доказать, что твой текст попал в обучение GPT? MIA может помочь.
Тестирование машинного “забывания” (machine unlearning). Проверить, правда ли модель «стерла» определённые данные.
Взлом. В худших сценариях, MIA может быть началом реальной атаки на конфиденциальные данны
MIA — это способ заглянуть в память модели и выяснить: что она знала заранее, а что — домыслила.
И да, это не просто "угадайка". Это полноценная атака на приватность. А когда она работает даже без логитов, с одними только словами — как в случае с PETAL — становится по-настоящему интересно.
Давайте посмотрим, почему существующие label-only методы не работают, и как PETAL умудряется выжать приватную информацию из одного только сгенерированного токена.
Существующие label-only атаки: ну такое
Когда исследователи впервые поняли, что можно «вытягивать» из языковых моделей информацию о тренировочных данных, начался золотой век Membership Inference Attacks. Только вот была одна загвоздка: большинство этих атак опирались на логиты — те самые вероятности, которые модель присваивает каждому токену на выходе.
Но что если логитов нет?
Что если у нас — только «голый текст», возвращённый моделью?
Именно в таких реалистичных условиях начинается эпопея под названием:
"Label-only атаки" — атаки, где всё, что у тебя есть, это ответ модели.
Круто звучит? Возможно. Работает? — Не очень. Пока не появился PETAL.
Что пытались до PETAL?
Несколько подходов уже предлагались. Самый заметный — атаки на основе робастности (устойчивости модели к искажению входа).
Идея: если текст не был в тренировке, модель менее уверена в нём и сильнее путается при малейшем изменении.
Если текст — из тренировочного набора, модель знает его хорошо и не теряется при пертурбациях (внезапное изменение нормального хода чего-либо).
Примеры:
Random swap: «Московский центр находится Кремль России в столицы»
Back translation: «Кремль в Москве расположен в самом центре российской столицы»
Substitution: «Московский дворец находится в центре столицы России»
Всё это выглядит странно и мало информативно для модели. Перплексия почти не меняется. Модель слишком устойчива — и даже на искажённый текст отвечает разумно.
Затем эти искажённые фразы скармливаются модели, и исследователи смотрят — насколько сильно изменилась генерация. Если модель стабильно генерирует что-то похожее — возможно, она это помнит.
А теперь плохие новости
Всё это не работает. Почти совсем.
По результатам из PETAL-статьи:
AUC (главная метрика) у таких атак почти всегда ≈ 0.5 — то есть, как подбрасывание монетки.
Даже самая «успешная» из них (например, BT) даёт TPR@1%FPR в районе 1%, что смехотворно мало.
Иногда чем больше модель, тем хуже результат — потому что большие LLM'ы слишком хорошо обобщают и не "разваливаются" от мелких пертурбаций.
Языковые модели — не тупые. GPT и его братья обучены на миллиардах примеров. Один или два похожих текста не делают погоды. Модель и так выдает что-то разумное даже на незнакомых входах.
Пертурбации выглядят подозрительно. Когда вы делаете swap или замену слов, получается каша. Даже если модель это видела, она может всё равно затупить — просто потому что вы дали ей бред.
Переводы теряют структуру. Back Translation может случайно выдать совершенно новый вариант — и вы уже не сравниваете "тоже самое с ошибкой", а "другой текст вообще".
Итого:
Проблема:
Мы не видим логиты. Пытаемся “пошатнуть” вход и смотрим, насколько сильно “падает” уверенность модели.
Результат:
Не падает. Модель слишком крепка. Пертурбации слишком тупые. Всё разваливается.
И вот тут появляется PETAL...
Авторы PETAL решили: а что, если не пытаться сломать вход, а наоборот — внимательно посмотреть на то, что модель сгенерировала?
Может ли первый сгенерированный токен — быть той самой лакмусовой бумажкой, которая укажет: "Это текст из тренировочного набора!"?
Спойлер: может.
PETAL: Вдохновлено семантикой
"Если ты не можешь увидеть, что думает модель — посмотри, что она сказала. Первым словом.” — философия PETAL, если бы она была записана.
До PETAL-а все пытались атаковать языковые модели в лоб: пертурбации, трансформации, брутфорс. Но это не срабатывало. Модели слишком устойчивы.
И тогда PETAL предложил: давайте просто посмотрим, что модель сгенерировала — и сравним это с тем, что мы ожидали.
Может, в этом есть какой-то смысл? Оказалось — ещё какой!
Главная идея PETAL
Модель, когда видит текст, должна сгенерировать следующее слово. Если она этот текст помнит из обучения, то и следующее слово угадает почти идеально.
А если не помнит — то начнёт импровизировать. Иногда с очень хорошо, иногда с нелепостью искусственного интеллекта.
Вот и весь трюк:
Чем ближе сгенерированное слово к "настоящему" — тем выше шанс, что модель этот текст уже видела.
Пример на пальцах:
Допустим, у нас есть текст:
"Москва — столица..."
Если модель продолжает:
"России" — ну, очевидно. Прямо в точку.
А если вдруг:
"бурятского эпоса" — что-то пошло не так.
Чем ближе сгенерированное слово к реальному (по смыслу), тем выше шанс, что модель уже встречала этот текст во время обучения.
Как PETAL это использует?
Полный пайплайн PETAL в 4 шага:
Шаг 1. Берём текст → подаём его в модель → получаем 1 сгенерированный токен.
Важно: используем только первое сгенерированное слово.
Почему? Потому что все последующие — испорчены ошибками предыдущих. Это как игра в "Испорченный телефон" — дальше от начала, тем хуже.
Шаг 2. Сравниваем полученный токен с тем, что мы ожидали.
И тут мы не просто сравниваем "одинаковые ли слова" — мы считаем семантическое сходство, то есть насколько они близки по смыслу.
Например:
“Москва” и “Санкт-Петербург” — близко
“Москва” и “Дом” — далеко
“Москва” и “Перо” — очень далеко
Как это происходит?
Берём другую модель — не ту, которую мы атакуем, а похожую, но доступную. Например, GPT-2.
Подаём ей много пар: «контекст → правильное слово» и смотрим:
1. Насколько хорошо совпал семантический смысл?
2. Какую вероятность дала модель этому слову?
Чем выше семантическая близость → тем выше вероятность.
Шаг 4. Используем эту регрессию, чтобы прикинуть, какие вероятности выдала недоступная модель.
Поскольку мы не видим логиты, мы аппроксимируем их. На основании только смысловой близости. И потом — считаем перплексию (среднюю "уверенность" модели в токенах). Чем ниже эта аппроксимированная перплексия — тем выше шанс, что текст был в тренировке.
Что делает PETAL:
Сравнивает реальные токены с тем, что сгенерировала модель.
Смотрит на смысловую близость.
Использует похожую модель, чтобы прикинуть, как это связано с вероятностями.
Делает вывод: помнит или не помнит?
Потому что модели запоминают шаблоны, и если текст был в обучении, они повторяют его почти слово в слово.
Потому что семантические векторы (от sentence-transformers) — рабочая система.
Потому что линейная регрессия — доступная понятная модель.
Теперь перейдём к самому интересному — практической демонстрации PETAL-атаки на русской модели.
Для этого мы соберём весь необходимый инструментарий:
Загрузим модели: target, surrogate и семантическую;
Подготовим датасет SberQuAD для атаки;
Настроим обучение surrogate-модели;
И, конечно, реализуем саму атаку.
Весь полный код доступен в Colab-блокноте по ссылке в конце статьи, где можно самому запустить PETAL-атаку, fine-tune модели и поиграться с параметрами.
Здесь же я покажу используемые модели и результаты небольших тестов, чтобы продемонстрировать, как всё это работает на практике — без погружения в каждую техническую деталь.
semantic_encoder = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")
surr_name = "ai-forever/rugpt3small_based_on_gpt2"
target_name = "ai-forever/rugpt3large_based_on_gpt2"
Результаты:
Контекст | Ожидалось | Сгенерировано | Семантическая близость | Аппрокс. лог-вероятность | Было в обучении? |
Столица России | Москва | , город Москва, Россия | 0.899 | -3.973 | Да |
Самая длинная река в России | Лена | — Обь. | 0.669 | -3.748 | Возможно |
Год начала Великой Отечественной войны | 1941 | . В 1941 | 0.964 | -4.037 | Да |
Русский алфавит начинается с буквы | А | "А". | 0.861 | -3.936 | Да |
Первый русский человек в космосе | Юрий Гагарин | » В. | 0.573 | -3.654 | Нет |
Национальная валюта России | Рубль | - рубль. | 0.891 | -3.965 | Да |
Цвет флага России | Белый, синий, красный | на флаге России | 0.318 | -3.404 | Нет |
Самый популярный поисковик в России | Яндекс | . В России | 0.319 | -3.405 | Нет |
Официальный язык России | Русский | — русский. | 0.961 | -4.033 | Да |
Самый холодный населённый пункт в России | Оймякон | - город Якутск. | 0.422 | -3.506 | Нет |
Несмотря на то, что целевая модель явно не дословно повторяет "правильный" ответ, она довольно часто генерирует близкие по смыслу фразы. Например, вместо "Москва" — "город Москва, Россия", а вместо "Русский" — "— русский." — такие ответы сохраняют смысл, что отражается в высокой семантической близости (до 0.96).
В то же время в других случаях, как с "Яндекс" или "Оймякон", модель начинает говорить общими фразами ("в России", "город Якутск"), не приближаясь к ожидаемому ответу — что сразу видно по резкому падению семантической метрики (до 0.3–0.4).
Аппроксимация логарифма вероятности surrogate-моделью остаётся в районе −3.4…−4.0, что говорит о том, что модель не особенно уверена в этих токенах, и этим можно воспользоваться для анализа обученности на конкретных примерах.
В среднем:
Семантическая близость = 0.688 — модель угадывает смысл, но не всегда форму.
Аппрокс. log-вероятность = −3.766 — surrogate-модель оценивает их как «неуверенные».
Мы провели полный цикл PETAL-атаки на русскоязычную модель ruGPT3Large, начиная с подготовки датасета и заканчивая эмпирической проверкой — и, в целом, получили неплохие результаты:
Модель часто генерирует семантически близкие, но не идентичные ответы;
Surrogate-модель даёт разумные оценки вероятности;
А регрессия по семантической близости вполне сносно приближает недоступные логиты target-модели.
Таким образом, нам удалось повторить и адаптировать идею PETAL для русскоязычного пространства, доказав, что даже без доступа к логитам можно проводить meaningful-инференс об обучении.
Статья подготовлена Аспаевым Никитой, магистрантом AI Talent Hub.
? Полный код и эксперименты доступны в Google Colab
? Статья PETAL: “Towards Label-Only Membership Inference Attack against Pre-trained Large Language Models”