前面兩天談了生成階段的常見問題,但要知道系統「到底做得好不好」,光靠人工肉眼檢查是不夠的,需要一套量化的評估方式。今天要介紹 RAG 系統常用的幾個評估指標。
一般的機器學習任務(如分類)有明確的標準答案可以比對準確率,但 RAG 系統輸出的是一段自然語言,很難用簡單的字串比對來判斷「回答得好不好」。因此 RAG 評估通常需要拆成多個面向分別評分,而且經常需要藉助 LLM 本身作為評分工具(即 “LLM as a judge”)。
RAG 系統可以拆成「檢索」與「生成」兩個環節,各自有對應的評估指標:
檢索回來的內容中,有多少比例是「真的跟問題相關」的?
Context Precision = 相關的 chunk 數 / 檢索回來的總 chunk 數
如果檢索回來 5 筆結果,只有 2 筆真正相關,Context Precision 就是 40%,代表檢索結果中混入太多雜訊。
回答問題所需要的資訊,有多少比例真的被檢索到了?
Context Recall = 被檢索到的必要資訊 / 回答問題所需的全部必要資訊
這個指標需要先有一份「標準答案應該包含哪些資訊」的參考,才能計算。Context Recall 低,代表檢索階段漏掉了重要資訊,即使生成階段的 Prompt 設計得再好,也無法生成完整正確的答案。
生成的答案中,有多少內容是「真的有憑有據」(能在檢索到的資料中找到依據),而不是模型自己編造的?
Faithfulness = 答案中有依據的陳述數 / 答案中的陳述總數
這個指標直接對應到 Day 22 提到的「幻覺」問題——Faithfulness 越低,代表模型編造內容的比例越高。
生成的答案,是否真的切題回答了使用者的問題(而不是答非所問)?
這個指標通常透過反向操作評估:讓 LLM 根據「生成的答案」反推「這個答案最可能對應的問題是什麼」,再比較反推出來的問題跟原始問題的相似度,相似度越高代表答案越切題。
檢索階段 生成階段
┌─────────────────────┐ ┌─────────────────────┐
問題 → │ Context Precision │ → │ Faithfulness │ → 答案
│ Context Recall │ │ Answer Relevancy │
└─────────────────────┘ └─────────────────────┘
透過拆分成四個指標,可以更精準地定位問題出在哪個環節:
要計算這些指標,需要準備一份測試集,通常包含:
{
"question": "pgvector 支援哪些索引類型?",
"ground_truth": "pgvector 支援 IVFFlat 與 HNSW 兩種索引類型",
"expected_context": "文件中關於索引類型的段落"
}
測試集的問題最好涵蓋不同類型:簡單事實查詢、需要綜合多段落的問題、知識庫中查無答案的問題(用來測試系統是否會誠實承認不知道)等,這樣才能全面評估系統的穩健程度。
透過拆分成 Context Precision、Context Recall、Faithfulness、Answer Relevancy 四個指標,可以更有系統地評估與診斷 RAG 系統的問題所在,而不是只憑「感覺回答得好不好」做判斷。明天我們要介紹如何用現成的工具(如 RAGAS)把這些指標自動化計算出來。