Что такое Explainable AI (XAI) для NLP (LIME, SHAP, Attention Visualization)?
Краткий тезис
Объяснимый ИИ (XAI) в NLP решает проблему «чёрного ящика» моделей (BERT, GPT и др.) путём выявления причинно-следственных связей между входными токенами и предсказанием. Основные методы: локальная аппроксимация (LIME), кооперативная теория игр (SHAP) и визуализация весов Attention. Каждый имеет свою теоретическую базу, сильные стороны и ограничения.
--|----------| | 1 | Выбрать экземпляр $x$ для объяснения. | | 2 | Сгенерировать $N$ возмущённых копий $z_i$ (случайное удаление/маскирование слов). | | 3 | Получить предсказания $f(z_i)$ от чёрного ящика. | | 4 | Взвесить $z_i$ по близости к $x$ (ядро Гаусса). | | 5 | Обучить интерпретируемую модель $g$ (Lasso, Decision Tree) на ${(z_i, f(z_i))}$. | | 6 | Интерпретировать веса/важность признаков из $g$. |
1.2 Код (пример с lime)
import lime
import lime.lime_text
from sklearn.pipeline import make_pipeline
# pipeline: Vectorizer + model
pipeline = make_pipeline(vectorizer, classifier)
explainer = lime.lime_text.LimeTextExplainer(class_names=['neg','pos'])
exp = explainer.explain_instance(text, pipeline.predict_proba, num_features=10)
exp.show_in_notebook(text=True)
1.3 Сильные/слабые стороны
- Плюсы: агностический, быстрый, работает с любым классификатором.
- Минусы: нестабильность объяснений (разные семплирования → разные веса); локальная аппроксимация может не отражать глобальное поведение модели.
2. SHAP (SHapley Additive exPlanations)
Суть: Значение Шепли — математически корректный способ распределить «вклад» каждого признака в предсказание, основанный на теории кооперативных игр.
2.1 Принцип
Для множества признаков $F$ и модели $f$ вклад $i$-го слова вычисляется как среднее маргинального вклада по всем возможным подмножествам $S \subseteq F \setminus {i}$: $$\phi_i(f,x)=\sum_{S \subseteq F\setminus{i}} \frac{|S|!(|F|-|S|-1)!}{|F|!} \left[f(S \cup {i}) - f(S)\right]$$
2.2 Применение в NLP
- KernelSHAP (LIME-подобный): аппроксимация для произвольной модели.
- DeepSHAP (для нейросетей): использует градиенты (модификация DeepLIFT).
- TreeSHAP (бустинг): точное вычисление для деревьев.
2.3 Код (DeepSHAP для BERT)
import shap
explainer = shap.Explainer(model, tokenizer, output_names=['neg','pos'])
shap_values = explainer(texts)
shap.plots.text(shap_values[0])
2.4 Сравнение с LIME
| Характеристика | LIME | SHAP |
|---|---|---|
| Теоретическая база | Локальная аппроксимация | Значения Шепли |
| Стабильность | Низкая (зависит от шума) | Высокая (гарантирована единственность) |
| Скорость | Быстро ≈100 выборок | Медленнее (экспоненциальный расчёт, но есть аппроксимации) |
| Интерпретируемость | Веса линейной модели | Аддитивное разложение |
3. Attention Visualization (тепловая карта весов)
Суть: Визуализация матрицы внимания в Transformer-моделях показывает, на какие токены модель «смотрит» при генерации следующего скрытого состояния.
3.1 Инструменты
| Инструмент | Пример |
|---|---|
bertviz | Интерактивные тепловые карты по головам внимания |
exbert | Дашборд для анализа поведения BERT |
captum | Attention attributions для PyTorch |
3.2 Пример с bertviz
from bertviz import model_view
from transformers import AutoTokenizer, AutoModel
model = AutoModel.from_pretrained('bert-base-multilingual-cased')
tokenizer = AutoTokenizer.from_pretrained('bert-base-multilingual-cased')
tokens = tokenizer.encode('Москва — столица России', return_tensors='pt')
attention = model(tokens).attentions
model_view(attention, tokens) # отобразить в Jupyter
3.3 Интерпретация
- Head importance: разные головы внимания могут фокусироваться на синтаксисе (зависимости) или семантике (анафора).
- Layer depth: нижние слои – лексика/морфология, верхние – контекст/смысл.
4. Ограничения: Attention ≠ Explanation
Ключевой тезис Jain & Wallace (2019): веса внимания не являются надёжным объяснением. Почему?
4.1 Контр-аргументы
| Проблема | Описание |
|---|---|
| Размытие (non-unique) | Разные наборы весов могут давать одинаковое предсказание. |
| Маскировка | Высокий вес у несущественных токенов при нулевом влиянии на выход. |
| Отсутствие причинности | Высокий вес → «посмотрел», но не обязательно «принял решение на основе» |
4.2 Экспериментальные данные
- При замене весов внимания на случайные (но с тем же распределением) модель сохраняет качество в 90% случаев (на GLUE).
- Градиентные методы (Gradient×Input, Integrated Gradients) часто дают более осмысленные объяснения, чем raw attention.
4.3 Как правильно использовать attention?
- Только для анализа, а не для обоснования предсказаний.
- Дополнять другими методами (SHAP, LIME) для проверки.
- Использовать attention attribution (например, Attention Rollout – усреднение по слоям).
5. Пет-проект для закрепления
Задача: Отладить интерпретируемый классификатор тональности для отзывов на русском языке (например, RuSentiment). Сравнить объяснения LIME, SHAP и attention-визуализации.
Инструменты
rubert-tiny2(для русского)lime,shap,bertviztransformers,torch
Шаги
- Загрузить и предобработать датасет (500–1000 отзывов).
- Обучение RuBERT (FineTune) на 3–5 эпох.
- Для 5–10 примеров сгенерировать объяснения:
- Визуализировать и описать расхождения между методами:
- Какие слова выделяет каждый?
- Есть ли случаи, когда attention «неправ»?
Ожидаемый результат
- Jupyter-ноутбук с анализом.
- Вывод: в каких сценариях стоит доверять каждому методу, а когда лучше комбинировать.
Связь с другими вопросами
Навигация
- Предыдущий: 942
- Следующий: 944
- Индекс: 00. Индекс разборов