Dự án này triển khai một pipeline MIL (Multiple Instance Learning) để chấm điểm và chọn các đường suy luận (reasoning paths) trên đồ thị tri thức cho bài toán hỏi đáp trên MetaQA.
Mục đích của code
Mục tiêu chính của repository là:
Sinh embedding cho câu hỏi và quan hệ bằng mô hình ngôn ngữ BAAI/bge-large-en-v1.5.
Tạo dữ liệu path ứng viên từ MetaQA.
Huấn luyện bộ chấm điểm path MilPathScorer để xếp hạng các đường đi có khả năng dẫn tới đáp án.
Hỗ trợ các bước downstream như reasoning, chọn path tốt nhất và phân tích chất lượng suy luận.
Ứng dụng thực tế
Question answering trên knowledge graph.
Lọc và xếp hạng các reasoning path trước khi đưa vào mô hình sinh câu trả lời.
Hỗ trợ giải thích tại sao một đáp án được chọn bằng cách nhìn vào path suy luận.
Làm tiền xử lý cho các hệ thống QA đa bước trên đồ thị.
Yêu cầu cấu hình máy
Khuyến nghị tối thiểu
Hệ điều hành: Linux.
Python: 3.10 hoặc 3.11.
GPU NVIDIA: nên có ít nhất 1 GPU, VRAM 16 GB trở lên.
RAM: tối thiểu 32 GB.
Ổ đĩa trống: khoảng 30-50 GB cho dữ liệu, embedding, log và checkpoint.
Khuyến nghị tốt hơn
GPU 24 GB VRAM trở lên nếu muốn chạy thoải mái.
RAM 64 GB nếu sinh nhiều dữ liệu path hoặc chạy dataset lớn hơn MetaQA-1-hop.
Có internet để tải mô hình BAAI/bge-large-en-v1.5 lần đầu.
Lưu ý quan trọng về CUDA
Trong workspace này đã gặp cảnh báo driver CUDA quá cũ. Nếu máy của bạn báo tương tự, có hai cách:
Cập nhật NVIDIA driver để khớp với bản PyTorch/CUDA đang dùng.
Chuyển sang chạy CPU-only, nhưng sẽ chậm hơn đáng kể.
Thời gian phụ thuộc mạnh vào GPU, CPU, số worker và tình trạng cache của mô hình.
Với MetaQA-1-hop trên máy có GPU tốt
Sinh embedding lần đầu: khoảng 5-20 phút, bao gồm thời gian tải mô hình nếu chưa cache.
Sinh path data train/dev/test: khoảng 10-40 phút.
Train MIL: khoảng 1-3 giờ cho 1-hop.
Với MetaQA-2-hop hoặc 3-hop
Sinh path data có thể lên tới vài giờ.
Train có thể lâu hơn đáng kể do số sample và path tăng lên.
Nếu chạy CPU-only
Embedding và train sẽ chậm hơn rất nhiều.
Chỉ nên dùng để kiểm tra nhanh hoặc khi không có GPU.
Tệp script đáng chú ý
data_process/emb.py: sinh embedding question và relation.
data_process/get_mil_path_data_metaqa.py: sinh dữ liệu path cho MetaQA.
train_mil.py: huấn luyện mô hình MIL path scorer.
model/mil_model.py: định nghĩa MilPathScorer.
utils/mil_dataset.py: đọc dữ liệu path và tạo batch.
Lưu ý khi chạy
Nếu gặp lỗi WANDB user is not logged in, có thể dùng export WANDB_MODE=disabled để train tiếp.
Nếu gặp cảnh báo CUDA driver is too old, hãy nâng driver hoặc dùng bản PyTorch tương thích hơn.
Nếu thiếu file dữ liệu ở data/datasets/... hoặc data/mil_path_data/..., hãy tạo đúng theo pipeline ở trên trước khi train.
Ghi chú về train_path_gen.sh
File train_path_gen.sh hiện là một template cho nhánh sinh dữ liệu path bằng swift sft. Trong file này còn các biến placeholder như DATASET_PATH và OUTPUT_DIR, nên bạn cần điền giá trị thật trước khi dùng.
Nếu bạn chỉ muốn chạy pipeline MetaQA-1-hop trong repository hiện tại, bạn không bắt buộc phải dùng script này.