论文翻译 | ChunkRAG: Novel LLM-Chunk Filtering Method for RAG Systems

news/2024/12/19 1:25:55/

摘要 

        使用大型语言模型(LLM)的检索-增强生成(RAG)系统经常由于检索不相关或松散相关的信息而生成不准确的响应。现有的在文档级别操作的方法无法有效地过滤掉此类内容。我们提出了LLM驱动的块过滤,ChunkRAG,这是一个框架,通过在块级别评估和过滤检索到的信息来增强RAG系统,其中“块”代表文档中较小的、连贯的部分。我们的方法使用语义分块将文档划分为连贯的部分,并利用基于LLM的相关性评分来评估每个块与用户查询的一致性。通过在生成阶段之前过滤掉不太相关的块,我们显著减少了幻觉,提高了事实的准确性。实验表明,我们的方法优于现有的RAG模型,在需要精确信息检索的任务上取得了更高的精度。这一进步增强了RAG系统的可靠性,使它们对事实检查和多跳推理等应用程序特别有益。 

1 引言

        大型语言模型(LLMs)在检索增强生成(RAG)系统的发展中取得了重大进展,这些系统将检索机制与强大的语言模型相结合,基于外部知识生成回应。然而,尽管取得了这些进步,一个持续存在的问题仍然存在:在文档抓取过程中检索到的不相关或弱相关的信息。当前的检索技术,包括重排和查询重写,不仅未能过滤掉检索文档中的大量不相关信息,而且还导致了一系列在生成的回应中事实错误、无关紧要和虚构的问题(Zhang等人,2023;Mallen等人,2023)。
        传统上,RAG系统检索大量完整的文档文本或其中较长的一部分,假设这些较长的片段很可能包含相关信息。这样的系统很少单独检查检索文档的章节或段落,因此,不相关或只有部分相关的信息很可能流入生成阶段。由于语言模型在生成文本时无法验证所使用的信息,这种情况进一步恶化。相关或误导性的信息片段严重扭曲了此类模型的输出结果,降低了系统的可靠性,特别是在开放域问答和多跳推理等关键任务中(Ji等人,2023;Min等人,2023)。


        图1:该图显示,在没有信息块过滤(顶部)的情况下,不相关信息如其他法国城市被包含在回应中。然而,LLM驱动的信息块过滤(底部)则移除了不必要的内容,精确地给出了答案,“法国的首都是巴黎。”
        一些与检索相关的方法,如Corrective RAG(CRAG)和Self-RAG,试图通过改进检索过程来克服这些障碍。CRAG专注于在检索出错后检索“更正”,而Self-RAG在生成阶段引入了自我反思机制以最小化不准确。这两个过程都是在文档层面上操作,并且对单独检索到的文本块缺乏足够的过滤。这种文档级别的处理提高了检索的整体相关性,但并未阻止不相关的信息块被包含在生成的回应中(Shi等人,2023)。由于无法控制检索内容的粒度,RAG系统在输出中仍然容易融入不良或误导性信息,最终损害性能。
        解决这一挑战的方法在于一种新颖的方法:LLM驱动的信息块过滤,即ChunkRAG。我们的方法在比传统系统更细的粒度上操作,实际上支持对检索到的信息进行块级过滤。我们的系统不仅针对用户查询,也针对检索到的文档中的各个信息块。大型语言模型评估每个信息块相对于用户查询的语义相关性;这使得系统能够在信息块进入生成阶段之前就过滤掉不相关或弱相关的信息块。这种块级过滤反过来旨在通过对生成阶段仅提取最相关信息来强制最终答案的事实准确性。这种方法对于知识密集型任务特别有前景,如多跳推理和事实核查:在这里,精确度是最终的目标。也就是说,在准确性至关重要的任务中,我们的方法表现最佳(Piktus等人,2021;Rony等人,2022)。 

 2 相关工作

        解决大型语言模型中的幻觉问题 大型语言模型(LLMs)在理解指令和生成连贯文本方面取得了重大进展(Bang等人,2023;Qin等人,2023;Zhong等人,2023)。然而,它们仍然面临着幻觉问题,即模型产生的输出可能是错误或不合逻辑的。研究表明,激活过时或错误的知识是导致这个问题的主要原因(Tonmoy等人,2024;Zhang等人,2023b;Shuster等人,2021)。依赖于大型、未加规制的数据集、高质量训练样本比例低、输入空间内数据分布次优等因素加剧了这些挑战。精确和准确知识的缺失常常导致误导或不准确的输出,严重影响了实际应用中的用户体验。
        检索增强生成 检索增强生成(RAG)已被提出作为一种有效的策略来减轻幻觉问题(Lewis等人,2020;Guu等人,2020)。通过将输入查询与来自特定语料库(如维基百科)的检索文档相结合,RAG提供了额外的知识,增强了LLMs的性能,特别是在知识密集型任务中。这种方法涉及使用信息检索系统为生成模型提供相关文档。早期的实现要么在专注于响应生成的预训练语言模型之前使用稀疏或密集检索器。然而,这些方法常常忽视了一个关键问题:如果检索过程失败或检索到不相关信息怎么办?不相关的文档可能会恶化模型输出的事实错误,抵消检索增强的好处。
        检索技术的进步 最近的发展旨在改进RAG方法以解决这些局限性(Zhang等人,2024;Kim等人,2024;Wang等人,2024;Liu等人,2024)。认识到检索并不总是必要的——有时甚至会降低准确性——像SelfRAG(Asai等人,2024)这样的方法包含了选择性决定何时检索信息的机制,为此目的使用批评模型。CRAG(Your等人,2024)是一种最近的方法,它通过解决低质量检索结果的问题,增强了标准RAG的纠正策略,以提高检索质量。Yoran等人(2024)引入了一种自然语言推理(NLI)模型来检测并过滤掉不相关的上下文,增强了系统的鲁棒性。SAIL(Luo等人,2023)微调模型以在处理指令之前插入检索到的文档,改善了外部知识的整合。Toolformer(Schick等人,2023)预训练模型以与维基百科等API交互,实现动态访问信息。在需要多次使用外部知识的长文本生成场景中,确定检索的最佳时机变得至关重要。Jiang等人(2023)提出预测未来的内容需求,以决定在生成过程中何时以及检索什么信息。
        检索到的信息中的冗余可能会通过引入重复或不相关信息来降低RAG模型的有效性,这阻碍了模型生成连贯和独特响应的能力。一种流行的减轻冗余的方法涉及使用余弦相似度来评估并从检索到的文档中移除重复或过于相似的内容。
        余弦相似度在冗余移除中的应用 余弦相似度测量内积空间中两个非零向量之间的角度的余弦,这量化了两个向量之间的相似性,而与它们的幅度无关。在RAG的背景下,它被用来比较检索到的文本块的特征向量,以识别和消除冗余内容,增强可用于生成的信息的多样性(Liu等人,2023)。
        针对多跳查询的Multi-Meta-RAG 针对多跳查询的挑战,Multi-Meta-RAG引入了一种使用大型语言模型(LLMs)提取的元数据对数据库进行过滤的机制。通过整合LLM提取的元数据,这种方法过滤数据库以检索更多相关的文档,这些文档有助于回答需要跨多个信息片段进行推理的复杂查询(Smith等人,2023)。这种方法通过确保只考虑相关的文档来减少冗余,从而提高生成响应的连贯性。
        查询重写以增强检索 提出了一种“重写-检索-阅读”框架,以弥补输入文本与必要检索知识之间的差距(Johnson和Lee,2023)。一个可训练的查询重写器使用来自LLM性能反馈的强化学习来调整查询。这种方法通过重新制定查询以更好地与相关文档对齐,从而提高检索准确性,从而最小化检索到的冗余或不相关信息。
        我们引入了一个新模型,ChunkRAG,该模型强调一种分块策略,旨在进一步减少冗余并提高RAG模型的有效性。与最近的研究(Schick等人,2023;Luo等人,2023;Asai等人,2024,Your等人,2024)相比,我们的方法涉及将文档分割成语义连贯且不重叠的块,这些块与查询的特定信息需求更加对齐。 

