
LLM आंतरिक अवस्थाओं और 100+ अटेंशन/प्रोबेबिलिटी फीचर्स का विश्लेषण करके RAG प्रणालियों में दस्तावेज़ विषाक्तता हमलों का पता लगाने वाले क्लासिफायर को प्रशिक्षित करता है।
D-SCAN, RAG (रिट्रीवल-ऑगमेंटेड जनरेशन) प्रणालियों में डॉक्यूमेंट विषाक्तता हमलों का पता लगाने के लिए एक विश्लेषण ढांचा है। यह जनरेशन के दौरान 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) करता है और निम्नलिखित आंतरिक अवस्थाएँ एकत्र करता है:
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)एकत्रित आंतरिक अवस्थाओं से 100+ आयामी विशेषताओं वाली 10 श्रेणियाँ निकालता है। वर्गीकारक इन विशेषताओं का उपयोग यह निर्धारित करने के लिए करता है कि किसी दिए गए क्वेरी के लिए पुनर्प्राप्त दस्तावेज़ों के बीच विषाक्त दस्तावेज़ मौजूद हैं या नहीं।
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: दस्तावेज़ों में अटेंशन घनत्व का 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 (टोकन-स्तरीय अटेंशन उतार-चढ़ाव)
tla_std_mean/std/max/median/p90/p99/high_ratio/cv: जनरेशन चरणों में प्रति-टोकन अटेंशन std के आँकड़े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: प्रायिकता अनुक्रमों का क्रॉस-नमूना MSEcspc_divergence_index: अंतर-नमूना विचलन सूचकांकcompute_feature.py कमांड-लाइन तर्क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
| Filename | Description |
|---|---|
single_metric_analysis.json | प्रत्येक मेट्रिक के लिए AUC, p-मान, कोहेन का d, आदि |
fit_D-SCAN.ipynb)नोटबुक कार्यप्रवाह:
compute_feature.py से full_analysis_results.json आउटपुट पढ़ेंनोटबुक में 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 निष्पादन के दौरान मुद्रित किया जाता है:
| Field | Type | Description |
|---|
outer_ppl_probs | List[Tensor] | प्रत्येक नमूने के लिए टोकन जनरेशन प्रायिकता |
inner_ppl_matrix | List[List[Tensor]] | प्रत्येक जनरेशन चरण पर इनपुट अनुक्रम पर अटेंशन भार (लेयर-औसत) |
doc_ranges | Dict[str, List[int]] | इनपुट अनुक्रम में प्रत्येक दस्तावेज़ के लिए टोकन स्थिति सीमा |
generated_sequences | List[List[int]] | प्रत्येक नमूने के लिए उत्पन्न टोकन ID अनुक्रम |
| # | Category | Class Name | # Features | Core Idea |
|---|
| 1 | जनरेशन प्रायिकता आँकड़े | PerplexityMetrics | 8 | विषाक्त दस्तावेज़ जनरेशन के दौरान मॉडल की अनिश्चितता बढ़ा सकते हैं, जो प्रायिकता वितरण परिवर्तनों में परिलक्षित होती है |
| 2 | अटेंशन एन्ट्रॉपी | AttentionEntropyMetrics | 4 | उच्च एन्ट्रॉपी = वितरित अटेंशन = संभावित विरोधाभासी जानकारी; निम्न एन्ट्रॉपी = केंद्रित अटेंशन |
| 3 | अटेंशन सांद्रता | AttentionConcentrationMetrics | 8 | Top-K अनुपात और जिनी गुणांक के माध्यम से मापता है कि क्या अटेंशन कुछ टोकनों पर केंद्रित है |
| 4 | दस्तावेज़ अटेंशन घनत्व | DocumentAttentionDensityMetrics | 6 | अटेंशन योग को दस्तावेज़ लंबाई से विभाजित करना, अटेंशन आवंटन में लंबाई पूर्वाग्रह को समाप्त करना |
| 5 | बहु-नमूना संगति | SampleConsistencyMetrics | 4 | विषाक्तता के तहत, नमूनों में अटेंशन पैटर्न असंगत हो सकते हैं (कोसाइन समानता, JS विचलन) |
| 6 | अटेंशन गतिकी | AttentionDynamicsMetrics | 4 | जनरेशन के दौरान प्रमुख-दस्तावेज़ स्विच की आवृत्ति और एन्ट्रॉपी परिवर्तन की परिमाण |
| 7 | टोकन-स्तरीय अटेंशन उतार-चढ़ाव | TokenLevelAttentionMetrics | 16 | जनरेशन चरणों में प्रत्येक इनपुट टोकन स्थिति पर अटेंशन की स्थिरता (std, एन्ट्रॉपी) |
| 8 | उत्तर प्रायिकता गहन आँकड़े | AnswerProbabilityMetrics | 18 | प्रायिकता क्वांटाइल, उच्च/निम्न प्रायिकता टोकन अनुपात, लॉग प्रायिकता, पर्प्लेक्सिटी, आदि |
| 9 | प्रायिकता गतिकी | ProbabilityDynamicsMetrics | 14 | जनरेशन अनुक्रम में प्रवृत्ति ढलान, स्वसहसंबंध, अस्थिरता, स्पाइक अनुपात |
| 10 | क्रॉस-नमूना प्रायिकता संगति | CrossSampleProbabilityConsistencyMetrics | 13 | नमूनों में कोसाइन समानता, पियर्सन सहसंबंध, MSE, विचलन सूचकांक |
| Argument | Default | Description |
|---|
--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 | पूर्ण दस्तावेज़-स्तरीय मेट्रिक्स (चरण-स्तरीय अटेंशन सहित) |
| Feature Group | Prefix / Keyword |
|---|
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_* |