Content moderation không cần dữ liệu huấn luyện
Đa số team nghĩ kiểm duyệt nội dung cần fine-tune riêng. Thực tế, structured prompting với taxonomy rõ ràng đủ đưa bạn vào production nhanh hơn nhiều.
Bụi WireBạn vừa nhận yêu cầu: "Tuần sau cần có hệ thống lọc nội dung cho phần comment." Phản xạ đầu tiên của đa số team là nghĩ tới dataset gán nhãn, pipeline huấn luyện, rồi tháng sau mới chạy được. Nhưng nếu mình nói bạn có thể dựng một hệ moderation hoạt động tốt chỉ bằng prompt — không training data, không GPU — liệu bạn có thử?
Đây không phải lời hứa hão. Amazon vừa publish benchmark cho thấy Nova 2 Lite chạy content moderation bằng prompting đạt hiệu quả cạnh tranh với các foundation model khác trên ba bộ dữ liệu công khai — và cách tiếp cận này áp dụng được với bất kỳ model nào hỗ trợ structured output.

Sơ đồ tóm tắt ý chính của bài viết.
Đích đến: lọc đúng mà scale được
Mục tiêu không phải "chặn mọi thứ xấu" — đó là ảo tưởng. Mục tiêu thật là: giảm false negative (bỏ sót nội dung vi phạm) xuống mức chấp nhận được, đồng thời giữ false positive (báo nhầm nội dung hợp lệ) đủ thấp để user không bực. Mỗi tổ chức định nghĩa chính sách riêng, nên một classifier đóng gói sẵn hiếm khi khớp hoàn toàn với ngữ cảnh của bạn.
Điểm mấu chốt: prompting cho phép bạn thay đổi chính sách moderation bằng cách sửa prompt — không cần retrain model. Policy thay đổi theo quý? Sửa prompt, deploy lại trong buổi chiều.
Trước khi mở IDE
- [ ] Taxonomy rõ ràng — danh sách các nhóm vi phạm (hazard category) mà team bạn thật sự cần lọc. Không cần 12 nhóm như chuẩn MLCommons AILuminate; 4–6 nhóm phổ biến nhất với sản phẩm của bạn là đủ để bắt đầu.
- [ ] Định nghĩa từng nhóm bằng văn bản — mỗi category cần 2–3 câu mô tả ranh giới. Nếu bạn không viết nổi định nghĩa rõ, model cũng sẽ không hiểu.
- [ ] Tập test thủ công — 50–100 mẫu comment thật (hoặc viết tay) gồm cả vi phạm lẫn hợp lệ, đã gán nhãn đúng/sai. Đây là thước đo, không phải training data.
- [ ] Model endpoint — Amazon Nova 2 Lite qua Bedrock, hoặc bất kỳ model nào bạn đang trả phí: Claude, GPT-4o, Gemini, Llama 3 self-host. Kỹ thuật prompt giống nhau.
- [ ] Budget cho latency — moderation thường chạy async, nhưng nếu bạn cần block trước khi hiển thị, hãy tính latency p95 vào thiết kế.
Dựng structured prompt — ba lớp nền
Nghĩ về content moderation prompt như một bức tranh có lớp: lớp nền (taxonomy), lớp phác thảo (format output), và lớp chi tiết (ví dụ biên). Thiếu lớp nào, bức tranh sẽ thiếu chiều sâu.
Lớp 1 — Taxonomy trong system prompt
Đưa toàn bộ định nghĩa category vào system prompt. Mỗi category cần: tên, mô tả ngắn, và 1–2 ví dụ biên (borderline) để model hiểu ranh giới.
You are a content moderator. Classify the following user message into one of these categories:
1. HARASSMENT: Direct attacks targeting identity, appearance, or disability...
2. SEXUAL_CONTENT: Explicit sexual material not suitable for general audience...
3. VIOLENCE: Graphic descriptions of harm or threats toward individuals...
4. SAFE: Content that does not violate any above policy.
Respond with JSON: {"category": "...", "confidence": 0.0-1.0, "reasoning": "..."}
Lớp 2 — Structured output format
Bắt model trả JSON cố định thay vì free-form text. Lý do: bạn cần parse kết quả tự động, route vào queue review, và tính metric. Free-form text nghe linh hoạt nhưng parse lỗi liên tục ở production.
Lớp 3 — Few-shot với edge case
Thêm 3–5 ví dụ vào prompt, ưu tiên các trường hợp mập mờ. Đừng cho ví dụ quá rõ ràng ("tôi sẽ giết bạn" → VIOLENCE) — model đã biết làm những cái đó. Cho ví dụ khó: châm biếm, ngữ cảnh văn hóa, tiếng lóng.
Ví dụ cụ thể cho team Việt Nam: Comment "thằng này ngu vl" — đây là harassment hay chỉ là ngôn ngữ bình dân? Ranh giới phụ thuộc chính sách sản phẩm của bạn. Đưa case này vào few-shot để model học cách bạn muốn xử lý.
Hai cái bẫy nhìn thấy muộn
Bẫy 1: Taxonomy quá rộng, model đoán bừa. Giả sử team bạn copy nguyên 12 category của MLCommons mà không customize. Kết quả: model phân vân giữa "Non-Violent Crime" và "Defamation" cho cùng một comment, confidence thấp, alert dồn lên hàng đợi review. Giống như đưa cho họa sĩ bảng 200 màu rồi bảo "chọn đúng 1" — càng nhiều lựa chọn mơ hồ, càng khó quyết.
Cách tránh: Bắt đầu với 4–5 category sát nhất với dữ liệu thật của bạn. Mở rộng sau khi đã ổn định precision trên nhóm nhỏ.
Bẫy 2: Không có feedback loop. Bạn deploy prompt, chạy vài tuần, tưởng ổn. Nhưng user adapt — họ dùng tiếng lóng mới, viết tắt, hoặc chèn ký tự đặc biệt. Không có vòng lặp "review sample hàng tuần → cập nhật few-shot" thì accuracy sẽ trôi dần mà bạn không biết.
Ví dụ thực tế: Một team e-commerce ở HCM chạy moderation cho review sản phẩm. Tháng đầu precision tốt. Tháng thứ ba, user bắt đầu dùng emoji và viết tắt để lách filter. Team mất hai tuần mới phát hiện vì không ai kiểm sample output định kỳ.
Khi nào prompt-first không còn đủ
Prompt-based moderation phù hợp khi: policy thay đổi thường xuyên, volume chưa quá lớn (dưới vài triệu request/ngày), và team chưa có labeled dataset đủ lớn.
Chuyển sang fine-tuning khi: bạn cần latency cực thấp (fine-tuned model nhỏ nhanh hơn model lớn + long prompt), hoặc accuracy trên domain cực niche mà few-shot không cover nổi, hoặc chi phí inference cho model lớn bắt đầu vượt budget.
Plot twist: nhiều team fine-tune quá sớm, tốn 2–3 tháng gán nhãn + train, rồi nhận ra policy thay đổi và phải làm lại. Prompt-first cho phép bạn iterate nhanh, ổn định policy trước, rồi fine-tune sau khi đã biết chính xác mình cần gì.
Thứ Hai tới — bắt đầu từ đây
- Ngồi 30 phút với team trust & safety (hoặc PM): Viết ra 4–5 category vi phạm cụ thể nhất cho sản phẩm. Đừng copy từ chuẩn nào — dùng ngôn ngữ nội bộ.
- Viết prompt đầu tiên theo cấu trúc ba lớp ở trên. Test thủ công với 20 mẫu từ tập test.
- Đo precision và recall trên 50+ mẫu. Nếu precision dưới 80% → sửa taxonomy hoặc thêm few-shot edge case.
- Deploy async với confidence threshold: trên 0.9 → auto-action, dưới 0.9 → queue cho human review.
- Lịch review tuần: mỗi tuần xem 30 mẫu output, cập nhật prompt nếu cần.
Model nào cũng dùng được — Nova, Claude, GPT, Llama self-host. Kỹ thuật prompt là phần portable, model là phần thay được. Đừng khóa mình vào vendor trước khi biết policy ổn định ở đâu.
---
Bụi Wire — nghiện đọc release notes lúc 2 giờ sáng