Spaces:
Paused
Paused
| Mình đã rà lại toàn bộ source + tài liệu mô tả chính của project, và có 2 điểm rất quan trọng trước khi bạn viết báo cáo: | |
| README/baseline/optimization docs có vài chỗ đã cũ hoặc mô tả “định hướng” hơn là code đang có thật. | |
| Báo cáo nên bám vào code thực tế trong repo, đặc biệt là: | |
| train_medical.py | |
| src/models/medical_vqa_model.py | |
| src/models/transformer_decoder.py | |
| src/models/multimodal_vqa.py | |
| src/engine/trainer.py | |
| src/engine/medical_eval.py | |
| web/main.py | |
| configs/medical_vqa.yaml | |
| Một số lệch cần sửa trong báo cáo: | |
| README nhắc app.py, nhưng demo thực tế là web/main.py. | |
| README nhắc src/data/translate_med_vqa.py, nhưng pipeline dịch thực tế nằm ở scripts/data_pipeline.py và src/utils/translator.py. | |
| README nhắc scripts/prepare_ood_test.py, nhưng file thực tế để tạo tập test thủ công là scripts/create_manual_test.py. | |
| OPTIMIZATION_REPORT.md nhắc một số file như src/utils/optimized_metrics.py và src/utils/medical_augmentation.py, nhưng chúng không có trong snapshot repo hiện tại, nên không nên viết vào báo cáo như là code đã có. | |
| Dưới đây là nội dung báo cáo mình khuyên bạn dùng. | |
| 1. Tóm tắt đề tài | |
| Đề tài xây dựng hệ thống Medical Visual Question Answering tiếng Việt trên bộ dữ liệu SLAKE và VQA-RAD đã được dịch sang tiếng Việt. Mục tiêu của project là tạo ra một mô hình có khả năng trả lời câu hỏi y khoa dựa trên ảnh chẩn đoán bằng cả hai hướng: hướng rời rạc truyền thống với encoder-decoder, và hướng sinh tự do dựa trên mô hình đa phương thức lớn. Hệ thống được thiết kế để xử lý cả câu hỏi đóng dạng Yes/No lẫn câu hỏi mở mô tả tổn thương, vị trí, phương thức chụp và cơ quan. | |
| 2. Cơ sở dữ liệu | |
| Project sử dụng hai nguồn chính: | |
| SLAKE, một dataset y khoa đa ngôn ngữ có chú thích ngữ nghĩa. | |
| VQA-RAD, dataset câu hỏi trả lời cho ảnh X-quang và chẩn đoán hình ảnh. | |
| Dữ liệu gốc được chuẩn hóa sang tiếng Việt, gắn nhãn theo kiểu câu hỏi đóng/mở, và được lưu thành bộ dữ liệu đã merge để train/validation/test. Một pipeline khác được dùng để tạo tập test thủ công nhằm đánh giá thực tế và phục vụ human review. | |
| 3. Cơ sở lý thuyết và kiến thức sử dụng | |
| Hệ thống này kết hợp nhiều mảng kiến thức: | |
| Computer Vision: dùng CNN DenseNet-121 làm image encoder, có tối ưu riêng cho ảnh y khoa. | |
| NLP tiếng Việt: dùng PhoBERT để biểu diễn câu hỏi tiếng Việt. | |
| Multimodal learning: dùng co-attention/cross-attention để trộn đặc trưng ảnh và văn bản. | |
| Sequence generation: dùng LSTM và Transformer Decoder để sinh câu trả lời. | |
| Efficient fine-tuning: dùng LoRA và QLoRA cho LLaVA-Med. | |
| RLHF/alignment: dùng DPO và PPO để tinh chỉnh đầu ra theo preference y khoa. | |
| Evaluation NLP: dùng Accuracy, EM, F1, BLEU, ROUGE-L, METEOR, BERTScore và semantic similarity. | |
| 4. Kiến trúc hệ thống | |
| Project tách thành hai hướng: | |
| Hướng A là mô hình modular: | |
| Image encoder: DenseNet-121 từ TorchXRayVision. | |
| Text encoder: PhoBERT. | |
| Fusion: co-attention. | |
| Decoder: hai biến thể, A1 là LSTM, A2 là Transformer Decoder. | |
| Output head: tách nhánh closed-head cho câu trả lời Yes/No và open-head cho câu trả lời sinh tự do. | |
| Hướng B là mô hình generative: | |
| Dùng LLaVA-Med 7B làm nền tảng. | |
| B1 là zero-shot. | |
| B2 là fine-tuned bằng LoRA/QLoRA. | |
| DPO và PPO là các bước tinh chỉnh bổ sung để cải thiện độ phù hợp với preference y khoa. | |
| 5. Luồng dữ liệu | |
| Dữ liệu đi qua các bước: | |
| Chuẩn hóa câu hỏi và câu trả lời. | |
| Dịch sang tiếng Việt bằng pipeline translation có từ điển y khoa. | |
| Làm sạch output và canonicalize các thuật ngữ y khoa. | |
| Tạo train/validation/test. | |
| Tạo preference pairs cho DPO. | |
| Tạo tập test thủ công để kiểm tra thủ công hoặc làm benchmark bổ sung. | |
| File trung tâm cho phần này là: | |
| src/data/medical_dataset.py | |
| src/utils/text_utils.py | |
| src/utils/translator.py | |
| scripts/data_pipeline.py | |
| scripts/create_manual_test.py | |
| 6. Mô hình A1/A2 | |
| Trong src/models/medical_vqa_model.py, mô hình A dùng DenseNet-121 để trích đặc trưng không gian của ảnh và PhoBERT để mã hóa câu hỏi. Đặc trưng ảnh và text được đưa vào lớp co-attention để học tương tác liên miền. Sau đó decoder sinh hai đầu ra: | |
| classifier head cho câu hỏi đóng. | |
| generator head cho câu hỏi mở. | |
| A1 dùng LSTM decoder, phù hợp làm baseline tuần tự. | |
| A2 thay LSTM bằng Transformer Decoder, cho khả năng mô hình hóa phụ thuộc dài hơn và thường cho kết quả tốt hơn trên câu hỏi mở. | |
| MedicalVQADecoder trong src/models/transformer_decoder.py còn có các điểm đáng chú ý: | |
| weight tying giữa embedding và output projection. | |
| beam search có length normalization. | |
| causal mask cache. | |
| tách training/inference rõ ràng. | |
| 7. Mô hình B1/B2/DPO/PPO | |
| Trong src/models/multimodal_vqa.py, LLaVA-Med được nạp với 4-bit quantization và LoRA để giảm VRAM. Đây là lựa chọn phù hợp nếu muốn fine-tune mô hình lớn trên phần cứng giới hạn. | |
| Trong train_medical.py, B2 được train bằng SFT với prompt tiếng Việt, còn DPO và PPO là các bước refinement: | |
| B2 học từ cặp prompt-answer chuẩn. | |
| DPO học từ preference data gồm chosen/rejected. | |
| PPO dùng reward từ câu trả lời sinh ra, nhấn mạnh consistency và semantic match. | |
| 8. Huấn luyện | |
| Trong src/engine/trainer.py, training loop của hướng A có các kỹ thuật: | |
| AMP mixed precision. | |
| gradient accumulation. | |
| dynamic class weights cho nhãn Yes/No. | |
| cosine scheduler với warmup. | |
| label smoothing cho nhánh open. | |
| early stopping theo patience. | |
| Loss cũng được tách theo hai nhánh: | |
| closed loss cho câu hỏi đóng. | |
| open loss cho câu hỏi mở, kèm penalty để tránh model quá ngắn hoặc quá “chỉ đoán một token”. | |
| Trong configs/medical_vqa.yaml, các biến thể A1/A2/B1/B2/DPO/PPO được cấu hình riêng, bao gồm batch size, learning rate, beam width, số token tối đa và các tham số LoRA/QLoRA. | |
| 9. Tiền xử lý ảnh | |
| src/utils/visualization.py chứa MedicalImageTransform, hiện thực: | |
| resize ảnh. | |
| áp dụng CLAHE để tăng tương phản cục bộ. | |
| chuyển sang tensor 1 kênh. | |
| scale theo dải phù hợp cho XRayVision. | |
| Trong tài liệu safety, project nhấn mạnh không nên dùng augmentation nguy hiểm như flip lớn hay rotation lớn đối với ảnh y khoa. Tuy nhiên trong code hiện tại, phần augmentation thực tế chủ yếu là CLAHE và normalization, nên báo cáo nên mô tả đúng như vậy. | |
| 10. Đánh giá | |
| src/engine/medical_eval.py là file đánh giá quan trọng nhất. Nó tách rõ: | |
| prediction raw. | |
| prediction normalized. | |
| closed vs open. | |
| long-answer evaluation. | |
| Cách đánh giá này rất hợp lý cho Medical VQA vì: | |
| câu hỏi đóng cần so khớp nhãn chuẩn. | |
| câu hỏi mở cần đánh giá ngữ nghĩa, không chỉ exact match. | |
| Các metric dùng trong repo: | |
| Accuracy, EM, F1 cho câu trả lời ngắn. | |
| BLEU-1/2/3/4, ROUGE-L, METEOR cho sinh tự do. | |
| BERTScore và semantic score để đo độ gần về nghĩa. | |
| human review và LLM-judge để kiểm tra chất lượng dịch thuật và câu trả lời. | |
| 11. Demo web | |
| web/main.py xây dựng FastAPI server để: | |
| upload ảnh. | |
| nhập câu hỏi. | |
| chạy so sánh giữa A1, A2, B1, B2, DPO, PPO. | |
| cache model. | |
| rewrite câu trả lời đầu ra bằng một layer phụ. | |
| Phần này rất phù hợp để đưa vào báo cáo như “hệ thống triển khai thực nghiệm” hoặc “giao diện minh họa mô hình”. | |
| 12. Kết luận kỹ thuật | |
| Điểm mạnh lớn nhất của project là không chỉ xây model, mà còn xây đủ pipeline hoàn chỉnh: | |
| dữ liệu, | |
| dịch thuật, | |
| preprocessing, | |
| training, | |
| evaluation, | |
| alignment, | |
| web demo, | |
| logging với WandB, | |
| xuất biểu đồ so sánh. | |
| Điều này giúp báo cáo có thể viết theo hướng một hệ thống end-to-end cho Medical VQA tiếng Việt, chứ không phải chỉ là một mô hình đơn lẻ. | |
| 13. Phần nên đưa thẳng vào báo cáo | |
| Bạn có thể viết phần “đóng góp chính” như sau: | |
| Xây dựng pipeline Medical VQA tiếng Việt từ hai dataset y khoa lớn là SLAKE và VQA-RAD. | |
| Thiết kế kiến trúc modular với DenseNet-121, PhoBERT và co-attention cho hướng truyền thống. | |
| Thiết kế hướng generative với LLaVA-Med và fine-tuning bằng LoRA/QLoRA. | |
| Bổ sung DPO/PPO để cải thiện alignment và tính y khoa của câu trả lời. | |
| Xây dựng hệ thống đánh giá đa tầng kết hợp metric tự động, LLM-as-a-judge và human review. | |
| Triển khai web demo phục vụ thử nghiệm và so sánh nhiều biến thể mô hình. | |
| 14. Tài liệu tham khảo nên trích | |
| Dưới đây là danh sách paper/link chuẩn để bạn đưa vào báo cáo: | |
| SLAKE: arXiv 2102.09542 | |
| VQA-RAD: Nature Scientific Data 2018 | |
| DenseNet: arXiv 1608.06993 | |
| Bahdanau attention: arXiv 1409.0473 | |
| Transformer: arXiv 1706.03762 | |
| Co-attention: arXiv 1606.00061 | |
| PhoBERT: arXiv 2003.00744 | |
| Medical VQA survey: arXiv 2111.10056 | |
| LLaVA: arXiv 2304.08485 | |
| LLaVA-Med: arXiv 2306.00890 | |
| LoRA: arXiv 2106.09685 | |
| QLoRA: arXiv 2305.14314 | |
| DPO: arXiv 2305.18290 | |
| PPO: arXiv 1707.06347 | |
| BERTScore: arXiv 1904.09675 | |
| Dictionary-enhanced prompting cho MT/domain adaptation: arXiv 2402.15061 |