tgoop.com/dealerAI/65
Last Update:
Полуночное такси чтиво.
Улучшение устойчивости модели NLP.
Сегодня затрону на мой взгляд важную в текущем контексте событий в мире DL + NLP тему - адверсариальные атаки на текст. Тем более, что вместе с выходом GPT-4 OpenAI выложили в доступ библиотеку evals, которая преследует цель автоматизации тестирования решений OpenAI. За инфо спасибо @seeyouall.
Ну дык вот. Вспомнил своё решение по атакам на тексты. Правда, атакуем мы так энкодеры, но никто не мешает атаковать и промты таким же образом. Как раз этим алгоритмом с Вами и поделюсь.
Идея:
Мы используем два способа атак. Первый, внося опечатки и ошибки разной природы. Второй-мы будем менять слова на их синонимы, но выбирать такие слова, которые наносят максимальный урон при замене. Урон мы замеряем в зависимости от цели. Например, для задачи поиска по эмбедам, мы замеряем урон по self distance между векторами до и после аугментации. В итоге задача стоит в том, чтобы улучшить устойчивость языковых моделей к таким атакам.
Тк с аугментациями опечатками всё понятно, расскажу про ауги на уровне замен слов.
Алгоритм:
1. Проходим по атакуемой фразе пословно. Удаляем с возвратом слово.
2. Для задачи атаки энкодера замеряем расстояние между векторами фразы до и после удаления слова. Естественно, используем для этого атакуемый энкодер. Записываем в лист скор. Если мы решаем supervised задачу, замеряем скор до и после, вычитаем их из друг друга. Разницу кладём в лист.
3. Сортируем лист и берём слова из топК по величине урона. Обычно берём К как 20\30% от длины фразы в словах.
4. Для каждого выбранного атакуемого слова выбираем кандидата на замену. Для этого используем словарь синонимов. Ключ это нормальная форма слова, значения это лист его синонимов. Так же нормальных форм. Естественно все атакуемые слова нормализуются.
5. Поиск по синонимам идёт при помощи другой нежели атакуемый энкодер модели. Например, это может быть MUSE, tiny-BERT (для скорости), sbert и тп. Задача векторизовать слова синонимы и атакуемое слово, подобрать топ1 слово по векторной близости, но допускается также случайный выбор из топК (так же 20/30%).
6. После выбора синонимов, они возвращаются вместо атакуемых слов в фразу. Обязательно с возвращением согласования, напомним, слова были нормализованы.
Теперь у нас есть несколько комбинаций слов на замену, можно менять по одному слову за раз можно сразу несколько во фразе. В любом случае, нам нужно выбрать один кандидат парафразы в итоге. Как это сделать? Всё также, берём все кандидаты парафраз. Далее внешний энкодер, и с помощью него векторизуем парафразы, считаем расстояния до изначальной фразы. После расчитываем урон на расстояние/скор между этой парафразой и изначальной фразой от атакуемой модели. Итого скоры от внешнего энкодера и атакуемой модели мы учитываем для выбора лучшей парафразы: нам нужно взять относительно близкую фразу по внешнему энкодеру, но дающую при этом высокий урон на атакуемую модель. Можно сделать свою формулу такого ранжирования, например отношение урона/(1+расстояние) . Up to you.
Зачем мы используем внешний энкодер для поиска синонимов и парафраз? Всё просто. Нам нужен внешний критик-модель, по мнению которой мы выбираем такие замены, что она не может отличить исходную фразу/слово от аугментированной. При этом, слова и фразу на замену мы выбрали с условием урона на изначальный энкодер, который атакуем.
Теперь вернемся к началу. В век промт инжиниринга когда от исходного текста зависит итоговая генерация, данный алгоритм может быть полезен для тестирования, и, что важно, улучшения устойчивости ваших декодер моделей. Во время обучения вашего декодера вы можете атаковать промты, при этом ожидая устойчивости, к примеру, переплексии или следить за KL- дивергенцией в качестве цели атаки. В случае декодера мы выбираем такие парафразы промтов, которые наносят максимально удар по какой-то из этих мер.
BY Dealer.AI
Share with your friend now:
tgoop.com/dealerAI/65