基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​ 原创

发布于 2025-3-24 08:15
浏览
0收藏

本文对代理知识蒸馏中的金字塔搜索方法进行了深入分析,并通过实际案例展示了基于这种技术可以较好地克服文档提取和RAG策略失败问题。

简介

当下,许多生成式AI应用场景仍然围绕检索增强生成(RAG)展开,但始终未能满足用户的期望。尽管对RAG改进的研究越来越多,甚至在流程中添加了代理技术,但许多解决方案仍然无法返回详尽的结果,遗漏了文档中很少提及的关键信息,需要多次搜索迭代,并且通常难以协调多个文档中的关键主题。最糟糕的是,许多实现方案仍然依赖于将尽可能多的“相关”信息与详细的系统和用户提示一起塞入模型的上下文窗口。协调所有这些信息通常超出了模型的认知能力,并损害了响应质量和一致性。

上述问题正是我们的代理知识蒸馏+金字塔搜索方法发挥作用的地方。我们团队成员Jim Brown、Mason Sawtell、Sandi Besen和我不追求最佳的分块策略、检索算法或使用基于推理时间的推理方法,而是采用代理方法来获取文档。

我们在数据摄取时充分利用模型的全部功能,专注于从文档数据集中蒸馏和保留最有意义的信息。这从根本上简化了RAG流程,使模型能够将其推理能力用于处理用户/系统指令,而不是费力理解文档块中的格式和不同信息。

我们专门针对那些通常难以评估的高价值问题,因为它们有多个正确答案或解决路径。这些情况是传统RAG解决方案最难解决的情况,而现有的RAG评估数据集对于测试这个问题空间来说基本上是不够的。

为了实施我们的研究,我们下载了道琼斯工业平均指数中30家公司去年的年度和季度报告。这些文件可以在​SEC EDGAR网站​​上找到。EDGAR上的信息可以访问并可以​免费下载​​,也可以通过​EDGAR公共搜索​​进行查询。有关更多详细信息,请参阅​SEC隐私政策​,SEC网站上的信息“被视为公开信息,网站用户可能会在未经SEC许可的情况下复制或进一步分发”。我们选择这个数据集有两个主要原因:首先,它超出了所评估模型的知识截止范围,确保模型不能根据预训练的知识回答问题;其次,它非常接近现实世界的商业问题,同时使我们能够使用公开数据讨论和分享我们的研究结果。​

虽然典型的RAG解决方案擅长事实检索,因为答案很容易在文档数据集中找到(例如,“Apple的年度股东大会何时举行?”),但它们很难解决需要更深入地理解文档中概念的细微问题(例如,“哪家DOW公司拥有最有前途的AI战略?”)。与我们测试的其他标准方法相比,我们的代理知识蒸馏+金字塔搜索方法在解决这些类型的问题方面取得了更大的成功,并且克服了在RAG系统中使用知识图谱的局限性。

在本文中,我们将介绍知识蒸馏过程的工作原理、这种方法的主要优点、示例,以及关于评估这些类型的系统的最佳方法的公开讨论,在许多情况下,没有单一的“正确”答案。

构建金字塔:代理知识蒸馏的工作原理

人工智能生成的图像显示了用于文档摄取的金字塔结构以及标记部分。

基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​-AI.x社区

作者和团队提供的图像描绘了用于文档摄取的金字塔结构,机器人代表着建造金字塔的代理。

概述

我们的知识蒸馏过程会从原始源文档中创建多层信息金字塔。我们的方法受到深度学习计算机视觉任务中使用的金字塔的启发,这些金字塔允许模型以多种尺度分析图像。我们获取原始文档的内容,将其转换为Markdown格式,然后将内容蒸馏为原子见解、相关概念、文档摘要和一般回忆/记忆的列表。在检索过程中,可以访问金字塔的任何或所有层级以响应用户请求。

