Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
D-Scan — Анализирует внутренние состояния LLM и более 100 признаков внимания/вероятности для обучения классификаторов, выявляющих атаки отравления документов в RAG-системах. | Kitploit
Инструменты/GitHubGitHub/yingtaoren/d-scan
Оборонительные ИнструментыМашинное ОбучениеБезопасность ИИОбнаружение Аномалий
GitHubyingtaoren/d-scan

D-Scan

Анализирует внутренние состояния LLM и более 100 признаков внимания/вероятности для обучения классификаторов, выявляющих атаки отравления документов в RAG-системах.

Репозиторий
124 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Когда контекст кусается: обнаружение отравления RAG через коллапс внимания на уровне документов

D-SCAN — это аналитический фреймворк для обнаружения атак, направленных на отравление документов в системах RAG (Retrieval-Augmented Generation). Он собирает внутренние состояния LLM во время генерации (вероятности токенов и веса внимания), извлекает многомерные признаки и обучает классификаторы для различения чистых и отравленных извлечённых документов.

1. Установка и требования

Предварительные требования

  • Python >= 3.9
  • GPU с поддержкой CUDA (рекомендуется >= 24 ГБ видеопамяти для инференса модели с 8B параметров)

Подготовка модели

Этот проект по умолчанию использует Llama-3.1-8B-Instruct. Загрузите модель в локальный каталог и обновите переменную MODEL_ID в файле collect_inner_state.py:

root@kitploit:~
MODEL_ID = "/your/path/to/Llama-3.1-8B-Instruct"

2. Быстрый старт

Полный рабочий процесс состоит из трёх шагов: Сбор внутренних состояний → Вычисление признаков → Обучение классификатора. Вопросы и связанные с ними извлечённые документы доступны по адресу https://huggingface.co/datasets/An998/D-SCAN.

Шаг 1: Сбор внутренних состояний модели

root@kitploit:~
# Update configuration parameters in collect_inner_state.py, then run
python collect_inner_state.py

Шаг 2: Вычисление метрик признаков

root@kitploit:~
# Analyze both attack and clean data, compute all features, and save results
python compute_feature.py \
    --attack_dir ./saved_reppl_weights_serial_query1_attack2_2wiki \
    --clean_dir ./saved_reppl_weights_serial_query1_pure1_5_2wiki \
    --output_dir ./analysis_results/2wiki_all \
    --max_attack_samples 3000 \
    --max_clean_samples 3000

Шаг 3: Обучение классификатора и оценка

Откройте fit_D-SCAN.ipynb и последовательно выполните ячейки, чтобы:

  1. Загрузить данные признаков, созданные на шаге 2
  2. Обучить классификаторы «Логистическая регрессия» / «Случайный лес» (5-кратная перекрёстная валидация)
  3. Оценить переносимость на тестовом наборе

3. Детали конвейера

3.1 Сбор данных (collect_inner_state.py)

Для каждого входа «вопрос-документ» LLM выполняет многократную генерацию (по умолчанию: 10 сэмплов, temperature=1.0) и собирает следующие внутренние состояния:

Ключевые параметры конфигурации

root@kitploit:~
MODEL_ID = "/path/to/model"     # Model path
NUM_SAMPLES = 10                # Number of samples per question
MAX_NEW_TOKENS = 50             # Maximum generated tokens
TEMPERATURE = 1.0               # Sampling temperature
data_type = 'pure1_5'           # Data type: 'pure1_5' (clean) or 'attack2' (attack)
dataset_name = 'hotpotqa'       # Dataset: 'hotpotqa', '2wiki', 'musique'

Результаты сохраняются в файлах data_{batch_id}_reppl.pt и статистических файлах results_stats_*.jsonl.


3.2 Вычисление признаков (compute_feature.py)

Извлекает 10 категорий признаков размерностью 100+ из собранных внутренних состояний. Классификатор использует эти признаки, чтобы определить, присутствуют ли отравленные документы среди извлечённых документов для данного запроса.

Обзор метрик

Подробное описание метрик

1. PerplexityMetrics (Статистика вероятности генерации)

Вычисляется из outer_ppl_probs (вероятность каждого сгенерированного токена):

  • ppl_mean_prob: Средняя вероятность по всем сгенерированным токенам
  • ppl_std_prob: Стандартное отклонение вероятности
  • ppl_min_prob: Минимальная вероятность (экстремальная неопределённость)
  • ppl_low_prob_ratio: Доля токенов с низкой вероятностью (<0.1)
  • ppl_cross_sample_var: Дисперсия средних вероятностей между сэмплами
  • ppl_coef_variation: Коэффициент вариации (CV = std/mean)
  • ppl_skewness: Асимметрия распределения вероятностей
  • ppl_kurtosis: Эксцесс распределения вероятностей

2. AttentionEntropyMetrics (Энтропия внимания)

