ChunkRAG:比CRAG提升10个点准确率

发布于 2024-11-27 15:18
浏览
0收藏

1. RAG目前存在的问题

RAG系统前前发展取得了一定的成果,但是仍然存在一个问题:在获取文档时会检索到不相关或关联较弱的信息。目前的检索技术,即使是重排序和查询重写,不但不能滤除检索文档中的大量无关信息块,还致使响应生成出现一系列诸如事实不准确、不相关以及幻觉等问题

传统上RAG 系统会检索大量整个文档的文本或者其中冗长的部分,认为这些冗长片段可能包含相关信息。然而,这类系统极少单独审视检索到的文档的章节或段落,所以很可能会有不相关或只是部分相关的信息流入生成阶段。

语言模型生成流畅文本时无法验证所用信息,这让情况更糟。相关或误导性的片段严重扭曲此类模型的结果,降低了系统的可靠性,尤其在开放领域问答和多跳推理等关键任务中。

ChunkRAG:比CRAG提升10个点准确率-AI.x社区图片

上图展示了RAG系统检索过程中有没有过滤机制的差别。

• 没有块过滤时,像其他法国城市这类不相关信息会被包含在响应里。

• LLM 驱动的块过滤能去除不必要内容,给出准确答案“法国的首都是巴黎”。

一些检索相关的方法,如纠正性 RAG(CRAG)和 Self-RAG,试图通过优化检索过程来克服这些难题。CRAG 着重在检索出错后进行“更正”检索,Self-RAG 在生成阶段引入自我反思机制以减少不准确性。这两种方法都在文档层面操作,对单个检索到的文本块缺乏足够过滤。这种文档级别的方式提高了检索的整体相关性,却无法阻止不相关的块被纳入生成的响应中。如果无法掌控检索内容的粒度,RAG 系统仍易将不良或误导性信息纳入输出,最终影响性能。

为了解决该问题,作者提出了LLM 驱动的块过滤,即 ChunkRAG,在粒度上比传统系统更精细,实际上支持对检索信息进行块级过滤。

2. 什么是ChunkRAG?

ChunkRAG的目的是借助一种新颖的细粒度过滤机制,来降低检索增强生成(RAG)系统所生成回应中的不相关性与幻觉。分为两个阶段:语义分块与高级过滤


ChunkRAG:比CRAG提升10个点准确率-AI.x社区

上图展示了ChunkRAG的整体框架。

2.1 语义分块(Semantic Chunking)

语义分块是基础步骤,将输入文档转化为有语义意义的单元,以利于有效检索和评估。此阶段包含三个子流程:

输入准备:先运用 NLTK 的 sent_tokenize 函数把文档切分成句子。接着,给每个句子赋予一个通过预训练嵌入模型(比如 text-embedding-3-small)生成的嵌入向量。

分块形成:依据句子间的语义相似度(通过余弦相似度衡量)把连续的句子组合成分块。如果连续句子间的相似度低于阈值($ heta=0.7$),就创建一个新分块。每个分块还进一步限制在 500 个字符以内,以保障后续阶段的效率。

分块的嵌入生成:每个分块都用上述相同的预训练嵌入模型来表示。生成的分块嵌入存储在向量数据库中,方便在查询阶段高效检索。

2.2. 混合检索与高级过滤

在检索和过滤阶段,将传统的 RAG 组件与先进的微调技术加以融合,以保障强大且高质量的检索效果。混合检索和过滤阶段详情如下:

检索器初始化与查询重写:初始化一个能够将用户查询与块嵌入作对比的检索器。为提升查询效能,运用 GPT-4omini 进行查询重写步骤,保证查询与所存储的嵌入高度匹配。这能让检索过程的召回率和精度更出色。

初始过滤:检索到的块首先通过 TF-IDF 评分与余弦相似度的组合方式进行过滤。冗余度高(相似度>0.9)的块被剔除。其余的块依据它们与重写查询的相似度来排序。

相关性评分与阈值设定:为进一步优化相关性,大型语言模型(LLM)为每个块赋予初始相关性分数。这些分数经自我反思和批评模型加以细化,该模型依照特定领域的启发式规则调整分数。通过分析分数分布设定最终的动态阈值,并且只有超过此阈值的块得以保留。

混合检索策略:为最大程度提升检索成效,采用了融合 BM25 和基于 LLM 的检索方法的双重检索策略。集成方法采用均等权重(各 0.5)来平衡关键字和语义检索。此外,利用 Cohere 的重新排名模型(rerank-englishv3.0)对检索到的块进行排名,解决“Lost in the middle”的问题,增强可能被降低优先级的中心上下文的相关性。

2.3 响应生成与评估

筛选过后,剩余的块会被当作上下文来生成最终的响应:

响应生成:LLM 依据筛选后的上下文块生成响应。生成期间,严格限制只使用检索到的信息,从而最大程度减少幻觉风险。

评估:针对一组预先验证过的答案,对生成的响应进行准确性评估。

3. 效果如何

将 ChunkRAG 与现有的检索增强生成(RAG)方法的性能进行评估。

ChunkRAG:比CRAG提升10个点准确率-AI.x社区图片

如上图所示,ChunkRAG 大幅超越同类别 RAG方法,相较于最接近的 CRAG(准确率 54.9),ChunkRAG方法性能提升了 10 个百分点。

虽说 10 个百分点的提升看似不大,但在实际应用中,却意味着输出效果呈指数级提升。

ChunkRAG之所以能有显著的提升,主要得益于块级过滤和细粒度相关性评估。把文本划分成有语义的块,减少了不相关或弱相关信息的生成。在处理块过滤的上下文相关数据时,生成事实准确且连贯的响应的能力大幅增强。

再者,自我反思的 LLM 评分方法(即模型给自己打分然后做出相应改变),使得检索错误大幅减少。不像常规检索方法在文档部分级别没有过滤机制,我们的方法能够提取出更有意义和相关的信息,直接影响生成响应的可靠性。

4. 局限性

ChunkRAG 虽有优势,但也存在不少需留意的短板。

• ChunkRAG高度依赖块分割的成效以及用于块相关性评估的嵌入质量。分割中的差错可能会产生无关数据,致使响应质量下降。

• 多层次评分的成本——在初始层面整合 LLM 与评论 LLM 评估——可能颇高,尤其是在将该方法拓展至更大的数据集或者在实时系统中部署时。

• 尽管 ChunkRAG 在运用 PopQA 数据集时取得了积极成果,但由于资源有限,其在其他领域的可用性验证以及在处理长格式生成任务时的表现尚未得到深入剖析。未来的研究应当聚焦于优化 ChunkRAG 的计算效率,以及在不同数据集和实际应用中的评估。

本文转载自​​大语言模型论文跟踪​

收藏
回复
举报
回复
相关推荐