RAGChecker:顯著超越RAGAS,一個(gè)精細(xì)化評(píng)估和診斷 RAG 系統(tǒng)的創(chuàng)新框架 精華
RAG應(yīng)用已經(jīng)是當(dāng)下利用大模型能力的典型應(yīng)用代表,也獲得了極大的推廣,各種提升RAG性能的技術(shù)層出不窮。然而,如何全面、準(zhǔn)確地評(píng)估 RAG 系統(tǒng)一直是一個(gè)挑戰(zhàn)。傳統(tǒng)評(píng)估方法存在諸多局限性:無法有效評(píng)估長(zhǎng)文本回復(fù)、難以區(qū)分檢索和生成模塊的錯(cuò)誤來源、與人類判斷的相關(guān)性不高。為此,亞馬遜和上海交通大學(xué)等研究團(tuán)隊(duì)開發(fā)了 RAGChecker[1],這是一個(gè)專為 RAG 系統(tǒng)設(shè)計(jì)的創(chuàng)新評(píng)估框架。
圖片
RAGChecker 的核心亮點(diǎn)在于其細(xì)粒度的評(píng)估方法。它首先使用大型語言模型將文本分解為獨(dú)立的聲明,然后通過另一個(gè)模型驗(yàn)證每個(gè)聲明的準(zhǔn)確性。這種方法不僅能夠評(píng)估整體性能,還能深入診斷檢索和生成模塊的具體問題。
RAGChecker 提供了三類指標(biāo):
1)整體指標(biāo):包括精度、召回率和 F1 分?jǐn)?shù),全面反映 RAG 系統(tǒng)的輸出質(zhì)量。
2)檢索指標(biāo):
- 聲明召回:衡量檢索上下文覆蓋標(biāo)準(zhǔn)答案聲明的比例。
- 上下文精度:評(píng)估檢索上下文中相關(guān) chunks 的比例。
3)生成指標(biāo):
- 上下文利用率:反映生成器有效利用相關(guān)信息的程度。
- 幻覺:量化生成的錯(cuò)誤信息比例。
- 忠實(shí)度:衡量生成器對(duì)檢索上下文的依賴程度。
- 相關(guān)/不相關(guān)噪聲敏感度:評(píng)估生成器對(duì)不同類型噪聲的敏感程度。
- 自知識(shí):反映生成器依賴內(nèi)部知識(shí)的程度。
使用方法
RAGChecker 提供了多種使用方法,包含命令行、python 編碼等方式,還可以與主流 LLM 開發(fā)框架集成,如 llamaindex。
- 安裝
pip install ragchecker
python -m spacy download en_core_web_sm
- 使用命令行
ragchecker-cli \
--input_path=examples/checking_inputs.json \
--output_path=examples/checking_outputs.json \
--extractor_name=bedrock/meta.llama3-1-70b-instruct-v1:0 \
--checker_name=bedrock/meta.llama3-1-70b-instruct-v1:0 \
--batch_size_extractor=64 \
--batch_size_checker=64 \
--metrics all_metrics \
# --disable_joint_check # uncomment this line for one-by-one checking, slower but slightly more accurate
- 使用 python
from ragchecker import RAGResults, RAGChecker
from ragchecker.metrics import all_metrics
# initialize ragresults from json/dict
with open("examples/checking_inputs.json") as fp:
rag_results = RAGResults.from_json(fp.read())
# set-up the evaluator
evaluator = RAGChecker(
extractor_name="bedrock/meta.llama3-1-70b-instruct-v1:0",
checker_name="bedrock/meta.llama3-1-70b-instruct-v1:0",
batch_size_extractor=32,
batch_size_checker=32
)
# evaluate results with selected metrics or certain groups, e.g., retriever_metrics, generator_metrics, all_metrics
evaluator.evaluate(rag_results, all_metrics)
print(rag_results)
"""Output
RAGResults(
2 RAG results,
Metrics:
{
"overall_metrics": {
"precision": 76.4,
"recall": 62.5,
"f1": 68.3
},
"retriever_metrics": {
"claim_recall": 61.4,
"context_precision": 87.5
},
"generator_metrics": {
"context_utilization": 87.5,
"noise_sensitivity_in_relevant": 19.1,
"noise_sensitivity_in_irrelevant": 0.0,
"hallucination": 4.5,
"self_knowledge": 27.3,
"faithfulness": 68.2
}
}
)
"""
- 與 llamaindex 集成
# User query and groud truth answer
user_query = "What is RAGChecker?"
gt_answer = "RAGChecker is an advanced automatic evaluation framework designed to assess and diagnose Retrieval-Augmented Generation (RAG) systems. It provides a comprehensive suite of metrics and tools for in-depth analysis of RAG performance."
# Get response from LlamaIndex
response_object = rag_application.query(user_query)
# Convert to RAGChecker format
rag_result = response_to_rag_results(
query=user_query,
gt_answer=gt_answer,
response_object=response_object,
)
# Create RAGResults object
rag_results = RAGResults.from_dict({"results": [rag_result]})
print(rag_results)
實(shí)驗(yàn)結(jié)果
RAGChecker 的有效性已通過大規(guī)模實(shí)驗(yàn)和人工評(píng)估得到驗(yàn)證。結(jié)果顯示,RAGChecker 的評(píng)分與人類判斷的相關(guān)性顯著高于現(xiàn)有評(píng)估方法。在 Pearson 相關(guān)性上,RAGChecker 達(dá)到了 61.93%,而最接近的基線方法 RAGAS 僅為 48.31%。
關(guān)鍵要點(diǎn)
利用 RAGChecker,研究人員評(píng)估了 8 個(gè)最先進(jìn)的 RAG 系統(tǒng),覆蓋了 10 個(gè)不同領(lǐng)域的數(shù)據(jù)集。
通過分析結(jié)果,他們發(fā)現(xiàn)了一些關(guān)鍵洞見:
- 檢索器的質(zhì)量至關(guān)重要。無論使用何種生成器,更好的檢索器都能帶來一致的性能提升。例如,將 BM25 檢索器替換為 E5-Mistral 檢索器,在使用 GPT-4 作為生成器時(shí),整體 F1 分?jǐn)?shù)從 50.3 提高到 52.7 。
- 生成器模型的規(guī)模越大,整體性能越好。這體現(xiàn)在更高的上下文利用率、更低的噪聲敏感度和更少的幻覺。以 Llama3 系列為例,70B 版本在各項(xiàng)指標(biāo)上都優(yōu)于 8B 版本。
- 開源模型在區(qū)分準(zhǔn)確信息和噪聲方面表現(xiàn)較差。它們傾向于過度信任上下文,特別是在檢索質(zhì)量提高時(shí)。例如,Llama3-70B 的忠實(shí)度從 93.2%上升到 95.9%,而 GPT-4 僅從 87.9%上升到 92.9%。
- 存在檢索召回和生成器噪聲敏感度之間的權(quán)衡。提高檢索召回率會(huì)不可避免地引入更多噪聲,從而增加生成器的噪聲敏感度。數(shù)據(jù)顯示,使用 E5-Mistral 檢索器時(shí),聲明召回率從 74.0%提高到 83.5%,但相關(guān)噪聲敏感度也從 26.2%上升到 28.9%。
基于這些發(fā)現(xiàn),研究者提出了幾點(diǎn)改進(jìn) RAG 系統(tǒng)的建議:
- 優(yōu)先提升檢索器性能,如使用更好的嵌入模型或適度增加檢索 chunk 數(shù)量和大小。實(shí)驗(yàn)表明,將 chunk 大小從 150 增加到 300,可以將整體 F1 分?jǐn)?shù)從 52.6 提高到 53.4 。
- 在有限上下文長(zhǎng)度的情況下,使用較少數(shù)量的大 chunks 優(yōu)于較多數(shù)量的小 chunks 。這可以提高上下文精度,從而減少噪聲影響。
- 針對(duì)不同的應(yīng)用場(chǎng)景和用戶偏好,可以通過調(diào)整生成提示來平衡上下文利用率、噪聲敏感度和忠實(shí)度。例如,通過優(yōu)化提示詞,可以將 GPT-4 的忠實(shí)度從 92.2%提高到 93.6%。
- 對(duì)于開源模型,需要著重提升其推理能力,以更好地區(qū)分和利用上下文中的有用信息。這可能需要在訓(xùn)練過程中引入更多的推理任務(wù)。
小結(jié)
RAGChecker 為全面評(píng)估和診斷 RAG 系統(tǒng)提供了一個(gè)強(qiáng)大而靈活的工具。通過揭示 RAG 系統(tǒng)中檢索和生成模塊的復(fù)雜交互,以及不同設(shè)計(jì)選擇帶來的影響,RAGChecker 不僅能幫助研究人員更好地理解和改進(jìn)現(xiàn)有 RAG 系統(tǒng),還為未來 RAG 系統(tǒng)的優(yōu)化和創(chuàng)新指明了方向。
參考資料
[1]RAGChecker: https://github.com/amazon-science/RAGChecker
本文轉(zhuǎn)載自 ??AI工程化??,作者: ully
