
يحلل الحالات الداخلية لنماذج LLM وأكثر من 100 ميزة من ميزات الانتباه/الاحتمالات لتدريب مصنفات تكتشف هجمات تسميم المستندات في أنظمة RAG.
D-SCAN هو إطار تحليلي لكشف هجمات تسميم المستندات في أنظمة RAG (التوليد المعزز بالاسترجاع). يجمع الحالات الداخلية لنموذج اللغة الكبير (LLM) أثناء التوليد (احتمالات الرموز وأوزان الانتباه)، ويستخرج ميزات متعددة الأبعاد، ويُدرّب مصنّفات للتمييز بين المستندات المسترجعة النظيفة والمسمومة.
يستخدم هذا المشروع Llama-3.1-8B-Instruct افتراضيًا. قم بتنزيل النموذج إلى مسار محلي وحدّث متغير MODEL_ID في collect_inner_state.py:
MODEL_ID = "/your/path/to/Llama-3.1-8B-Instruct"
تتكون سير العمل الكاملة من ثلاث خطوات: جمع الحالات الداخلية ← حساب الميزات ← تدريب المصنّف. السؤال والمستندات المسترجعة ذات الصلة متوفرة على https://huggingface.co/datasets/An998/D-SCAN.
# Update configuration parameters in collect_inner_state.py, then run
python collect_inner_state.py
# 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
افتح fit_D-SCAN.ipynb ونفّذ الخلايا بالتسلسل من أجل:
collect_inner_state.py)لكل مدخل من نوع سؤال-مستند، ينفّذ نموذج اللغة الكبير توليدًا متعدد العينات (الافتراضي: 10 عينات، temperature=1.0) ويجمع الحالات الداخلية التالية:
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.
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: حصة الانتباه التي تستحوذ عليها رموز أعلى 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: متوسط مربع الخطأ عبر العينات لتسلسلات الاحتمالcspc_divergence_index: مؤشر التباعد بين العيناتcompute_feature.pypython 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 | AUC، وقيمة p، ومعامل d لكوهين، إلخ. لكل مقياس |
fit_D-SCAN.ipynb)سير عمل دفتر الملاحظات:
full_analysis_results.json من compute_feature.pyيوفر المتغير use_features في دفتر الملاحظات تحكمًا مرنًا في المجموعة الفرعية من الميزات المستخدمة من قبل المصنّفات:
# 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_probs | List[Tensor] | احتمال توليد الرمز لكل عينة |
inner_ppl_matrix | List[List[Tensor]] | أوزان الانتباه على تسلسل الإدخال في كل خطوة توليد (متوسطة عبر الطبقات) |
doc_ranges | Dict[str, List[int]] | نطاق مواضع الرموز لكل مستند في تسلسل الإدخال |
generated_sequences | List[List[int]] | تسلسلات معرّفات الرموز المُولَّدة لكل عينة |
| # | الفئة | اسم الفئة | # الميزات | الفكرة الأساسية |
|---|
| 1 | إحصائيات احتمال التوليد | PerplexityMetrics | 8 | قد تزيد المستندات المسمومة من عدم يقين النموذج أثناء التوليد، وهو ما ينعكس في تغيّرات توزيع الاحتمالات |
| 2 | إنتروبيا الانتباه | AttentionEntropyMetrics | 4 | الإنتروبيا العالية تعني انتباهًا مشتتًا واحتمال وجود معلومات متعارضة؛ بينما الإنتروبيا المنخفضة تعني انتباهًا مركّزًا |
| 3 | تركيز الانتباه | AttentionConcentrationMetrics | 8 | يقيس ما إذا كان الانتباه مركّزًا على عدد قليل من الرموز عبر نسبة Top-K ومعامل جيني |
| 4 | كثافة انتباه المستند | DocumentAttentionDensityMetrics | 6 | مجموع الانتباه مقسومًا على طول المستند، مما يزيل التحيز المرتبط بالطول في توزيع الانتباه |
| 5 | اتساق العينات المتعددة | SampleConsistencyMetrics | 4 | في حالة التسميم، قد تكون أنماط الانتباه غير متسقة عبر العينات (تشابه جيب التمام، تباعد JS) |
| 6 | ديناميكيات الانتباه | AttentionDynamicsMetrics | 4 | تكرار تبديل المستند المهيمن وحجم تغيّر الإنتروبيا أثناء التوليد |
| 7 | تقلب الانتباه على مستوى الرموز | TokenLevelAttentionMetrics | 16 | استقرار الانتباه عند كل موضع رمز في الإدخال عبر خطوات التوليد (الانحراف المعياري، الإنتروبيا) |
| 8 | إحصائيات معمّقة لاحتمال الإجابة | AnswerProbabilityMetrics | 18 | كميات الاحتمال، ونسب الرموز عالية/منخفضة الاحتمال، واحتمال اللوغاريتم، والحيرة، إلخ. |
| 9 | ديناميكيات الاحتمال | ProbabilityDynamicsMetrics | 14 | ميل الاتجاه، والارتباط الذاتي، والتقلب، ونسبة القمم في تسلسل التوليد |
| 10 | اتساق الاحتمال عبر العينات | CrossSampleProbabilityConsistencyMetrics | 13 | تشابه جيب التمام، وارتباط بيرسون، ومتوسط مربع الخطأ، ومؤشر التباعد عبر العينات |
| الوسيطة | الافتراضي | الوصف |
|---|
--attack_dir | - | دليل بيانات الهجوم (يحتوي على ملفات data_*_reppl.pt) |
--clean_dir | - | دليل البيانات النظيفة |
--output_dir | - | دليل المخرجات |
--max_attack_samples | 3000 | الحد الأقصى لعدد عينات الهجوم |
--max_clean_samples | 3000 | الحد الأقصى لعدد العينات النظيفة |
--min_correct_count | 0 | الحد الأدنى لعدد الإجابات الصحيحة في البيانات النظيفة (للفلترة) |
--min_attack_target_count | 0 | الحد الأدنى لعدد مرات تحقيق الإجابة المستهدفة في بيانات الهجوم |
--num_use_samples | None | عدد العينات لكل سؤال لحساب المقاييس (الافتراضي: الكل) |
--model_path | None | مسار النموذج (لتحميل مُقسّم الرموز لفك ترميز التسلسلات المُولَّدة) |
full_analysis_results.json | مصفوفة الميزات الكاملة + التصنيفات |
document_detailed_metrics.json | مقاييس تفصيلية لكل مستند (ملخص JSON) |
document_detailed_metrics_full.pkl | مقاييس كاملة على مستوى المستند (تشمل انتباه مستوى الخطوات) |
| مجموعة الميزات | البادئة / الكلمة المفتاحية |
|---|
perplexity | ppl_* |
attention_entropy | *entropy* (باستثناء doc و aprob) |
attention_concentration | *top*، *gini* |
document_attention | doc_* |
sample_consistency | *sample*، *consistency* |
attention_dynamics | *switch*، *change* |
token_level_attention | tla_* |
answer_probability | aprob_* |
probability_dynamics | pdyn_* |
cross_sample_prob_consistency | cspc_* |