Всем привет!
Давно конечно было постов, так как я буквально пару дней назад приехала на учебу в Австрию и до этого нужно было сделать примерно миллион дел. Надеюсь, что учеба здесь даст еще больше поводов готовить посты и рассказывать интересное из научной жизни тут:)
Сегодня я хотела сделать небольшой рассказ о том, как можно применять инструменты анализа внутренних представлений моделей для задачи написания тестов на Python по мотивам работы исследователей из Tilde Research.
Это небольшое практическое исследование подсветило мне, что методы интерпретируемости можно пробовать применять к задачам, где мы хотим как-то на ходу фильтровать генерации языковых моделей или же как-то осмысленно ограничивать то, что они генерируют и эти методы могут очень здорово работать.
Итак, к Tilde Research пришла компания по автоматической генерации кода на Python с конкретным запросом сделать так, чтобы языковая модель по данному коду программы генерировала тесты, которые проверяют валидность ввода в программу (например, что в e-mail есть символ @ и точка).
У авторов были ограничения на содержание тестов: там не должно было быть вызовов регулярных функций, так как они часто приводят к false positive errors. При этом генерируемые тесты должны были быть разумными и корректными.
Обычно с такой задачей вполне хорошо справляется промптинг, но проблема в том, что у данной компании уже достаточно большой системный промпт (> 10000 символов) для автоматизации процессов, что создает проблему. Часто модели при работе с таким большим промптом либо
а) начинают игнорировать инструкции
б) при попытке исправить одну ошибку, начинают откатывать исправления прошлых ошибок.
Поэтому было решено попробовать действовать на модель «извне» а не с помощью инструкций. А именно, было предложено научиться находить явно признаки внутри модели, которые бы реагировали на появление регулярных выражений в тексте. Значение такого признака внутри модели для конкретного текста в каком-то смысле обозначала бы вероятность того, что в тексте есть регулярное выражение. И поэтому, руками уменьшив это значение, можно как бы «заставить» модель не добавлять регулярные выражения в тест.
Итак, что сделали авторы
1. Взяли три легковесные модели для генерации: Gemma и LLaMA (2B, 8B, 9B) и хорошие датасеты с кодом.
2. Для Gemma-моделей взяли уже обученный GemmaScope SAE, а для LLaMA обучили свой SAE на датасете с кодом на Python. Эти модели отвечают за поиск нужных признаков внутри моделей-генераторов.
3. Для каждой модели из (1) с помощью (2) настроили автоматическое определение признаков-кандидатов, наиболее чувствительных к появлению регулярных выражений.
4. Далее, уже в процессе генерации нового текста моделью из (1) можно определять достаточно ли активен этот признак и если да, то вмешиваемся и уменьшаем влияние этого признака на генерацию.
Продолжение ⬇️
Post #33
612

- ❤ 7