
शोध कोड जो PGM-index पर पॉइज़निंग अटैक के लिए है, यह दर्शाता है कि कैसे सीखे गए इंडेक्स के प्रदर्शन को खराब करने के लिए प्रतिकूल डेटा तैयार किया जाए।
हमारे पेपर, Poisoning Attacks on the PGM-index का आधिकारिक कोड।
git clone [REPOSITORY LINK]
cd pgm-index-poisoning
git submodule update --init --recursive
./scripts/build.sh
CMake की आवश्यकता है (Dependencies देखें)। आउटपुट 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, क्रमागत विधि)
./scripts/run_experiment.sh "configs/experiments/poison_attack/maximize_maxerror_consec/baseline_n16.json"
4.2 वैध कुंजियों को न्यूनतम कवर करें (जैसे epsilon=2, क्रमागत विधि)
./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 द्वारा आवश्यक।छवि एक बार बनाएँ:
./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 छवि और स्क्रिप्ट के समान क्षमता / वॉल्यूम सेटिंग्स का उपयोग करते हैं।
| पथ | भूमिका |
|---|
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 प्लॉटिंग और टेबल-प्रिंटिंग स्क्रिप्ट। |