
शोध कोड जो PGM-index पर पॉइज़निंग अटैक के लिए है, यह दर्शाता है कि कैसे सीखे गए इंडेक्स के प्रदर्शन को खराब करने के लिए प्रतिकूल डेटा तैयार किया जाए।
हमारे पेपर, Poisoning Attacks on the PGM-index के लिए आधिकारिक कोड।
git clone https://github.com/atsukisato/pgm-attack.git
cd pgm-attack
git submodule update --init --recursive
./scripts/build.sh
CMake की आवश्यकता है (निर्भरताएँ देखें)। आउटपुट build/ के अंतर्गत जाते हैं (डिफ़ॉल्ट रूप से बाइनरी build/bin में)।
./scripts/download_alex_dataset.sh # ALEX
./scripts/download_mgbench.sh # mgbench
./scripts/download_sosd_datasets.sh # SOSD
./scripts/preprocess_alex_dataset.sh # ALEX
./scripts/preprocess_mgbench.sh # mgbench
./scripts/generate_synthetic_dataset.sh # synthetic
प्रत्येक रन ./scripts/run_experiment.sh <config.json> के माध्यम से एक JSON कॉन्फ़िग लेता है। उदाहरण:
4.1 अधिकतम त्रुटि को अधिकतम करें (जैसे n=16, consecutive विधि)
./scripts/run_experiment.sh "configs/experiments/poison_attack/maximize_maxerror_consec/baseline_n16.json"
4.2 कवर किए गए वैध कुंजियों को न्यूनतम करें (जैसे epsilon=2, consecutive विधि)
./scripts/run_experiment.sh "configs/experiments/poison_attack/minimize_segment_length/baseline_epsilon2.json"
4.3 m_opt को अधिकतम करें (PGM-index उदाहरण)
./scripts/run_experiment.sh "configs/experiments/poison_attack/inject_poisons_to_minimize_segment_length_swing_lambda_with_theta/baseline.json"
4.4 m_opt पर ऊपरी सीमा (इंस्टेंस-निर्भर उदाहरण)
./scripts/run_experiment.sh "configs/experiments/upper_bound/fix_w_per_block/baseline.json"
4.5 सभी प्रयोग चलाएँ (बैच)
scripts/run_all_experiment.sh में प्रयोग कॉन्फ़िग की पूरी सूची चलाता है (सेट बदलने के लिए उस फ़ाइल को संपादित करें)।
./scripts/run_all_experiment.sh
रिपॉज़िटरी रूट से:
./scripts/plot.sh
./scripts/print_table.sh
आंकड़े और लॉग fig/ के अंतर्गत लिखे जाते हैं। पहले Python निर्भरताएँ इंस्टॉल करें: pip install -r requirements.txt।
g++, make, और CMake (बिल्ड स्क्रिप्ट CMake के साथ कॉन्फ़िगर करती है और cmake --build के साथ बिल्ड करती है, जो आमतौर पर Make को आमंत्रित करता है)।requirements.txt में दिए गए पैकेज हों (प्लॉटिंग / तालिका स्क्रिप्ट)।./scripts/run_experiment.sh द्वारा आवश्यक।| पथ | भूमिका |
|---|---|
src/ | C++ स्रोत (हमले, PGM बेंचमार्क, टूल, ऊपरी सीमाएँ)। |
configs/experiments/ | प्रयोग JSON कॉन्फ़िग (poison_attack/, upper_bound/, आदि के अंतर्गत पथ)। |
scripts/ | बिल्ड, डेटा, run_experiment.sh, run_all_experiment.sh, plot.sh, print_table.sh। |
third_party/ | Git सबमॉड्यूल (PGM-index, FITing-Tree, RadixSpline)। |
data/, results/, fig/ | डेटा, रन आउटपुट, और उत्पन्न आंकड़े / तालिका लॉग। |
plot/ | Python प्लॉटिंग और तालिका-प्रिंटिंग स्क्रिप्ट। |
इमेज को एक बार बिल्ड करें:
./docker_build.sh
docker_run.sh — इंटरैक्टिव कंटेनर: रिपॉज़िटरी को /workspace पर माउंट करता है, 8 CPU आवंटित करता है (0–7), और आपको bash में छोड़ देता है ताकि आप मैन्युअल रूप से कमांड बिल्ड और चला सकें।docker_run_all.sh — डिटैच्ड रन: कंटेनर के अंदर ./scripts/run_all_experiment.sh निष्पादित करता है (8 CPU) और stdout को results/run_all.log में लिखता है।docker_run_all_single_cpu.sh — docker_run_all.sh के समान, लेकिन सिंगल-थ्रेडेड रन के लिए एक CPU और OMP_NUM_THREADS=1 के साथ।तीनों इमेज pgm_poisoning:latest और स्क्रिप्ट में दिए गए समान capability / volume सेटिंग्स का उपयोग करते हैं।