Semantic Search
Tìm kiếm theo ý nghĩa
Bạn gõ 'xin nghỉ phép' trong hệ thống tài liệu nội bộ. Có một file tên 'annual leave policy' — không chứa chữ nào trong câu bạn gõ. Hệ thống tìm kiếm theo TỪ KHOÁ có tìm ra file này không?
Tìm theo từ khoá
Như nhân viên thư viện mới: bạn phải đọc đúng tên sách in trên bìa. Nói "sách về nghỉ phép" là họ đứng yên, vì không có chữ nào khớp bìa.
Tìm theo ý nghĩa
Như thủ thư lâu năm: bạn nói "một quyển về nghỉ phép", cô ấy chạy ngay sang kệ "annual leave policy", "chính sách phép năm", "off work" — dù từ bạn dùng không có trên bìa.
Điểm mấu chốt: "ý nghĩa" của câu sống trong một không gian vector. Hai câu cùng nghĩa → hai điểm gần nhau. Dưới đây bạn sẽ thấy không gian đó.
Hình minh họa
A. Bản đồ độ liên quan (không cần hiểu công thức)
Bản đồ "độ liên quan": 4 câu hỏi × 8 tài liệu
Xanh đậm = rất liên quan. Xám = không liên quan. Đỏ = trái chủ đề. Số trong ô là điểm gần-xa (cosine), không cần nhớ công thức — chỉ đọc màu.
| Câu hỏi \ Tài liệu | #0 | #1 | #2 | #3 | #4 | #5 | #6 | #7 |
|---|---|---|---|---|---|---|---|---|
xin nghỉ phép năm nay | 1.00 | 1.00 | 1.00 | 1.00 | 0.96 | 0.96 | -0.50 | -1.00 |
annual leave policy | 1.00 | 1.00 | 1.00 | 1.00 | 0.95 | 0.95 | -0.54 | -0.99 |
xử lý phàn nàn | 0.95 | 0.97 | 0.95 | 0.97 | 1.00 | 1.00 | -0.25 | -0.98 |
pharma market size Vietnam | -1.00 | -1.00 | -1.00 | -1.00 | -0.95 | -0.95 | 0.53 | 0.99 |
B. Cùng một câu hỏi — từ khoá vs ngữ nghĩa trả về khác nhau
Chọn câu truy vấn:
Nhân viên gõ câu tiếng Việt thông dụng
Không gian ý nghĩa (đã chiếu về 2D — tài liệu gần nhau = ý gần nhau)
Chấm cam = câu hỏi. Chấm số = top-3 kết quả. Ở chế độ ngữ nghĩa, đường nối dày = rất liên quan. Ở chế độ từ khoá, chỉ tài liệu có chữ khớp mới sáng.
Chế độ hiện tại: Ngữ nghĩa
- 1
Annual leave policy: 14 paid days per calendar year
điểm ngữ nghĩa = 1.00
- 2
Hướng dẫn dành cho nhân viên mới về thời gian off work
điểm ngữ nghĩa = 1.00
- 3
Nội quy nghỉ phép: 14 ngày phép có lương mỗi năm
điểm ngữ nghĩa = 1.00
So sánh: chế độ còn lại sẽ trả về
- 1
Nội quy nghỉ phép: 14 ngày phép có lương mỗi năm
3 từ khoá khớp
- 2
Chính sách ngày nghỉ có lương và thủ tục xin phép
3 từ khoá khớp
- 3
Báo cáo doanh thu quý 4 năm 2025 đạt 185 tỷ đồng
1 từ khoá khớp
C. Ghép ý người dùng với loại tài liệu phù hợp
Ghép ý định của nhân viên với nhóm tài liệu công ty mà hệ thống sẽ trả về khi tìm kiếm ngữ nghĩa.
Cột A
Cột B
Ý nghĩa có toạ độ.Mỗi câu trở thành một điểm trong không gian số — hai câu cùng nghĩa ở gần nhau, bất kể ngôn ngữ, chính tả, hay từ ngữ. Tìm kiếm ngữ nghĩa chỉ là việc "đo khoảng cách" từ câu hỏi đến mọi tài liệu, rồi trả về top gần nhất.
Đây là nền móng cho vector database, RAG, và mọi hệ thống chatbot doanh nghiệp hiện đại.
Nhân viên gõ tên model sản phẩm cụ thể 'MBP-M4-512GB' để tra chính sách bảo hành. Tìm kiếm ngữ nghĩa phù hợp không?
Bạn có 5 triệu tài liệu nội bộ. Phòng IT hỏi: 'chấm điểm từng cặp câu hỏi-tài liệu bằng AI chính xác nhất có khả thi?'
Giải thích
Tìm kiếm ngữ nghĩa tìm tài liệu theo ý nghĩa thay vì khớp ký tự. Một mô hình embedding chuyển mọi câu thành vector nhiều chiều; xếp hạng theo độ gần về hướng (cosine) và trả về top-K gần nhất.
Từ khoá vs Ngữ nghĩa — mỗi phương pháp mạnh ở đâu?
Từ khoá (BM25, grep)
- • Khớp mã sản phẩm, số hợp đồng, tên riêng hiếm — CỰC MẠNH
- • Nhanh, rẻ, dễ giải thích kết quả
- • Yếu khi câu hỏi dùng từ khác tài liệu
- • Không hiểu ngôn ngữ chéo (VN ↔ EN)
- • Không hiểu đồng nghĩa, paraphrase
Ngữ nghĩa (vector search)
- • Hiểu đồng nghĩa: "xin phép" ↔ "annual leave"
- • Chéo ngôn ngữ nếu dùng embedding đa ngữ
- • Tha thứ lỗi chính tả, cách diễn đạt tự nhiên
- • Yếu ở mã chính xác, tên hiếm
- • Cần mô hình embedding + hạ tầng vector DB
Pipeline tìm kiếm ngữ nghĩa — 1 tầng vs 2 tầng
Công ty nhỏ bắt đầu từ 1 tầng. Khi chất lượng kết quả quan trọng, thêm tầng 2.
Nhanh, rẻ, đủ dùng cho POC và dưới 1M tài liệu.
Tình huống nào chọn cách tìm kiếm nào?
Ghép mỗi tình huống với cách tìm kiếm phù hợp nhất.
Cột A
Cột B
Bi-encoder mã hoá câu hỏi và tài liệu RIÊNG RẼ, cho ra 2 vector. Tài liệu có thể mã hoá sẵn và lưu vào vector DB → truy vấn cực nhanh. Dùng ở tầng 1.
Cross-encoderghép cả cặp (câu hỏi, tài liệu) đưa vào AI → chấm 1 điểm liên quan. Chính xác hơn đáng kể vì AI "đọc đồng thời" cả hai. Nhưng không precompute được → đắt, chỉ dùng ở tầng 2 (rerank).
- OpenAI text-embedding-3: API dễ dùng, đa ngôn ngữ, chất lượng tốt.
- BGE-M3 (BAAI): mã nguồn mở, hỗ trợ tiếng Việt rất tốt, chạy local được.
- Cohere embed-v3:100+ ngôn ngữ, có "compressed embeddings" tiết kiệm bộ nhớ.
- Multilingual E5: mã nguồn mở, mạnh cho retrieval thuần text.
- Mismatch model: mã hoá tài liệu bằng model A, mã hoá câu hỏi bằng model B → điểm vô nghĩa. Luôn cùng một model.
- Bỏ qua chunking: nhét PDF 50 trang vào 1 vector = trung bình ý, độ chính xác tụt. Chunk 500-1000 chữ + overlap.
- Quên metadata filter:semantic có thể trả về tài liệu "hết hạn", "private". Lọc metadata trước/sau khi tìm.
- Tin cosine tuyệt đối: 0.80 mô hình A ≠ 0.80 mô hình B. Calibrate trên tập đánh giá.
- Không dùng hybrid khi có tên riêng: mã sản phẩm, SKU cần keyword. Semantic không thôi dễ miss.
- Kho nhỏ (< vài nghìn tài liệu) và người dùng hài lòng với tìm từ khoá.
- Yêu cầu độ trễ < 10ms trên CPU cũ, ngân sách cực thấp.
Ứng dụng thực tế cho dân văn phòng
Chatbot hỏi đáp tài liệu công ty
Nhân viên hỏi tự nhiên, bot đọc đúng đoạn trong nội quy / handbook.
Tìm hợp đồng, email cũ
'Hợp đồng với bên A về giao hàng chậm' → ra đúng văn bản dù tên file không khớp.
Tổng hợp báo cáo ngành
Marketer có 50 PDF báo cáo → hỏi xu hướng, tìm đúng đoạn trả lời.
Thương mại điện tử
'Quà cho bạn gái thích cắm trại' → semantic bắt ý, keyword khớp brand.
Tìm kiếm chéo ngôn ngữ
Query tiếng Việt → tài liệu tiếng Anh vẫn trả đúng nhờ embedding đa ngữ.
Phát hiện trùng lặp tin tức
Tìm bài trùng ý (plagiarism, dedup) tốt hơn khớp từ rất nhiều.
Thuật ngữ liên quan
- BM25 — nền tảng tìm theo từ khoá, bổ trợ cho semantic trong hybrid.
- Embedding Model — bộ não của semantic search, quyết định chất lượng vector.
- Vector Databases — nơi lưu và truy vấn vector quy mô lớn (pgvector, Qdrant, Pinecone, Milvus).
- Hybrid Search — công thức ghép từ khoá + ngữ nghĩa + rerank.
- Chunking — cắt tài liệu dài thành đoạn trước khi mã hoá.
- RAG — ứng dụng cờ hiệu: dùng semantic search để đưa tri thức vào prompt.
- Tìm kiếm ngữ nghĩa = tìm theo Ý NGHĨA thay vì chữ: chuyển câu thành vector, đo khoảng cách, trả top-K gần nhất.
- Giải quyết 'vocabulary mismatch': 'xin nghỉ phép' vẫn tìm ra 'annual leave policy' dù không trùng chữ nào.
- Kém ở mã chính xác (SKU, số hợp đồng, tên riêng hiếm) — đây là địa hạt của tìm từ khoá. Hybrid ghép cả hai thường vượt trội.
- Pipeline 2 tầng chuẩn: bi-encoder lấy top-100 nhanh → cross-encoder rerank chính xác → top-5 cuối.
- Luôn dùng cùng mô hình embedding cho tài liệu và câu hỏi. Chunking hợp lý là bắt buộc với tài liệu dài.
- Là bước tra cứu cốt lõi của RAG, chatbot nội bộ, thương mại điện tử và tìm kiếm chéo ngôn ngữ.
Kiểm tra hiểu biết
Bạn gõ 'xin nghỉ phép' trong hệ thống tìm kiếm nội bộ. Tại sao tìm kiếm ngữ nghĩa vẫn trả về 'annual leave policy' dù không chứa từ nào trùng?