首页 > 其他分享 >RAG知识库之针对长文档的Raptor索引

RAG知识库之针对长文档的Raptor索引

时间:2024-08-05 08:57:42浏览次数:10  
标签:RAG 层级 知识库 文档 向量 聚类 文本 Raptor

      在现有的朴素RAG应用中其只是简单的对文档进行分块后存储的向量库中,然后在使用是根据 提问问题 从查询向量库中查询相识度较高的文档快作为问题上下文提交到LLM让其根据上下文去回答用户所提问的问题。对于小文本可以直接将整个文档作为上下文或使用上篇文章所提到的多表示索引(Multi-representation indexing)进行Context上下文的优化处理。
      朴素RAG分块大小、文本叠加值设置都对向量检索质量有着重要的影响,如文档太多可能会丢失长尾知识,缺乏对整个文档上下文的理解从而影响到RAG的质量;如针对某篇长小说文档提问主角出生经历对其结尾的结局产生了什么影响?通常小说前面几张描述的是主角出生与经历结尾描述的是其结局,文档过长不可能将整个文档作为问题上下文,异无法理解整篇文档,而只是使用 从向量库中检索到相识度最高的top K文本块最为问题上下文
      Raptor使用树形结构来捕获文本的高层级和低层级细节,其对文本块进行递归聚类、生成聚类的文本摘要总结自下而上生成一棵树,所生成的 Raptor能够作为问题上下文代表了不同级别的问题,可以回答不同层级的问题。

image.png

      图为Raptor所生成的树结构,从下往上递归生成,此树为三个层级从文本块上一层级算起。文本1、文本2、文本3、文本4为叶子结点使用长文档分割而成,先对文本块进行文本词嵌入,然后使用UMAP对嵌入向量进行降维接着使用高斯混合模型(GMM) 对降维后的向量进行聚类,嵌入词向量通常维度较高直接使用GMM可能会表现不佳所以须先 UMAP(Uniform Manifold Approximation and Projection)降维。聚类时使用软聚类,因为每个文本块通常包含多个主题信息所以一个文本块属于多个聚类主题更加合理,保证总结摘要包含多个主题信息。

      1、对文档初始分割后的文本块嵌入向量后进行降维后使用GMM聚类
      2、合并同一个聚类中的文本块使用LLM对该聚类文本块进行总结摘要
      3、如生成的聚类数大于1与层级小于指定层级则重复1、2、3、操作递归对上层级 生成的总结摘要进行:嵌入、聚类、生成摘要;

image.png

      此图为Raptor算法总体流程与层级1内部数据结构图具体流程如下:

      1、先将长文档分割为文本块。
      2、对文本块进行此嵌入,UMAP降维后使用GMM生成聚类。
      3、合并同聚类文本块,使用LLM对每个聚类文本块进行总结摘要。
      4、根据条件判断是否递归重复1、2、3流程。
      5、Raptor树折叠展平获取总结摘要列表写入向量存储。
      6、原始文本块写入向量存储。

      而本篇文章所描述的RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)正能够避免出现这种情况,可以说其是为了大文本而生的。Raptor通过递归的对长文本块进行嵌入、聚类总结从而构造了一棵具有对该文档具有不同层级总结的树结构从而能够更全面的理解与整合该长文档信息。

标签:RAG,层级,知识库,文档,向量,聚类,文本,Raptor
From: https://www.cnblogs.com/softlin/p/18339788

相关文章

  • RAPTOR:索引树状RAG和递归推理检索系统
    RAPTOR论文和源码论文:https://arxiv.org/pdf/2401.18059代码:https://github.com/parthsarthi03/raptorRAPTOR(RECURSIVEABSTRACTIVEPROCESSINGFORTREE-ORGANIZEDRETRIEVAL),如这一论文标题中所述,这一方法是把文档按照树状结构进行索引组织,再使用递归推理来进行检索。RAP......
  • Android最全8万字Fragment面试题及参考答案(持续更新)
    目录什么是Fragment?Fragment和Activity之间的关系是什么?为什么要使用Fragment而不是直接使用多个Activity?Fragment是如何被添加到Activity中的?如何从Activity中移除一个Fragment?Fragment可以嵌套吗?如何实现?如何获取当前Activity中的Fragment?如何通过FragmentManager......
  • Android开发 - Fragment 类详解
    Fragment是什么Fragment是Android开发中的一种模块化组件,一个抽象类,允许开发者将一个Activity分解成多个独立的、可重用的部分。每个Fragment都有自己的生命周期和用户界面,可以独立管理自己的UI和行为,它们可以动态地添加、移除或替换,从而提高应用程序的灵活性和可维护......
  • Android开发 - DetailFragment 类解析
    DetailFragment是什么DetailFragment专门用于显示详细信息。当用户在主界面(例如一个列表)中选择某个项时,应用会使用DetailFragment显示该项的详细信息。它通常与主界面的Fragment协同工作,形成一个主从结构(Master-Detail)使用场景新闻应用:主界面显示新闻列表,DetailFrag......
  • Llamaindex RAG实践
    任务要求:基于LlamaIndex构建自己的RAG知识库,寻找一个问题A在使用LlamaIndex之前InternLM2-Chat-1.8B模型不会回答,借助LlamaIndex后InternLM2-Chat-1.8B模型具备回答A的能力,截图保存。本文将分为以下几个部分来介绍,如何使用LlamaIndex来部署InternLM21.8B(以......
  • 文件存储服务系统(File Storage Service System)-00-文件服务器是什么?为什么需要?
    文件服务系列文件存储服务系统(FileStorageServiceSystem)-00-文件服务器是什么?为什么需要?文件存储服务系统(FileStorageServiceSystem)-01-常见的文件协议介绍文件系统FTPUbuntu安装入门介绍文件存储服务系统(FileStorageServiceSystem)-02-SFTP协议介绍分布式文件服......
  • Android开发 - BrowseFragment 类解析
    BrowseFragment是什么例如电视应用屏幕上有很多行,每行显示一组视频,比如“热门电影”、“新剧集”、“推荐给你”等。每行可以左右滚动,显示不同的视频缩略图。BrowseFragment就是用来创建这种界面的主要功能每行有一个标题:告诉你这行内容是什么,比如“热门电影”每行可以滚......
  • Vue 使用 vue-drag-resize 实现拖拽和随意缩放大小及安装报错处理
    一、vue-drag-resize的安装yarnaddvue-drag-resize 下面是错误解决方案:TypeError:Cannotreadpropertiesofundefined(reading‘_c’) 解决方案:在引入时加上“/src”: importVueDragResizefrom"vue-drag-resize";改成importVueDragResizefrom"vue-d......
  • 无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用
    无缝融入,即刻智能[1]:MaxKB知识库问答系统,零编码嵌入第三方业务系统,定制专属智能方案,用户满意度飙升1.简介MaxKB(MaxKnowledgeBase)是一款基于LLM大语言模型的开源知识库问答系统,飞致云是中国领先的开源软件公司。飞致云旗下开源产品包括1Panel开源面板、JumpServer开源......
  • 设备管理系统AI大模型应用RAG案例
    设备管理系统-AI大模型应用RAG案例设备管理系统功能   设备管理系统是为企业设备管理设计的软件,它通过数字化和自动化的方式,帮助企业提高管理效率和准确性。主要功能点:设备档案管理:帮助企业建立完整的设备档案,记录设备基本信息,如名称、型号、规格、供应商等,便于查询和管理。设......