3 方法 

        这项工作的核心目标是减轻检索增强生成(RAG)系统产生的响应中的不相关性和幻觉,使用一种新颖的细粒度过滤机制,该机制在将每个检索信息块集成到响应生成阶段之前严格评估其相关性。我们提出的方法遵循两阶段的方法:语义分块和高级过滤来优化检索结果。每个阶段的设计都是为了提高系统在利用检索知识方面的精度和可靠性。下面,我们将详细介绍我们提出的方法的组成部分。  

  • 语义分块:语义分块是我们方法的基础步骤,它将输入文档转换为语义上有意义的单元,以促进有效的检索和评估。这个阶段包括三个子过程:
  • 输入准备:我们首先使用NLTK的sent_tokenize函数将文档D分句。然后,每个句子都被分配一个嵌入向量,该向量是使用预训练的嵌入模型(例如,text-embedding-3-small)生成的。
  • 块形成:根据它们之间的语义相似性,将连续的句子分组成块,这种相似性是通过余弦相似度来衡量的。具体来说,如果连续句子之间的相似度低于一个阈值(θ = 0.7),就会创建一个新块。每个块进一步限制在500个字符以下,以确保后续阶段的效率。
  • 块的嵌入生成:每个块都使用上述相同的预训练嵌入模型来表示。生成的块嵌入存储在向量数据库中,以便在查询阶段进行高效的检索。
  • 混合检索与高级过滤:在检索和过滤阶段,我们将传统的RAG组件与高级微调技术相结合,以确保健壮和高品质的检索。下面详细介绍了混合检索和过滤阶段:
  • 检索器初始化与查询重写:我们初始化一个能够将用户查询与块嵌入进行比较的检索器。为了提高查询效率,我们使用GPT-4omini应用查询重写步骤,确保查询与存储的嵌入良好匹配。这确保了检索过程中的更好召回率和精确度。
  • 初始过滤:检索到的块最初是通过TF-IDF评分和余弦相似度的组合进行过滤的。具有高冗余度(相似度 > 0.9)的块被消除。剩余的块根据它们与重写查询的相似度进行排序。
  • 相关性评分与阈值设定:为了进一步精炼相关性,每个块都由大型语言模型(LLM)分配一个初始相关性分数。这些分数通过自我反思和批评模型进行细化,后者根据特定领域的启发式方法调整分数。通过分析分数分布设定一个最终的动态阈值,只有超过这个阈值的块被保留。
  • 混合检索策略:为了最大化检索效果,我们采用双检索策略,结合BM25和基于LLM的检索方法。这种集成方法使用等权重(各0.5)来平衡关键词和语义检索。此外,使用Cohere的重排模型(rerank-englishv3.0)对检索到的块进行排序,通过增强可能被降级的中部上下文的相关性,解决“迷失中间”的问题。

        响应生成与评估 过滤后,剩余的块被用作生成最终响应的上下文。步骤包括:

  • 响应生成:LLM根据过滤后的上下文块生成响应。在生成过程中,严格的约束确保只使用检索到的信息,从而最小化幻觉的风险。
  • 评估:生成的响应根据一组预先验证的答案进行准确性评估。

        我们的方法结合了语义分块与高级检索和过滤机制,显著提高了RAG系统产生的响应质量,确保了生成内容的相关性和正确性。如下节所述的实证结果表明,我们的方法在各种检索和生成场景中的有效性。 

