
يحلل الحالات الداخلية لنماذج 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)لكل مدخل سؤال-مستند، يقوم LLM بإجراء توليد متعدد العينات (افتراضيًا: 10 عينات، temperature=1.0) ويجمع الحالات الداخلية التالية:
| الحقل | النوع | الوصف |
|---|---|---|
outer_ppl_probs | List[Tensor] | احتمال توليد الرمز لكل عينة |
inner_ppl_matrix | List[List[Tensor]] | أوزان الانتباه على تسلسل الإدخال عند كل خطوة توليد (متوسط الطبقات) |
doc_ranges | Dict[str, List[int]] | نطاق موضع الرموز لكل مستند في تسلسل الإدخال |
generated_sequences | List[List[int]] | تسلسلات معرّفات الرموز المولّدة لكل عينة |
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 | 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 | التشابه الجيبي، ارتباط بيرسون، MSE، مؤشر التباعد عبر العينات |
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 (إحصاءات عميقة لاحتمال الإجابة)