当前位置: 首页 > news >正文

【RAG KG】GraphRAG开源:查询聚焦摘要的图RAG方法

前言

传统的 RAG 方法在处理针对整个文本语料库的全局性问题时存在不足,例如查询:“数据中的前 5 个主题是什么?”

对于此类问题,是因为这类问题本质上是查询聚焦的摘要(Query-Focused Summarization, QFS)任务,而不是传统的显式检索任务。

Graph RAG 通过使用 LLM 构建基于图的文本索引,从源文档构建知识图谱。通过构建知识图谱,能够将复杂的、大规模文本数据集转化为易于理解和操作的知识结构,以便更好地理解实体(如人物、地点、机构等)之间的相互关系。

一、方法

1.1 源文档分块

该步骤是 Graph RAG 流程的基础,它决定了后续构建知识图谱和生成摘要的质量。主要需要考虑的就是源文档的分割粒度(《【RAG】Dense X Retrivel:合适的检索粒度对RAG的重要性(浅看命题粒度的定义及分解方法)》),需要决定输入文本从源文档中提取出来后,应该以何种粒度分割成文本块以供处理。这个决策会影响到后续步骤中 LLM 提取图索引元素的效率和效果。块大小的主要影响如下:

  • LLM 上下文窗口:文本块的长度会影响 LLM 调用的次数以及上下文窗口的召回率(recall)。较长的文本块可以减少对 LLM 的调用次数,但可能会因为更长的上下文而导致信息提取的召回率下降。

  • 召回率与精度的平衡:在提取过程中,需要平衡召回率和精度。较长的文本块可能提高召回率,但可能会牺牲精度。

    块大小的影响

上图展示了在 HotPotQA 数据集上,使用不同大小的文本块(600、1200、2400 tokens)和 通用实体提取提示(entity extraction prompt)与 gpt-4-turbo 进行单次提取时,检测到的实体引用数量的变化。结果表明,使用较小的文本块(600 tokens)能够提取出几乎是使用较大文本块(2400 tokens)两倍的实体引用。

1.2 信息抽取(实例提取)

该步骤是构建图索引的关键环节,它确保了从文本数据中提取出有用的结构化信息(KG)(识别并提取源文本中每个文本块的图节点和边的实例),为后续的社区检测和摘要生成打下了基础。

方法:

  • KG构建:使用 LLM + prompt 来识别上一步得到的文本块中的所有实体,包括它们的名称、类型和描述。然后,识别实体之间的关系,包括源实体、目标实体以及关系的描述。

  • 附加协变量提取:除了实体和关系之外,还可以使用次级提取提示来提取与提取的节点实例相关的附加协变量(covariates)。默认的协变量提示旨在提取与检测到的实体相关的声明,包括主题、对象、类型、描述、源文本跨度以及开始和结束日期。

  • 漏提取兜底:为了平衡效率和质量的需要,使用多轮“gleanings”来鼓励 LLM 检测在先前提取轮次中可能遗漏的任何实体。这是一个多阶段过程,首先要求 LLM 评估是否所有实体都已被提取,如果 LLM 响应有遗漏,则使用一个提示来鼓励 LLM 提取这些遗漏的实体。

使用 GPT-4 Turbo 从私有数据集构建的 LLM 生成的知识图谱。

上图中每个圆圈代表一个实体(例如,一个人、一个地点或一个组织),实体大小表示该实体具有的关系数量,颜色表示相似实体的分组。颜色分区是一种建立在图形结构之上的自下而上的聚类方法,它使我们能够回答不同抽象层次的问题。

1.3 实例提取->实例摘要

使用 LLM 提取实体、关系和声明的描述,这本身就是一种抽象摘要的形式。LLM 需要能够创建独立有意义的摘要,这些摘要可能暗示了文本中未明确陈述的概念(例如,隐含的关系)。通过摘要化过程,能够将大量文本信息浓缩成更加简洁、易于处理的格式,这有助于提高后续处理步骤的效率。并且,在处理长文本时,实例摘要有助于避免信息在大型语言模型的长上下文中被忽略或丢失的问题。

1.4 实例摘要->图社区

图模型构建-同质无向加权图:将实例摘要阶段得到的信息构建成一个同质无向加权图。在这个图中,实体作为节点,它们之间的关系作为边。边的权重可以表示为检测到的关系实例的归一化计数,这有助于反映关系的强度或频率。