4 实验 

        我们进行了实验,以广泛证明ChunkRAG的适应性及其在各种生成任务中的推广潜力。然而,由于计算资源的限制,我们的评估主要集中在PopQA数据集上。 

4.1 任务和数据集 

        ChunkRAG在PopQA数据集上进行了评估,该数据集是我们实验分析的基础。PopQA(Mallen等人,2023年)是一个为短格式问答设计的基准数据集。它包含了一系列多样化的问题,这些问题需要简洁准确的回答,使其成为评估像ChunkRAG这样的检索增强生成模型性能的理想测试平台。
        为了衡量ChunkRAG的有效性,我们采用了准确率作为评估指标,这与先前的研究保持一致。这个指标与PopQA评估中使用的惯例相符,确保我们的结果可以与现有研究进行比较。
        虽然我们目前的实验仅限于PopQA,但ChunkRAG在架构上是考虑到可扩展性的。未来的评估可能会扩展到其他数据集,例如用于长格式生成的Biography(Min等人,2023年)、用于真/假问答的PubHealth(Zhang等人,2023年)以及用于多项选择题的Arc-Challenge(Bhakthavatsalam等人,2021年)。这些扩展将进一步验证ChunkRAG在不同类型生成任务中的多功能性,前提是计算资源的可用性。 

4.2 基线 

