
Código de pesquisa para ataques de envenenamento no PGM-index, demonstrando como criar dados adversariais para degradar o desempenho de índices aprendidos.
Código oficial do nosso artigo, 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
Requer CMake (ver Dependências). Os resultados são gerados em build/ (binários em build/bin por padrão).
./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
Cada execução recebe um arquivo de configuração JSON via ./scripts/run_experiment.sh <config.json>. Exemplos:
4.1 Maximizar o erro máximo (ex.: n=16, método consecutivo)
./scripts/run_experiment.sh "configs/experiments/poison_attack/maximize_maxerror_consec/baseline_n16.json"
4.2 Minimizar chaves legítimas cobertas (ex.: epsilon=2, método consecutivo)
./scripts/run_experiment.sh "configs/experiments/poison_attack/minimize_segment_length/baseline_epsilon2.json"
4.3 Maximizar m_opt (exemplo do PGM-index)
./scripts/run_experiment.sh "configs/experiments/poison_attack/inject_poisons_to_minimize_segment_length_swing_lambda_with_theta/baseline.json"
4.4 Limite superior de m_opt (exemplo dependente da instância)
./scripts/run_experiment.sh "configs/experiments/upper_bound/fix_w_per_block/baseline.json"
4.5 Executar todos os experimentos (em lote)
Executa a lista completa de configurações de experimentos em scripts/run_all_experiment.sh (edite esse arquivo para alterar o conjunto).
./scripts/run_all_experiment.sh
A partir da raiz do repositório:
./scripts/plot.sh
./scripts/print_table.sh
Figuras e logs são gravados em fig/. Instale primeiro as dependências Python: pip install -r requirements.txt.
g++, make e CMake (o script de build configura com CMake e compila com cmake --build, que normalmente invoca o Make).requirements.txt (scripts de plotagem / tabelas)../scripts/run_experiment.sh analisar o JSON de experimento.| Caminho | Função |
|---|---|
src/ | Fontes C++ (ataques, benchmarks do PGM, ferramentas, limites superiores). |
configs/experiments/ | Configurações JSON de experimentos (caminhos em poison_attack/, upper_bound/, etc.). |
scripts/ | Build, dados, run_experiment.sh, run_all_experiment.sh, plot.sh, print_table.sh. |
third_party/ | Submódulos Git (PGM-index, FITing-Tree, RadixSpline). |
data/, results/, fig/ | Dados, saídas de execução e figuras geradas / logs de tabelas. |
plot/ | Scripts Python de plotagem e impressão de tabelas. |
Compile a imagem uma vez:
./docker_build.sh
docker_run.sh — Contêiner interativo: monta o repositório em /workspace, aloca 8 CPUs (0–7) e abre o bash para que você compile e execute comandos manualmente.docker_run_all.sh — Execução em segundo plano: executa ./scripts/run_all_experiment.sh dentro do contêiner (8 CPUs) e grava a saída padrão em results/run_all.log.docker_run_all_single_cpu.sh — Igual ao docker_run_all.sh, mas com uma CPU e OMP_NUM_THREADS=1 para execuções single-threaded.Os três usam a imagem pgm_poisoning:latest e as mesmas configurações de capabilities / volumes dos scripts.