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

3.1 Tiền xử lý văn bản: từ chuỗi ký tự thành term

Trước khi có index, phải quyết định term là gì. Đây là quyết định đắt nhất trong cả hệ thống lexical: đổi tokenizer, giữ nguyên thuật toán ranking, lớp A đã nhảy +20.8% (Tầng 0).

Chuỗi xử lý chuẩn, theo đúng thứ tự:

BướcViệcVí dụCần cho tiếng Việt?
1. Chuẩn hoá UnicodeNFC/NFD — ế có thể là 1 code point hoặc e+dấuxóa (NFC) ≠ xóa (NFD) dù trông giốngBắt buộc. Bỏ bước này thì hai chuỗi giống nhau không khớp nhau
2. Hạ chữcase foldingPOSTpost
3. Cắt tokenbiên từAES-256aes-256? aes+256?Có, và đây là chỗ hay chết
4. Bỏ dấudiacritic foldingmật khẩumat khauTuỳ — có công thức hoà vốn, xem 3.10
5. Bỏ stopwordloại từ quá phổ biếnbỏ của, , Không. Với BM25, idf tự lo. Đo thực: bỏ stopword làm lớp B tụt −11%
6. Rút gốc từstemming / lemmatizationrunningrunKhông có nghĩa với tiếng Việt — tiếng Việt không biến hình

Bẫy 1 — tokenizer “làm sạch” ăn mất định danh. Một regex kiểu [^\W\d_]+ (chỉ giữ chữ cái) làm thế này:

'E2003' -> [] ← mã lỗi bốc hơi
'POST /v1/transactions' -> ['post', 'transactions'] ← mất /v1
'uptime 99,9%' -> ['uptime'] ← mất con số
'AES-256' -> ['aes'] ← mất 256

Không exception, không log. Hệ thống chỉ đơn giản không bao giờ tìm ra những tài liệu đó. Đây là lỗi tệ nhất của cả lớp lexical.

Bẫy 2 — âm tiết ≠ từ. Tiếng Việt viết rời từng âm tiết: cài đặtmột từ, hai âm tiết. Cắt theo dấu cách (syllable tokenization) cho bạn cài, đặt — hai term độc lập, nên đặt càicài đặt khớp bằng nhau.

Hai hướng xử lý:

CáchCách làmĐánh đổi
Âm tiết + n-gram từindex cả cài, đặt, và bigram cài_đặtĐơn giản, không cần model, index to hơn ~2×
Word segmentationdùng bộ tách từ (VnCoreNLP, underthesea)Đúng hơn về ngôn ngữ, nhưng thêm một phụ thuộc và một nguồn lỗi khi từ mới xuất hiện

Trong thực tế, âm tiết + bigram thắng về tỉ lệ lợi/chi phí cho phần lớn hệ tìm kiếm sản phẩm: cụm từ vẫn được ghi nhận qua bigram, và không có model nào tách sai.

Tokenizer của index và tokenizer của query phải là cùng một hàm.

Không phải “giống nhau” — là cùng một hàm, gọi từ cùng một chỗ. Mọi lệch nhau giữa hai đường này đều biểu hiện thành “tìm không ra” mà không có lỗi nào được ném.

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