深入解析:如何高效評估RAG系統(一)
本文深入探討了RAG系統的優勢、挑戰以及如何通過RAGAS框架對其進行有效評估,旨在為讀者提供一套系統的理解和應用RAG技術的指南。
一、為什么要選擇RAG
眾所周知,大語言模型(LLM)存在”幻覺”問題,經常一本正經的胡說八道,除此之外還有在知識無法及時更新、可解釋性差等問題;RAG(檢索增強生成)和Fine-Tune(微調)是目前主流的兩種解決方法,他們之間的對比如下:
在實際應用中,判斷是采取RAG還是Fine-Tune方案可以通過以下幾個維度判斷:
筆者所處的行業是醫療療行業,是典型的”嚴肅”應用場景,要盡量避免”幻覺”問題,又因為屬于偏垂直的應用,可用于微調的數據有限,所以RAG就成為了首選的方式。
RAG的介紹和快速搭建可以參考之前的文章基于開源框架快速搭建基于RAG架構的醫療AI問答系統,可選框架有很多,如果完全是無編程經驗的建立用coze.cn(具備科學上網條件的用.com)更容易上手一些,基本搭建流程都差不多。
二、如何評估RAG系統
“Demo只需一天,好用至少半年”,RAG是典型的入手簡單做好難。自從跟隨大模型爆火之后,各種RAG框架層出不窮,他們內置的大模型底座、檢索策略等各不相同,我們無論是選擇自己手動搭建還是采用第三方RAG框架,都需要了解如何去評價它。
首先我們再回顧一下RAG的基本工作流程和關鍵節點:
RAG包括三個核心內容,用戶的輸入(Query)、檢索到的知識(Context)和模型最終給出的回答(Answer),他們之間兩兩對比可以得到三個基礎指標,分別是:
- Context Relevance衡量召回的內容和問題之間相關程度。如果相關度很低甚至召回了毫不相關的內容會給LLM提供錯誤的Pormpt,這個也是目前RAG系統最大的挑戰之一。
- Groundedness(Faithfulness) 該指標衡量了生成的答案在給定的上下文中的事實一致性。它是根據答案和檢索到的上下文計算出來的,如果該得分低,反應出了 LLM 的回答不遵從召回的知識,那么回答出現幻覺的可能就越大。
- Answer Relevance 該指標衡量回答內容和提問內容之間的相關性,如果出現”答非所問”或者回答內容不完整,該指標會給出一個比較低的分數。
- Answer Correctness對于一些有標準答案(Ground Truth)的場景,還可以評估回答的內容和標準答案的一致性
- Instruction Follwing另外在挑選底座大模型的時候還可以評估不同底座模型的指令跟隨能力(尤其是針對小參數模型),簡單來講就是”聽話”的能力
跟所有基于AI的應用一樣,RAG應用可以通過人工端到端的評估方式進行評估,比如對于醫療問答系統,可以讓專業的醫生直接給輸出的內容打分,這種方式是最可靠的的但是很難覆蓋所有場景且費時費力;除此之外就是通過自動化量化評估的方式給出評估結果,接下來將著重介紹幾種自動化評估的框架。
三、開源RAG評估框架RAGAS
項目地址:https://github.com/explodinggradients/ragas
論文:https://arxiv.org/abs/2309.15217
RAGAS應該目前評估比較全面,而且各種文檔也比較齊全的評估框架了,而且跟Langchain等框架做了集成,可以直接調用。RAGAS論文中提到三個指標,現在已經擴展到九個了:
Faithfulness(忠誠度) RAGAS的計算原理是通過大語言模型(LLM)從生成的答案中拆分成一組描述,然后讓大模型去判斷是否是否可以從上下文中推斷出來,主要是通過提示詞工程實現,Prompt如下:(注意:RAGAS內置都是英文的提示詞,我們需要轉換成中文)
考慮給定的上下文和以下陳述,然后判斷這些陳述是否得到上下文信息的支持。 在得出結論(是/否)之前,對每個陳述進行簡要解釋。 最后按指定格式依次給出對每項陳述的最終裁定。 不要偏離指定格式:
[語句 1]
…
[語句 n]
例如某個問題被拆成5組描述,大模型判斷3組可以從上下文推斷出來,得分就是3/5=0.6
Answer Relevance (回答相關性)RAGAS采用的是經典的余弦相似度來進行判斷,首先使用大語言模型 (LLM) 從生成的答案中逆向設計問題的“n”個變體,然后計算生成的問題與實際問題之間的平均余弦相似度。引用官網給的例子:
Answer:France is in western Europe.
Question 1:“In which part of Europe is France located?”
Question 2:“What is the geographical location of France within Europe?”
Question 3:“Can you identify the region of Europe where France is situated?”
因為這個指標跟Context無關,所以也可以用來測試不是基于RAG的問答系統。
Context Precision(上下文召回精度) 是一個評估召回的指標,核心思路給定一個問題,然后判斷基于這個問題召回的內容跟金標準是否相關,計算步驟拆解如下:
第一步:判斷每個chunk是否跟ground truth相關,假如一個問題和召回了top5的chunks,其中不同chunk分別用LLM進行判斷相關性:
- chunk1 : 相關
- chunk2: 不相關
- chunk 3: 相關
- chunk 4:不相關
- chunk5:相關
第二步:計算每個chunk的 Precision@k值,在位置k之前的相關chunk數量除以 k,分別計算結果如下:
- Precision@1 = 1/1 = 1.0
- Precision@2 = 1/2 = 0.5
- Precision@3 = 2/3 ≈ 0.67
- Precision@4 = 2/4 = 0.5
- Precision@5 = 3/5 = 0.6
第三步:計算 Precision@k 的平均值
平均Precision@k=1.0+0.5+0.67+0.5+0.6=53.27=0.654
這里計算均值前引入了位置的信息判斷,跟答案相關的越靠前,得分就會越高,Context Precision 指標可以看做是Faithfulness 指標的的一種延伸,二者都是用來評價召回內容跟金標準的一致性。
Context Recall (上下文召回率)也是一個評估召回的指標,它的思路跟Answer Relevance有點接近,只不過他是把ground truth拆分了幾份,每一份再去判斷跟context的相關性,最終計算一個比例出來。
Context entities recall (上下文實體召回率) 這個是最近剛推出的指標,引入了實體的概念,通過計算context和ground truth中同時存在的實體數據在ground truth 實體中的比例來衡量召回的內容是否接近ground truth,舉個例子:
假設ground truth中抽取的實體如下:[‘長城’, ‘北京’, ‘秦始皇’, ‘公元前221年’, ‘世界遺產’]
context1中抽取的實體 [‘長城’, ‘北京’, ‘秦始皇’, ‘中國’]
context2中抽取的實體 [‘長城’, ‘世界遺產’, ‘中國’]
計算相似度:
context1中的相關實體:[‘長城’, ‘北京’, ‘秦始皇’]
context2中的相關實體 : [‘長城’, ‘世界遺產’]
context1的召回準確率0.6>context2的召回準確率0.4,我們應該選用context1的召回策略。
Answer semantic similarity (回答語義相關度)也是一個評估回答結果跟金標準一致性的指標,在RAGAS中,Answer Relevance指標通過逆向生成問題對比得出分數,這個就比較簡單了,直接把answer和ground truth 分別做一個向量化,然后直接通過語義相似度判斷一致性。語義相似度的判斷是通過余弦相似度來實現的。
Answer Correctness (回答準確性)RAGAS提供的另外一個評估系統answer和ground truth 一致性的指標,只不過他是上一個指標Context entities recall 在結合factual correctness(事實一致性),兩邊分給一個權重然后計算最終得分,但是官網并沒有提到事實一致性是如何計算的,那只能是人工評價后計算一個調和平均數,我們可以簡單理解為這個指標是把人工評價和語義評價做了一個綜合。
Aspect Critique(特定方向評估)RAGAS提供一個可擴展的評估方向,其中內置的了,
無害性(Harmlessness)、惡意性(Maliciousness)、連貫性(Coherence)、正確性(Correctness)和 簡潔性(Conciseness)5個評估方向,評估方法是通過寫一個提示詞然后讓大模型來進行判斷是否存在上述問題,我們也可以自定義要評估指標,通過 SUPPORTED_ASPECTS 這個字段進行維護,每個指標都可以單獨調用。
假設我們有一篇文章需要評估其質量,你可以使用這些方面來進行評估:
- 無害性檢查:判斷文章內容是否會對讀者造成心理或情感上的傷害。
- 惡意性檢查:判斷文章內容是否包含欺騙、操縱或傷害他人的意圖。
- 連貫性檢查:判斷文章內容是否邏輯連貫,信息傳達清晰
- 正確性檢查:判斷文章中的信息是否準確無誤
- 簡潔性檢查:判斷文章內容是否簡潔明了,沒有冗長和不必要的信息
Summarization Score (總結能力評分) 在RAG系統中,假如我們將 top k 設置為 5,那么通常會召回 5 個相關的知識片段。這些召回的知識片段會作為上下文的一部分全部傳遞給大語言模型。大語言模型會利用這些上下文信息來生成更準確和相關的回答。所以召回的內容進行總結的好壞也會影響最終輸出的效果,好的總結應該包含原文中的所有重要信息,這個指標就是用來評估這個能力。實現思路如下:
- 首先從原文中提取出一組重要的關鍵詞或關鍵短語。
- 然后基于這些關鍵詞生成一組問題。
- 接著將這些問題應用到總結中,檢查總結能否正確回答這些問題。
- 最后計算正確回答的問題數與總問題數的比值。
借用官網的例子:
摘要:摩根大通公司(JPMorgan Chase & Co.)是一家總部位于紐約市的美國跨國金融公司。截至2023年,它是美國最大的銀行,也是全球市值最大的銀行。公司成立于1799年,是主要的投資銀行服務提供商,擁有3.9萬億美元的總資產,并在2023年《福布斯》全球2000強排名中位列第一。
關鍵詞: [ “摩根大通公司(JPMorgan Chase & Co.)”,
“美國跨國金融公司”,
“總部位于紐約市”,
“美國最大的銀行”,
“全球市值最大的銀行”,
“成立于1799年”,
“主要的投資銀行服務提供商”,
“3.9萬億美元的總資產”,
“《福布斯》全球2000強排名第一”,
]問題: [ “摩根大通公司是一家美國跨國金融公司嗎?”,
“摩根大通公司總部位于紐約市嗎?”,
“摩根大通公司是美國最大的銀行嗎?”,
“截至2023年,摩根大通公司是全球市值最大的銀行嗎?”,
“摩根大通公司被金融穩定委員會認為具有系統重要性嗎?”,
“摩根大通公司于1799年作為大通曼哈頓公司成立嗎?”,
“摩根大通公司是主要的投資銀行服務提供商嗎?”,
“摩根大通公司是全球資產排名第五的銀行嗎?”,
“摩根大通公司運營著收入最大的投資銀行嗎?”,
“摩根大通公司在《福布斯》全球2000強排名中位列第一嗎?”,
“摩根大通公司提供投資銀行服務嗎?”,
]答案: [“0”, “1”, “1”, “1”, “0”, “0”, “1”, “1”, “1”, “1”, “1”]
最后我們把RAGAS體系的指標做一個總結:
評估召回能力,關系到檢索策略、chunk策略:
- Context Precision
- Context Recall
- Context entities recall
基于上下文的回答回答準確率,關系到大模型的指令跟隨能力:
- Faithfulness
- Answer Relevancy
- Answer Semantic Similarity
- context-answer
- Answer Correctness
- Aspect Critique
- Summarization Score
不依賴上下文也可以評估的指標:
- Answer semantic similarity
- Answer Correctness
- Aspect Critique
- Answer Relevance
上述內容結合了項目官網和個人的理解,如果理解錯誤的地方歡迎指正交流,后續文章后會接著介紹其他的RAG評估框架,敬請關注。
本文由 @Leo 原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
- 目前還沒評論,等你發揮!