Bản chất mô hình ngôn ngữ lớn và các giới hạn cần biết
Mục tiêu bài học
Sau bài này, bạn có thể:
- Mô tả được cơ chế sinh văn bản của mô hình ngôn ngữ lớn (large language model) như một quá trình dự đoán token (token) lặp đi lặp lại.
- Phân biệt được "mô hình dự đoán token" với "hệ thống suy luận", và giải thích vì sao sự khác biệt này quan trọng khi viết prompt (prompt).
- Nhận diện được ba giới hạn cốt lõi: ảo giác (hallucination), cửa sổ ngữ cảnh (context window), và kiến thức đóng băng (knowledge cutoff).
- Chuyển mỗi giới hạn thành một quy tắc thiết kế đầu vào cụ thể cho công việc của mình.
[!NOTE] Đây là bài mở đầu của khoá. Chúng ta chưa viết prompt hay. Việc đầu tiên là hiểu rõ công cụ đang dùng, vì mọi kỹ thuật prompt về sau đều là hệ quả trực tiếp của bản chất được trình bày ở đây.
Lý thuyết
1. Sinh văn bản là một chuỗi phép dự đoán
Mô hình ngôn ngữ lớn không "tra cứu câu trả lời". Nó nhận một chuỗi token đầu vào rồi tính phân phối xác suất cho token tiếp theo:
$$ P(t_n \mid t_1, t_2, \dots, t_{n-1}) $$
Sau đó nó chọn một token theo phân phối ấy, ghép token đó vào chuỗi, và lặp lại. Toàn bộ câu trả lời dài mà bạn thấy chỉ là kết quả của hàng trăm, hàng nghìn vòng lặp như vậy.
flowchart LR
A["📝 Prompt"] --> B["🔤 Tách token"]
B --> C["📊 Tính phân phối xác suất"]
C --> D["🎲 Chọn token"]
D --> E["➕ Ghép vào chuỗi"]
E -->|"lặp lại"| C
E --> F["📄 Văn bản trả lời"]
Ba hệ quả thực hành rút ra ngay:
- Mô hình tối ưu cho tính hợp lý về ngôn ngữ, không tối ưu cho tính đúng về sự thật. Hai mục tiêu này thường trùng nhau, nhưng không phải lúc nào cũng vậy.
- Đầu ra phụ thuộc vào toàn bộ chuỗi phía trước. Đổi vài chữ trong prompt có thể đổi hướng cả câu trả lời.
- Token không phải từ. Tiếng Việt thường tốn nhiều token hơn tiếng Anh cho cùng một lượng nội dung, nên ngân sách ngữ cảnh của bạn "ngắn" hơn bạn tưởng.
2. Vì sao nó giống suy luận mà không phải suy luận
| Khía cạnh | Mô hình dự đoán token | Hệ thống suy luận thực sự |
|---|---|---|
| Đơn vị hoạt động | Xác suất của token kế tiếp | Mệnh đề, quan hệ logic, bằng chứng |
| Kiểm tra nội tại | Không có bộ kiểm chứng sự thật | Có bước kiểm tra tính đúng đắn |
| Khi thiếu dữ liệu | Vẫn sinh ra chuỗi hợp lý | Dừng lại, báo thiếu dữ liệu |
| Tính tái lập | Thay đổi theo cách diễn đạt | Ổn định nếu tiên đề ổn định |
Mô hình có thể trông như đang suy luận vì nó đã học được rất nhiều mẫu lập luận trong dữ liệu huấn luyện (training data). Nhưng đó là tái hiện hình thức của lập luận, không phải thực thi một quy trình kiểm chứng. ==Đây là tiền đề cho toàn bộ phần còn lại của khoá: bạn phải cung cấp cấu trúc kiểm chứng từ bên ngoài.==
3. Ba giới hạn cần nhớ
Ảo giác (hallucination). Mô hình sinh ra thông tin nghe rất hợp lý nhưng sai hoặc bịa hoàn toàn: tên tài liệu không tồn tại, số liệu không có nguồn, trích dẫn bị ghép sai tác giả. Ảo giác không phải lỗi ngẫu nhiên, mà là hệ quả tự nhiên của việc tối ưu tính trôi chảy. Nó xuất hiện nhiều nhất khi bạn hỏi về nội dung hiếm, mới, hoặc rất cụ thể (số liệu, ngày tháng, đường dẫn).
Cửa sổ ngữ cảnh (context window). Là tổng số token mô hình xử lý được trong một lượt, gồm cả prompt và câu trả lời. Vượt ngưỡng này, nội dung sẽ bị cắt bỏ. Nhiều khảo sát cũng cho thấy thông tin nằm ở giữa một ngữ cảnh rất dài thường bị mô hình "bỏ quên" nhiều hơn thông tin ở đầu và cuối.
Kiến thức đóng băng (knowledge cutoff). Mô hình chỉ biết dữ liệu tính đến một mốc thời gian nhất định, và mặc định không có bộ nhớ giữa các phiên làm việc (session). Mọi thứ nằm ngoài hai giới hạn này phải do bạn đưa vào prompt.
Thêm một điểm cần cảnh giác: mô hình có xu hướng chiều theo tiền đề trong prompt (sycophancy). Nếu bạn viết "hãy chứng minh rằng X đúng", nó sẽ cố chứng minh X đúng kể cả khi X sai.
Ví dụ minh hoạ có lời giải
Ví dụ 1: dự đoán token bằng tay.
Prompt: Hôm nay trời
Phân phối xác suất giả định cho token kế tiếp: đẹp (0,21), nắng (0,18), mưa (0,12), lạnh (0,07), hàng nghìn khả năng khác chia phần còn lại.
Bước 1: mô hình chọn nắng. Chuỗi thành Hôm nay trời nắng.
Bước 2: tính lại phân phối cho token tiếp theo, giờ bị ràng buộc bởi "nắng", nên quá hoặc dịu có xác suất cao hơn hẳn.
Bước 3: lặp đến khi gặp token kết thúc.
Kết luận sư phạm: mỗi token được chọn đều phụ thuộc vào những gì đã có. Vì vậy, đặt ràng buộc ở đầu prompt sẽ ảnh hưởng mạnh hơn đặt ở cuối.
Ví dụ 2: cùng một nhiệm vụ, hai cách đặt vấn đề.
Prompt A: Tóm tắt các nghiên cứu về ảnh hưởng của AI tới năng suất lập trình viên.
Prompt B: Dưới đây là 3 đoạn trích tôi cung cấp. Chỉ tóm tắt dựa trên các đoạn trích này. Nếu đoạn trích không trả lời được, ghi rõ "không có dữ liệu". Liệt kê mỗi ý kèm số hiệu đoạn trích.
Với A, mô hình không có nguồn nên sẽ lấp chỗ trống bằng kiến thức đã học và bằng các trích dẫn nghe hợp lý, rủi ro ảo giác cao. Với B, bạn đã đóng cửa khả năng bịa bằng cách giới hạn nguồn và cho phép câu trả lời "không biết". Đây chính là cách chuyển một giới hạn thành một quy tắc thiết kế.
Thực hành có hướng dẫn
Bốn bài tập sau gắn trực tiếp với capstone: xây dựng quy trình làm việc AI cá nhân cho công việc hoặc học tập hằng ngày của bạn.
Bài 1. Ước lượng ngân sách. Chọn một tác vụ thật trong quy trình của bạn, ví dụ "đọc 5 tài liệu và viết bản tổng hợp 800 từ". Ước lượng số token cho phần đầu vào (tài liệu + hướng dẫn) và phần đầu ra. Xác định tác vụ có vượt cửa sổ ngữ cảnh không.
Bài 2. Bản đồ rủi ro ảo giác. Liệt kê 3 loại thông tin trong tác vụ trên mà bạn sẽ không bao giờ dùng trực tiếp từ mô hình mà không kiểm chứng.
Bài 3. Viết lại prompt để chống bịa. Lấy một prompt mơ hồ bạn từng dùng. Thêm vào ba yếu tố: nguồn được phép dùng, định dạng cho phép nói "không biết", và tiêu chí để bạn tự kiểm tra đầu ra.
Bài 4. Phân loại nhiệm vụ. Với mỗi việc sau, ghi rõ nên giao cho AI hay không, và vì sao: (a) tóm tắt một tài liệu bạn đã có, (b) tra số liệu thống kê mới nhất, (c) viết bản nháp phần mở đầu, (d) xác nhận một trích dẫn pháp lý.
Xem gợi ý đáp án
Bài 1. Quy tắc thô: một trang A4 tiếng Việt khoảng 500 đến 700 từ, tương đương khoảng 700 đến 1.100 token. Năm tài liệu dài 10 trang mỗi tài liệu đã vượt xa cửa sổ ngữ cảnh thông thường, nên phải chia nhỏ theo từng tài liệu rồi tổng hợp hai tầng. Nếu tổng đầu vào cộng đầu ra vượt ngưỡng, hãy giảm số tài liệu mỗi lượt chứ không giảm chất lượng hướng dẫn.
Bài 2. Số liệu định lượng, trích dẫn tài liệu (tên, năm, tác giả), và mọi khẳng định về sự kiện sau mốc kiến thức đóng băng.
Bài 3. Đáp án tốt thường có dạng: "Chỉ dùng nội dung trong phần <nguồn> dưới đây. Nếu không tìm thấy, trả lời 'không có trong nguồn'. Trả về bảng gồm ba cột: ý chính, số hiệu đoạn nguồn, mức độ chắc chắn."
Bài 4. (a) Nên giao, rủi ro thấp vì có nguồn ngay trong prompt. (b) Không nên tin trực tiếp, phải tra nguồn gốc. (c) Nên giao, nhưng đây là bản nháp, bạn vẫn là người chịu trách nhiệm. (d) Không nên, cần tra cơ sở dữ liệu văn bản gốc.
Củng cố nhanh
Mô hình ngôn ngữ lớn sinh văn bản bằng cách lặp đi lặp lại phép {{c1::dự đoán token tiếp theo}}.
Hiện tượng mô hình tạo ra thông tin nghe hợp lý nhưng sai sự thật được gọi là {{c2::ảo giác (hallucination)}}.
Giới hạn về tổng số token mô hình xử lý được trong một lượt gọi là {{c3::cửa sổ ngữ cảnh (context window)}}.
Mốc thời gian cuối cùng của dữ liệu huấn luyện được gọi là {{c4::kiến thức đóng băng (knowledge cutoff)}}.
Cách phòng ảo giác hiệu quả nhất ở mức prompt là giới hạn {{c5::nguồn được phép sử dụng}} và cho phép mô hình trả lời "không biết".
Góc chuyên gia
- Đừng hỏi những gì bạn không thể kiểm chứng. Trước khi đặt câu hỏi, tự hỏi: "Nếu câu trả lời sai, tôi có cách phát hiện không?" Nếu không, hãy đổi cách hỏi.
- Luôn yêu cầu trích nguồn ngay trong prompt. Một trích dẫn cụ thể giúp bạn kiểm tra nhanh, và cũng làm mô hình thận trọng hơn.
- Cho mô hình "quyền được im lặng". Câu "nếu không đủ dữ liệu, hãy nói rõ" giảm ảo giác rõ rệt so với việc bắt buộc phải trả lời.
- Cẩn thận với tiền đề dẫn dắt. "Hãy chứng minh X" khác hoàn toàn "X có đúng không, dựa trên các nguồn sau".
- Xem mỗi câu trả lời là bản nháp cấp một. Giá trị của AI nằm ở tốc độ tạo bản nháp, không nằm ở quyền quyết định cuối cùng.
- Lỗi phổ biến: đổ toàn bộ tài liệu vào một prompt mà không chia tầng, rồi kết luận "mô hình kém" trong khi thực chất thông tin quan trọng đã bị đẩy ra ngoài vùng mô hình chú ý tốt nhất.
Tổng kết và bước tiếp theo
Bạn vừa nắm ba điều: mô hình là cỗ máy dự đoán token, nó không có bộ kiểm chứng sự thật nội tại, và nó bị ràng buộc bởi cửa sổ ngữ cảnh cùng mốc kiến thức đóng băng. Mọi kỹ thuật prompt ở các bài sau đều là cách bù đắp cho ba đặc điểm này.
Bài tiếp theo, Mô hình hoá bài toán: từ mục tiêu tới cấu trúc đầu vào, sẽ biến những hiểu biết này thành thao tác cụ thể: lấy một mục tiêu công việc mơ hồ và chia nó thành cấu trúc đầu vào rõ ràng, có nguồn, có tiêu chí và có điểm kiểm chứng.
[
{ "front": "Mô hình ngôn ngữ lớn thực chất làm gì khi sinh văn bản?", "back": "Lặp đi lặp lại việc tính phân phối xác suất và chọn token tiếp theo." },
{ "front": "Token là gì?", "back": "Đơn vị văn bản nhỏ hơn từ mà mô hình xử lý; không trùng với ranh giới từ." },
{ "front": "Vì sao tiếng Việt tốn nhiều token hơn tiếng Anh cho cùng nội dung?", "back": "Do cách bộ tách token (tokenizer) được huấn luyện chủ yếu trên dữ liệu tiếng Anh." },
{ "front": "Ảo giác (hallucination) là gì?", "back": "Mô hình sinh thông tin trôi chảy, hợp lý về ngôn ngữ nhưng sai hoặc bịa hoàn toàn." },
{ "front": "Vì sao ảo giác là hệ quả tự nhiên của mô hình dự đoán token?", "back": "Mô hình tối ưu tính trôi chảy, không có bộ kiểm chứng sự thật nội tại." },
{ "front": "Cửa sổ ngữ cảnh (context window) là gì?", "back": "Tổng số token tối đa mô hình xử lý trong một lượt, gồm cả prompt và câu trả lời." },
{ "front": "Kiến thức đóng băng (knowledge cutoff) là gì?", "back": "Mốc thời gian cuối của dữ liệu huấn luyện; mô hình không biết sự kiện sau mốc đó." },
{ "front": "Yếu tố 'lost in the middle' nói lên điều gì?", "back": "Thông tin ở giữa ngữ cảnh rất dài thường bị mô hình chú ý kém hơn phần đầu và cuối." },
{ "front": "Sycophancy là gì?", "back": "Xu hướng chiều theo tiền đề trong prompt, kể cả khi tiền đề đó sai." },
{ "front": "Một câu lệnh giảm ảo giác hiệu quả nhất là gì?", "back": "Giới hạn nguồn được phép dùng và cho phép mô hình trả lời 'không biết'." },
{ "front": "Vì sao ràng buộc đặt ở đầu prompt lại mạnh hơn ở cuối?", "back": "Mỗi token được chọn phụ thuộc vào toàn bộ chuỗi phía trước nó." },
{ "front": "Mô hình dự đoán token khác hệ thống suy luận ở điểm cốt lõi nào?", "back": "Nó không có bước kiểm tra tính đúng đắn của mệnh đề." },
{ "front": "Với tác vụ vượt cửa sổ ngữ cảnh, cách xử lý đúng là gì?", "back": "Chia nhỏ theo tầng: xử lý từng phần rồi tổng hợp ở lượt sau." }
]