Tác vụ
Đầu vào là một ticket CSKH tiếng Việt, đầu ra bắt buộc là đúng một object JSON, 4 khoá, không markdown:
{"intent": "doi_tra", "urgency": "trung_binh", "product": "balo laptop", "sentiment": "trung_tinh"}
Table with columns: Trường, Tập giá trị| Trường | Tập giá trị |
|---|
intent | doi_tra · van_chuyen · hoan_tien · san_pham_loi · hoi_thong_tin |
urgency | cao · trung_binh · thap |
sentiment | tieu_cuc · trung_tinh · tich_cuc |
product | tên sản phẩm xuất hiện trong ticket |
Kết quả đo (50 mẫu target đóng băng, 15 câu regression, greedy decode)
Table with columns: Cấu hình, target, regression, format, latency (ms)| Cấu hình | target | regression | format | latency (ms) |
|---|
| (a) base + prompt cẩu thả | 0.000 | 0.758 | 0.000 | 3249 |
| (b) base + prompt tối ưu | 0.765 | 0.758 | 1.000 | 1089 |
| (c) adapter này | 0.970 | 0.633 | 1.000 | 1435 |
Adapter được chấm với prompt cẩu thả — hành vi đã nằm trong trọng số, không cần schema trong prompt.
Phán quyết: FAILED ở cổng hồi quy — và đó là kết quả trung thực
Trên tác vụ đích adapter thắng baseline prompt tốt nhất +0.205. Nhưng điểm năng lực phổ thông
tụt −0.124 (dung sai 0.020) → quên thảm hoạ (catastrophic forgetting), vì 100 % dữ liệu
huấn luyện là JSON và không có replay data.
Khuyến nghị sử dụng: dùng như adapter chuyên dụng bật/tắt theo route, không dùng làm model
đa dụng. Muốn khắc phục: trộn 1–5 % dữ liệu hội thoại phổ thông vào tập train.
Ba cấu hình đối chứng (cùng 30 step, cùng ngân sách tham số)
Table with columns: run, thay đổi, target, train loss, peak VRAM| run | thay đổi | target | train loss | peak VRAM |
|---|
correct (adapter này) | — | 0.970 | 0.6261 | 12.01 GB |
attn_only | chỉ q,v · r=283 (khớp số tham số) | 0.970 | 0.5367 | 12.02 GB |
wrong_lr |
Lưu ý: xếp theo train loss thì attn_only đứng đầu; xếp theo điểm tác vụ thì nó hoà với
correct. Train loss là bằng chứng đảo ngược, không chỉ là bằng chứng yếu.
Cách dùng
from transformers import AutoModelForCausalLM, AutoTokenizerfrom peft import PeftModelimport torch BASE = "unsloth/Qwen3.5-4B"ADAPTER = "thbhybhybyhb/lab21-2A202601454-qwen35-triage-vi" tok = AutoTokenizer.from_pretrained(BASE, trust_remote_code=True)model = AutoModelForCausalLM.from_pretrained(BASE, dtype=torch.float16, device_map="auto", trust_remote_code=True)model = PeftModel.from_pretrained(model, ADAPTER) msgs = [ {"role": "system", "content": "Phân loại ticket sau."}, {"role": "user", "content": "Alo shop, mình đặt balo laptop mã đơn VN411453. " "Cho tôi trả lại. Đã 3 ngày rồi. Cho tôi hỏi."},]text = tok.apply_chat_template(msgs, tokenize=False, add_generation_prompt=True)out = model.generate(**tok(text, return_tensors="pt").to(model.device), max_new_tokens=160, do_sample=False)print(tok.decode(out[0], skip_special_tokens=True))
Hạn chế đã đo được
- Năng lực phổ thông giảm 0.124 — không dùng thay model nền.
urgency = thap là điểm yếu duy nhất còn lại: toàn bộ 6/200 trường sai đều là trường này,
và cả 6 ticket đều chứa cụm "Khi nào tiện". Ba trường còn lại đúng 100 % trên 50 mẫu.
- Huấn luyện trên corpus tổng hợp có kiểm soát (250 ticket), không phải log CSKH thật.
valid_trace_rate = 0.00 — model không còn sinh khối <think>.
Artefact kèm theo
results/ — toàn bộ số liệu thô: mask_proof.json, baselines_frozen.json, runs.csv,
verdict.json, autopsy.json, qualitative.json, template_check.json, token_stats.json
submission/REPORT.md — báo cáo đánh giá đầy đủ 7 mục