Diagnose what hurts Retrieval-Augmented Generation (RAG) in biomedical question answering using BioASQ-style datasets. This repo builds a lightweight local corpus from gold PMIDs, runs a BM25 baseline, and evaluates stressors like noise, conflict, unanswerability, and PICO mismatch.
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtCopy .env.example to .env and fill in values.
cp .env.example .envPut your BioASQ-style dataset in data/dataset.json.
python scripts/01_validate_dataset.py --dataset data/dataset.json
python scripts/02_extract_gold_pmids.py --dataset data/dataset.json --out data/gold_pmids.json
python scripts/03_fetch_pubmed_for_pmids.py --pmids data/gold_pmids.json --db data/pubmed_cache.sqlite
python scripts/04_build_local_corpus.py --db data/pubmed_cache.sqlite --out data/corpus.jsonl
python scripts/05_run_baseline.py --dataset data/dataset.json --corpus data/corpus.jsonl
python scripts/06_run_stress_tests.py --dataset data/dataset.json --corpus data/corpus.jsonl
python scripts/07_evaluate_runs.py --dataset data/dataset.json --runs_dir data/runsconfig/config.yaml # default hyperparameters and toggles
src/bio_rag/ # pipeline modules
scripts/01..07_*.py # entry points
data/runs/<run_id>/predictions.jsondata/runs/<run_id>/report.jsondata/runs/<run_id>/report.csv
- No GPU required.
- PubMed retrieval is performed via NCBI E-utilities and cached in SQLite.
- The system runs fully offline after caching.