Spaces:
Running
Running
| title: ChatBot Yte | |
| emoji: 🏥 | |
| colorFrom: blue | |
| colorTo: green | |
| sdk: docker | |
| pinned: false | |
| # ChatBot Y tế (Medical Chatbot) - PhoBERT + RAG + LLM | |
| Dự án này xây dựng một **Trợ lý Y tế AI (Medical Chatbot)** kết hợp giữa mô hình hiểu ngôn ngữ tự nhiên (NLU) và kỹ thuật tạo văn bản tăng cường tra cứu (RAG - Retrieval-Augmented Generation). Chatbot có khả năng hiểu ý định người dùng, nhận diện thực thể y khoa, tra cứu tài liệu hướng dẫn y tế chính thống, và sinh câu trả lời chuẩn xác nhất nhờ LLM. | |
| ## Tính năng nổi bật | |
| 1. **NLU (Natural Language Understanding)**: Sử dụng mô hình **PhoBERT** (`vinai/phobert-base-v2`) được huấn luyện đồng thời (Joint Training) cho hai tác vụ: | |
| - **Intent Classification (Phân loại ý định)**: Xác định người dùng đang hỏi về phương pháp điều trị (`treatment`), triệu chứng/chẩn đoán (`method_diagnosis`), nguyên nhân (`cause`), hay mức độ nguy hiểm (`severity`). | |
| - **NER / Token Classification (Nhận diện thực thể)**: Trích xuất các thực thể y tế (tên bệnh, triệu chứng, thuốc...) theo định dạng nhãn BIO. | |
| 2. **RAG (Retrieval-Augmented Generation)**: | |
| - Tự động chuyển đổi tài liệu PDF/Word thành Markdown sạch để bảo toàn cấu trúc bảng biểu. | |
| - Sử dụng mô hình embedding tiếng Việt **Vietnamese-SBERT** (`keepitreal/vietnamese-sbert`) và lưu trữ vector vào **ChromaDB**. | |
| 3. **LLM Integration**: Tích hợp các mô hình ngôn ngữ lớn (như GPT-4o-mini qua API OpenAI/Azure Inference) để sinh câu trả lời tự nhiên, chuyên nghiệp và luôn kiểm soát câu trả lời nằm trong phạm vi tài liệu y tế được cung cấp. | |
| ## Cấu trúc thư mục | |
| ```text | |
| ChatBot_Yte/ | |
| ├── data/ # Dữ liệu gán nhãn huấn luyện NLU (intent & NER) | |
| │ ├── train.json | |
| │ ├── dev.json | |
| │ └── test.json | |
| ├── data_RAG/ # Tài liệu y khoa thô đầu vào (.pdf, .docx, .md) | |
| │ ├── huong_dan_chan_doan_dieu_tri_tha.pdf | |
| │ └── HƯỚNG DẪN CHẨN ĐOÁN VÀ ĐIỀU TRỊ MỘT SỐ BỆNH THƯỜNG GẶP Ở TRẺ EM.pdf | |
| └── src/ # Mã nguồn dự án | |
| ├── .env # Lưu API Key (Cần cấu hình) | |
| ├── checkpoints/ # Chứa checkpoint mô hình NLU tốt nhất (.pth) | |
| ├── NLU/ # Module Hiểu ngôn ngữ tự nhiên | |
| │ ├── model_intent.py # Định nghĩa mô hình JointPhoBERTModel | |
| │ ├── preprocess.py # Tiền xử lý dữ liệu và tạo Dataset | |
| │ ├── train_intent.py # Huấn luyện mô hình NLU | |
| │ └── predict.py # Dự đoán ý định & thực thể từ câu hỏi thử nghiệm | |
| └── rag/ # Module Tra cứu tài liệu & Sinh câu trả lời | |
| ├── convert_to_markdown.py # Chuyển PDF/Word sang Markdown | |
| ├── offline_rag.py # Chunking, Embeddings & Xây dựng ChromaDB | |
| ├── main.py # Pipeline chatbot chạy chính thức | |
| └── test_retrieval.py # Kiểm thử tra cứu tài liệu từ ChromaDB | |
| ``` | |
| ## Hướng dẫn cài đặt | |
| ### 1. Cài đặt các thư viện cần thiết | |
| Yêu cầu Python >= 3.8. Cài đặt các thư viện từ file `requirements.txt`: | |
| ```bash | |
| cd ChatBot_Yte | |
| pip install -r requirements.txt | |
| ``` | |
| ### 2. Cấu hình biến môi trường | |
| Tạo hoặc chỉnh sửa file `src/.env` trong thư mục `src/` và cấu hình các API Key của bạn: | |
| ```env | |
| OPENAI_API_KEY = "your-openai-or-azure-inference-api-key" | |
| OPENAI_API_BASE = "https://models.inference.ai.azure.com" # Hoặc endpoint OpenAI chính thức | |
| ``` | |
| ## Hướng dẫn chạy dự án | |
| ### Bước 1: Huấn luyện mô hình NLU (PhoBERT) | |
| Để mô hình có thể nhận diện đúng ý định và các thực thể y khoa trong câu hỏi, tiến hành huấn luyện mô hình Joint PhoBERT: | |
| ```bash | |
| cd src/NLU | |
| python train_intent.py | |
| ``` | |
| *Sau khi huấn luyện thành công, trọng số mô hình tốt nhất sẽ được lưu tại `src/checkpoints/best_joint_model.pth`.* | |
| ### Bước 2: Xây dựng Cơ sở dữ liệu Vector (ChromaDB) | |
| 1. Đặt các tài liệu hướng dẫn y tế dạng PDF hoặc DOCX vào thư mục `data_RAG/`. | |
| 2. Chuyển đổi các tài liệu thô này thành Markdown để trích xuất sạch các bảng biểu: | |
| ```bash | |
| cd ../rag | |
| python convert_to_markdown.py | |
| ``` | |
| 3. Tạo cơ sở dữ liệu vector ChromaDB từ các tài liệu đã được chuyển đổi: | |
| ```bash | |
| python offline_rag.py | |
| ``` | |
| *Sau khi hoàn thành, thư mục cơ sở dữ liệu `src/rag/chroma_db` sẽ được tạo và sẵn sàng sử dụng.* | |
| ### Bước 3: Chạy Chatbot Y tế | |
| Sau khi đã hoàn tất huấn luyện NLU và xây dựng Vector DB cho RAG,có thể chạy Chatbot qua hai giao diện: | |
| #### Phương án 1: Giao diện Web Streamlit | |
| Giao diện Web đẹp mắt, hỗ trợ hiển thị chi tiết phân tích ý định, các thực thể y học trích xuất và các nguồn tài liệu tham khảo: | |
| ```bash | |
| streamlit run app.py | |
| ``` | |
| #### Phương án 2: Giao diện Terminal console | |
| ```bash | |
| cd .. | |
| python rag/main.py | |
| ``` | |