6.2 組件層面的評估:檢索
用 Hit Rate、MRR 等指標,衡量檢索器有沒有把對的資料找出來。
先評估檢索。理由很簡單:檢索沒找到對的資料,後面不管怎麼調都沒用。 而且檢索的評估比較客觀,因為「正確的那一塊資料」是明確的。
需要什麼
對每一個測試問題,要知道哪一塊(或哪幾塊)資料含有答案。然後讓檢索器去搜尋,看它回傳的前 k 筆裡有沒有那一塊、排在第幾名。
常用指標
Hit Rate@k(命中率)
前 k 筆裡,有沒有包含正確的那一塊。 有就算命中,沒有就算沒中。把所有問題的結果平均,就得到命中率。
- Hit@1:正確答案排第一的比例。
- Hit@3:前三名有正確答案的比例。
- Hit@5:前五名有正確答案的比例。
圖裡的例子:三個問題,Hit@1 = 1/3(只有 A),Hit@3 = 2/3(A 和 B)。
用途:k 通常對應你實際會送給模型的筆數。如果你只送 3 筆,Hit@3 就是模型「拿得到正確資料」的機率上限。
MRR(平均倒數排名)
MRR(Mean Reciprocal Rank)不只看有沒有找到,還看排得多前面。每個問題的得分是「正確答案排名的倒數」:
排第 1 名 → 1/1 = 1
排第 2 名 → 1/2 = 0.5
排第 3 名 → 1/3 ≈ 0.33
沒找到 → 0
MRR = 所有問題得分的平均
圖裡的例子:(1 + 0.33 + 0) ÷ 3 ≈ 0.44。
用途:兩個系統的命中率一樣時,MRR 能看出哪一個把正確答案排得更前面。
Precision@k 與 Recall@k
- Precision@k(精確率):前 k 筆裡,有多少比例是真的相關。越高,代表雜訊越少。
- Recall@k(召回率):所有相關的資料裡,有多少比例被找回來。越高,代表遺漏越少。
這兩個在「一個問題需要多段資料」的時候特別有用。k 越大,Recall 通常越高,Precision 越低,要取捨。
nDCG
進階一點的指標,可以處理「相關程度有高低之分」的情況,並且對排在前面的結果給更高的權重。入門階段先用 Hit Rate 和 MRR 就夠了。
怎麼解讀
| 看到什麼 | 可能代表 |
|---|---|
| Hit@5 高,但 Hit@1 低 | 資料有找到,但排序不夠好。可以考慮重排序(6.6) |
| Hit@5 也低 | 檢索根本沒找到。檢查分塊、嵌入模型、資料有沒有進索引 |
| 某一類問題特別差 | 例如口語問法、縮寫、數字,針對這類加強 |
| Hit@k 高,但 Precision 低 | 找回來很多雜訊,k 太大或需要過濾 |
實際例子
我用 10 塊資料、14 個問題做了一個小實驗(程式在 6.7),結果是:
Hit@1 0.86|Hit@3 0.86|Hit@5 1.00|MRR 0.889
意思是:14 題裡面,12 題的正確答案排第一,剩下兩題要到第 4、第 5 名才找到。這兩題是:
- 「事假最多可以請幾天?」:正確答案是「病假與事假」,但排第一的是「特別休假」,我推測是「請假」和「休假」語意太接近,這是我的猜測,沒有另外驗證。
- 「在家上班要注意什麼?」:正確答案是「遠端工作」,但排第一的是「加班規定」。使用者說「在家上班」,文件寫的是「遠端工作」,用詞差很遠。
這就是評估的價值:它告訴你具體哪裡錯、錯在什麼類型,之後才知道往哪個方向改。
要注意的地方
- 測試集要有代表性。 只測容易的問題,分數會很漂亮但沒有意義。
- 正確答案的標註要正確。 標錯了,指標就沒有意義。
- 一個問題可能有多塊都是相關的。 標註時要想清楚,不要把「也有答案」的塊當成錯誤。
- 檢索指標好,不保證最終答案好。 它只代表檢索這一步沒問題,生成還要另外評估(6.3)。