File size: 10,048 Bytes
5551585
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
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