4.2.1 无检索基线 

        我们首先评估了几个没有包含检索机制的大型语言模型。在公共LLM中,我们包括LLaMA2-7B和LLaMA2-13B (Touvron等人,2023),它们以跨各种自然语言处理(NLP)任务的多功能性而闻名,以及Alpaca7B和Alpaca-13B (Dubois等人,2023),它们是针对有效遵循用户提示进行优化的指令调整模型。此外,我们评估了CoVE65B (Dhuliawala等人,2024),它引入了旨在提高生成内容事实准确性的迭代工程技术。
        对于专有模型,我们包括了LLaMA2chat13B (LLaMA2chat13B是为基于对话的应用程序定制的LLaMA2的会话变体)和ChatGPT (OpenAI的专有会话代理,以其强大的语言理解和生成能力而闻名)。

4.2.2 带检索的基线 

        标准检索增强生成(RAG)方法:为了建立检索增强方法的基线,我们评估了标准的RAG方法。具体来说,我们采用了标准RAG(Lewis等人,2020年),该方法使用检索器根据输入查询获取相关文档,然后将这些文档输入语言模型以生成响应。为了保持一致性,我们使用了与ChunkRAG相同的检索器机制以确保公平比较。除了标准RAG之外,我们还评估了结合指令调整的LLMs与标准RAG,包括LLaMA2-7B、LLaMA2-13B以及Alpaca-7B、Alpaca-13B,以评估指令调整与检索增强相结合的影响。
        高级检索增强生成:为了将ChunkRAG与更复杂的基于RAG的方法进行基准测试,我们包括了采用额外策略来提升性能的高级模型。SAIL(Luo等人,2023年)通过在Alpaca指令调整数据上对语言模型进行指令调整来增强标准RAG,将顶部检索到的文档插入到指令之前以提供上下文信息。Self-RAG(Asai等人,2024年)通过在指令调整数据中加入由GPT-4标记的反射令牌,进一步优化了RAG,使模型能更好地利用检索到的信息。此外,我们还考虑了CRAG(Your等人,2024年),这是一种最近的方法,它通过增加纠正策略来增强标准RAG,通过解决低质量检索结果来提高检索质量。CRAG作为我们提出的ChunkRAG的直接比较,突出了我们的块过滤机制在提升检索增强生成方面的有效性。此外,我们还评估了结合私有数据的检索增强基线,包括Ret-ChatGPT和RetLLaMA-chat,它们分别将检索机制与ChatGPT和LLaMA2的对话变体相结合。 

5 分析 

        在本节中,我们将对ChunkRAG与现有检索增强生成(RAG)方法的性能进行评估。我们提出了一个基于从标准基准获得的实证结果的分析 

5.1 评价指标 

        我们使用准确性作为主要评估指标,以生成的回答与基本事实答案相匹配的百分比计算。 

5.2 对比与影响 

        如表1所示,我们的方法达到了64.9的准确率,在同一类别中显著优于所有基线。值得注意的是,与最接近的基线CRAG(54.9的准确率)相比,我们的方法性能提升了10个百分点。虽然10个百分点的提升看似是渐进的,但在实际应用中,它转化为输出效果的指数级改进。这一点在考虑错误率及其对整体用户体验的影响时尤为明显。


        在需要多跳推理或顺序决策的应用中,错误可能会成倍增加。这种指数级的改进在复杂任务中尤其重要,因为在这些任务中,每增加一步都会成倍增加错误风险,这与OpenAI的高级模型如o1相关,其中语言模型利用多跳推理,在回答之前花费时间“思考”,使其在复杂推理任务、科学和编程方面更加高效。 

5.3 观察和见解 

        我们的技术取得的显著改进主要是由于块级过滤和细粒度相关性评估。我们将文本划分为语义上有意义的块,这减少了不相关或弱相关信息的产生。在处理块滤波的上下文相关数据时,显著增强了事实准确和连贯响应的生成。
        此外,自反射式LLM评分方法,即模型对自身进行评分,然后进行相应的改变,使得检索误差显著降低。与在文档部分级别没有过滤机制的常规检索方法不同,我们的方法可以提取更有意义和相关的信息,这些信息直接影响所生成响应的可靠性。

5.4 未来工作 

        在我们目前的研究中,我们只测试了PopQA,但ChunkRAG的设计是出于可扩展性的目的。在即将到来的评估中,我们还将引入新的数据集,包括用于长格式生成的Biography,用于真假问题的PubHealth,以及用于多项选择题的Arc-Challenge。因此,这些试验的实施将加强ChunkRAG对不同类型生成任务的多功能性和适应性的证据,尽管这将取决于计算资源的可用性。 