如何蒸馏文档并构建金字塔:

  • 将文档转换为Markdown:将所有原始源文档转换为Markdown。我们发现,与JSON等其他格式相比,模型处理Markdown最适合此任务,并且它的标记效率更高。我们使用Azure文档智能(Document Intelligence)为文档的每一页生成Markdown,但还有许多其他开源库(如​MarkItDown​)可以执行相同的操作。我们的数据集包括331个文档,共计16,601页内容。​
  • 从每一页中提取原子见解:我们使用双页滑动窗口处理文档,这样可以对每一页进行两次分析。这使代理有机会在最初处理页面时纠正任何潜在错误。我们指示模型创建一个编了号的见解列表,该列表在处理文档中的页面时会不断增长。如果前一页的见解不正确,代理可以覆盖它们,因为它会查看每一页两次。我们指示模型按照主谓宾(SVO)格式以简单的句子提取见解,并将句子写得好像英语是用户的第二语言一样。这通过鼓励清晰度和准确性显著提高了性能。多次滚动每页并使用SVO格式还可以解决消歧问题,这对知识图谱来说是一个巨大的挑战。见解生成步骤对于从表格中提取信息也特别有用,因为模型会以清晰、简洁的句子从表格中捕获事实。我们的数据集产生了216,931条总见解,每页约13条见解,每份文档655条见解。​
  • 从洞察中蒸馏概念:从洞察的详细列表中,我们识别出与文档相关信息相联系的高级概念。此步骤可显著减少文档中的噪音和冗余信息,同时保留基本信息和主题。我们的数据集共产生14,824个概念,大约每页1个概念,每篇文档45个概念。​
  • 根据概念创建摘要:根据文档中的见解和概念,LLM编写的摘要看起来比人类编写的任何摘要都更好,并且比原始文档中的任何摘要都更信息密集。LLM生成的摘要提供了有关文档的极其全面的知识,并且小的标记密度包含大量信息。我们为每份文档生成一个摘要,总共331个。​
  • 跨文档存储回忆/记忆:在金字塔的顶端,我们存储了对所有任务都有用的关键信息。这可以是用户分享的有关任务的信息,也可以是代理通过研究和响应任务随时间了解的有关数据集的信息。例如,我们可以将DOW中的当前30家公司存储为回忆,因为此列表与模型知识截止时DOW中的30家公司不同。随着我们进行越来越多的研究任务,我们可以不断改进我们的回忆,并维护这些回忆来自哪些文件的审计线索。例如,我们可以跟踪各公司的AI战略,公司在哪些地方进行重大投资等。这些高级连接非常重要,因为它们揭示了单页或文档中无法显示的关系和信息。​

基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​-AI.x社区

从IBM 10Q、2024年第三季度中提取的洞察样本子集(第4页)

我们将金字塔每一层(页面及以上)的文本和嵌入存储在Azure PostgreSQL中。我们最初使用Azure AI Search,但出于成本原因改用了PostgreSQL。这要求我们编写自己的混合搜索功能,因为PostgreSQL尚未原生支持此功能。此实现适用于你选择的任何向量数据库或向量索引。关键要求是在金字塔的任何级别存储和高效检索文本和向量嵌入。

这种方法实际上创建了知识图谱的本质,但以自然语言存储信息,这是LLM想要与之交互的方式,并且在标记检索方面效率更高。我们还让LLM选择用于对金字塔的每个级别进行分类的术语,这似乎让模型自己决定描述和区分存储在每个级别的信息的最佳方式。例如,LLM更喜欢将“见解”而不是“事实”作为第一级蒸馏知识的标签。我们这样做的目的是通过让LLM决定如何存储和分组相关信息来更好地理解LLM如何思考这个过程。

使用金字塔:它如何与RAG和代理配合使用

在推理时,传统RAG和代理方法都受益于我们知识金字塔中预处理、蒸馏的信息。金字塔结构允许在传统RAG情况下(仅检索前X条相关信息)和代理情况下(代理在返回最终响应之前迭代地计划、检索和评估信息)进行高效检索。

金字塔方法的好处是,金字塔中任何级别的信息都可以在推理过程中使用。在我们的实现中,我们使用PydanticAI创建了一个搜索代理,该代理接收用户请求、生成搜索词、探索与请求相关的想法并跟踪与请求相关的信息。一旦搜索代理确定有足够的信息来满足用户请求,就会对结果进行重新排序并发送回LLM以生成最终答复。我们的实现允许搜索代理在收集有关概念/搜索词的详细信息时遍历金字塔中的信息。这类似于遍历知识图谱,但对于LLM来说,这种方式更自然,因为金字塔中的所有信息都以自然语言存储。

根据具体的使用场景,代理可以访问金字塔所有级别的信息,也可以只访问特定级别的信息(例如,仅检索概念中的信息)。对于我们的实验,我们没有检索原始页面级数据,因为我们想要专注于标记效率,并且发现LLM生成的见解、概念、摘要和回忆信息足以完成我们的任务。理论上,代理也可以访问页面数据;这将为代理提供重新检查原始文档文本的额外机会;但是,它也会显著增加使用的标记总数。

