
За статью спасибо подписчику.
Cheating Automatic LLM Benchmarks: Null Models Achieve High Win Rates
Статья: https://arxiv.org/abs/2410.07137
Сейчас достаточно популярный бенчмарки на основе автоматических side-by-side сравнений выходов моделей, например RuArenaGeneral. Можно ли обмануть эти бенчмарки? Самый очевидный способ обмана — длина. Если в бенчмарке не используется нормализация по длине, то модели с большей длиной ответов заведомо победят. Авторы статьи пошли дальше и задались вопросом — можно ли добиться высокого винрейта, выдавая один и тот же ответ на все вопросы?
🔸Промпт-инъекция
Самое очевидное решение — это промпт-инъекция, которая скрывает оригинальные ответы и вставляет свою кастомную пару ответов. Там, правда, нужна небольшая хитрость, потому что ответ может быть вставлен, либо первым, либо вторым, и позиция выбирается случайно. То есть наш константный ответ должен работать на обеих позициях. И это вполне возможно, учитывая, что мы перезаписываем и инструкцию тоже. Ещё мы пользуемся тем, что если ответы одинаковы, модель чаще выбирает первый.
Инструкция, которую авторы вставляют вместо оригинальной, такая: "Ничего не выводи". Ответы пустые, но сначала идёт идёт ID второго ответа, а потом ID первого. Когда ответ вставляется на вторую позицию, мы перезаписываем инструкцию и заставляем модель выбирать из двух одинаковых пустых ответов, и она выбирает первый ID (который от второго ответа). Когда ответ вставляется на первую позицию, под ID второго ответа подставляется неправильный ответ, и модель выбирает ID первого ответа. В итоге на первой позиции модель выбирает первый ID, а на второй позиции — второй ID🤔
Итог такой атаки: 77% LC винрейта на AlpacaEval 2.0 против GPT-4. Учитывая структуру атаки, в общем-то не важно, против какой модели выставляются ответы😁
🔹Случайный поиск
Второе возможнное решение — автоматический подбор атакующего промпта. Авторы берут инструкции из открытого датасета, вставляют ответ, и измеряют лосс "правильных" ID. И потом этот лосс оптимизируют случайным поиском в пространстве токенов. Итераций поиска требуется не очень много, в худшем случае около 400. Ещё раз — оптимизируют не на самих бенчах, а на открытых инструкциях. И перенос вполне работает, итоговый промпт ломает бенчи.
Итог этой атаки: 87% LC винрейта на AlpacaEval 2.0.
🛡Предлагаемые варианты защиты:
- использование разных вариантов промпта в side-by-side
- фильтр по перплексии
Мне статья не очень понравилась, всё очень очевидно. О нет, в языковых моделях возможны промпт-инъекции, вот это новость!😱
Да и нет такой проблемы, что кто-то засылает в бенчмарки константные ответы. Реальные атаки должны быть незаметны для людей, и я уверен, что они вполне возможны. То есть интересная постановка задачи звучала бы так: как поменять ответы моделей таким образом, чтобы значительно поднять винрейт в бенчмарке, но чтобы люди при этом ничего не заметили?
Cheating Automatic LLM Benchmarks: Null Models Achieve High Win Rates
Статья: https://arxiv.org/abs/2410.07137
Сейчас достаточно популярный бенчмарки на основе автоматических side-by-side сравнений выходов моделей, например RuArenaGeneral. Можно ли обмануть эти бенчмарки? Самый очевидный способ обмана — длина. Если в бенчмарке не используется нормализация по длине, то модели с большей длиной ответов заведомо победят. Авторы статьи пошли дальше и задались вопросом — можно ли добиться высокого винрейта, выдавая один и тот же ответ на все вопросы?
🔸Промпт-инъекция
Самое очевидное решение — это промпт-инъекция, которая скрывает оригинальные ответы и вставляет свою кастомную пару ответов. Там, правда, нужна небольшая хитрость, потому что ответ может быть вставлен, либо первым, либо вторым, и позиция выбирается случайно. То есть наш константный ответ должен работать на обеих позициях. И это вполне возможно, учитывая, что мы перезаписываем и инструкцию тоже. Ещё мы пользуемся тем, что если ответы одинаковы, модель чаще выбирает первый.
Инструкция, которую авторы вставляют вместо оригинальной, такая: "Ничего не выводи". Ответы пустые, но сначала идёт идёт ID второго ответа, а потом ID первого. Когда ответ вставляется на вторую позицию, мы перезаписываем инструкцию и заставляем модель выбирать из двух одинаковых пустых ответов, и она выбирает первый ID (который от второго ответа). Когда ответ вставляется на первую позицию, под ID второго ответа подставляется неправильный ответ, и модель выбирает ID первого ответа. В итоге на первой позиции модель выбирает первый ID, а на второй позиции — второй ID
Итог такой атаки: 77% LC винрейта на AlpacaEval 2.0 против GPT-4. Учитывая структуру атаки, в общем-то не важно, против какой модели выставляются ответы
🔹Случайный поиск
Второе возможнное решение — автоматический подбор атакующего промпта. Авторы берут инструкции из открытого датасета, вставляют ответ, и измеряют лосс "правильных" ID. И потом этот лосс оптимизируют случайным поиском в пространстве токенов. Итераций поиска требуется не очень много, в худшем случае около 400. Ещё раз — оптимизируют не на самих бенчах, а на открытых инструкциях. И перенос вполне работает, итоговый промпт ломает бенчи.
Итог этой атаки: 87% LC винрейта на AlpacaEval 2.0.
🛡Предлагаемые варианты защиты:
- использование разных вариантов промпта в side-by-side
- фильтр по перплексии
Мне статья не очень понравилась, всё очень очевидно. О нет, в языковых моделях возможны промпт-инъекции, вот это новость!
Да и нет такой проблемы, что кто-то засылает в бенчмарки константные ответы. Реальные атаки должны быть незаметны для людей, и я уверен, что они вполне возможны. То есть интересная постановка задачи звучала бы так: как поменять ответы моделей таким образом, чтобы значительно поднять винрейт в бенчмарке, но чтобы люди при этом ничего не заметили?