6 结论 

        在本文中,我们介绍了ChunkRAG,一种新颖的LLM驱动的块滤波方法,旨在提高检索增强生成系统的精度和真实性。在我们对PopQA数据集进行的实验中,ChunkRAG已经清楚地显示出优于现有基线的优势,因此实现了10个百分点的显着性能提升,高于最接近的基准CRAG。块级过滤技术保证在响应生成过程中只包含相关的和上下文正确的信息,从而提高了生成答案的可靠性和准确性。这种方法对于需要大量事实的应用程序特别有用,例如涉及许多相互依赖参数的多跳推理和决策。我们相信ChunkRAG是解决基于LLM的检索系统中不相关或幻觉材料问题的一大步。 

7 局限性 

        ChunkRAG尽管有好处,但也有一些需要考虑的缺点。首先,该方法很大程度上依赖于块分割的有效性和用于块相关性评估的嵌入的质量。初级划分中的错误可能会产生不相关数据,这将降低响应的质量。其次,多层次评分的成本——在初始阶段整合LLM和批评家LLM的评价——可能会很高,特别是在将该方法扩展到更大数据集或在实时系统中部署时。此外,尽管ChunkRAG在PopQA数据集的使用中展示了积极的结果,但由于资源限制,其在其他领域的可验证性以及在长篇生成任务中的性能尚未经过彻底分析。未来的研究应该集中在优化ChunkRAG的计算效率,以及在不同的数据集和现实世界应用中的评估。

 

 

 

 

 


http://www.ppmy.cn/news/1556257.html

相关文章

apache中的Worker 和 Prefork 之间的区别是什么?

文章目录 内存使用稳定性兼容性适用场景 Apache中的Worker和Prefork两种工作模式在内存使用、稳定性以及兼容性等方面存在区别 内存使用 Worker:由于使用线程,内存占用较少。Prefork:每个进程独立运行,内存消耗较大。 稳定性 W…

Rust关键字实例解析

Rust是一种注重安全性、并发性和性能的系统编程语言。在Rust中,关键字是保留的标识符,用于语言的特定语法结构。这些关键字不能用作普通的标识符,除非使用原始标识符(raw identifiers)。下面,我们将通过实例…

You need to call SQLitePCL.raw.SetProvider()

在.NET环境中使用Entity Framework Core(EF Core)连接SQLite数据库时,报错。 使用框架 .NET8 错误信息: Exception: You need to call SQLitePCL.raw.SetProvider(). If you are using a bundle package, this is done by calling…

开疆智能Ethernet/IP转Profinet网关连接纳博特控制器配置案例

该案例是西门子PLC通过开疆智能研发的Ethernet/IP转Profinet网关KJ-PNG-108连接纳博特控制器的配置案例首先下载控制器的EDS文件,解析出其中的ethernet参数. 将EDS文件导入解析软件,透过软件可以看到数据长度默认为32字节,连接点为150/100 打…

同一个局域网下的两台电脑实现定时或者实时拷贝数据

【亲测能用】 需求:从数据库服务器上将数据库备份文件*.bak,每天定时拷贝到局域网下另一台电脑上,实现异机备份。 本文中192.168.1.110是本机,192.168.1.130是异机(备份机)。需求是每天定时从192.168.1.1…

【JavaWeb后端学习笔记】Redis常用命令以及Java客户端操作Redis

redis 1、redis安装与启动服务2、redis数据类型3、redis常用命令3.1 字符串String3.2 哈希Hash3.3 列表List3.4 集合Set(无序)3.5 有序集合zset3.6 通用命令 4、使用Java操作Redis4.1 环境准备4.2 Java操作字符串String4.3 Java操作哈希Hash4.4 Java操作…

易语言鼠标轨迹算法(游戏防检测算法)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

Vue 组件化开发:构建高质量应用的核心

目录 什么是 Vue 组件化? 组件化的优势 1. 组件的设计原则 1.1 高内聚,低耦合 示例:通过 Props 和 Events 传递数据 1.2 组件职责单一 1.3 避免组件过大 1.4 设计通用组件 示例:通用按钮组件 1.5 易于扩展 2. Vue 组件…