以下是我们用于响应用户请求的代理方法的高级可视化展示:

基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​-AI.x社区

作者和团队创建的图像概要性描述了代理研究和响应过程

金字塔的结果:现实世界的例子

为了评估我们方法的有效性,我们针对各种问题类别对其进行了测试,包括典型的事实调查问题和复杂的跨文档研究和分析任务。

事实调查(鱼叉捕鱼):

这些任务需要识别文档中隐藏的特定信息或事实。这些是典型的RAG解决方案所针对的问题类型,但通常需要进行多次搜索并消耗大量标记才能正确回答。

示例任务:“What was IBM’s total revenue in the latest financial reporting?(IBM在最新财务报告中的总收入是多少?)”

使用金字塔方法的示例响应:“IBM’s total revenue for the third quarter of 2024 was $14.968 billion [ibm-10q-q3-2024.pdf, pg. 4](IBM 2024年第三季度的总收入为149.68亿美元[ibm-10q-q3-2024.pdf,第4页])”

基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​-AI.x社区

用于研究和生成响应的总标记数

该结果是正确的(经过人工验证),并且仅使用了9,994个标记生成,其中生成的最终响应中有1,240个标记。

复杂的研究和分析:

这个例子中的任务涉及研究和理解多个概念,以更广泛地理解文档,并根据收集到的事实做出推论和明智的假设。

示例任务:“Analyze the investments Microsoft and NVIDIA are making in AI and how they are positioning themselves in the market. The report should be clearly formatted.(分析微软和英伟达在人工智能领域的投资以及他们在市场上的定位。报告格式应清晰。)”

示例响应:

基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​-AI.x社区

代理分析微软和英伟达的AI投资和定位后生成的响应

结果是一份执行非常迅速的综合报告,其中包含有关每家公司的详细信息。总共使用了26,802个符号来研究和响应请求,其中很大一部分用于最终响应(2,893个符号,或约占11%)。这些结果也是经过人工审查的,以验证其有效性。

基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​-AI.x社区

该代码片段表明该任务的符号总使用量

示例任务:“Create a report on analyzing the risks disclosed by the various financial companies in the DOW. Indicate which risks are shared and unique.(创建一份报告,分析道琼斯指数中各家金融公司披露的风险。指出哪些风险是共同的,哪些是独特的。)”

示例响应如下:

基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​-AI.x社区

代理针对披露风险生成的回复的第1部分

基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​-AI.x社区

代理针对披露风险生成的回复的第二部分

同样,此任务在42.7秒内完成,总共使用了31,685个符号,其中3,116个符号用于生成最终报告。

基于代理知识蒸馏技术克服文档提取和RAG策略失败问题​-AI.x社区

此代码片段表明该任务的符号总使用量

总体来看,这些针对事实调查和复杂分析任务的结果表明,金字塔方法能够使用最少量的标记高效地创建详细的报告,并且延迟时间短。用于任务的标记含义密集,噪音小,因此可以在任务间提供高质量、全面的响应。

金字塔的好处:为什么要使用它?

总体而言,我们发现金字塔方法显著提高了高价值问题的响应质量和整体性能。

我们观察到这种方法的一些主要好处包括:

  • 减少模型的认知负荷:当代理收到用户任务时,它会检索经过预处理的蒸馏信息,而不是原始的、格式不一致的、分散的文档块。这从根本上改善了检索过程,因为模型不会浪费其认知能力来尝试首次分解页面/块文本。​
  • 卓越的表格处理能力:通过分解表格信息并将其存储在简洁但描述性的句子中,金字塔方法可以更轻松地通过自然语言查询在推理时检索相关信息。这对于我们的数据集尤为重要,因为财务报告包含大量表格中的关键信息。​
  • 提高了对多种类型请求的响应质量:金字塔能够对精确的事实调查问题和涉及众多文档的众多主题的广泛分析任务提供更全面的上下文感知响应。​
  • 保留关键背景:由于蒸馏过程识别并跟踪关键事实,因此可能只在文档中出现一次的重要信息更容易维护。例如,注意到所有的表格都以数百万美元或特定货币表示。传统的分块方法经常导致此类信息被忽略。​
  • 优化的符号使用、内存和速度:通过在摄取时蒸馏信息,我们显著减少了推理期间所需的符号数量,能够最大化上下文窗口中信息的价值,并提高内存使用率。​
  • 可扩展性:随着文档数据集规模的扩大,许多解决方案都难以发挥作用。这种方法通过仅保留关键信息,提供了一种更高效的管理大量文本的方法。这还允许更有效地使用LLM上下文窗口,只需向其发送有用、清晰的信息即可。​
  • 高效的概念探索:金字塔使代理能够探索相关信息,类似于浏览知识图谱,但不需要生成或维护图中的关系。代理可以专门使用自然语言,并以特别高效和流畅的方式跟踪与其正在探索的概念相关的重要事实。​
  • 新兴数据集理解:我们在测试过程中发现了这种方法的一个意外好处。当问“你能告诉我关于这个数据集的什么信息?”或“我可以问什么类型的问题?”等问题时,系统能够做出响应并建议有效的搜索主题,因为它通过访问金字塔中的更高层级(如摘要和回忆)对数据集上下文有了更深入的理解。​