社区检测算法

  • 社区划分:使用社区检测算法将图划分为多个社区(communities)。这些社区由彼此之间联系更紧密的节点组成,相对于图中的其他节点,社区内部的节点之间的连接更为频繁。
  • Leiden算法:文章中特别提到了使用 Leiden 算法进行社区检测,因为该算法能够有效地恢复大规模图的层次社区结构。Leiden 算法考虑了社区的模块化,能够提供不同层次的社区划分。

1.5 图社区到社区摘要

为每个社区创建报告式的摘要,这些摘要独立于其他社区,但共同构成了对整个数据集全局结构和语义的理解。社区摘要本身对于理解数据集的全局结构和语义非常有用,可以作为在没有具体问题时对整个语料库进行探索和理解的工具。

1.6 社区摘要到社区答案再到全局答案

  • 准备社区摘要
    随机分配:社区摘要被随机打乱并分成预定大小的块。这样做是为了保证相关信息分散在不同的上下文窗口中,而不是集中在一个窗口中,从而避免了信息的潜在丢失。
  • 生成中间答案(Map社区答案)
    • 并行生成:对于每个社区摘要块,LLM 被用来并行生成中间答案。同时,LLM 还被要求为生成的答案生成一个0到100之间的有用性得分,以指示生成的答案对目标问题的有用程度。
    • 过滤:得分为0的答案将被过滤掉,因为它们对回答问题没有帮助。
  • 汇总成全局答案(Reduce到全局答案)
    • 排序和汇总:根据有用性得分,将中间社区答案按降序排序,并将它们逐步添加到一个新的上下文窗口中,直到达到令牌限制。
    • 生成最终答案:当所有相关的部分答案都被考虑后,最终的上下文窗口被用来生成返回给用户的全局答案。

二、实验

原文使用了两个大规模数据集来验证Graph RAG方法的有效性:一个包含1669个文本块的播客转录数据集(约100万个token)和一个包含3197个文本块的新闻文章数据集(约170万个token)。相当于10本小说。

通过与naive RAG和全局文本摘要方法的比较,GraphRAG在全面性和多样性上优势明显,尤其是在使用8k tokens上下文窗口时,测试的最小上下文窗口大小(8k)在所有比较中普遍表现更好,尤其是在全面性上(平均胜率为58.1%),同时在多样性(平均胜率=52.4%)和授权性(平均胜率=51.3%)上与更大的上下文尺寸表现相当。

还有一个私有数据集上的实验,链接如下
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/

参考文献

  • 私有数据集实验:https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/

  • paper:From Local to Global: A Graph RAG Approach to Query-Focused Summarization,https://arxiv.org/pdf/2404.16130

  • 代码已开源:https://github.com/microsoft/graphrag

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 打卡第7天-----哈希表
  • Istio实战教程:Service Mesh部署与流量管理
  • AutoMQ 与蚂蚁数科达成战略合作
  • 机器学习——随机森林
  • WEB安全-文件上传漏洞
  • android 使用系统工具bootchart统计开机时长
  • 2-29 基于matlab的CEEMD
  • 【开发环境】搭建PX4+ROS2+MAVROS2+Simulink+Optitrack实物联合仿真环境
  • C# 中使用模式匹配 备忘
  • RT2-使用NLP的方式去训练机器人控制器
  • 半监督方案跟域自适应方案哪个更能提升目标检测泛化效果?
  • [高频 SQL 50 题(基础版)]第一千七百五十七题,可回收且低脂产品
  • Perl 语言入门学习及实践
  • 运维系列.Nginx:自定义错误页面
  • AI提示词:打造爆款标题生成器
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 【技术性】Search知识
  • Effective Java 笔记(一)
  • golang中接口赋值与方法集
  • iOS 颜色设置看我就够了
  • oldjun 检测网站的经验
  • php中curl和soap方式请求服务超时问题
  • Rancher-k8s加速安装文档
  • Spring Boot MyBatis配置多种数据库
  • springboot_database项目介绍
  • 基于组件的设计工作流与界面抽象
  • 简单数学运算程序(不定期更新)
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 力扣(LeetCode)965
  • 区块链分支循环
  • 微信支付JSAPI,实测!终极方案
  • 用jquery写贪吃蛇
  • 栈实现走出迷宫(C++)
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (10)ATF MMU转换表
  • (2)STL算法之元素计数
  • (4)Elastix图像配准:3D图像
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (三)Honghu Cloud云架构一定时调度平台
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)RocketMQ初步认识
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core WebAPI中封装Swagger配置
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net Stream篇(六)
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值