Tổng kết: Embedding, tìm kiếm & RAG
Từ vector nghĩa tới quyết định kiến trúc — cheat sheet, glossary, pitfall tổng hợp và self-assessment đối chiếu 5 learning outcomes của module.
TL;DR: Module 5 bóc cách máy biến nghĩa thành số, rồi dùng số đó để trả lời câu hỏi. Bạn phân biệt được embedding (vector nghĩa, không phải mã hoá) với phép đo cosine similarity (đo hướng, bỏ qua độ dài); biết khi nào semantic search thua keyword/BM25 và cần hybrid; hiểu vì sao phải chunk tài liệu trước khi embed; trace được 5 bước pipeline RAG (embed → retrieve → context → generate), tách bạch index-time với query-time; chẩn đoán một hệ RAG hỏng theo bốn failure mode có tên chuẩn; và biết chọn giữa prompt-only, RAG, RAG hybrid, fine-tune cho một use case cụ thể. Đây là trang để bookmark.
Đã đi qua những gì
Module mở đầu bằng việc bẻ gãy một ngộ nhận: embedding không phải mã hoá. Nó là hàm ánh xạ văn bản thành vector độ dài cố định, học được từ mục tiêu "kéo gần cặp liên quan, đẩy xa cặp không liên quan" — nên "gần nghĩa" mang định nghĩa của dữ liệu huấn luyện, không phải của bài toán bạn đang giải, và số chiều là nút chi phí chứ không phải nút chất lượng. Cosine similarity là phép đo mặc định cho "gần" đó: đo góc giữa hai vector, chủ động bỏ qua độ dài, nên điểm cao chỉ nói "gần theo hướng model đã học" — không nói "đúng ý người dùng".
Bài 03 lật ngược chiến thắng đó: semantic search mạnh ở diễn đạt tự nhiên nhưng thua trắng trước định danh chính xác (mã lỗi, endpoint, version) — thứ không có khái niệm "gần nghĩa", chỉ có trùng hoặc không. Keyword/BM25 thắng đúng chỗ đó, và hybrid chạy song song cả hai đường rồi hoà điểm, không phải "semantic trước, lọc từ khoá sau".
Bài 04 và 05 dựng phần "ống dẫn": tài liệu phải chunk trước khi embed vì context hữu hạn và vì vector có độ dài cố định — cắt quá nhỏ mất ngữ cảnh, cắt quá to loãng tín hiệu. Chunk chính là đơn vị chảy qua 5 bước RAG: embed query → retrieve top-k bằng cosine → nhét context → generate — tách bạch với index-time (chunk, embed, lưu) chạy trước và không phụ thuộc câu hỏi nào.
Bài 06 và 07 khép module bằng khung chẩn đoán và khung quyết định. RAG giảm hallucination nhưng không triệt tiêu: có đúng đoạn tài liệu không đảm bảo generation dùng đúng nó, và bốn failure mode — noise robustness, negative rejection, information integration, counterfactual robustness — cho bạn tên gọi chuẩn thay vì đoán mò. Mini-challenge tổng hợp tất cả vào ba ticket ngân hàng, buộc bạn tự chọn giữa prompt-only, RAG, RAG hybrid, fine-tune theo ba trục: kho có vượt context không, truy vấn là ngôn ngữ tự nhiên hay định danh, dữ liệu đổi bao lâu một lần.

