Please cite our paper if you use this codebase or reference VoxRAG in your research:
Zackary Rackauckas, Julia Hirschberg. βVoxRAG: A Step Toward Transcription-Free RAG Systems in Spoken Question Answering.β arXiv:2505.17326v1 [cs.IR], May 2025.
VoxRAG is a modular speech-to-speech retrieval-augmented generation (RAG) pipeline that bypasses automatic speech recognition (ASR) to retrieve and reason over semantically relevant podcast audio using audio embeddings alone. It performs end-to-end semantic search and QA directly on spoken audio.
This repository includes:
git clone https://github.com/your-username/VoxRAG.git
cd VoxRAG
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py
python app.py --share
VoxRAG/
βββ app.py # Main entry point with Gradio + FastAPI server
βββ data/ # Saved models, metadata, and embeddings
β βββ full_state.pt # Serialized PyTorch state: embeddings, metadata, audio
β βββ full_state_autosave.pt # Autosave backup of the same
β βββ audio_segments.pt # Serialized list of audio segment tensors
β βββ speaker_mappings.json # Custom per-podcast speaker names
β βββ segments.jsonl # Final per-segment metadata for retrieval
β
βββ podcasts/ # Folder containing raw podcast audio
β βββ episode1.wav # Any supported format: .wav, .mp3, .webm
β βββ episode1.json # (Optional) Metadata sidecar for the episode
β βββ ...
β
βββ eval/ # Evaluation scripts and output
β βββ queries_audio/ # 50 spoken query .wav files
β βββ documents_vanilla.csv # Retrieved text segments per query
β βββ answers_vanilla.csv # Answers from GPT-4o
β βββ timing_vanilla.csv # Timing for each query evaluation
β
βββ embeddings.py # CLAP / WavLM embedding functions
βββ rerankers.py # Optional reranker (e.g. cross-encoder)
βββ helpers.py # Audio preprocessing, segmentation, transcription
βββ speakers.py # Diarization and speaker label assignment
βββ requirements.txt
βββ README.md
podcasts/ is scanned by index_podcast_folder(). It expects .wav, .mp3, or .webm podcast files.
You can also place optional .json metadata next to audio files with the same base name.
data/ is automatically created to store:
full_state.pt)segments.jsonl)speaker_mappings.json)eval/ is used from the "Run Evaluation" tab in Gradio. It assumes:
eval/queries_audio/Retrieval-Augmented Generation (RAG) is typically text-centric. VoxRAG proposes a fully speech-native alternative, keeping both queries and documents in the acoustic domain through the retrieval stage. This avoids the pitfalls of early transcription errors, which are especially common in noisy or informal podcast content.
CLAP and compared using cosine similarity in FAISS.| Metric | Score |
|---|---|
| Recall@10 (SR) | 0.60 |
| nDCG@10 (SR) | 0.27 |
| Relevance | 0.84 |
| Accuracy | 0.58 |
| Completeness | 0.56 |
| Precision | 0.46 |
15 commits
4 commits
Python
100.0%
Please cite our paper if you use this codebase or reference VoxRAG in your research:
Zackary Rackauckas, Julia Hirschberg. βVoxRAG: A Step Toward Transcription-Free RAG Systems in Spoken Question Answering.β arXiv:2505.17326v1 [cs.IR], May 2025.
VoxRAG is a modular speech-to-speech retrieval-augmented generation (RAG) pipeline that bypasses automatic speech recognition (ASR) to retrieve and reason over semantically relevant podcast audio using audio embeddings alone. It performs end-to-end semantic search and QA directly on spoken audio.
This repository includes:
git clone https://github.com/your-username/VoxRAG.git
cd VoxRAG
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python app.py
python app.py --share
VoxRAG/
βββ app.py # Main entry point with Gradio + FastAPI server
βββ data/ # Saved models, metadata, and embeddings
β βββ full_state.pt # Serialized PyTorch state: embeddings, metadata, audio
β βββ full_state_autosave.pt # Autosave backup of the same
β βββ audio_segments.pt # Serialized list of audio segment tensors
β βββ speaker_mappings.json # Custom per-podcast speaker names
β βββ segments.jsonl # Final per-segment metadata for retrieval
β
βββ podcasts/ # Folder containing raw podcast audio
β βββ episode1.wav # Any supported format: .wav, .mp3, .webm
β βββ episode1.json # (Optional) Metadata sidecar for the episode
β βββ ...
β
βββ eval/ # Evaluation scripts and output
β βββ queries_audio/ # 50 spoken query .wav files
β βββ documents_vanilla.csv # Retrieved text segments per query
β βββ answers_vanilla.csv # Answers from GPT-4o
β βββ timing_vanilla.csv # Timing for each query evaluation
β
βββ embeddings.py # CLAP / WavLM embedding functions
βββ rerankers.py # Optional reranker (e.g. cross-encoder)
βββ helpers.py # Audio preprocessing, segmentation, transcription
βββ speakers.py # Diarization and speaker label assignment
βββ requirements.txt
βββ README.md
podcasts/ is scanned by index_podcast_folder(). It expects .wav, .mp3, or .webm podcast files.
You can also place optional .json metadata next to audio files with the same base name.
data/ is automatically created to store:
full_state.pt)segments.jsonl)speaker_mappings.json)eval/ is used from the "Run Evaluation" tab in Gradio. It assumes:
eval/queries_audio/Retrieval-Augmented Generation (RAG) is typically text-centric. VoxRAG proposes a fully speech-native alternative, keeping both queries and documents in the acoustic domain through the retrieval stage. This avoids the pitfalls of early transcription errors, which are especially common in noisy or informal podcast content.
CLAP and compared using cosine similarity in FAISS.| Metric | Score |
|---|---|
| Recall@10 (SR) | 0.60 |
| nDCG@10 (SR) | 0.27 |
| Relevance | 0.84 |
| Accuracy | 0.58 |
| Completeness | 0.56 |
| Precision | 0.46 |
15 commits
4 commits
Python
100.0%