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

3.4 TF-IDF và vector space model — tính bằng tay

BM25 không xuất hiện từ chân không. Nó là bản sửa lỗi của TF-IDF, nên hiểu TF-IDF trước thì BM25 không còn là công thức phải nhớ.

Ba trực giác, ghép lại thành một công thức:

Ký hiệuÝCách tính
tf(t,d)term xuất hiện nhiều lần trong tài liệu → tài liệu nói về nóđếm
idf(t)term xuất hiện ở ít tài liệu → phân biệt tốt hơnln(N/df)
chuẩn hoá độ dàitài liệu dài không được thắng chỉ vì dàichia cho độ dài vector
w(t,d)=tf(t,d)idf(t),idf(t)=lnNdf(t)w(t,d) = \mathrm{tf}(t,d) \cdot \mathrm{idf}(t), \qquad \mathrm{idf}(t) = \ln\frac{N}{\mathrm{df}(t)}

N = 3. Vẫn ba tài liệu ở 1.6:

idnội dung
d1đổi mật khẩu trong phần cài đặt
d2khôi phục mật khẩu khi quên mật khẩu
d3bật xác thực hai lớp

Truy vấn: quên mật khẩu.

Bước 1 — idf.

termdfidf = ln(3/df)
quên1ln 3 = 1,099
mật2ln 1,5 = 0,406
khẩu2ln 1,5 = 0,406

Bước 2 — trọng số tf · idf.

termqd1d2
quên1 × 1,099 = 1,09901 × 1,099 = 1,099
mật0,4061 × 0,406 = 0,4062 × 0,406 = 0,811
khẩu0,4060,4060,811

Bước 3 — tích vô hướng (chỉ term chung có đóng góp):

q · d1 = 0,406·0,406 + 0,406·0,406 = 0,329
q · d2 = 1,099·1,099 + 0,406·0,811 + 0,406·0,811 = 1,865

Bước 4 — độ dài vector. Tính trên mọi term của tài liệu, không chỉ term truy vấn:

‖q‖ = √(1,099² + 0,406² + 0,406²) = 1,239
‖d1‖ = √(5 × 1,099² + 2 × 0,406²) ← 5 term chỉ có ở d1 = 2,523
‖d2‖ = √(4 × 1,099² + 2 × 0,811²) ← 4 term chỉ có ở d2 = 2,479

Bước 5 — cosine.

tích vô hướng‖d‖cosine
d10,3292,5230,329 / (1,239 × 2,523) = 0,105
d21,8652,4791,865 / (1,239 × 2,479) = 0,607
d300

Ranking: d2 ≫ d1 ≫ d3 — đúng trực giác, d2 là tài liệu về việc quên mật khẩu.

  1. Chuẩn hoá là bắt buộc. Bỏ bước 4, chỉ dùng tích vô hướng, thì mọi tài liệu dài đều leo lên đầu chỉ vì chứa nhiều term hơn.
  2. quên gánh gần hết điểm — 1,207 trong 1,865 của d2. Term hiếm mang thông tin, term phổ biến gần như miễn phí. Đây là idf làm việc, và là lý do không cần bỏ stopword khi đã có idf.
  3. d3 không bao giờ được chạm tới — nó không nằm trong postings của cả ba term. Lợi thế cấu trúc của inverted index.
Khiếm khuyết của TF-IDFBM25 sửa thế nào
tf tuyến tính: nhắc 20 lần = 20× liên quanbão hoà tf·(k1+1)/(tf + k1·…) — có tiệm cận
Chuẩn hoá độ dài cứng (cosine), không xoay đượctham số b: 0 = mặc độ dài, 1 = chuẩn hoá tối đa
ln(N/df) xử lý kém khi df gần Nln(1 + (N−df+0,5)/(df+0,5)) mượt ở hai đầu

Đo thực tế trên golden set của cẩm nang: đổi TF-IDF → BM25 được +1,2%, còn sửa tokenizer được +20,8%. Thứ tự ưu tiên nằm ở đó — không nằm ở công thức ranking.

Ba dòng trong bảng trên là mô tả chỗ BM25 khác TF-IDF. Còn vì sao nó khác đúng ở ba chỗ đó — bão hoà từ đâu ra, 0.5 trong idf là gì, khi nào idf âm — thì ở 3.4b.

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