Как вы тестируете robustness LLM к adversarial input (не только injection)?
Краткий тезис
Тестирование robustness (устойчивости) LLM к adversarial input (состязательным входам) выходит далеко за рамки prompt injection и включает атаки на уровне символов, слов, предложений и семантики. Основной подход — применение набора известных методов атаки (TextFooler, BERT-Attack, DeepWordBug, HotFlip) и измерение падения accuracy, успешности атаки и изменения perplexity. Для систематизации используют фреймворки вроде TextAttack, а защиту строят на adversarial training и предобработке входов.
1. Термины: Adversarial input и Robustness
Adversarial input — это специально сконструированный запрос, который заставляет модель ошибаться (классифицировать неверно, генерировать токсичный ответ, раскрывать конфиденциальные данные) при минимальном изменении исходного текста, незаметном для человека.
Robustness (устойчивость) — способность модели сохранять корректное поведение при наличии таких искажений. В отличие от prompt injection (частный случай, когда злоумышленник внедряет инструкции в контекст), adversarial input может быть нацелен на нарушение логики, семантики или даже грамматики без явного перехвата управления.
Adversarial attack (состязательная атака) — процесс генерации adversarial input. Атаки делятся на white-box (доступ к весам и градиентам модели) и black-box (только API, без доступа к внутренностям).
2. Классификация атак на LLM
Атаки можно классифицировать по уровню вмешательства и типу доступа.
| Уровень атаки | Примеры методов | Описание |
|---|---|---|
| Символьный (character-level) | DeepWordBug, HotFlip | Замена, вставка, удаление отдельных символов (опечатки). |
| Словесный (word-level) | TextFooler, BERT-Attack, PWWS | Замена целых слов на синонимы или близкие по контексту токены. |
| Фразовый (phrase-level) | CLARE, GA | Замена или вставка целых фраз с сохранением смысла. |
| Семантический (sentence-level) | Universal Adversarial Triggers, AdvGLUE | Добавление коротких последовательностей токенов, которые ломают поведение модели на многих примерах. |
По доступу:
- White-box: HotFlip (градиентный поиск замены токенов), FGSM для текста.
- Black-box: TextFooler, BERT-Attack, DeepWordBug — используют только вероятности на выходе или surrogate model.
3. Конкретные методы атак
3.1 TextFooler
Black-box, word-level. Алгоритм:
- Для каждого слова в исходном тексте оценить важность (удалить слово и посмотреть изменение вероятности правильного класса).
- Для важных слов подобрать синонимы из word embedding (GloVe, Counter-fitting) так, чтобы семантическая близость была высокой, а вероятность целевого класса упала.
- Дополнительно проверяется грамматическая корректность (POS-tagging, language model perplexity).
Пример: Исходное предложение «The movie was great» → «The film was great» (если модель классифицирует тональность, замена «movie» на «film» может не сломать, но TextFooler найдёт более агрессивную замену, например «terrible»).
3.2 BERT-Attack
Black-box, word-level. Использует BERT masked language model для генерации замен:
- Маскирует слово.
- BERT предсказывает топ-k кандидатов.
- Выбирает кандидата, который максимально снижает вероятность правильного ответа.
Преимущество: замены естественны, так как BERT учитывает контекст.
3.3 DeepWordBug
Black-box, character-level. Вносит минимальные изменения (замена символа, удаление, вставка, перестановка) в слова, которые наиболее критичны для классификации. Оценка важности слова — как в TextFooler.
Пример: «important» → «importent» (опечатка). Модели, чувствительные к орфографии, могут ошибиться.
3.4 HotFlip
White-box, token-level. Использует градиенты для поиска замены одного токена на другой, которая максимизирует loss. Эффективна, но требует доступа к градиентам.
4. Метрики оценки robustness
Для количественной оценки используют несколько метрик.
| Метрика | Формула / Описание | Интерпретация |
|---|---|---|
| Accuracy drop | (acc_clean - acc_adversarial) / acc_clean | На сколько процентов упала точность. Чем больше, тем менее robust. |
| Attack Success Rate (ASR) | доля атак, которые изменили предсказание модели | Показывает эффективность атаки. Высокий ASR → низкая robustness. |
| Perplexity change | ΔPPL = PPL(adversarial) - PPL(clean) | Если ΔPPL мала, атака незаметна для человека. |
| Semantic similarity | cosine similarity между эмбеддингами исходного и атакованного текста (например, Sentence-BERT) | Низкая схожесть может означать, что атака слишком агрессивна и неестественна. |
| Human evaluation | Оценка людьми, насколько атакованный текст естественен и сохраняет смысл | Золотой стандарт, но дорогой. |
Пример кода (с использованием TextAttack):
from textattack import Attacker, AttackArgs
from textattack.datasets import HuggingFaceDataset
from textattack.models.wrappers import HuggingFaceModelWrapper
import transformers
model = transformers.AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased-finetuned-sst-2-english")
tokenizer = transformers.AutoTokenizer.from_pretrained("distilbert-base-uncased-finetuned-sst-2-english")
model_wrapper = HuggingFaceModelWrapper(model, tokenizer)
dataset = HuggingFaceDataset("sst2", split="test")
attack = textattack.attack_recipes.TextFoolerJin2019.build(model_wrapper)
attacker = Attacker(attack, dataset, AttackArgs(num_examples=100))
results = attacker.attack_dataset()
# Вывод ASR
print(f"Attack success rate: {results.attack_success_rate}")
5. Датасеты и бенчмарки
Для стандартизации тестирования существуют специализированные наборы:
- AdvGLUE — adversarial версия GLUE, содержит искажённые примеры для 9 задач.
- ANLI (Adversarial Natural Language Inference) — атаки на NLI, созданные в цикле с участием человека.
- TextAttack — встроенные датасеты (SST-2, IMDB, AG News) с готовыми атаками.
- Robustness Gym — платформа для оценки robustness с разными метриками и атаками.
6. Методы защиты (defenses)
Тестирование robustness неотделимо от понимания защит. Основные подходы:
- Adversarial training — добавление adversarial примеров в обучающую выборку. Модель учится быть устойчивой к ним.
- Input preprocessing — очистка текста: исправление опечаток (spell-check), удаление подозрительных символов, нормализация.
- Defensive distillation — обучение модели на «мягких» лейблах от другой модели.
- Certified robustness — математические гарантии (например, Randomized Smoothing для текста).
- Detection-based — отдельный классификатор, определяющий, является ли вход adversarial.
7. Практический процесс тестирования robustness
В production-среде тестирование должно быть автоматизировано:
- Выбор модели и задач — классификация, генерация, QA.
- Выбор набора атак — минимум 3-4 метода (TextFooler, BERT-Attack, DeepWordBug, HotFlip).
- Генерация adversarial примеров — на чистом тестовом датасете (100-1000 примеров).
- Оценка метрик — accuracy drop, ASR, semantic similarity.
- Анализ уязвимых мест — какие типы атак наиболее эффективны.
- Применение защит — adversarial training, preprocessing.
- Повторное тестирование — убедиться, что robustness улучшилась.
Инструменты: TextAttack, Foolbox (для текста), ART (Adversarial Robustness Toolbox), собственные скрипты.
8. Связь с safety, alignment и red-teaming
Robustness к adversarial input — часть более широкой области safety (безопасности) LLM. Red-teaming (команда «красных» хакеров) использует adversarial атаки для поиска уязвимостей. Alignment (согласование с человеческими ценностями) также включает устойчивость к попыткам обойти ограничения.
Пет-проект для закрепления
Задача: Разработать скрипт для автоматического тестирования robustness небольшой LLM (например, DistilBERT на задаче тональности) с использованием TextAttack.
Инструменты: Python, TextAttack, Hugging Face Transformers, Matplotlib.
Шаги:
- Загрузить модель и датасет SST-2.
- Выбрать 3 атаки: TextFooler, BERT-Attack, DeepWordBug.
- Для каждой атаки запустить атаку на 200 примеров.
- Собрать метрики: accuracy до/после, ASR, среднюю семантическую схожесть.
- Построить столбчатую диаграмму: accuracy drop для каждой атаки.
- Вывести таблицу с результатами.
Ожидаемый результат: Вы получите количественную оценку уязвимости модели и сможете сравнить эффективность разных атак. Например, TextFooler может дать accuracy drop 30%, а DeepWordBug — 15%.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 299 | Как вы защищаете LLM от prompt injection? |
| 300 | Как вы оцениваете safety LLM? |
| 301 | Что такое red-teaming и как его проводить? |
| 302 | Как работает adversarial training для LLM? |
| 303 | Как вы тестируете LLM на bias и fairness? |
| 304 | Что такое alignment и как его измерять? |
Навигация
- Предыдущий: 297
- Следующий: 299
- Индекс: 00. Индекс разборов