RAGAS - Automated Evaluation of Retrieval Augmented Generation
What?
RAGAs(Retrieval Augmented Generation Assessment) 是一個專門用來評估 RAG 系統效能的框架。RAG 系統結合了檢索與生成技術,透過檢索相關資料來增強生成式 AI 的回答品質,而 RAGAs 則提供了一套可量化的標準,用以衡量這類系統在多個面向上的表現。
簡單來說,當我們有一個問題時,RAG 系統會利用檢索技術找到相關資料,接著讓大型語言模型(LLM)根據這些資料產生回答。RAGAs 透過精心設計的評估指標(如忠誠度、答案相關性等),幫助我們更清楚了解這些生成的回覆是否可靠以及是否符合需求。
Who?
誰會使用?
誰會受影響?
- 終端使用者:RAG 系統是否被妥善調校直接影響使用者體驗,例如 Chatbot 是否能提供正確且相關的答案。
- 企業決策層:依賴 AI 技術改善效率或降低成本時,需要信賴該技術的表現。
When?
什麼情況下會用到?
- 設計初期:在規劃或測試新的 RAG 架構時,需要快速了解不同元件(如 Vector DB 或 LLM)的效能表現。
- 優化迭代中:當你嘗試調整模型參數、替換 LLM 或改變檢索策略後,需要重新評估系統效果。
- 產品部署後:長期監控 RAG 系統性能,確保回答品質維持在一定標準。
Where?
出現在架構哪個部分?
RAGAs 的評估框架主要針對兩大模組進行分析:
- 檢索階段(Vector Retrieval Phase)
- 包括 Embedding Model 和 Vector DB 部分,用於衡量上下文資料與問題之間的匹配程度。
- 生成階段(Generation Phase)
- 聚焦於 LLM 的回覆內容,確保其基於先前檢索出的資料生成可信且相關的答案。
整體而言,RAGAs 是一種「外部監控工具」,不直接參與系統內部運作,但負責從輸入到輸出的所有關鍵點進行評估。
Why?
解決什麼問題?
-
減少人工成本
傳統上,我們可能需要大量人工逐條比對生成結果是否正確。而 RAGAs 利用 LLM 自動完成這些繁瑣工作,大幅降低時間與人力成本。 -
提升評估精度
BLEU、ROUGE 等傳統指標難以捕捉自然語言生成中的細微差異,而 RAGAs 提供了更針對性、多面向的指標,如忠誠度與上下文相關性,更貼近實際應用需求。 -
應對幻覺問題(LLM Hallucinations) 大型語言模型容易產生幻覺——即無中生有的不實內容。RAGAs 有專門針對「忠誠度」設計的測量方式,可以幫助發現並改善此類缺陷。
-
跨系統比較能力 當你想要比較不同 RAG 架構或模型性能時,RAGAs 提供了一套標準化流程,可以更公平地進行性能比較。
How?
🛠️ 建立階段
-
安裝必要工具:
pip install ragas -
準備資料集:
- 資料集中包含:
- 問題(Query)
- 檢索到的上下文資料(Retrieved Contexts)
- LLM 產生的回答(Answer)
範例載入程式碼:
from datasets import load_datasetfiqa_eval = load_dataset("explodinggradients/fiqa", "ragas_eval") - 資料集中包含:
-
設定 OpenAI API 金鑰:
import osos.environ["OPENAI_API_KEY"] = "your-openai-key" -
定義所需評估指標:
from ragas.metrics import (answer_relevancy,faithfulness,context_recall,context_precision,)metrics = [context_precision,faithfulness,answer_relevancy,context_recall,] -
執行分析並取得結果:
from ragas import evaluateresult = evaluate(fiqa_eval["baseline"].select(range(3)), # 範例選取前3筆樣本測試metrics=metrics,)df = result.to_pandas()print(df.head())
🔍 查詢階段
當我們獲得結果後,可以依據以下步驟做具體分析:
-
忠誠度計算公式: $$ \text{Faithfulness score} = \frac{\text{Number of claims in the generated answer that can be inferred from given context}}{\text{Total number of claims in the generated answer}} $$
-
答案相關性,以問題相似度為基礎進行計算: $$ AR = \frac{1}{n} \sum_{i=1}^{n} sim(q, q_i) $$
-
檢查上下文相關性和精確率/召回率: 上下文相關性公式: $$ CR = \frac{\text{number of extracted sentences}}{\text{total number of sentences in } c(q)} $$
上下文精確率公式: $$ \text{Context Precision@k} = \frac{\sum \text{precision@k}}{\text{total number of relevant items in the top K results}} $$
上下文召回率公式: $$ \text{Context Recall} = \frac{|GT sentences that can be attributed to context|}{|\text{Number of sentences in GT}|} $$
補充說明
📌 範例比較
以下是一個範例比較,用於展示同一問題在不同系統上的表現差異:
| 問題 | 回答 | 忠誠分數 | 答案相關性分數 |
|---|---|---|---|
| Q: A + B=? | A=1, B=2, A+B=?=> 答案是3 | 1.0 | 0.95 |
| Q: A + C=? | A=1, B=2 => 無法推導 C 值 | 0 | 0 |
🧠 延伸/常見誤解
常見誤解一:
「所有大型語言模型都可以直接拿來做 RAG 評估。」
錯!用於生成回答和用於評估模型是兩回事。大多數情況下,我們選擇 GPT-4 或 gpt-3-turbo 作為評估 LLM,而非任意 LLM 都適合此任務。
常見誤解二:
傳統方法無法捕捉高層次語義一致性。例如 BLEU 更適合機器翻譯,但不適合複雜問答情境中的忠誠度測試。