SowmyaKona/Multi_Document_Question_Answering_System_Using_Hybrid_RAG
๐ Multi-Document Question Answering System using Hybrid RAG
๐ Overview
This project is a Hybrid Retrieval-Augmented Generation (Hybrid RAG) based Question Answering System that enables users to upload multiple PDF documents and ask questions in natural language.
Unlike a traditional Large Language Model (LLM), which relies only on its pre-trained knowledge, this application retrieves the most relevant information from the uploaded documents before generating an answer. This improves response accuracy and reduces hallucinations.
๐ Features
- Upload and process multiple PDF documents
- Automatic document loading and chunking
- Embedding generation and vector indexing
- ChromaDB vector database integration
- Hybrid Retrieval using:
- Dense Retrieval
- BM25 Sparse Retrieval
- Reciprocal Rank Fusion (RRF)
- Cross-Encoder Re-ranking
- Gemini API for context-aware answer generation
- Retrieval tuning:
- Chunk Size
- Chunk Overlap
- Top-K Retrieval
- Search Type (Similarity / MMR)
- Retrieval Analysis Dashboard
- Source document visualization
๐๏ธ Project Architecture
User Uploads PDFs
โ
โผ
PyPDFLoader
โ
โผ
Text Chunking
โ
โผ
Embedding Generation
โ
โผ
ChromaDB
โ
โโโโโโโโดโโโโโโโ
โผ โผ
Dense BM25 Retrieval
Retrieval
โโโโโโโโฌโโโโโโโ
โผ
Reciprocal Rank Fusion (RRF)
โ
โผ
Cross-Encoder Re-ranking
โ
โผ
Gemini API
โ
โผ
Generated Answerโ๏ธ Tech Stack
- Python
- LangChain
- Gemini API
- ChromaDB
- Embedding Model
- PyPDFLoader
- RecursiveCharacterTextSplitter
- BM25
- Reciprocal Rank Fusion (RRF)
- Cross-Encoder Re-ranking
- Streamlit
๐ Project Structure
โโโ app.py
โโโ loader.py
โโโ splitter.py
โโโ embeddings.py
โโโ vector_store.py
โโโ retriever.py
โโโ hybrid_retriever.py
โโโ reranker.py
โโโ rag_chain.py
โโโ llm.py
โโโ requirements.txt
โโโ assets/
โโโ data/
โโโ chroma_db/๐ Workflow
- Upload one or more PDF documents.
- Documents are loaded using PyPDFLoader.
- Documents are split into smaller chunks.
- Each chunk is converted into embeddings.
- Embeddings are stored in ChromaDB.
- User submits a question.
- The query is converted into an embedding.
- Hybrid Retrieval is performed using:
- Dense Retrieval
- BM25 Sparse Retrieval
- Results are combined using Reciprocal Rank Fusion (RRF).
- Retrieved chunks are re-ranked using a Cross-Encoder.
- The highest-ranked chunks are provided to the Gemini API.
- Gemini generates a context-aware answer.
๐ฏ Retrieval Tuning
The application supports configurable retrieval parameters:
- Chunk Size
- Chunk Overlap
- Top-K Retrieval
- Search Type (Similarity / MMR)
These parameters help optimize retrieval quality for different document collections.
๐ Retrieval Analysis
The application provides a Retrieval Analysis dashboard displaying:
- Number of Dense Retrieval results
- Number of BM25 Retrieval results
- Number of RRF fused results
- Final re-ranked chunks
- Retrieved document chunks
- Source document references
โถ๏ธ Installation
Clone the repository:
git clone https://github.com/<your-username>/multi-document-hybrid-rag-qa-system.gitNavigate to the project folder:
cd multi-document-hybrid-rag-qa-systemInstall dependencies:
pip install -r requirements.txtCreate a .env file:
GOOGLE_API_KEY=YOUR_API_KEYRun the application:
streamlit run app.py๐ธ Application
The application allows users to:
- Upload multiple PDF documents
- Ask questions in natural language
- View retrieved chunks
- Analyze retrieval results
- View retrieved source documents
๐ Future Improvements
- RAGAS Evaluation Integration
- Metadata Filtering
- Agentic RAG using LangGraph
Sowmya Kona
