
Forschungscode für Poisoning-Angriffe auf den PGM-Index, der demonstriert, wie adversarial Daten erstellt werden, um die Leistung gelernter Indizes zu verschlechtern.
Offizieller Code für unser Paper Poisoning Attacks on the PGM-index.
git clone [REPOSITORY LINK]
cd pgm-index-poisoning
git submodule update --init --recursive
./scripts/build.sh
Erfordert CMake (siehe Abhängigkeiten). Die Ausgaben werden unter build/ abgelegt (Binärdateien standardmäßig in 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 # synthetisch
Jeder Lauf benötigt eine JSON-Konfiguration über ./scripts/run_experiment.sh <config.json>. Beispiele:
4.1 Maximalen Fehler maximieren (z. B. n=16, aufeinanderfolgende Methode)
./scripts/run_experiment.sh "configs/experiments/poison_attack/maximize_maxerror_consec/baseline_n16.json"
4.2 Abgedeckte legitime Schlüssel minimieren (z. B. epsilon=2, aufeinanderfolgende Methode)
./scripts/run_experiment.sh "configs/experiments/poison_attack/minimize_segment_length/baseline_epsilon2.json"
4.3 m_opt maximieren (PGM-index-Beispiel)
./scripts/run_experiment.sh "configs/experiments/poison_attack/inject_poisons_to_minimize_segment_length_swing_lambda_with_theta/baseline.json"
4.4 Obere Schranke für m_opt (instanzabhängiges Beispiel)
./scripts/run_experiment.sh "configs/experiments/upper_bound/fix_w_per_block/baseline.json"
4.5 Alle Experimente ausführen (Stapelverarbeitung)
Führt die vollständige Liste der Experimentkonfigurationen in scripts/run_all_experiment.sh aus (bearbeiten Sie diese Datei, um die Auswahl zu ändern).
./scripts/run_all_experiment.sh
Vom Repository-Stammverzeichnis aus:
./scripts/plot.sh
./scripts/print_table.sh
Abbildungen und Protokolle werden unter fig/ geschrieben. Installieren Sie zuerst die Python-Abhängigkeiten: pip install -r requirements.txt.
g++, make und CMake (das Build-Skript konfiguriert mit CMake und baut mit cmake --build, was typischerweise Make aufruft).requirements.txt (Skripte für Diagramme/Tabellen)../scripts/run_experiment.sh zum Parsen der Experiment-JSON.Das Image einmal erstellen:
./docker_build.sh
docker_run.sh — Interaktiver Container: Mountet das Repository unter /workspace, weist 8 CPUs zu (0–7) und öffnet eine bash-Shell, sodass Sie Befehle manuell ausführen können.docker_run_all.sh — Abgekoppelter Lauf: Führt ./scripts/run_all_experiment.sh im Container aus (8 CPUs) und schreibt stdout nach results/run_all.log.docker_run_all_single_cpu.sh — Wie docker_run_all.sh, jedoch mit einer CPU und OMP_NUM_THREADS=1 für einthreadige Läufe.Alle drei verwenden das Image pgm_poisoning:latest sowie dieselben Capability-/Volume-Einstellungen wie in den Skripten.
| Pfad | Rolle |
|---|
src/ | C++-Quellen (Angriffe, PGM-Benchmarks, Werkzeuge, obere Schranken). |
configs/experiments/ | Experiment-JSON-Konfigurationen (Pfade unter poison_attack/, upper_bound/ usw.). |
scripts/ | Build, Daten, run_experiment.sh, run_all_experiment.sh, plot.sh, print_table.sh. |
third_party/ | Git-Submodule (PGM-index, FITing-Tree, RadixSpline). |
data/, results/, fig/ | Daten, Laufausgaben und generierte Abbildungen/Tabellenprotokolle. |
plot/ | Python-Skripte für Diagramme und Tabellenausgabe. |