3.5 Positional index: cụm từ và khoảng cách gần
Inverted index thường không phân biệt được "mật khẩu" với "khẩu ... mật" —
nó chỉ biết cả hai term có mặt. Với tiếng Việt (mỗi âm tiết một token) chuyện này
xảy ra liên tục: đặt cài khớp bằng điểm với cài đặt.
Cách chữa: lưu thêm vị trí của từng lần xuất hiện.
d2 = "khôi phục mật khẩu khi quên mật khẩu" 1 2 3 4 5 6 7 8
mật -> d2: [3, 7]khẩu -> d2: [4, 8]quên -> d2: [6]Khớp cụm từ = giao có điều kiện khoảng cách
Phần tiêu đề “Khớp cụm từ = giao có điều kiện khoảng cách”Truy vấn "mật khẩu" (trong ngoặc kép = cụm từ chính xác): tìm cặp (p, q) với
p ∈ pos(mật), q ∈ pos(khẩu) sao cho q − p = 1.
| p (mật) | q (khẩu) | q − p | khớp? |
|---|---|---|---|
| 3 | 4 | 1 | ✅ |
| 3 | 8 | 5 | ❌ |
| 7 | 8 | 1 | ✅ |
→ d2 chứa cụm "mật khẩu" 2 lần.
Nới điều kiện thành |q − p| ≤ k thì được proximity search (slop trong
Elasticsearch, <-> / <k> trong Postgres tsquery): cho phép chèn từ ở giữa,
điểm giảm dần theo khoảng cách. Đây là món rẻ và hữu ích một cách đáng ngạc nhiên
cho tiếng Việt, vì nó tái tạo phần lớn giá trị của word segmentation mà không cần
bộ tách từ.
Cái giá
Phần tiêu đề “Cái giá”| Không vị trí | Có vị trí | |
|---|---|---|
| Kích thước index | 1× | 2–4× |
| Chi phí truy vấn | giao doc id | giao doc id rồi giao vị trí trong từng doc |
| Term phổ biến | postings dài | postings dài × số lần xuất hiện mỗi doc |
Term như của, là có thể có hàng chục vị trí trong mỗi tài liệu. Truy vấn cụm từ
chứa chúng ("là gì") là loại truy vấn đắt nhất của một index lexical.
Ba lựa chọn thay thế, rẻ hơn
Phần tiêu đề “Ba lựa chọn thay thế, rẻ hơn”| Cách | Làm gì | Khi nào chọn |
|---|---|---|
| Bigram term | index thêm cài_đặt như một term thường | Muốn cụm từ nhưng không muốn index vị trí. Index to hơn ~2× nhưng truy vấn vẫn là giao đơn giản |
| Phrase như tín hiệu tăng điểm | chạy truy vấn thường, cộng điểm nếu cụm xuất hiện | Cụm từ không nên là điều kiện bắt buộc — thường đúng cho search sản phẩm |
| Reranker | để cross-encoder tự thấy thứ tự từ | Đã có reranker rồi thì đừng trả tiền hai lần |
Nên áp dụng vào AI Agent
Phần tiêu đề “Nên áp dụng vào AI Agent”Bật index vị trí có chọn lọc: chỉ ở trường ngắn và có cấu trúc (tiêu đề, tên sản phẩm, mã lỗi) — nơi thứ tự từ mang nghĩa và postings ngắn. Với thân bài dài, dùng bigram hoặc để reranker lo. Đây là quyết định cấu hình, không phải quyết định kiến trúc, nên rất dễ đo A/B.