
LLM आंतरिक अवस्थाओं और 100+ अटेंशन/प्रोबेबिलिटी फीचर्स का विश्लेषण करके RAG प्रणालियों में दस्तावेज़ विषाक्तता हमलों का पता लगाने वाले क्लासिफायर को प्रशिक्षित करता है।
D-SCAN, RAG (Retrieval-Augmented Generation) प्रणालियों में दस्तावेज़ विषाक्तता हमलों का पता लगाने के लिए एक विश्लेषण ढांचा है। यह जनरेशन के दौरान LLM की आंतरिक अवस्थाओं (टोकन प्रायिकताएं और ध्यान भार) को एकत्र करता है, बहु-आयामी विशेषताओं को निकालता है, और स्वच्छ तथा विषाक्त पुनर्प्राप्त दस्तावेज़ों के बीच अंतर करने के लिए वर्गीकरणकर्ताओं को प्रशिक्षित करता है।
यह परियोजना डिफ़ॉल्ट रूप से Llama-3.1-8B-Instruct का उपयोग करती है। मॉडल को स्थानीय पथ पर डाउनलोड करें और collect_inner_state.py में MODEL_ID वेरिएबल को अपडेट करें:
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]] | प्रत्येक नमूने के लिए उत्पन्न टोकन ID अनुक्रम |
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 अनुपात और Gini गुणांक के माध्यम से मापता है कि ध्यान कुछ टोकनों पर केंद्रित है या नहीं |
| 4 | दस्तावेज़ ध्यान घनत्व | DocumentAttentionDensityMetrics | 6 | ध्यान योग को दस्तावेज़ लंबाई से विभाजित करता है, ध्यान आवंटन में लंबाई पूर्वाग्रह को समाप्त करता है |
| 5 | बहु-नमूना संगतता | SampleConsistencyMetrics | 4 | विषाक्तता के तहत, नमूनों में ध्यान पैटर्न असंगत हो सकते हैं (कोसाइन समानता, JS विचलन) |
| 6 | ध्यान गतिशीलता | AttentionDynamicsMetrics | 4 | जनरेशन के दौरान प्रमुख-दस्तावेज़ स्विच की आवृत्ति और एन्ट्रॉपी परिवर्तन परिमाण |
| 7 | टोकन-स्तरीय ध्यान उतार-चढ़ाव | TokenLevelAttentionMetrics | 16 | जनरेशन चरणों में प्रत्येक इनपुट टोकन स्थिति पर ध्यान की स्थिरता (std, एन्ट्रॉपी) |
| 8 | उत्तर प्रायिकता गहन सांख्यिकी | AnswerProbabilityMetrics | 18 | प्रायिकता क्वांटाइल, उच्च/निम्न प्रायिकता टोकन अनुपात, लॉग प्रायिकता, परप्लेक्सिटी, आदि |
| 9 | प्रायिकता गतिशीलता | ProbabilityDynamicsMetrics | 14 | जनरेशन अनुक्रम में प्रवृत्ति ढलान, ऑटोकोरिलेशन, अस्थिरता, स्पाइक अनुपात |
| 10 | क्रॉस-नमूना प्रायिकता संगतता | CrossSampleProbabilityConsistencyMetrics | 13 | नमूनों में कोसाइन समानता, Pearson सहसंबंध, 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: ध्यान वितरण का Gini गुणांक (असमानता माप)4. DocumentAttentionDensityMetrics (दस्तावेज़ ध्यान घनत्व)
doc_attn_dens_std/range/max/min: दस्तावेज़ों में ध्यान घनत्व का std, रेंज, अधिकतम, और न्यूनतम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 (टोकन-स्तरीय ध्यान उतार-चढ़ाव)