LLM & NLP

Vì sao LLM ảo giác và 7 cách giảm thiểu

Tóm tắt

Model bịa vì áp lực thống kê khi tiền huấn luyện và vì benchmark thưởng cho việc đoán hơn là nói không biết. Giảm ảo giác bằng cách cho phép nói không biết, trích dẫn trước khi trả lời, kiểm chứng và giữ người duyệt.

LLM bịa ra một điều khoản hợp đồng không tồn tại, trích một bài báo không có thật, hoặc tự tin nêu sai ngày sinh của một người. Hiện tượng này gọi là ảo giác (hallucination). Nó không phải "bug" ngẫu nhiên có thể vá trong một bản cập nhật, mà là hệ quả của cách model được huấn luyện và đánh giá. Hiểu nguyên nhân giúp bạn chọn đúng biện pháp thay vì chỉ dặn "đừng bịa".

Vì sao model bịa? Góc nhìn từ nghiên cứu

Bài báo "Why Language Models Hallucinate" (Kalai, Nachum, Vempala, Zhang, 2025) đưa ra hai lý do chính:

  • Từ khâu tiền huấn luyện: các tác giả xem ảo giác như lỗi của một bài toán phân loại nhị phân. Nếu model không thể phân biệt chắc chắn câu đúng với câu sai trông hợp lý, lỗi sẽ xuất hiện như một áp lực thống kê bình thường, nhất là với sự kiện hiếm gặp trong dữ liệu (ví dụ ngày sinh của người ít nổi tiếng).
  • Từ cách chấm điểm: phần lớn benchmark chấm đúng/sai, trả lời "tôi không biết" được 0 điểm, đoán bừa còn có cơ hội đúng. Model vì thế được tối ưu để trở thành "thí sinh giỏi làm bài": khi không chắc thì đoán.

Đề xuất của bài báo: sửa cách chấm của các benchmark phổ biến để không phạt việc thừa nhận không chắc chắn, thay vì chỉ thêm bài test ảo giác riêng.

Các kiểu ảo giác hay gặp

KiểuVí dụDấu hiệu
Bịa sự kiệnNgày tháng, số liệu, tên ngườiChi tiết rất cụ thể nhưng không có nguồn
Bịa trích dẫnTên bài báo, URL, số hiệu văn bản luậtKhông tìm thấy khi tra lại
Sai so với tài liệu đưa vàoTóm tắt thêm ý không có trong bản gốcKhông trỏ được tới câu gốc
Bịa API/thư việnGọi hàm không tồn tạiCode không chạy, lỗi import

Bộ kỹ thuật giảm ảo giác (theo tài liệu Anthropic)

Cơ bản

  • Cho phép nói "không biết": ghi rõ trong prompt rằng nếu thiếu thông tin thì nói thẳng. Tài liệu đánh giá cách này giảm đáng kể thông tin sai.
  • Trích nguyên văn trước, phân tích sau: với tài liệu dài (trên khoảng 20k token), yêu cầu trích các câu liên quan trước rồi chỉ dựa vào đó để trả lời.
  • Kiểm chứng bằng trích dẫn: mỗi nhận định phải có câu trích hỗ trợ; không tìm được thì rút lại nhận định.

Nâng cao

  • Xem lại suy luận: bật thinking và đọc phần tóm tắt suy luận khi câu trả lời có vẻ sai.
  • Best-of-N: chạy cùng prompt nhiều lần, so sánh; chỗ các lần trả lời mâu thuẫn là chỗ đáng nghi.
  • Tinh chỉnh lặp: đưa output vào lượt sau, yêu cầu tự kiểm tra từng ý.
  • Giới hạn nguồn kiến thức: chỉ dùng tài liệu được cung cấp, không dùng hiểu biết chung.
Chỉ dùng thông tin trong <docs>. Với mỗi nhận định, trích câu gốc hỗ trợ.
Nếu không tìm được câu hỗ trợ, ghi "Không đủ thông tin" thay vì đoán.

Rủi ro và lưu ý

  • Không có kỹ thuật nào loại bỏ hoàn toàn: tài liệu Anthropic nhấn mạnh các cách trên chỉ giảm, không xoá được ảo giác. Thông tin quan trọng luôn cần người kiểm chứng.
  • Temperature 0 không phải thuốc chữa: model vẫn có thể sai một cách nhất quán.
  • Cho phép "không biết" có cái giá: tỷ lệ từ chối trả lời tăng. Đo cả hai chỉ số: tỷ lệ sai và tỷ lệ bỏ trống.

Áp dụng thế nào?

  • Dev: Với mọi tính năng hỏi đáp trên tài liệu, bắt buộc output có trích dẫn và có code kiểm tra trích dẫn đó thật sự tồn tại trong nguồn.
  • Tech Lead: Thiết kế eval chấm điểm "sai tự tin" nặng hơn "không biết", đúng tinh thần bài báo, để không vô tình thưởng cho việc đoán.
  • PM: Thiết kế UX cho câu trả lời "không chắc": hiển thị nguồn, cho người dùng bấm xem đoạn gốc, có nút báo sai.

Nguồn & tham khảo

  1. Why Language Models Hallucinate — Kalai, Nachum, Vempala, Zhang (arXiv)
  2. Reduce hallucinations — Claude Docs