---
# System prepended metadata

title: RAG evaluation framework
tags: [RAG技術整理]

---

# RAG evaluation framework

> 這篇介紹更多RAG evalutaion framework
> https://arxiv.org/abs/2405.07437

![螢幕擷取畫面 2024-07-02 104834](https://hackmd.io/_uploads/HyPcRk-PR.png)

## 表格列項：
### Category（類別）：

    1. Tool（工具）：具體的工具，用於某種特定的RAG系統評估。
    2. Benchmark（基準）：一組標準或基準，用於比較和評估不同的RAG系統。
    3. Research（研究）：學術或實驗性質的研究項目，探索新的評估方法或系統。
    4. Framework（框架）：框架或工具的名稱和參考文獻編號。

### Raw Targets（原始目標）：評估過程中的核心指標和目標，包括：

Context Relevance（上下文相關性）
Answer Relevance（答案相關性）
Groundedness（基於實證）
Accuracy（準確性）
Faithfulness（忠實性）
Execution Time（執行時間）
Correctness（正確性）
Readability（可讀性）
Comprehensiveness（全面性）
Response Quality（回應質量）
Robustness（穩健性）
Information Integration（信息整合）
Noise Robustness（噪音穩健性）
Negative Rejection（負面拒絕）
Counterfactual Robustness（反事實穩健性）
Response Correctness（回應正確性）
Consistency（一致性）
Clarity（清晰度）
Coverage（覆蓋率）
Latency（延遲）
Diversity（多樣性）
Retrieval（檢索）：在評估過程中使用的檢索方法或指標，包括MAP, MRR, Hit@K等。
Generation（生成）：在評估過程中使用的生成方法或指標，包括BLEU, ROUGE-L等

### 懶人圖
![image](https://hackmd.io/_uploads/rJ-EZ7WP0.png)


## Context(Answer) Relevance
### Context(Answer) Precision
> 官方文件定義：Context Precision is a metric that evaluates whether all of the ground-truth relevant items present in the contexts are ranked higher or not. Ideally all the relevant chunks must appear at the top ranks. It’s values ranges from 0 to 1.

上下文精度（Context Precision）是一個用來評估排序系統的度量指標。它特別關注在上下文中，所有真實的相關項目是否被排序在較高的位置。具體而言，這個指標的計算方式如下：

1. 真實相關項目：這些是預先標記為相關的項目，即我們知道它們是與查詢相關的。

2. 排序系統：這是一個會將所有項目根據相關性進行排序的系統，理想情況下，最相關的項目會排在最前面。

3. 計算上下文精度：
    > 真實相關項目 (ground-truth relevant items)
     - 將所有真實相關項目找出來。
     - 查看這些真實相關項目在排序系統中的排名。
     - 計算這些真實相關項目出現在排名前列的比例。
     

上下文精度的數值範圍從0到1，其中：

 - 0表示所有真實相關項目都排在非常靠後的位置，即排序非常不理想。
 - 1表示所有真實相關項目都排在最前面的位置，即排序非常理想。

具體來說，假設我們有一組查詢結果，其中有5個項目被標記為真實相關。

如果這5個項目都出現在排序的前5個位置，那麼上下文精度接近於1。如果這5個項目分散在排序的中間或後面位置，那麼上下文精度會降低。

這個指標在信息檢索系統和推薦系統中非常重要，因為它直接反映了系統的性能，即用戶是否能快速找到他們需要的相關信息。

:::success 
**這個指標基本上告訴你所提供的上下文在 得出給定答案方面 有多大用處**
:::

![image](https://hackmd.io/_uploads/Hy_IslbvA.png)

### Context(Answer) Recall
> 官方文件定義：Context recall measures the extent to which the retrieved context aligns with the annotated answer, treated as the ground truth. It is computed based on the and the , and the values range between 0 and 1, with higher values indicating better performance.`ground truthretrieved context`

Context Recall 是用來衡量 RAG 在 Retrieval 的過程中，找到的`Retrieved Context`與`Ground Truth`之間的匹配程度。這個指標的計算基於以下兩個要素：

具體來說，這個指標的數值範圍在 0 到 1 之間，數值越接近1，表示系統檢索的結果越好，因為檢索到的上下文與標準答案的匹配程度越高。

例如，假設有一個標準答案包含100個詞，而檢索到的上下文有50個詞與這個標準答案匹配，那麼上下文召回率就是 50 / 100 = 0.5。

![image](https://hackmd.io/_uploads/ByvUiZ-PC.png)


## Faithfulness
> 官方文件定義：Measures the factual accuracy of the generated answer. The number of correct statements from the given contexts is divided by the total number of statements in the generated answer. This metric uses the question, contexts and the answer.

![image](https://hackmd.io/_uploads/B1DXmfWvA.png)





## Response Quailty

## Robustness
### Noise Robustness


### Counterfactural Robustness




## RAGAS
> 論文連結:
### Expect to evaluate the pipeline
`Question`: User Query
`Answer`: The generated answer from the pipeline
`Contexts`: 從向量資料庫中檢索到的用於回答問題的上下文
`Ground_Truths`: 這個問題的基本事實答案。（這僅是人工註釋資訊）我們將需要此資訊作為指標context_recall。

### 提供的主要功能
1. 提供用來做 ground truth labels 的 metric and paradigms (eg: context_recall and answer_correctness)
2. 提供自動生成test dataset
3. 提供完整 evaluate RAG pipeline 的 metrics
    - Retriever Component(Context Precision, Context Recall)
    - Generator Component(faithfulness, Answer relevancy)

### 實際做法
>所有評估都可以通過提示 LLM 以完全自動化的方式衡量。
#### Faithfulness
> 指答案應該基於給定的上下文。
##### 方法: 
* 答案 as(q)如果能從上下文 c(q) 中推斷出答案中的聲明，那麼它就是忠實於上下文的。
* 首先使用 LLM 提取一組聲明 S(as(q))。這一步的目的是將較長的句子分解成較短且更集中的斷言。
* 對於 S中的每個聲明 si，LLM 使用驗證函數 v(si,c(q)) 確定 si 是否能從 c(q) 中推斷出來。
* ![image](https://hackmd.io/_uploads/HJMIpm-vC.png)

#### Answer Relevance
> 指生成的答案應該針對實際提供的問題。
##### 方法: 
* 如果答案 as(q)能夠直接且恰當地回答問題，那麼它就是相關的。
* 對於給定的答案 as(q)，我們提示 LLM 基於 as(q) 生成 n 個問題 qi
* 使用 OpenAI API 提供的 text-embedding-ada-002 模型獲取所有問題的嵌入。對於每個 qi，我們計算其與原問題 q的余弦相似度。
![image](https://hackmd.io/_uploads/HyCqnQWPA.png)

#### Contextxt Relevance
> 指檢索到的上下文應該集中，儘量包含少量無關的信息。
##### 方法:
* 上下文 c(q) 被認為是相關的，前提是它只包含回答問題所需的信息。這個指在對包含冗餘信息的情況進行扣分。
* 給定問題 q及其上下文 c(q)，LLM 從 c(q)中提取一組對回答 q 至關重要的句子
![image](https://hackmd.io/_uploads/Sy8anXbDA.png)

## RECALL
> **R**obustness against **E**xternal **C**ounterfacti**AL** know**L**edge
> 論文連結:[RECALL: A Benchmark for LLMs Robustness against External Counterfactual Knowledge](https://arxiv.org/pdf/2311.08147)
### 簡介
1. 假設存在一個外部資料檢索系統，可以根據query回傳相關的段落，這些外部檢索的資料可能包含*反事實訊息(Counterfactual Information)*，本論文主要在探討如何訓練模型正確回答問題而不被反事實訊息誤導，並建立相關衡量基準--Recall。
2. 使用者的查詢(Query)主要可以分成**QA**和**文字生成**兩種，而QA又可細分為生成答案的QA-A和固定答案、生成問題內容的QA-NA兩種。
3. 測試資料集:
    a. EventKG: 一個關於歷史事實、時間關係的結構化資料集。
    b. UJ: 蒐集自然科學領域的相關術語和description的資料集。
### 實際做法
1. 
2. 於上述兩個原始資料集中添加反事實訊息，添加步驟如下:
    `Paraphrase`: 改述資料集中的內容
    `Question-Answer Pair Generation`: QA資料對生成，基於資料庫中的事件生成問題
    `Edit Non-answer Texts`： 基於改述完的資料，新增不相關的段落或內容作為反事實資料
    `Edit Answer Texts`: 更改QA資料對的答案(把答案改成錯的)
    ![recall_edit_progress](https://hackmd.io/_uploads/H1Tr3m-DA.png)
2. 給模型參考三種資料
    a. 原始的正確資料
    b. 反事實處理過的資料
    c. 沒有資料
3. 評估標準: 
    a. QA task: Accuracy、Misleading Rate (M-Rate)
    ![recall_Mrate](https://hackmd.io/_uploads/rknOTm-wC.png)
    b. Text Generaton task: 以BLEU和ROUGE-L兩個指標評估生成品質

5. 
6. 


## ARES
> 論文連結:[ARES: An Automated Evaluation Framework for Retrieval-Augmented
Generation Systems](https://arxiv.org/pdf/2311.09476)
### 實際做法
![image](https://hackmd.io/_uploads/SynUaJZwR.png)
1. 利用LLM 從語料庫建構question-answer(synthetic datase) 對。
2. 利用synthetic datase訓練了三個不同的 LLM judge，對RAG三種能力進行評估，
* Context Relevance：查詢傳回段落是否與提問內容相關？
* Answer Faithfulness：產生答案是否忠於查詢返回段落？或是包含幻覺或推斷超出返回段落以外的內容？
* Answer Relevance：產生答案是否與查詢和回傳段落相關？
3. 利用LLM judge評估RAG。對不同的RAG system 進行排名，PPI為RAG 評分提供統計信賴區間。
    * PPI(Prediction-powered Inference)：以資料集，對LLM judges評分。
## RGB
> 論文連結:
### 實際做法
![image](https://hackmd.io/_uploads/SkekRz-wC.png)

**step1 : 新聞收集（News Collection）**

**step2 : 由ChatGPT生成數據（Data generation by ChatGPT）：**

針對收集到的文章，請chatgpt產生相對應的問題以及答案
生成的數據包括相關事件、問題和關鍵信息。例如，從新聞中提取的數據可能包括獲獎者、獎項信息等。

**step3 : 由人工進行數據調整和篩選（Data adjustment and filtering by Human）：**

**step4 : 使用搜索引擎檢索（Retrieve using search engine）：**
**step5 : 由密集檢索模型重新排序（Rerank by dense retrieval model）：**
- 使用 google api 查找相關網頁
- 閱讀網頁，將相關片段切分出來
- 利用開源的密度檢索器 找出30個與query最相關的文本片段
- 再根據是否含有正確答案，文本分成正面文本跟負面文本

## Counterfactual Robustness 實驗問題產生步驟
step1 : 請 LLM 根據已知事實產生問題以及對應回答
step2 : 檢索相關文件
step3 : 手動更改文件，將文件中正確答案改成錯誤答案

## CRUD-RAG


> 論文連結:[CRUD-RAG: A Comprehensive Chinese Benchmark for
Retrieval-Augmented Generation of Large Language Models](https://arxiv.org/pdf/2401.17043)
>
### 實際做法
![image](https://hackmd.io/_uploads/rJ1F1Hfw0.png)

![image](https://hackmd.io/_uploads/B1QqY4GDR.png)





1. 數據收集: 從中國主要新聞網站抓取最新的新聞數據，這些數據在LLMs訓練期間未暴露。然後使用GPT-4基於這些新聞數據自動創建數據集。
    
2. 數據集構建:
    * 文本延續: 將新聞文本分為開始段落和延續段落，使用延續段落中的每個句子作為關鍵詞來搜索相關報導，去重後添加到檢索數據庫。
    * 單文檔QA: 使用RGB構建方法。
    * 多文檔QA: 使用Chain-of-Thought文字提示技術幫助模型識別文檔之間的共同點和差異點，並基於這些點生成難度逐漸增加的問題。
    * 幻覺修改: 使用UHGEval數據集中的註釋並使用GPT-4進行幻覺修正，將真實新聞添加到檢索數據庫。
3. 評估方法:

    CRUD-RAG由四個評估任務組成：
    * 創造性生成（Create）:為了連貫性。
    * 知識密集應用（Read）。
    * 幻覺修正（Update）。
    * 總結摘要（Delete）。



## TruLens
> [官網連結](https://www.trulens.org/trulens_eval/getting_started/core_concepts/rag_triad/)
> [簡報連結](https://mega.nz/file/eBQw2aYa#qPmNJPpq6ukObY34-pTmoDPQIB91dD0U2Ybtx342yTU)
![image](https://hackmd.io/_uploads/SyLw6DbD0.png)


> Query表示使用者問的問題
> Context表示檢索到的上下文，大致對應到RAG的Retrieval
> Response表示LLM根據Context的最後回答，大致對應到RAG的Generation。

從這三角型中，可以直觀的看出 3 個應該評估的指標:
1. Context Relevancy：用於 `Context` 與`Query`的相關性，範圍從 0 到 1，數值越高表示相關性越好。該指標計算的是`上下文中與回答問題相關的句子數量`佔總句子數量的比例。
2. Groundedness: 有些框架稱其為 `Faithfulness`，用於評估`Response`與`Context`的一致性，範圍為 0 到 1，數值越高表示一致性越高，主要用於檢測 LLM 幻覺。該指標通過識別Response中的聲明，並檢查這些聲明是否可以從Context中推斷出來，來計算 Groundedness 分數。
3. Answer Relevancy: 評估`Response`對`Query`的相關性。這個指標計算從生成答案反推得出的`多個問題與原始問題之間的 mean cosine similarity`。高分表示Response直接且適當地回應了原始問題，而低分則表示答案不完整或包含冗餘資訊。

:::success
**幾乎所有評估 RAG 的框架都會包含以上 3 種指標，但這 3 種指標僅考量到 Evaluable Outputs 之間的關係，並未考量到與 Ground Truths 之間的關係，也就是評估裡面並沒有 Ground Truths 來提供一個基準，然而這在 RAG 評估中，也是很重要的一環。**
:::


### 實際做法
> 這是一個驗證RAG performance的tool，不是RAG framework，所以沒辦法套用到上次開會所提到的架構圖

![image](https://hackmd.io/_uploads/rJ3EKKmP0.png)
![image](https://hackmd.io/_uploads/SJlvtFQDC.png)



## 總結

## 參考資料 
 - [使用RAGA評估RAG](https://medium.com/@rupeshyadav153/evaluation-of-retrieval-augmented-generation-rag-using-ragas-on-human-annotated-and-synthetic-09c4b825c298)
 - [Evaluation of Retrieval-Augmented Generation:A Survey](https://arxiv.org/abs/2405.07437)