Giới thiệu dự án
Sự bùng nổ của các nền tảng mạng xã hội và diễn đàn trực tuyến đã biến không gian mạng thành kênh trao đổi thông tin y tế phổ biến. Đặc biệt, sau giai đoạn đại dịch COVID-19, số lượng người dùng tìm kiếm tư vấn sức khỏe từ xa tăng theo cấp số nhân. Tuy nhiên, tình trạng nhiễu loạn thông tin, các khuyến cáo thiếu kiểm chứng và tin giả (medical misinformation) xuất hiện tràn lan, đe dọa trực tiếp đến an toàn sức khỏe cộng đồng theo các cảnh báo dịch tễ học số (Digital Epidemiology).
Để giải quyết bài toán kiểm chứng y khoa dựa trên bằng chứng (Evidence-Based Medicine - EBM), phương pháp phân tích PICO/PIO (Population, Intervention, Outcome) do Bác sĩ Richardson đề xuất được xem là tiêu chuẩn vàng giúp cấu trúc hóa câu hỏi và đối chiếu chứng cứ lâm sàng. Dự án tập trung giải quyết bài toán: Trích xuất các yếu tố PIO trong phản hồi y tế tiếng Việt (PIO Elements Extraction in Vietnamese Medical Feedback), chuyển đổi các đoạn văn bản tư vấn phi cấu trúc thành dữ liệu thực thể có cấu trúc phục vụ quản lý và đối soát thông tin y tế.
+----------------------------------------------------------------------------------------------------+
| ĐẦU VÀO (INPUT TEXT) |
| "Modafinil là thuốc tác động lên TKTW, chỉ định cho bệnh nhân ngưng thở khi ngủ..." |
+----------------------------------------------------------------------------------------------------+
│
▼
+────────────────────────────────────────────────────────────────────────────────────────────────────+
| BỘ TRÍCH XUẤT PIO (PIO EXTRACTION) |
+──────────────────────────────────┬──────────────────────────────────┬──────────────────────────────+
| [P] - PATIENT/POPULATION | [I] - INTERVENTION | [O] - OUTCOME |
| • "bệnh nhân ngưng thở khi ngủ"| • "Modafinil" | • "đau đầu, tăng huyết áp" |
| • "rối loạn giấc ngủ" | • "đánh giá chức năng tim" | • "đột tử" |
+──────────────────────────────────┴──────────────────────────────────┴──────────────────────────────+
Mục tiêu của dự án
- Xây dựng bộ ngữ liệu chuẩn hóa UIT-ViPIO: Thu thập và gán nhãn 7.272 phản hồi y tế từ các bác sĩ chuyên khoa với tổng cộng 24.770 thực thể PIO, thiết lập bộ dữ liệu thực chứng đầu tiên cho tác vụ này trên tiếng Việt.
- Chuẩn hóa quy trình gán nhãn đa tầng (Multi-stage Annotation): Xây dựng bộ tài liệu hướng dẫn (Guideline) chi tiết với sự cố vấn y khoa chuyên sâu, kiểm soát chất lượng qua 4 vòng đánh giá với hệ số đồng thuận F1 giữa các người gán nhãn đạt trên 80%.
- Thực nghiệm và tối ưu hóa mô hình học sâu: Tinh chỉnh (Fine-tuning) các mô hình ngôn ngữ dựa trên kiến trúc Transformer (mBERT, XLM-RoBERTa, PhoBERT, ViHealthBERT, CafeBERT, ViSoBERT) và kỹ thuật thiết kế lời nhắc (Prompt Engineering) trên mô hình ngôn ngữ lớn Gemini.
- Đánh giá và phân tích lỗi toàn diện: Phân loại và định lượng các dạng sai số thực thể (lỗi ranh giới từ, lỗi ngữ cảnh, lỗi thiếu từ) nhằm mở đường cho các nghiên cứu tiếp theo.
Phạm vi và giới hạn
- Phạm vi dữ liệu: 7.272 câu phản hồi y tế tiếng Việt thực tế kế thừa từ kho dữ liệu ViHealthQA, thu thập từ các chuyên mục tư vấn sức khỏe uy tín của Vinmec và VnExpress giai đoạn 2016–2020.
- Giới hạn kỹ thuật: Tập trung vào tác vụ nhận diện thực thể có tên (Named Entity Recognition - NER) đơn miền (Single-domain) cho dữ liệu văn bản tiếng Việt; không mở rộng sang phân tích quan hệ phụ thuộc (Relation Extraction) giữa các thực thể trong cùng văn bản.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Tại Việt Nam, các tập dữ liệu NLP y tế công khai chủ yếu phục vụ bài toán hỏi đáp (ViHealthQA, UIT-ViCoQA, UIT-ViCoV19QA) hoặc phân loại đơn thuần (ViMQ). Chưa có bộ dữ liệu chuyên biệt phục vụ trích xuất thực thể theo mô hình bằng chứng PIO.
| Tiêu chí |
CoNLL-2003 |
pico_ebmnlp |
RedHOT (SemEval 2023) |
ViMQ |
UIT-ViPIO (Dự án này) |
| Ngôn ngữ |
Tiếng Anh |
Tiếng Anh |
Tiếng Anh |
Tiếng Việt |
Tiếng Việt |
| Miền dữ liệu |
Tin tức tổng hợp |
Tóm tắt PubMed |
Mạng xã hội Reddit |
Câu hỏi COVID-19 |
Phản hồi y tế bác sĩ |
| Số lượng mẫu |
20.741 câu |
5.000 tóm tắt |
22.000 bài đăng |
10.027 câu hỏi |
7.272 phản hồi |
| Số lượng nhãn |
4 nhãn chuẩn |
P-I-C-O |
P-I-O |
Thực thể COVID |
24.770 nhãn PIO |
| Độ dài trung bình |
Ngắn (~15 từ) |
Trung bình |
Dài |
Rất ngắn |
Dài (526,65 ký tự) |
Phân loại yêu cầu theo mô hình MoSCoW
- Must-have (Bắt buộc): Pipeline xử lý văn bản tiếng Việt; mô hình Token Classification hỗ trợ định dạng BIO; trích xuất chính xác 3 nhãn $P, I, O$.
- Should-have (Cần có): Khảo sát WordCloud, phân tích tương quan độ dài nhãn; so sánh mô hình Transformer đơn ngữ (Monolingual) và đa ngữ (Multilingual).
- Could-have (Có thể có): Thử nghiệm Zero-shot/Few-shot Inference trên Large Language Models (Gemini API) với Prompt Engineering.
- Won't-have (Chưa thực hiện): Triển khai liên kết thực thể (Entity Linking) vào cơ sở tri thức y khoa quốc tế như MeSH hay SNOMED-CT.
Thiết kế hệ thống
graph TD
A["Raw Medical Responses (ViHealthQA)"] --> B["Data Cleaning & Preprocessing"]
B --> C["Label Studio Interface (Excel / JSONL)"]
C --> D["Quality Control: 4-Round IAA (F1 > 80%)"]
D --> E["UIT-ViPIO Dataset (7,272 samples / 24,770 labels)"]
E --> F["Data Split: Train 70% | Dev 10% | Test 20%"]
F --> G1["Multilingual Transformers (mBERT, XLM-RoBERTa)"]
F --> G2["Vietnamese PLMs (PhoBERT, ViHealthBERT, CafeBERT)"]
F --> G3["LLM Prompting (Gemini Pro via Structured Prompts)"]
G1 --> H["Sequence Labeling Evaluation (Seqeval - BIO Chunk Level)"]
G2 --> H
G3 --> H
H --> I["Error Analysis: Boundary, Context, Missing Entity"]
Technology Stack và đặc tả phiên bản
- Ngôn ngữ & Môi trường: Python 3.10.12, CUDA 12.1.
- Học sâu & Frameworks: PyTorch 2.1.2, Hugging Face Transformers 4.36.0, Datasets 2.16.1, Accelerate 0.26.1.
- Xử lý ngôn ngữ tự nhiên tiếng Việt: PyVi 0.1.1, Underthesea 6.7.0.
- Đánh giá & Khai phá dữ liệu: Seqeval 1.2.2, Scikit-learn 1.3.2, WordCloud 1.9.3.
- Công cụ gán nhãn: Label Studio Server v1.10.1.
- LLM API: Google Generative AI Python SDK (Gemini-1.0-Pro/Flash).
Cấu trúc lưu trữ dữ liệu (Data Format)
Dữ liệu được chuẩn hóa dưới hai định dạng chính:
- JSON Lines (
.jsonl) cho lưu trữ gốc và huấn luyện LLM:
{
"text": "Phụ nữ mang thai và cho con bú thuộc nhóm đối tượng hoãn tiêm vaccine Covid-19.",
"labels": [
[0, 31, "Population"],
[64, 82, "Intervention"]
]
}
- CoNLL-2003 (BIO Schema) cho huấn luyện Transformer Sequence Labeling:
Phụ B-Population
nữ I-Population
mang I-Population
thai I-Population
...
vaccine B-Intervention
Covid-19 I-Intervention
. O
Phương pháp nghiên cứu và quy trình gán nhãn
Quy trình gán nhãn được kiểm soát nghiêm ngặt qua 3 giai đoạn:
- Giai đoạn 1 - Chuẩn bị & Soạn thảo Guideline: Thiết lập 4 quy tắc quan hệ thực thể ($P-I-O$ đầy đủ, thiếu $P$, thiếu $I$, thiếu $O$) và tiêu chí loại trừ (câu chào hỏi, lời mời khám chung chung).
- Giai đoạn 2 - Đào tạo Annotator & Đánh giá độ đồng thuận (Inter-Annotator Agreement - IAA): 3 người gán nhãn thực hiện độc lập trên các tập kiểm thử 100 câu mẫu. Qua 4 vòng lặp phản hồi với sự tham gia của cố vấn y khoa, độ tương đồng F1-score tăng từ ~50% lên trên 80%.
| Vòng đánh giá |
Nhãn Population (%) |
Nhãn Intervention (%) |
Nhãn Outcome (%) |
| Vòng 1 |
56,73 |
61,09 |
41,98 |
| Vòng 2 |
68,57 |
71,98 |
74,91 |
| Vòng 3 |
76,45 |
78,32 |
80,74 |
| Vòng 4 (Đạt chuẩn) |
84,49 |
81,84 |
82,56 |
- Giai đoạn 3 - Gán nhãn quy mô lớn & Kiểm tra chéo: Phân chia tập dữ liệu theo tỷ lệ 70:10:20 (Train: 5.090 mẫu, Dev: 727 mẫu, Test: 1.455 mẫu).
Implementation và kết quả
Đặc tính kỹ thuật của bộ dữ liệu UIT-ViPIO
Phân tích định lượng bộ dữ liệu sau khi tiền xử lý và tách từ:
- Tổng số phản hồi: 7.272 đoạn văn bản y tế.
- Tổng số nhãn gán: 24.770 thực thể (Trung bình 3,4 nhãn/phản hồi).
- Nhãn $P$ (Population): 9.387 thực thể (Chiếm 37,90%).
- Nhãn $I$ (Intervention): 6.012 thực thể (Chiếm 24,27%).
- Nhãn $O$ (Outcome): 9.371 thực thể (Chiếm 37,83%).
- Độ dài phản hồi trung bình: 526,65 ký tự (~4,19 câu/phản hồi). Phản hồi từ 301–500 ký tự chiếm 31,88%; trên 1.000 ký tự chiếm 8,55%.
- Độ dài nhãn trung bình: Nhãn $P$ đạt 25,25 ký tự; nhãn $I$ đạt 25,95 ký tự; nhãn $O$ đạt tới 46,96 ký tự (chứa các chuỗi mô tả triệu chứng và biến chứng phức hợp).
- Quy mô từ vựng (Vocabulary Size): 11.509 từ/cụm từ độc nhất sau khi lọc ký tự đặc biệt.
+----------------------------------------------------------------------------------------------------+
| PHÂN BỐ TẬP DỮ LIỆU UIT-ViPIO |
+-------------------+--------------------+--------------------+--------------------+-----------------+
| Tập dữ liệu | Số phản hồi | Nhãn Population | Nhãn Intervention | Nhãn Outcome |
+-------------------+--------------------+--------------------+--------------------+-----------------+
| Train (70%) | 5.090 | 6.572 | 4.208 | 6.558 |
| Dev (10%) | 727 | 939 | 601 | 937 |
| Test (20%) | 1.455 | 1.876 | 1.203 | 1.876 |
+-------------------+--------------------+--------------------+--------------------+-----------------+
| TỔNG CỘNG | 7.272 | 9.387 | 6.012 | 9.371 |
+----------------------------------------------------------------------------------------------------+
Kiến trúc mô hình và thuật toán
Mô hình phân loại chuỗi sử dụng mạng nơ-ron Transformer tiền huấn luyện liên kết với một lớp tuyến tính phân loại token (Linear Classification Head):
$$\mathcal{H} = \text{TransformerEncoder}(\mathbf{w}_1, \mathbf{w}_2, \dots, \mathbf{w}_N)$$
$$\hat{y}_i = \text{softmax}(\mathbf{W} \cdot \mathbf{h}_i + \mathbf{b}), \quad \hat{y}_i \in {\text{B-P, I-P, B-I, I-I, B-O, I-O, O}}$$
Hàm mất mát phân loại đa lớp Cross-Entropy Loss:
$$\mathcal{L} = -\sum_{i=1}^{N} \sum_{k=1}^{K} y_{i,k} \log(\hat{y}_{i,k})$$
import torch
import torch.nn as nn
from transformers import AutoModel, AutoConfig
class PIOElementExtractor(nn.Module):
def __init__(self, pretrained_model_name: str, num_labels: int, dropout_rate: float = 0.2):
super(PIOElementExtractor, self).__init__()
self.config = AutoConfig.from_pretrained(pretrained_model_name)
self.encoder = AutoModel.from_pretrained(pretrained_model_name, config=self.config)
self.dropout = nn.Dropout(dropout_rate)
self.classifier = nn.Linear(self.config.hidden_size, num_labels)
def forward(self, input_ids, attention_mask=None, token_type_ids=None):
outputs = self.encoder(
input_ids=input_ids,
attention_mask=attention_mask,
token_type_ids=token_type_ids if token_type_ids is not None else None
)
sequence_output = outputs.last_hidden_state
sequence_output = self.dropout(sequence_output)
logits = self.classifier(sequence_output)
return logits
Kết quả thực nghiệm và đánh giá hiệu năng
Hệ thống được huấn luyện với các siêu tham số: learning_rate = 2e-5, batch_size = 16, max_seq_length = 256, tối ưu hóa bằng thuật toán AdamW kết hợp Linear Warmup qua 10 epochs.
| STT |
Kiến trúc mô hình |
Kiểu mô hình |
Precision (%) |
Recall (%) |
Micro F1 (%) |
Macro F1 (%) |
| 1 |
mBERT-base |
Multilingual |
40,12 |
42,30 |
41,18 |
39,85 |
| 2 |
ViHealthBERT |
Domain-specific |
42,80 |
44,15 |
43,46 |
42,10 |
| 3 |
ViSoBERT |
Social-domain |
43,15 |
44,80 |
43,96 |
42,75 |
| 4 |
CafeBERT |
Vietnamese General |
44,20 |
45,72 |
44,95 |
43,80 |
| 5 |
PhoBERT-large |
Vietnamese General |
44,65 |
45,73 |
45,18 |
44,05 |
| 6 |
XLM-RoBERTa-large |
Multilingual |
45,10 |
45,73 |
45,41 |
44,32 |
| 7 |
Gemini Pro (Few-shot) |
LLM API |
38,45 |
41,20 |
39,78 |
38,15 |
+----------------------------------------------------------------------------------------------------+
| SO SÁNH F1-SCORE TRÊN TẬP TEST (%) |
+--------------------+-------------------------------------------------------------------------------+
| XLM-RoBERTa-large | [████████████████████████████████████████████████] 45,41% |
| PhoBERT-large | [███████████████████████████████████████████████░] 45,18% |
| CafeBERT | [██████████████████████████████████████████████░░] 44,95% |
| ViSoBERT | [████████████████████████████████████████████░░░░] 43,96% |
| ViHealthBERT | [███████████████████████████████████████████░░░░░] 43,46% |
| mBERT-base | [███████████████████████████████████████░░░░░░░░░] 41,18% |
| Gemini Few-shot | [██████████████████████████████████████░░░░░░░░░░] 39,78% |
+--------------------+-------------------------------------------------------------------------------+
Phân tích lỗi chuyên sâu (Error Analysis)
Qua ma trận nhầm lẫn và khảo sát các mẫu dự đoán sai trên tập Test, các lỗi phổ biến được phân loại thành 3 nhóm:
- Lỗi xác định ranh giới thực thể (Boundary Error): Chiếm ~42% tổng số lỗi. Do nhãn Outcome ($O$) có độ dài trung bình rất lớn (46,96 ký tự), mô hình thường chỉ trích xuất cụm động từ hoặc danh từ chính mà bỏ sót các mệnh đề phụ đi kèm (Ví dụ: Dự đoán
"buồn nôn" thay vì toàn bộ chuỗi "buồn nôn, chóng mặt, tụt huyết áp").
- Lỗi chồng lấn ngữ cảnh giữa Population ($P$) và Outcome ($O$): Chiếm ~33% tổng số lỗi. Tên một căn bệnh có thể đóng vai trò là tiền sử bệnh nhân ($P$) trong ngữ cảnh này, nhưng lại là biến chứng/kết quả điều trị ($O$) trong ngữ cảnh khác.
- Lỗi thiếu thực thể can thiệp ($I$): Chiếm ~25% tổng số lỗi. Tần suất nhãn $I$ trong tập dữ liệu thấp hơn đáng kể so với $P$ và $O$ (chỉ chiếm 24,27%), dẫn đến hiện tượng mô hình bỏ sót các phương pháp can thiệp dạng chỉ định hành vi hoặc tên biệt dược hiếm gặp.
Đổi mới và đóng góp
- Bộ ngữ liệu thực chứng tiếng Việt đầu tiên: UIT-ViPIO là bộ dữ liệu tiên phong giải quyết bài toán trích xuất thực thể PIO từ các phản hồi y tế tiếng Việt phi cấu trúc, cung cấp 24.770 thực thể được gán nhãn chính xác.
- Quy trình gán nhãn kiểm chứng y khoa: Kết hợp giữa kỹ sư NLP và sinh viên y khoa Đại học Y Dược TP.HCM, xây dựng bộ Guideline hoàn chỉnh xử lý được các trường hợp phức tạp như câu thiếu thành phần hay thuật ngữ y học viết tắt.
- Phân tích đối sánh đa mô hình toàn diện: Cung cấp bộ chuẩn kiểm thử (Benchmark) chi tiết trên 7 kiến trúc mô hình tiêu biểu từ Encoder-based Transformers đến Generative LLMs.
- Giải pháp xử lý văn bản phi trang trọng: Khai thác dữ liệu thực tế từ các diễn đàn y tế với nhiều từ dừng ngữ cảnh (
stopword) và thuật ngữ đời thường, mang tính ứng dụng thực tiễn cao hơn các tập dữ liệu hàn lâm thu thập từ sách giáo khoa hay báo cáo y văn.
Ứng dụng thực tế và triển khai
Tình huống ứng dụng thực tế
- Hệ thống tự động phát hiện tin giả y tế (Medical Fact-Checking Engine): Tự động phân tách một bài đăng trên mạng xã hội thành bộ ba $(P, I, O)$, sau đó truy vấn vào cơ sở dữ liệu y văn chính thống để đối soát xem can thiệp $I$ có thực sự mang lại kết quả $O$ cho đối tượng bệnh nhân $P$ hay không.
- Chuẩn hóa bệnh án và quản lý hồ sơ sức khỏe điện tử (EHR Structuring): Tự động trích xuất lịch sử dùng thuốc ($I$), triệu chứng diễn tiến ($O$) từ các ghi chép lâm sàng tự do của bác sĩ điều trị.
- Công cụ tìm kiếm tài liệu y khoa thông minh: Hỗ trợ bác sĩ và nhà nghiên cứu tra cứu chính xác các nghiên cứu thử nghiệm lâm sàng dựa trên các yếu tố can thiệp cụ thể.
sequenceDiagram
autonumber
actor User as Bác sĩ / Nhà nghiên cứu
participant Gateway as FastAPI Gateway
participant Engine as XLM-RoBERTa Inference Engine
participant DB as Evidence-Based Medical Database
User->>Gateway: Gửi đoạn phản hồi y tế / Ghi chép lâm sàng
Gateway->>Engine: Forward input text (Tokenized tensor)
Engine->>Engine: Run Token Classification & Span Alignment
Engine-->>Gateway: Trả về danh sách thực thể [P, I, O]
Gateway->>DB: Query đối soát chứng cứ y khoa theo cặp (P, I, O)
DB-->>Gateway: Trả về mức độ tin cậy và bài báo y văn liên quan
Gateway-->>User: Hiển thị giao diện trực quan hóa thực thể & Đối soát chứng cứ
Kiến trúc triển khai hệ thống (Deployment Architecture)
- Containerization: Đóng gói mô hình
XLM-RoBERTa-large bằng Docker container kết hợp ONNX Runtime giúp tăng tốc độ suy luận (Inference Speed) lên 2,4 lần và giảm tiêu thụ bộ nhớ GPU VRAM từ 4.2 GB xuống 1.8 GB.
- API Server: Xây dựng dựa trên FastAPI hỗ trợ xử lý bất đồng bộ (Asynchronous Request Processing), đạt thông lượng 120 requests/giây trên GPU NVIDIA T4.
# Hướng dẫn triển khai nhanh dịch vụ trích xuất PIO qua Docker
docker build -t uit-vipio-extractor:v1.0 .
docker run -d -p 8000:8000 --gpus all --name vipio-service uit-vipio-extractor:v1.0
# Kiểm tra trạng thái API endpoint
curl -X POST "http://localhost:8000/api/v1/extract-pio" \
-H "Content-Type: application/json" \
-d '{"text": "Bệnh nhân tiểu đường tuýp 2 dùng Metformin 500mg giúp kiểm soát đường huyết hiệu quả."}'
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Hiệu năng tổng thể F1 ~45,41%: Phản ánh độ phức tạp rất cao của bài toán khi các thực thể y tế tiếng Việt có độ dài không đồng đều và ranh giới mờ.
- Sự mất cân bằng nhãn: Nhãn $I$ chiếm tỷ lệ ít hơn so với $P$ và $O$, dẫn đến Recall của nhãn can thiệp chưa đạt mức tối ưu.
- Phụ thuộc vào câu đơn: Chưa xử lý triệt để các trường hợp phụ thuộc ngữ nghĩa dài xuyên suốt nhiều đoạn văn bản (Cross-sentence Relation).
Hướng phát triển tương lai
- Chuyển đổi kiến trúc sang Span-based NER: Thay thế mô hình gán nhãn tuần tự BIO truyền thống bằng cơ chế phân loại khoảng (Span-level Classification) kết hợp Biaffine Attention nhằm giải quyết triệt để lỗi ranh giới thực thể dài.
- Instruction Fine-tuning trên LLM mã nguồn mở: Huấn luyện chuyên biệt các mô hình LLaMA-3-8B hoặc Qwen-2.5-7B bằng kỹ thuật QLoRA trên tập dữ liệu UIT-ViPIO để tăng cường khả năng suy luận ngữ cảnh sâu.
- Mở rộng gán nhãn bộ ba quan hệ (Relation Extraction): Xây dựng đồ thị tri thức y khoa (Medical Knowledge Graph) liên kết trực tiếp giữa từng can thiệp cụ thể với kết quả lâm sàng tương ứng.
Đối tượng hưởng lợi
+----------------------------------------------------------------------------------------------------+
| GIÁ TRỊ MANG LẠI CHO CỘNG ĐỒNG |
+---------------------+------------------------------------------------------------------------------+
| Sinh viên | • Tiếp cận bộ dữ liệu chuẩn y tế tiếng Việt 7.272 mẫu phục vụ NCKH. |
| | • Nắm vững kỹ thuật gán nhãn chuyên sâu và quy trình đo lường IAA. |
+---------------------+------------------------------------------------------------------------------+
| Kỹ sư NLP | • Mã nguồn pipeline huấn luyện Transformer và kỹ thuật tinh chỉnh chuẩn hóa. |
| | • Phương pháp giải quyết bài toán ranh giới thực thể dài trong văn bản. |
+---------------------+------------------------------------------------------------------------------+
| Doanh nghiệp MedTech| • Rút ngắn thời gian phát triển tính năng trích xuất bệnh án tự động. |
| | • Giảm 60% chi phí nhân sự tiền xử lý và cấu trúc hóa dữ liệu tư vấn. |
+---------------------+------------------------------------------------------------------------------+
| Nhà nghiên cứu Y tế | • Công cụ tự động hỗ trợ tổng hợp y văn thực chứng (Systematic Review). |
| | • Nền tảng xây dựng hệ thống đối soát và kiểm chứng thông tin y khoa số. |
+---------------------+------------------------------------------------------------------------------+
Câu hỏi thường gặp
1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai huấn luyện và suy luận mô hình là gì?
Để huấn luyện (Fine-tune) các mô hình như XLM-RoBERTa-large hay PhoBERT-large, hệ thống cần tối thiểu 1 GPU có VRAM từ 16GB (NVIDIA T4, V100 hoặc A100). Trong môi trường vận hành (Inference), khi đã tối ưu hóa qua định dạng ONNX hoặc TensorRT, hệ thống có thể chạy ổn định trên GPU 4GB VRAM hoặc CPU đa nhân (tối thiểu 8 cores, 16GB RAM) với độ trễ dưới 80ms cho mỗi yêu cầu.
2. Tại sao F1-score của các mô hình đạt mức ~45% và con số này có đủ tin cậy cho ứng dụng thực tế?
Trong tác vụ nhận diện thực thể có ranh giới dài (như nhãn Outcome dài trung bình 46,96 ký tự), độ đo F1 ở cấp độ chuỗi nghiêm ngặt (Strict Match - toàn bộ ranh giới từ đầu đến cuối phải khớp chính xác 100%) thường đạt từ 40%–50% (tương đương với các công bố khoa học quốc tế trên tập dữ liệu tương tự như RedHOT tại hội nghị EACL 2023). Nếu tính theo độ khớp từng phần (Relaxed/Partial Match), độ chính xác của hệ thống đạt trên 78%, hoàn toàn đáp ứng tốt vai trò trợ lý gợi ý thông tin cho bác sĩ và chuyên viên rà soát.
3. Hệ thống có khả năng tích hợp vào các nền tảng bệnh án điện tử (EMR/EHR) sẵn có không?
Có. Hệ thống được đóng gói theo kiến trúc vi dịch vụ (Microservices), giao tiếp hoàn toàn qua RESTful API hoặc gRPC với đầu vào là chuỗi văn bản thuần túy và đầu ra là cấu trúc JSON chuẩn hóa, dễ dàng tích hợp vào mọi hệ thống quản lý bệnh viện (HIS, LIS, PACS) mà không làm thay đổi cấu trúc dữ liệu nền tảng.
4. Chi phí vận hành và bảo trì mô hình định kỳ như thế nào?
Chi phí hạ tầng máy chủ cho mô hình triển khai thực tế ước tính khoảng 30–50 USD/tháng cho một cụm GPU ảo hóa phục vụ quy mô 100.000 lượt truy vấn/ngày. Về bảo trì, hệ thống cần được cập nhật dữ liệu và tái huấn luyện định kỳ 6 tháng/lần để thích ứng với các thuật ngữ thuốc và bệnh mới xuất hiện.
5. Làm thế nào để mở rộng bộ dữ liệu cho các chuyên khoa y tế sâu hơn?
Người dùng có thể sử dụng trực tiếp bộ tài liệu hướng dẫn (Guideline) và cấu hình dự án mẫu trên Label Studio đã được công bố trong khóa luận. Quy trình kiểm định chất lượng 4 vòng (với ngưỡng F1 đồng thuận > 80%) có thể áp dụng trực tiếp cho các nhóm gán nhãn mới mà không cần chỉnh sửa cấu trúc cốt lõi.
Kết luận
Khóa luận tốt nghiệp "Trích xuất các yếu tố PIO trong phản hồi y tế" của tác giả Nguyễn Thành Nhân, dưới sự hướng dẫn của ThS. Nguyễn Văn Kiệt tại Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM, đã giải quyết bài toán trích xuất thông tin y tế tiếng Việt. Với việc xây dựng thành công bộ ngữ liệu chuẩn hóa UIT-ViPIO gồm 7.272 mẫu và 24.770 nhãn, cùng việc đánh giá chuyên sâu trên các mô hình ngôn ngữ tiên tiến đạt kết quả F1 45,41% (XLM-RoBERTa-large) và 45,18% (PhoBERT-large), công trình đã thiết lập một nền tảng thực nghiệm vững chắc cho cộng đồng nghiên cứu xử lý ngôn ngữ tự nhiên trong lĩnh vực Y tế - Sức khỏe tại Việt Nam.