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

3. Nhóm RANK-BASED, relevance CÓ MỨC

DCG@k=i=1kgain(rel(di))log2(i+1)\text{DCG@}k = \sum_{i=1}^{k} \frac{\mathrm{gain}(\mathrm{rel}(d_i))}{\log_2(i+1)} nDCG@k=DCG@kIDCG@k,IDCG@k=DCG@k của thứ tự lyˊ tưởng\text{nDCG@}k = \frac{\text{DCG@}k}{\text{IDCG@}k}, \qquad \text{IDCG@}k = \text{DCG@}k \ \text{của thứ tự lý tưởng}

Ba lựa chọn thiết kế, mỗi cái đều có hệ quả thật:

relTuyến tính: rel\mathrm{rel}Hàm mũ: 2rel12^{\mathrm{rel}}-1
000
111
223
337
4415

Gain hàm mũ là mặc định trong industry (Microsoft/LETOR, mọi learning-to-rank toolkit, và LambdaMART tối ưu trực tiếp nDCG với gain hàm mũ).

Lý do định lượng để chọn hàm mũ cho RAG — so sánh “một doc rel=2 ở vị trí 1” với “hai doc rel=1 ở vị trí 1 và 2”:

GainMột doc rel=2Hai doc rel=1Ai thắng
Hàm mũ3/1=3.0003/1 = 3.0001/1+1/1.585=1.6311/1 + 1/1.585 = 1.631rel=2 thắng 1.84×
Tuyến tính2/1=2.0002/1 = 2.0001/1+1/1.585=1.6311/1 + 1/1.585 = 1.631rel=2 thắng chỉ 1.23×

Với gain tuyến tính, khoảng an toàn co lại và metric bắt đầu dung thứ cho việc thay tài liệu chính bằng nhiều tài liệu phụ. Với RAG đó là hành vi sai: LLM cần một đoạn có câu trả lời, không cần ba đoạn nói vòng quanh. (Ba doc rel=1 ở vị trí 1–3 với gain tuyến tính đạt 2.13 > 2.00 — tức là metric tuyến tính thích ba đoạn mơ hồ hơn một đoạn đúng. Hàm mũ thì 2.13 < 3.00, xếp đúng.)

1/log2(i+1)1/\log_2(i+1) là chuẩn:

Vị trí ii12351020
Discount1.0000.6310.5000.3870.2890.228

Chú ý: discount này khá nhẹ — vị trí 10 vẫn giữ 29% giá trị của vị trí 1. Nếu ứng dụng thực tế chỉ đọc top-3, nDCG@10 sẽ lạc quan hơn thực tế. Đó là lúc dùng RBP với pp nhỏ, hoặc đơn giản là hạ kk.

Có biến thể discount tuyến tính-rồi-log của Järvelin–Kekäläinen gốc (không chia với i<bi < b), nhưng 1/log2(i+1)1/\log_2(i+1) là dạng phổ biến duy nhất hiện nay.

IDCG lấy từ thứ tự lý tưởng của các doc đã gán nhãn, cắt ở kk. Bắt buộc phải chuẩn hoá, vì nếu không thì truy vấn có nhiều doc liên quan tự nhiên có DCG cao hơn, và điểm trung bình toàn golden set trở nên vô nghĩa — bị thống trị bởi vài truy vấn “giàu” tài liệu.

Hai chi tiết dễ sai:

  • Cắt IDCG ở kk, không phải ở RR. Nếu R>kR > k, thứ tự lý tưởng chỉ được đặt kk doc tốt nhất. Nếu cắt ở RR thì nDCG không bao giờ đạt 1.0 dù hệ hoàn hảo.
  • IDCG = 0 khi truy vấn không có doc liên quan nào → phải trả 0 (hoặc loại truy vấn đó khỏi phép tính, tuỳ quy ước; loại ra thì trung thực hơn).

Khi chỉ có một doc liên quan và relevance nhị phân, các metric sụp về nhau:

MetricGiá trị (doc đúng ở vị trí rr, rkr \le k)
Success@k1
Recall@k1
Precision@k1/k1/k
RR1/r1/r
AP1/r1/r
nDCG@k1/log2(r+1)1/\log_2(r+1)

MRR = MAP khi có đúng 1 doc liên quan/truy vấn. Và nDCG trở thành “RR với discount log” — sụt chậm hơn MRR nhiều:

rr123510
RR1.000.500.330.200.10
nDCG1.000.630.500.390.29

Nếu golden set của bạn có nhiều truy vấn chỉ 1 doc đúng, hai metric này đo gần như cùng một thứ với độ “khắt khe” khác nhau — báo cáo cả hai là dư thừa.

Và tại k=Rk = R: Precision@R = Recall@R (chính là R-Precision).

nDCG mang một giả định ngầm: giá trị của doc ở vị trí ii không phụ thuộc vào những doc phía trên nó. Thực tế người dùng dừng lại khi đã thoả mãn. ERR mô hình hoá đúng điều đó:

ERR=i=1k1iRij<i(1Rj),Ri=2rel(di)12relmax\text{ERR} = \sum_{i=1}^{k} \frac{1}{i}\, R_i \prod_{j<i}\left(1 - R_j\right), \qquad R_i = \frac{2^{\mathrm{rel}(d_i)}-1}{2^{\mathrm{rel}_{\max}}}

