Bỏ qua để đến nội dung
Search & RAG

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 − pkhớp?
341
385
781

→ 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ừ.

Không vị tríCó vị trí
Kích thước index2–4×
Chi phí truy vấngiao doc idgiao doc id rồi giao vị trí trong từng doc
Term phổ biếnpostings dàipostings dài × số lần xuất hiện mỗi doc

Term như của, 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.

CáchLàm gìKhi nào chọn
Bigram termindex thêm cài_đặt như một term thườngMuố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ểmchạy truy vấn thường, cộng điểm nếu cụm xuất hiệnCụ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

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.

Phần 3 — Nền tảng kỹ thuật