За статью спасибо подписчику.



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

- фильтр по перплексии





Мне статья не очень понравилась, всё очень очевидно. О нет, в языковых моделях возможны промпт-инъекции, вот это новость! 😱

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