
كود بحثي حول هجمات التسميم على 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
يأخذ كل تشغيل ملف إعداد JSON واحدًا عبر ./scripts/run_experiment.sh <config.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 لتحليل JSON الخاص بالتجارب.| المسار | الدور |
|---|---|
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 وحدات معالجة مركزية (0–7)، وتنقلك إلى bash لتتمكن من بناء وتشغيل الأوامر يدويًا.docker_run_all.sh — تشغيل منفصل: ينفّذ ./scripts/run_all_experiment.sh داخل الحاوية (8 وحدات معالجة مركزية) ويكتب المخرجات القياسية إلى results/run_all.log.docker_run_all_single_cpu.sh — مثل docker_run_all.sh لكن بوحدة معالجة مركزية واحدة وOMP_NUM_THREADS=1 للتشغيلات أحادية الخيط.تستخدم الثلاثة جميعًا الصورة pgm_poisoning:latest ونفس إعدادات القدرات / وحدات التخزين كما في السكربتات.