
كود بحثي حول هجمات التسميم على PGM-index، يوضح كيفية صياغة بيانات خصومة لتدهور أداء الفهارس المُتعلَّمة.
الكود الرسمي لبحثنا، هجمات التسميم على فهرس PGM.
git clone [REPOSITORY LINK]
cd pgm-index-poisoning
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)
./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 التجريبي.ابنِ الصورة مرة واحدة:
./docker_build.sh
docker_run.sh — حاوية تفاعلية: تُثبّت المستودع في /workspace، وتخصص 8 وحدات معالجة مركزية (0–7)، وتُدخلك إلى bash حتى تتمكن من البناء وتشغيل الأوامر يدويًا.docker_run_all.sh — تشغيل منفصل: ينفّذ ./scripts/run_all_experiment.sh داخل الحاوية (8 وحدات معالجة مركزية) ويكتب stdout إلى results/run_all.log.docker_run_all_single_cpu.sh — نفس docker_run_all.sh لكن بوحدة معالجة مركزية واحدة و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. |