ChatBot_Yte / README.md
giangpvg's picture
Thêm cấu hình Hugging Face metadata
3042fec
|
Raw
History Blame Contribute Delete
5.52 kB
metadata
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

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:

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:

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:

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:
    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:
    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:

streamlit run app.py

Phương án 2: Giao diện Terminal console

cd ..
python rag/main.py