Đọc bằng lời: RiR_i = xác suất người dùng thoả mãn tại doc ii; j<i(1Rj)\prod_{j<i}(1-R_j) = xác suất họ chưa thoả mãn ở mọi doc trước đó nên vẫn đọc tiếp; 1/i1/i = phần thưởng nếu dừng tại ii.

Hệ quả thực tế quan trọng: ERR phạt sự trùng lặp. Ba doc rel=2 giống nhau ở top-3 → doc thứ 2 và 3 gần như vô giá trị vì (1Rj)\prod(1-R_j) đã tiến về 0. nDCG thì vẫn cộng đủ cả ba.

Với RAG, đây thường gần với thực tế hơn nDCG: bạn không muốn 3 chunk nói cùng một điều chiếm hết context window. Nhưng lưu ý — ERR phạt trùng lặp một cách ngầm (qua mô hình dừng), nó không thực sự phát hiện được nội dung trùng nhau; nếu muốn đo đa dạng thật thì cần metric diversity riêng (α-nDCG, ERR-IA).

Dùng khi: nghi ngờ hệ trả kết quả dư thừa; hoặc mô hình hoá người dùng “chỉ cần một câu trả lời tốt”.

RBP=(1p)i1pi1rel(di)\text{RBP} = (1-p)\sum_{i \ge 1} p^{\,i-1}\, \mathrm{rel}(d_i)

pp = xác suất người dùng xem tiếp doc kế. Discount hình học, dốc hơn log rõ rệt:

Vị trí123510
p=0.5p{=}0.51.000.500.250.060.002
p=0.8p{=}0.81.000.800.640.410.13
p=0.95p{=}0.951.000.950.900.810.63
log2\log_2 (nDCG)1.000.630.500.390.29

pptham số mô hình người dùng có thể diễn giải được — đây là ưu điểm lớn: bạn chọn pp theo hành vi thật đo được từ log production, không chọn theo quy ước.

Ưu điểm thứ hai, quan trọng hơn: RBP xử lý được doc chưa gán nhãn một cách trung thực. Vì tổng là chuỗi vô hạn hội tụ, phần chưa gán nhãn cho ra một residual — RBP báo cáo dạng khoảng [lower,lower+residual][\text{lower}, \text{lower} + \text{residual}] thay vì giả định doc không nhãn là rel=0. Residual lớn = “test collection của bạn chưa đủ nhãn để kết luận”.

Với golden set 24 truy vấn / 50 doc gán nhãn kỹ thì chưa cần. Khi corpus lên hàng chục nghìn doc và không thể gán nhãn hết, đây là metric đúng đắn nhất về phương pháp.

Khi qrels thiếu (corpus lớn), ba lựa chọn chính:

MetricÝ tưởng
bpref (Buckley & Voorhees 2004)Chỉ dùng doc đã gán nhãn. Với mỗi doc liên quan rr, đếm nn = số doc đã gán nhãn là không liên quan xếp trên nó: bpref=1Rr(1min(n,R)R)\text{bpref} = \frac{1}{R}\sum_r \left(1 - \frac{\min(n,R)}{R}\right). Doc chưa gán nhãn bị bỏ qua, không bị coi là rel=0.
infAP (Yilmaz & Aslam 2006)Ước lượng AP từ nhãn lấy mẫu, có tính chất thống kê tốt hơn bpref.
RBP với residualBáo cáo khoảng thay vì điểm đơn (xem §3.3).

3.5 Mọi metric rank-based là một mô hình người dùng

Phần tiêu đề “3.5 Mọi metric rank-based là một mô hình người dùng”

Đây là góc nhìn thống nhất đáng giá nhất (khung C/W/L — Moffat, Bailey, Scholer, Thomas). Mọi metric ở §2–3 viết được dưới dạng tổng có trọng số:

Metric=iwigain(rel(di))\text{Metric} = \sum_{i} w_i \cdot \mathrm{gain}(\mathrm{rel}(d_i))

và profile trọng số {wi}\{w_i\} chính là mô hình người dùng ngầm — nó mã hoá “người dùng dừng ở đâu”:

Metricwiw_iMô hình người dùng
Precision@k1/k1/k cho iki \le k, 0 sau đóXem đúng kk kết quả, quan tâm đều nhau, rồi dừng đột ngột
RR1 tại hit đầu, 0 mọi chỗ khácDừng ngay khi thoả mãn lần đầu
DCG1/log2(i+1)1/\log_2(i+1)Người dùng kiên nhẫn, suy giảm chậm, không bao giờ dừng hẳn
RBP(1p)pi1(1-p)p^{i-1}Không nhớ gì: mỗi bước tiếp tục với xác suất pp (memoryless)
ERR1ij<i(1Rj)\frac{1}{i}\prod_{j<i}(1-R_j)Dừng khi thoả mãn, xác suất thoả mãn tuỳ mức độ liên quan
APphụ thuộc toàn bộ rankingKhông có mô hình người dùng tĩnh — đây là điểm yếu lý thuyết của AP

Hệ quả thực dụng: chọn metric = chọn mô hình người dùng của bạn. Câu hỏi đúng không phải “metric nào tốt nhất” mà là “người dùng sản phẩm của tôi hành xử giống profile nào”. Với chatbot RAG đọc 5–8 chunk và không có UI để scroll, profile gần nhất là Precision@k tại đúng kk của prompt cho chi phí, và nDCG@k cho chất lượng thứ tự.

Phần 2 — Metrics