Вычисляется из inner_ppl_matrix (веса внимания на каждом шаге):

  • attn_entropy_mean/std/max: Среднее, стандартное отклонение и максимум энтропии распределения внимания
  • attn_entropy_cv: Коэффициент вариации энтропии внимания

3. AttentionConcentrationMetrics (Концентрация внимания)

  • attn_top5/10/20_ratio_mean/std: Доля внимания, приходящаяся на Top-K% токенов
  • attn_gini_mean/std: Коэффициент Джини распределения внимания (мера неравенства)

4. DocumentAttentionDensityMetrics (Плотность внимания к документам)

  • doc_attn_dens_std/range/max/min: Стандартное отклонение, размах, максимум и минимум плотности внимания по документам
  • doc_attn_dens_entropy: Энтропия распределения плотности внимания по документам
  • doc_attn_dens_temporal_var_mean: Средняя временная дисперсия плотности внимания к документам

5. SampleConsistencyMetrics (Согласованность между сэмплами)

  • sample_attn_consistency/std: Косинусное сходство между сэмплами для внимания на уровне токенов
  • sample_doc_consistency: Косинусное сходство между сэмплами для внимания на уровне документов
  • sample_doc_js_divergence: Расхождение JS между сэмплами для внимания на уровне документов

6. AttentionDynamicsMetrics (Динамика внимания)

  • attn_doc_switch_mean/max: Количество переключений доминирующего документа
  • attn_entropy_change_mean/std: Пошаговое изменение энтропии внимания

7. TokenLevelAttentionMetrics (Флуктуация внимания на уровне токенов)

  • tla_std_mean/std/max/median/p90/p99/high_ratio/cv: Статистики стандартного отклонения внимания по токенам на протяжении шагов генерации
  • tla_ent_mean/std/max/median/p90/p99/high_ratio/cv: Статистики энтропии внимания по токенам на протяжении шагов генерации

8. AnswerProbabilityMetrics (Глубокая статистика вероятности ответа)

  • aprob_p10/p25/p50/p75/p90/iqr: Квантили вероятности
  • aprob_high_ratio_05/08: Доля токенов с высокой вероятностью
  • aprob_low_ratio_01/001: Доля токенов с низкой вероятностью
  • aprob_log_mean/std/min: Статистики лог-вероятности
  • aprob_ppl_mean/std/max: Перплексия на уровне последовательности
  • aprob_geometric_mean: Геометрическое среднее вероятностей
  • aprob_distribution_entropy: Информационная энтропия гистограммы вероятностей

9. ProbabilityDynamicsMetrics (Динамика вероятности)

  • pdyn_diff_mean/abs_diff_mean/abs_diff_std/abs_diff_max: Статистики разностей вероятностей
  • pdyn_max_drop/max_jump: Максимальное одношаговое падение/скачок
  • pdyn_volatility_mean/std: Волатильность
  • pdyn_trend_slope_mean/std: Наклон линейного тренда
  • pdyn_autocorr_mean/std: Коэффициент автокорреляции
  • pdyn_spike_ratio_01/03: Доля выбросов (точек резких изменений)

10. CrossSampleProbabilityConsistencyMetrics (Согласованность вероятностей между сэмплами)

  • cspc_mean_prob_std/cv/range: Согласованность средних вероятностей между сэмплами
  • cspc_ppl_std/cv/range: Согласованность перплексии между сэмплами
  • cspc_min_prob_std/range: Согласованность минимальных вероятностей
  • cspc_seq_cosine_mean/std: Косинусное сходство последовательностей вероятностей между сэмплами
  • cspc_seq_pearson_mean: Корреляция Пирсона последовательностей вероятностей между сэмплами
  • cspc_seq_mse_mean: Среднеквадратичная ошибка (MSE) последовательностей вероятностей между сэмплами
  • cspc_divergence_index: Индекс расхождения между сэмплами

Аргументы командной строки compute_feature.py

root@kitploit:~
python compute_feature.py \
    --attack_dir <attack_data_directory> \
    --clean_dir <clean_data_directory> \
    --output_dir <output_directory> \
    --max_attack_samples 3000 \
    --max_clean_samples 3000 \
    --min_correct_count 0 \
    --min_attack_target_count 0 \
    --num_use_samples 10 \
    --model_path /path/to/model    # Optional: load tokenizer for accuracy calculation

Выходные файлы

Имя файлаОписание
single_metric_analysis.json

3.3 Обучение классификатора (fit_D-SCAN.ipynb)