🗺️ Cheat sheet
| Concept | Khi nào dùng | Pitfall |
|---|---|---|
| Embedding | Biến văn bản thành vector để so sánh theo nghĩa, không theo chuỗi ký tự | Không có model tốt nhất cho mọi task; số chiều là nút chi phí, không phải chất lượng |
| Cosine similarity | Đo "gần nghĩa" giữa hai vector, bỏ qua độ dài | Điểm cao không đồng nghĩa đúng ý người dùng; kiểm distance vs similarity trước khi đọc chiều |
| Semantic search | Truy vấn diễn đạt tự nhiên, nhiều cách nói cùng một ý | Thua trắng truy vấn chứa định danh chính xác (mã lỗi, endpoint, version) |
| Keyword / BM25 | Truy vấn cần khớp đúng chuỗi/token (mã lỗi, version, tên riêng) | Thua khi người dùng diễn đạt khác từ dù cùng ý định |
| Hybrid search | Truy vấn lẫn cả diễn đạt tự nhiên lẫn định danh chính xác | Không phải "semantic trước, lọc sau"; trọng số hoà điểm phải đo trên dữ liệu thật |
| Chunking | Bắt buộc trước khi embed tài liệu dài hơn một ý | Quá nhỏ mất ngữ cảnh, quá to loãng tín hiệu; overlap giảm rủi ro cắt ngang một ý |
| RAG pipeline | Kho vượt context, hoặc đổi thường xuyên, hoặc cần trích nguồn | Không phải tra database bằng khoá; model chỉ thấy đúng phần được nhét vào context |
| Noise robustness | Context lẫn đoạn nhiễu gần nghĩa nhưng không trả lời được | Model bị nhiễu lái sang hướng khác dù đoạn đúng vẫn có mặt |
| Negative rejection | Đáp án không tồn tại ở bất cứ đâu trong kho tài liệu | Model phải biết từ chối; bịa ra một câu tự tin là hỏng |
| Information integration | Đáp án cần gộp thông tin từ hai đoạn trở lên | Model chỉ dùng một đoạn rồi dừng, bỏ sót phần còn lại |
| Counterfactual robustness | Một đoạn trong context chứa thông tin sai hoặc lỗi thời | Model tin theo mù quáng thay vì phát hiện mâu thuẫn với đoạn khác |
| Chọn kiến trúc (prompt-only/RAG/fine-tune) | Ba trục: kho có vượt context, truy vấn loại gì, dữ liệu đổi bao lâu | "Có tài liệu ⇒ phải RAG" là bẫy; fine-tune không nạp được sự kiện đáng tin |
📖 Glossary module
| Thuật ngữ | Định nghĩa 1 câu |
|---|---|
| Embedding | Hàm ánh xạ văn bản thành vector độ dài cố định trong không gian nghĩa đã học |
| Vector | Dãy số thực độ dài cố định đại diện cho nghĩa của một đoạn văn bản |
| Cosine similarity | Phép đo góc giữa hai vector, bỏ qua độ lớn, kết quả từ -1 đến 1 |
| Semantic search | Tìm kiếm theo độ gần nghĩa của vector, không cần chung từ khoá |
| Keyword search / BM25 | Tìm kiếm xếp hạng theo tần suất và độ hiếm của từ khoá, khớp chuỗi chính xác |
| Hybrid search | Chạy song song semantic và keyword search rồi hoà điểm thành một bảng xếp hạng |
| Chunk / chunking | Cắt tài liệu dài thành đoạn nhỏ hơn trước khi embed, mỗi đoạn ra một vector riêng |
| Overlap | Phần cuối một chunk lặp lại ở đầu chunk kế tiếp, giảm rủi ro cắt ngang một ý |
| RAG (Retrieval-Augmented Generation) | Kiến trúc retrieve đoạn liên quan rồi nhét vào context trước khi model generate |
| Retrieve | Bước xếp hạng toàn bộ index theo cosine similarity rồi lấy k đoạn điểm cao nhất |
| Top-k | Số đoạn điểm cao nhất được lấy ra ở bước retrieve để nhét vào context |
| Index-time / query-time | Giai đoạn chunk-embed-lưu chạy trước (index-time) và giai đoạn chạy lại mỗi câu hỏi (query-time) |
| Noise robustness | Khả năng generation bỏ qua đoạn nhiễu gần nghĩa nhưng không trả lời được |
| Negative rejection | Khả năng generation từ chối trả lời khi đáp án không tồn tại trong kho tài liệu |
| Information integration | Khả năng generation gộp thông tin từ nhiều đoạn để trả lời trọn vẹn |
| Counterfactual robustness | Khả năng generation phát hiện một đoạn context chứa thông tin sai hoặc lỗi thời |
| MTEB (Massive Text Embedding Benchmark) | Bộ benchmark đo embedding model trên nhiều loại task, kết luận không model nào thống trị mọi task |
⚠️ Pitfall tổng hợp
❌ Coi embedding là mã hoá, và coi vector là dữ liệu vô hại: không có hàm decode chính chủ dựng lại nguyên văn, nhưng vector cũng không ẩn danh tuyệt đối — OWASP xếp riêng LLM08:2025 vì embedding có thể bị đảo ngược để khôi phục một phần thông tin gốc.
❌ Trộn vector cũ và mới sau khi đổi embedding model: hai model dựng hai không gian nghĩa khác nhau, index lẫn cả hai vẫn chạy được nhưng kết quả vô nghĩa với phần sai không gian — đổi model là index lại toàn bộ.
❌ Đọc điểm cosine như một tỉ lệ phần trăm đúng: 0.91 không phải "91% đúng", và một số vector store trả về khoảng cách thay vì độ giống nhau — lúc đó điểm thấp mới là gần nhau.
❌ Coi hybrid search là "semantic trước, lọc từ khoá sau": lọc sau chỉ hoạt động trên kết quả semantic đã trả về; nếu semantic không đưa đúng đoạn vào top-k ban đầu, lọc phía sau không còn gì để lọc.
❌ Chọn chunk-size theo bản năng "càng nhỏ càng an toàn" hoặc "càng to càng an toàn": quá nhỏ mất ngữ cảnh (câu tách rời không tự giải nghĩa được), quá to loãng tín hiệu (chunk chứa đúng câu trả lời chưa chắc được xếp hạng cao).
❌ Coi RAG là cho model "tra database bằng khoá trùng khớp": retrieve là xếp hạng gần đúng theo cosine similarity, luôn trả về đúng k đoạn kể cả khi chẳng đoạn nào thật sự liên quan.
❌ Thấy bot trả lời sai là sửa prompt hoặc đổi model ngay: luôn cô lập bước hỏng trước — đáp án có trong kho không, có được retrieve vào context không — rồi mới kết luận lỗi nằm ở generation.
❌ Dùng fine-tune để nạp kiến thức sự kiện mới: fine-tune đổi giọng/định dạng/hành vi đầu ra, không nạp được sự kiện đáng tin — kiến thức cần grounding lúc suy luận (RAG), không phải nhồi vào trọng số.
❌ Mặc định "có tài liệu ⇒ phải dùng RAG": khi kho vừa cửa sổ context và tĩnh trong phiên, prompt-only đơn giản hơn và không có điểm hỏng retrieval — thêm RAG lúc đó là thêm hạ tầng để đổi lấy không gì cả.
✅ Self-assessment
Bạn đã đạt module này nếu trả lời được:
- Explain embedding ánh xạ văn bản thành vector trong không gian nghĩa, và vì sao chất lượng phụ thuộc task chứ không phụ thuộc kích thước.
- Nếu chưa: đọc lại bài 01 — Embedding mục 3–4 và bài 02 — Cosine similarity mục 2 và 4.
- Predict các truy vấn mà semantic search thua keyword search và khi nào cần hybrid.
- Nếu chưa: đọc lại bài 03 — Semantic vs keyword mục 2–5.
- Trace pipeline RAG từ query tới câu trả lời qua embed → retrieve → context → generate.
- Nếu chưa: đọc lại bài 04 — Chunking mục 2 và bài 05 — RAG pipeline mục 3.
- Diagnose một hệ RAG hỏng ở retrieval hay generation theo taxonomy bốn failure mode.
- Nếu chưa: đọc lại bài 06 — RAG failure modes mục 2–3.
- Justify lựa chọn prompt-only vs RAG vs fine-tune cho use case cụ thể, kèm rủi ro và chi phí.
- Nếu chưa: làm lại bài 07 — Mini-challenge chọn kiến trúc cả ba ticket.
🚀 What's next
Module này cho bạn kiến trúc — làm sao nạp kiến thức ngoài tham số vào một câu trả lời đáng tin. Module tiếp theo lùi lại một bước: giả sử kiến trúc đã đúng, làm sao đưa một AI feature từ demo lên production một cách an toàn.
Module 6 — Tầng quyết định của engineer (đang biên soạn) sẽ đi vào prompt principles, fine-tune đào sâu hơn khi nào thật sự cần, khái niệm agent ở mức tổng quan, cách dựng eval và golden set, và ràng buộc cost/latency/privacy trước khi ship. Đây là bước từ "hiểu cơ chế" sang "quyết định kỹ thuật có trách nhiệm".
Khám phá thêm: Khoá AI Core cho lập trình viên
📚 Tài liệu mở rộng
- Mikolov et al. — Efficient Estimation of Word Representations (2013), arXiv:1301.3781 — gốc của "nghĩa học từ ngữ cảnh", nền cho mọi embedding model sau này.
- Reimers & Gurevych — Sentence-BERT (EMNLP 2019), arXiv:1908.10084 — vì sao embedding tách được phần đắt (hiểu nghĩa) khỏi phần lặp mỗi truy vấn.
- Muennighoff et al. — MTEB: Massive Text Embedding Benchmark (2022), arXiv:2210.07316 — nguồn kết luận "không model nào thống trị mọi task".
- Lewis et al. — Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (NeurIPS 2020), arXiv:2005.11401 — nguồn gốc tên gọi và kiến trúc RAG.
- Chen, Lin, Han & Sun — Benchmarking Large Language Models in Retrieval-Augmented Generation (RGB), arXiv:2309.01431, AAAI 2024 — nguồn bốn tên gọi failure mode.
- Liu et al. — Lost in the Middle, arXiv:2307.03172 — vị trí đoạn thông tin trong context ảnh hưởng tới noise robustness và information integration.
- OWASP — LLM08:2025 Vector and Embedding Weaknesses — rủi ro bảo mật của vector store.
Ghi chú: mọi số đối chiếu nguồn gốc ngày 2026-07-23; benchmark đổi theo thời gian, kiểm lại khi ra quyết định thật.
Bài tiếp theo: Module 6 — Tầng quyết định của engineer
Bài này đáng gửi cho bạn học cùng?
Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.
Bài này có giúp bạn hiểu bản chất không?
Hỏi đáp về bài này
Chưa có câu hỏi
Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).
Đặt câu hỏi đầu tiên