Spaces:
Running on Zero
A newer version of the Gradio SDK is available: 6.24.0
license: mit
title: NLPforASD
sdk: gradio
emoji: π’
colorFrom: blue
colorTo: purple
short_description: Profile-adaptive RAG chatbot for Autism Spectrum Disorder in
NLP4ASD β Autism Spectrum Disorder Specialized Chatbot
A RAG-powered chatbot that answers questions about Autism Spectrum Disorder using scientific sources. Answers adapt dynamically based on the user's profile.
What It Does
- User selects a profile (Parent, Patient, Healthcare Professional, Teacher, Researcher)
- User asks a question about ASD
- The system retrieves the most relevant scientific passages from a local knowledge base
- It builds a profile-adapted prompt and generates a grounded answer
- Sources are displayed alongside the answer
No answer is generated without retrieved evidence β the chatbot is grounded, not free-form.
π Project Structure
NLP4ASD/
βββ app.py # Gradio interface (entry point)
βββ requirements.txt
βββ README.md
β
βββ data/
β βββ raw/ # Plain .txt scientific documents (your corpus)
β βββ processed/ # Auto-generated: FAISS index + chunk JSON
β βββ sources_metadata.json # Document registry
β
βββ src/
β βββ config.py # All tunable settings (models, paths, parameters)
β βββ data_loader.py # Load .txt files from data/raw/
β βββ preprocessing.py # Clean raw text
β βββ chunking.py # Split text into overlapping chunks
β βββ embeddings.py # Encode chunks with SentenceTransformers
β βββ vector_store.py # Build, save, and load FAISS index
β βββ retriever.py # Retrieve top-k relevant chunks
β βββ prompt_builder.py # Build adaptive prompts per profile
β βββ generator.py # Generate answer with HF model
β βββ rag_pipeline.py # Orchestrate full pipeline
β βββ utils.py # File helpers
β
βββ notebooks/
βββ build_knowledge_base.ipynb # Interactive knowledge base builder
π Quick Start (Local)
1. Install dependencies
pip install -r requirements.txt
2. Add your documents
Place plain .txt files in data/raw/. The project includes 4 sample documents.
3. Build the knowledge base
python -c "from src.rag_pipeline import build_knowledge_base; build_knowledge_base()"
This embeds all documents and creates the FAISS index in data/processed/.
4. Run the app
python app.py
Open the local URL shown in your terminal.
π€ Deploy to Hugging Face Spaces
- Create a new Space (type: Gradio)
- Push the full project:
git init
git remote add origin https://huggingface.co/spaces/YOUR_USERNAME/NLP4ASD
git add .
git commit -m "Initial commit"
git push origin main
- The Space will auto-install
requirements.txtand launchapp.py - On first start, the knowledge base is built automatically from
data/raw/
Tip: For faster startup, commit
data/processed/(index + chunks) to avoid rebuilding on every cold start.
βοΈ Configuration
All key settings are in src/config.py:
| Setting | Default | Description |
|---|---|---|
EMBEDDING_MODEL |
all-MiniLM-L6-v2 |
SentenceTransformer model |
GENERATOR_MODEL |
google/flan-t5-base |
HF generation model |
CHUNK_SIZE |
512 |
Characters per chunk |
CHUNK_OVERLAP |
64 |
Overlap between chunks |
TOP_K |
4 |
Chunks retrieved per query |
MAX_NEW_TOKENS |
512 |
Max tokens generated |
TEMPERATURE |
0.3 |
Generation temperature |
π Switching to a Better Model
To use a more powerful model, change GENERATOR_MODEL in src/config.py:
# Biomedical-focused
GENERATOR_MODEL = "BioMistral/BioMistral-7B"
# Instruction-following
GENERATOR_MODEL = "mistralai/Mistral-7B-Instruct-v0.2"
GENERATOR_MODEL = "google/gemma-2b-it"
# Medical LLM
GENERATOR_MODEL = "meta-llama/Llama-3-8B-Instruct"
For 7B+ models on Spaces, use a GPU Space (T4 or A10) and enable 4-bit quantization:
# In src/generator.py, replace the pipeline() call with:
from transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
model = AutoModelForCausalLM.from_pretrained(
GENERATOR_MODEL,
quantization_config=quantization_config,
device_map="auto",
)
π¬ Future: LoRA / QLoRA Fine-Tuning
To fine-tune the generation model on ASD-specific data, insert the following step between generator.py (base model loading) and deployment:
Where to add it
Create src/fine_tuning.py with:
from peft import LoraConfig, get_peft_model, TaskType
from transformers import TrainingArguments, Trainer
# 1. Define LoRA configuration
lora_config = LoraConfig(
r=16, # rank
lora_alpha=32,
target_modules=["q_proj", "v_proj"], # for LLaMA/Mistral
lora_dropout=0.05,
bias="none",
task_type=TaskType.CAUSAL_LM,
)
# 2. Wrap base model
model = get_peft_model(base_model, lora_config)
# 3. Prepare dataset: (prompt, expected_answer) pairs
# Use clinical Q&A from published ASD literature
# 4. Train
training_args = TrainingArguments(
output_dir="./lora_checkpoints",
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
num_train_epochs=3,
fp16=True,
logging_steps=10,
save_strategy="epoch",
)
trainer = Trainer(model=model, args=training_args, train_dataset=dataset)
trainer.train()
# 5. Save adapter (NOT full model weights β only ~10MB)
model.save_pretrained("./lora_adapter")
# 6. In generator.py, load with:
# from peft import PeftModel
# model = PeftModel.from_pretrained(base_model, "./lora_adapter")
QLoRA reduces VRAM requirements to ~6GB for a 7B model, enabling fine-tuning on a single consumer GPU.
π Adding French Support
The prompt builder (src/prompt_builder.py) already supports French via LANGUAGE_INSTRUCTIONS.
To add translated profile instructions, extend PROFILE_INSTRUCTIONS with French keys or add a _fr suffix per profile.
β οΈ Disclaimer
NLP4ASD is a research prototype. It is not a medical device and does not provide professional medical advice. All answers are grounded in retrieved scientific documents and should be verified by qualified professionals.
π License
MIT License β see LICENSE for details.