超越金字塔:评估挑战和未来方向

挑战

虽然我们在使用金字塔搜索方法时观察到的结果令人惊叹,但找到建立有意义的指标来评估整个系统(无论是在摄取信息时还是在信息检索期间)的方法却具有挑战性。传统的RAG和代理评估框架通常无法解决细微的问题和分析性响应,因为许多不同的响应都是有效的。

我们的团队计划在未来撰写一篇关于这种方法的研究论文,我们欢迎社区的任何想法和反馈,尤其是关于评估指标的想法和反馈。我们发现许多现有数据集都侧重于评估一个文档中的RAG应用场景或跨多个文档的精确信息检索,而不是跨文档和域的稳健概念和主题分析。

我们感兴趣的主要应用场景与更广泛的问题有关,这些问题代表了企业实际上希望如何与GenAI系统交互。例如,“告诉我关于客户X我需要知道的一切”或“客户A和B的行为有何不同?我更有可能与哪个客户成功会面?”。这些类型的问题需要深入了解来自许多来源的信息。这些问题的答案通常需要一个人综合来自业务多个领域的数据并对其进行批判性思考。因此,这些问题的答案很少被写在或保存在任何地方,这使得在典型的RAG过程中无法简单地通过向量索引存储和检索它们。

另一个考虑因素是,许多实际场景涉及动态数据集,其中文档不断被添加、编辑和删除。这使得评估和跟踪什么是“正确”的答案变得困难,因为答案会随着可用信息的变化而变化。

未来方向

我们相信,未来金字塔方法能够解决其中一些挑战,因为它能够更有效地处理密集文档,并将学习到的信息存储为回忆。然而,随着时间的推移,跟踪和评估回忆的有效性对于系统的整体成功至关重要,并且仍然是我们当前工作的重点领域。

当将这种方法应用于组织数据时,金字塔流程还可用于识别和评估业务各个领域的差异。例如,上传公司的所有销售宣传材料可能会发现某些产品或服务的定位不一致。它还可用于比较从各种业务线数据中提取的见解,以帮助了解团队是否以及在何处对主题或不同优先级产生了相互冲突的理解。此应用程序超越了纯粹的信息检索应用场景,并允许金字塔作为组织协调工具,帮助识别消息传递、术语和整体沟通中的分歧。

结论

知识蒸馏金字塔方法意义重大,因为它充分利用了LLM在提取和检索时的全部功能。我们的方法允许你将密集信息存储在更少的标记中,这还具有在推理时减少数据集中噪音的额外好处。我们的方法运行速度非常快,并且具有令人难以置信的标记效率,我们能够在几秒钟内生成响应,探索数百次搜索,并且在整个搜索、检索和响应生成过程中平均使用<40K个标记(这包括所有搜索迭代!)。

我们发现,LLM更擅长将原子见解写成句子,并且这些见解可以有效地从基于文本和表格的数据中蒸馏信息。这些以自然语言编写的蒸馏信息对于LLM来说非常容易理解和推理,因为它不必花费不必要的精力去推理和分解文档格式或过滤噪音。

最后,在金字塔的任何层级检索和聚合信息的能力也为解决各种查询类型提供了极大的灵活性。这种方法为大型数据集提供了良好的性能,并支持需要细致入微的信息检索和分析的高价值应用场景中。

译者介绍

朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。

原文标题:​Overcome Failing Document Ingestion & RAG Strategies with Agentic Knowledge Distillation​,作者:Tula Masterman

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2025-3-24 08:20:01修改
收藏
回复
举报
回复
相关推荐