立即解决AI误差:亚马逊RAGChecker的创新之举
©作者|Blaze
来源|神州问学
引言
在人工智能领域,RAG(Retrieval-Augmented Generation)模型以其强大的生成能力和灵活性赢得了广泛关注。它结合了信息检索和生成技术,能够为用户提供更准确、更丰富的回答。然而,尽管RAG模型在许多应用中表现出色,但它们在实际使用中也可能面临回答不准确的问题。这时,如何有效地诊断和解决这些问题就显得尤为重要。
近日,亚马逊发布了一个全新的开源工具——RAGChecker,旨在帮助开发者和研究人员对RAG系统进行全面、可靠、细粒度诊断,着重解决AI回答不准的问题,并为进一步提升性能,提供可操作的方向。这个工具就像是给RAG系统开了一剂“药方”,帮助它“康复”,为我们的开发者打造更智能、更可靠的RAG系统。
RAGChecker的诞生背景
RAGChecker是亚马逊推出的一款新工具,旨在解决RAG模型在实际应用中面临的准确性问题。随着生成式AI的应用场景越来越广泛,从客服聊天机器人到内容创作,再到智能助手,生成内容的准确性成为了一个关键问题。
尤其是在一些高要求的应用场景中,例如医疗咨询、法律建议、金融分析等,AI生成的不准确内容可能导致严重的后果。在这些场景中,RAG模型虽然通过检索增加了准确性,但仍然可能因为各种原因导致错误的生成。因此,RAGChecker横空出世,帮助开发者更好地评估和优化RAG模型的输出质量。
RAGChecker的功能
RAGChecker 是一种先进的自动评估框架,它提供了一套全面的指标和工具,用于深入分析 RAG 性能。它的功能主要有:
整体评估:RAGChecker 提供Overall Metrics对整个 RAG 管道的评估。
诊断指标:Diagnostic Retriever Metrics用于分析检索组件。Diagnostic Generator Metrics用于评估生成组件。这些指标为有针对性的改进提供了宝贵的见解。
细粒度评估:利用claim-level entailment操作进行细粒度评估。
基准数据集:一个全面的 RAG 基准数据集,包含 4000 个问题,涵盖 10 个领域(即将推出)。
元评估:人类注释的偏好数据集,用于评估 RAGChecker 的结果与人类判断的相关性。
了解了RAGChecker的功能,那我们就快快动动手指头,来快速尝试一下吧!
RAGChecker快速入门
RAGChecker对于开发人员来说上手过程很简单,由于笔者项目中需要对RAG性能、准确率评估,所以对RAGChecker进行了使用,以下是快速入门步骤:
1.环境安装
pip install ragchecker
python -m spacy download en_core_web_sm
2.检测数据准备
需要将RAG系统按照指定的JSON格式进行输出,包括输入查询、标准答案、RAG系统的回答、检索上下文。具体的数据样本如下:
{
"results": [
{
"query_id": "0",
"query": "世界上最长的河流是什么?",
"gt_answer": "尼罗河是非洲东北部一条主要的北流河流。它流入地中海。尼罗河是非洲最长的河流,历史上一直被认为是世界上最长的河流,尽管这一点受到了研究的质疑,表明亚马逊河略长。以年流量(立方米水量)衡量,尼罗河是世界主要河流中最小的河流之一。其流域长约 6,650 公里(4,130 英里),覆盖 11 个国家:刚果民主共和国、坦桑尼亚、布隆迪、卢旺达、乌干达、肯尼亚、埃塞俄比亚、厄立特里亚、南苏丹、苏丹和埃及。",
"response": "世界上最长的河流是尼罗河,全长约 6,650 公里(4,130 英里),穿过非洲东北部,流经乌干达、苏丹和埃及等国家,最后注入地中海。关于这个标题存在一些争议,因为最近的研究表明,如果亚马逊河最长的支流也包括在内,亚马逊河的长度可能会更长,可能会延长至约 7,000 公里(4,350 英里)。",
"retrieved_context": [
{
"doc_id": "000",
"text": "科学家们争论亚马逊河还是尼罗河是世界上最长的河流。传统上,尼罗河被认为更长,但最近的信息表明亚马逊河可能更长。"
},
{
"doc_id": "001",
"text": "尼罗河是古埃及人财富和权力崛起的中心。由于埃及几乎不存在降雨,尼罗河及其每年的洪水为人民提供了富饶农业的肥沃绿洲。"
},
{
"doc_id": "002",
"text": "世界上最长的河流被定义为最长的天然溪流,其水流在具有明确河岸的河道或河床上流动。"
},
{
"doc_id": "003",
"text": "如果包括最长的支流,亚马逊河可能会被认为更长,可能将其长度延长至约 7,000 公里"
}
]
}
其中query_id: 查询ID,query:用户的查询,gt_answer:标准答案,response:RAG系统生成的答案,retrieved_context:检索上下文,doc_id:文档片段id,text:文档片段内容
3.程序运行
可以采用两种运行方式,分别为命令行和Python运行
命令行:
ragchecker-cli \
--input_path=examples/checking_inputs.json \
--output_path=examples/checking_outputs.json \
--extractor_name=bedrock/meta.llama3-70b-instruct-v1:0 \
--checker_name=bedrock/meta.llama3-70b-instruct-v1:0 \
--batch_size_extractor=64 \
--batch_size_checker=64 \
--metrics all_metrics
Python代码:
from ragchecker import RAGResults, RAGChecker
from ragchecker.metrics import all_metrics
# 从JSON中初始化RAGResults
with open("examples/checking_inputs.json") as fp:
rag_results = RAGResults.from_json(fp.read())
# 设置评估器
evaluator = RAGChecker(
extractor_name="bedrock/meta.llama3-70b-instruct-v1:0",
checker_name="bedrock/meta.llama3-70b-instruct-v1:0",
batch_size_extractor=32,
batch_size_checker=32
)
# 对结果进行评估
evaluator.evaluate(rag_results, all_metrics)
print(rag_results)
4. 输出结果
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
}
}
)
5. 结果分析
通过分析输出的指标,开发者可以更有针对性的优化各自RAG系统的性能。
Precision(精确率): 精确率衡量了模型生成的答案中有多少是正确的,高精确率意味着模型生成的内容通常是可靠的,但可能牺牲了一部分覆盖面。
Recall(召回率): 召回率衡量了模型在所有正确答案中成功生成的比例,召回率的提高有助于提升答案的全面性,但可能导致噪音增加。
F1 Score: F1分数是精确率和召回率的调和平均数,是综合评估模型性能的重要指标,F1分数越高,模型在生成准确且全面答案方面表现越好。
Claim Recall(声明召回率): 声明召回率表示检索器成功找到与问题相关的信息的比例,如果该项指标较低,意味着需要改进检索策略,没有检索到足够的相关知识,需要对算法进行优化或者扩展知识库。
Context Precision(上下文精确率): 上下文精确率衡量的是检索到的信息中有多少是与问题直接相关的,上下文精确率越高,生成器使用的信息质量越好,生成的答案也更有可能准确。
Noise Sensitivity(噪音敏感度):该指标衡量生成器对相关但多余信息的敏感程度 ,较低的相关噪音敏感性有助于减少生成器因多余信息而产生的错误。
6.效果对比
为了检验RAGChecker的作用,特别选取了部分数据进行实际评估,评估结果如下:
{
"overall_metrics": {
"precision": 68.2,
"recall": 55.7,
"f1": 61.3
},
"retriever_metrics": {
"claim_recall": 50.4,
"context_precision": 74.8
},
"generator_metrics": {
"context_utilization": 75.3,
"noise_sensitivity_in_relevant": 30.7,
"noise_sensitivity_in_irrelevant": 12.1,
"hallucination": 12.8,
"self_knowledge": 19.4,
"faithfulness": 57.6
}
}
根据RAGChecker的评估结果,通过接入更多的领域专属数据库、文献库、以及行业报告同时优化检索算法,并且对检索模型进行微调,在采取一系列措施后,评估结果有一定的提升,优化后评估结果如下:
{
"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
}
}
未来展望
RAGChecker的发布只是亚马逊在改进生成式AI准确性方面迈出的第一步。未来,随着技术的不断进步,RAGChecker有望融入更多的功能,例如:
多模态支持:未来的RAGChecker可能不仅支持文本,还可以支持图像、语音等多模态数据的分析与优化,为更广泛的应用场景提供支持。
深度学习优化:通过集成更先进的深度学习算法,RAGChecker未来可能能够更深入地分析生成内容的潜在问题,并提供更智能的优化建议。
更强的自适应能力:未来的RAGChecker可能会具备更强的自适应能力,能够根据不同的应用场景自动调整优化策略,为不同领域的开发者提供量身定制的解决方案。
开放生态系统:亚马逊可能会将RAGChecker开放给更多的开发者和企业,形成一个开放的生态系统,共同推动生成式AI的进步。
结语
随着生成式AI技术的不断发展,我们对AI的期望也越来越高。然而,生成内容的准确性问题始终是一个难题。亚马逊推出的RAGChecker,为这一问题提供了一个有力的解决方案。
作为一位开发者,RAGChecker是不可或缺的得力助手,它的出现,不仅为生成式AI的应用打开了新的大门,也为未来AI技术的发展指明了方向,现在的RAG系统不再完全是一个黑匣子,开发者可以从中剖析具体问题具体分析。随着RAGChecker功能的不断丰富,我们有理由相信,生成式AI将在更多的领域发挥更大的作用,为我们的生活和工作带来更多便利。
参考文献
https://github.com/amazon-science/RAGChecker?tab=readme-ov-file
https://arxiv.org/html/2408.08067v2