Рабочий процесс в ноутбуке:

  1. Загрузка данных: Чтение выходного файла full_analysis_results.json из compute_feature.py
  2. Выбор признаков: Использование всех признаков или фильтрация по категории (например, только признаки внимания)
  3. Обучение классификаторов:
    • Логистическая регрессия (L2-регуляризация): линейный классификатор, подходит для небольшого числа признаков
    • Случайный лес (100 деревьев, max_depth=5): нелинейный классификатор, учитывает взаимодействия признаков
  4. 5-кратная перекрёстная валидация: Выдаёт AUC, Accuracy, Precision, Recall, F1
  5. Анализ важности признаков: Выводит Top-10 важных признаков
  6. Оценка на тестовом наборе: Использует масштабировщик и классификатор из обучения для оценки переносимости на независимом тестовом наборе
  7. Визуализация: ROC-кривые, столбчатые диаграммы важности признаков, сравнение Train vs Test

Выбор признаков для классификаторов

Переменная use_features в ноутбуке обеспечивает гибкое управление подмножеством признаков, используемых классификаторами:

root@kitploit:~
# Use all features
use_features = [f for f in feature_names if f not in exclude_cols]

# Use only attention-related features
use_features = [f for f in use_features if 'attn' in f]

# Combine by metric category (example)
use_features = [f for f in feature_names if f.startswith(('ppl_', 'doc_', 'sample_'))]

Производительность классификатора по каждой категории также выводится во время выполнения compute_feature.py:

Скачать инструмент
ПолеТипОписание
outer_ppl_probsList[Tensor]Вероятность генерации токена для каждого сэмпла
inner_ppl_matrixList[List[Tensor]]Веса внимания к входной последовательности на каждом шаге генерации (усреднённые по слоям)
doc_rangesDict[str, List[int]]Диапазон позиций токенов для каждого документа во входной последовательности
generated_sequencesList[List[int]]Последовательности идентификаторов сгенерированных токенов для каждого сэмпла
#КатегорияИмя класса# ПризнаковОсновная идея
1Статистика вероятности генерацииPerplexityMetrics8Отравленные документы могут повышать неопределённость модели при генерации, что отражается в изменениях распределения вероятностей
2Энтропия вниманияAttentionEntropyMetrics4Высокая энтропия = рассеянное внимание = возможная конфликтующая информация; низкая энтропия = сфокусированное внимание
3Концентрация вниманияAttentionConcentrationMetrics8Оценивает, сосредоточено ли внимание на нескольких токенах, через коэффициент Top-K и коэффициент Джини
4Плотность внимания к документамDocumentAttentionDensityMetrics6Сумма внимания, делённая на длину документа, устраняет смещение, связанное с длиной, в распределении внимания
5Согласованность между сэмпламиSampleConsistencyMetrics4При отравлении паттерны внимания между сэмплами могут быть несогласованными (косинусное сходство, расхождение JS)
6Динамика вниманияAttentionDynamicsMetrics4Частота переключений доминирующего документа и величина изменения энтропии во время генерации
7Флуктуация внимания на уровне токеновTokenLevelAttentionMetrics16Стабильность внимания на каждой позиции входного токена на протяжении шагов генерации (std, энтропия)
8Глубокая статистика вероятности ответаAnswerProbabilityMetrics18Квантили вероятности, доли токенов с высокой/низкой вероятностью, лог-вероятность, перплексия и т.д.
9Динамика вероятностиProbabilityDynamicsMetrics14Наклон тренда, автокорреляция, волатильность, доля выбросов в последовательности генерации
10Согласованность вероятностей между сэмпламиCrossSampleProbabilityConsistencyMetrics13Косинусное сходство, корреляция Пирсона, MSE, индекс расхождения между сэмплами
АргументПо умолчаниюОписание
--attack_dir-Каталог с данными атак (содержит файлы data_*_reppl.pt)
--clean_dir-Каталог с чистыми данными
--output_dir-Каталог для выходных данных
--max_attack_samples3000Максимальное количество сэмплов атак
--max_clean_samples3000Максимальное количество чистых сэмплов
--min_correct_count0Минимальное количество правильных ответов в чистых данных (для фильтрации)
--min_attack_target_count0Минимальное количество совпадений с целевым ответом в данных атак
--num_use_samplesNoneКоличество сэмплов на вопрос для вычисления метрик (по умолчанию: все)
--model_pathNoneПуть к модели (для загрузки токенизатора и декодирования сгенерированных последовательностей)
AUC, p-value, коэффициент Коэна d и т.д. для каждой метрики
full_analysis_results.jsonПолная матрица признаков + метки
document_detailed_metrics.jsonДетальные метрики по каждому документу (сводка в JSON)
document_detailed_metrics_full.pklПолные метрики на уровне документов (включая внимание на уровне шагов)
Группа признаковПрефикс / Ключевое слово
perplexityppl_*
attention_entropy*entropy* (исключая doc и aprob)
attention_concentration*top*, *gini*
document_attentiondoc_*
sample_consistency*sample*, *consistency*
attention_dynamics*switch*, *change*
token_level_attentiontla_*
answer_probabilityaprob_*
probability_dynamicspdyn_*
cross_sample_prob_consistencycspc_*