CoolFace
Apppublic

phuonguyen/medical-rag-with-gnn

sourceHugging Facemitupdated 5mo agoView on Hugging Face
0likes
App README

title: Medical RAG with GNN emoji: ๐Ÿฅ colorFrom: blue colorTo: green sdk: docker app_port: 8501 tags:

  • โ€”streamlit
  • โ€”gnn
  • โ€”rag
  • โ€”medical pinned: false license: mit ---

๐Ÿฅ Medical RAG with GNN

A modern, graph-powered RAG pipeline for medical QA.

This project combines a knowledge graph, GNN-based structural embeddings, and a hybrid retriever to deliver accurate medical answers. All components are optimized for CPU and Hugging Face Spaces.


Quick Navigation

  • โ€”[System Diagram](#system-diagram)
  • โ€”[Artifacts & Data](#artifacts--data)
  • โ€”[Graph & GNN Details](#graph--gnn-details)
  • โ€”[Retriever Logic](#retriever-logic)
  • โ€”[App & Usage](#app--usage)
  • โ€”[Deployment Notes](#deployment-notes)
  • โ€”[Directory Layout](#directory-layout)
  • โ€”[Citations](#citations)

System Diagram

MedQA Subset
	โ”‚
	โ–ผ
PropertyGraphStore (LlamaIndex)
	โ”‚
	โ–ผ
GCN (PyTorch Geometric)
	โ”‚
	โ–ผ
Hybrid Retriever (Semantic + Structural)
	โ”‚
	โ–ผ
Streamlit UI

Artifacts & Data

  • โ€”Graph: src/graph_storage_500/ (JSON)
  • โ€”Embeddings: src/pyg_data.pt, src/structural_embeddings.pt
  • โ€”Node Map: src/node_id_map.pt
  • โ€”Subset: MedQA (200 docs)

Graph & GNN Details

  • โ€”Graph Construction: Entities/relations from medical Q&A via LlamaIndex.
  • โ€”GCN Model: 2-layer, 384-dim, self-supervised link prediction. See src/rag_gnn_structural_embeddings.py.
  • โ€”Artifacts: PyG Data, GNN embeddings, node map.

Retriever Logic

File: src/dual_scoring_retriever.py

  • โ€”Semantic Score: Cosine similarity (query โ†” node text embedding)
  • โ€”Structural Score: Cosine similarity (query โ†” GNN embedding)
  • โ€”Hybrid: Weighted sum (ฮฑ slider in UI)
  • โ€”Returns: Top-5 nodes for context

App & Usage

  • โ€”Entry: app.py (root)
  • โ€”UI: Streamlit (question input, ฮฑ slider, context expander)
  • โ€”Artifacts: Loaded at startup

How to run:

  1. 1.Launch the Space (first run may download LLM weights)
  2. 2.Enter a medical question
  3. 3.Adjust ฮฑ for retrieval balance
  4. 4.Expand context to inspect retrieved nodes

Deployment Notes

  • โ€”Docker: Uses sdk: docker for Hugging Face Space
  • โ€”RAM/CPU: 16GB RAM, CPU-only
  • โ€”Artifacts: All required files are committed

Directory Layout

.
โ”œโ”€โ”€ Dockerfile
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ app.py
โ”œโ”€โ”€ requirements.txt
โ””โ”€โ”€ src/
	โ”œโ”€โ”€ dual_scoring_retriever.py
	โ”œโ”€โ”€ rag_gnn_structural_embeddings.py
	โ”œโ”€โ”€ node_id_map.pt
	โ”œโ”€โ”€ pyg_data.pt
	โ”œโ”€โ”€ structural_embeddings.pt
	โ””โ”€โ”€ graph_storage_500/
		โ”œโ”€โ”€ property_graph_store.json
		โ”œโ”€โ”€ index_store.json
		โ”œโ”€โ”€ image__vector_store.json
		โ”œโ”€โ”€ graph_store.json
		โ”œโ”€โ”€ docstore.json
		โ””โ”€โ”€ default__vector_store.json

Citations

  • โ€”LlamaIndex
  • โ€”PyTorch Geometric
  • โ€”MedQA (Jin et al., 2020)
  • โ€”Streamlit