GraphRAG深入解析

GraphRAG深入解析

  • GraphRAG 深入解析
    • 概述
      • 索引
      • 查询
    • 索引过程深入解析
      • 步骤 1:处理文本块
      • 步骤 2:图提取
      • 步骤 3:图增强
      • 步骤 4:社区总结
      • 步骤 5:文件处理
      • 步骤 6:网络可视化
    • 查询过程深入解析
      • 本地搜索
      • 问题生成
      • 全局搜索

GraphRAG 深入解析

 GraphRAG 是一种结构化的、分层的检索增强生成 (RAG) 方法,不同于使用纯文本片段的简单语义搜索方法。GraphRAG 流程包括从原始文本中提取知识图谱、构建社区层次结构、为这些社区生成摘要,然后在执行基于 RAG 的任务时利用这些结构。

 检索增强生成 (RAG) 是一种使用真实世界的信息改进 LLM 输出的技术。这种技术是大多数基于 LLM 的工具的重要组成部分,大多数 RAG 方法使用向量相似性作为搜索技术,我们称之为 Baseline RAG。GraphRAG 使用知识图谱在推理复杂信息时大幅提高问答性能。RAG 技术在帮助 LLM 推理私有数据集方面显示出良好的前景- 私有数据集是 LLM 未经过训练且从未见过的数据,例如企业的专业研究、商业文档或通信。Baseline RAG 的创建是为了帮助解决这个问题,但我们观察到 Baseline RAG 表现非常差的情况。例如:

  • 基线 RAG 难以将各个点连接起来。当回答问题需要通过共享属性遍历不同的信息片段以提供新的综合见解时,就会发生这种情况。
  • 当被要求全面理解大型数据集合甚至单个大型文档中的总结语义概念时,基线 RAG 的表现不佳。

 为了解决这一问题,技术社区正在努力开发扩展和增强 RAG 的方法。微软研究院的新方法 GraphRAG 使用 LLM 根据输入语料库创建知识图谱。该图谱与社区摘要和图形机器学习输出一起用于增强查询时的提示。GraphRAG 在回答上述两类问题方面表现出了显著的进步,表现出的智能或掌握程度优于之前应用于私有数据集的其他方法。

概述

 GraphRAG 建立在微软之前使用图机器学习的研究和工具的基础上。GraphRAG 流程的基本步骤包含索引和查询两部分。

索引

  1. 将输入语料库切分为一系列 TextUnit,这些 TextUnit 作为其余过程的可分析单元,并在我们的输出中提供细粒度的参考。
  2. 使用 LLM 从 TextUnits 中提取所有实体、关系和关键声明。
  3. 使用莱顿算法对图表进行层次聚类。
  4. 自下而上地生成每个社区及其组成部分的摘要。这有助于整体理解数据集。

查询

 在查询时,这些结构用于在回答问题时为 LLM 上下文窗口提供材料。主要查询模式包括:

  • 利用社区摘要对语料库的整体问题进行全局搜索推理。
  • 本地搜索通过向邻居和相关概念展开来推理特定实体。

索引过程深入解析

 本节主要介绍工作流如何将文本文档转换为 GraphRAG 知识模型,主要分为六个阶段。索引工作流的完整配置,请查看配置文档。


六阶段数据处理工作流预览

步骤 1:处理文本块

 将输入文档转换为 TextUnits。使用文本分段技术将文档进行分块,文本块还作为实体和关系的来源被提取的图引用,便于追溯到原始文本。对于文本块大小的设置需要考虑具体使用情况,一般较大的块会导致输出保真度较低,参考文本意义较小;但是,使用较大的块可以大大缩短处理时间。文档和文本单元之间一般存在严格的一对多关系,在极少数情况下,这可以变成多对多关系(当文档很短并且我们需要其中几个来组成一个有意义的分析单元)。
文本转换为文本块

步骤 2:图提取

 在此阶段,分析每个文本单元并提取图元素:实体、关系和协变量。

图元素提取

  • 实体和关系提取

 在图提取的第一步中,我们处理每个文本单元,以便使用 LLM 从原始文本中提取实体和关系。此步骤的输出是每个文本单元的子图,其中包含具有名称、类型和描述的实体列表,以及具有源、目标和描述的关系列表。这些子图合并在一起,任何具有相同名称和类型的实体都通过创建其描述数组进行合并。同样,任何具有相同源和目标的关系都通过创建其描述数组进行合并。

  • 实体和关系摘要

 现在我们有了实体和关系图,每个图都有一串描述,我们可以将这些列表汇总为每个实体和关系的单个描述。这可以通过要求 LLM 提供简短的摘要来完成,该摘要捕获每个描述中的所有不同信息。这使得我们所有的实体和关系都有一个简洁的描述。

  • 实体消歧(微软 GraphRAG 配置默认是不启用的)

 图提取的最后一步是解析任何代表相同现实世界实体但名称不同的实体。由于这是通过 LLM 完成的,并且我们不想丢失信息,因此我们希望采取保守、非破坏性的方法。
 然而,我们目前对实体解析的实现是破坏性的。它将为 LLM 提供一系列实体,并要求其确定哪些实体应该合并。然后,这些实体将合并为一个实体,并更新它们的关系。
 我们目前正在探索其他实体解析技术。在不久的将来,实体解析将通过在实体变体之间创建一条边来执行,表明实体已被索引引擎解析。这将允许最终用户撤消索引端解析,并使用类似的过程添加自己的非破坏性解析。

  • 协变量提取

 最后,作为一个独立的工作流程,我们从源 TextUnits 中提取声明。这些声明代表具有评估状态和时间限制的积极事实陈述。它们作为称为协变量的主要工件发出(协变量在本地搜索模式中被引用)。

步骤 3:图增强

 现在我们有了可用的实体和关系图,我们希望了解它们的社区结构,并用其他信息扩充该图。这分为两个步骤:社区检测和图嵌入。这为我们提供了显式(社区)和隐式(嵌入)方法来理解图的拓扑结构。

图增强

  • 社区检测

 在此步骤中,我们使用分层莱顿算法生成实体社区的层次结构。此方法将对我们的图应用递归社区聚类,直到达到社区规模阈值。这将使我们能够了解图的社区结构,并提供一种在不同粒度级别上导航和总结图的方法。

  • 图嵌入

 在此步骤中,我们使用 Node2Vec 算法生成图中节点的向量表示。这将使我们能够理解图的隐式结构,并提供额外的向量空间,以便在查询阶段搜索相关概念。

步骤 4:社区总结

社区总结

 此时,我们有一个实体和关系的图、实体的社区层次结构以及 node2vec 嵌入。
 现在,我们希望基于社区数据并为每个社区生成报告。这让我们可以从多个粒度点对图表有一个高层次的了解。例如,如果社区 A 是顶级社区,我们将获得有关整个图表的报告。如果社区是较低级别的,我们将获得有关本地集群的报告。

  • 生成社区报告

 在此步骤中,我们使用 LLM 生成每个社区的摘要。这将使我们能够了解每个社区中包含的独特信息,并从高级或低级角度提供对图表的范围理解。这些报告包含执行概述,并引用社区子结构中的关键实体、关系和声明。

  • 总结社区报告

 在此步骤中,每个社区报告都会通过 LLM 进行总结,以供摘要使用。

  • 社区嵌入

 在此步骤中,我们通过生成社区报告、社区报告摘要和社区报告标题的文本嵌入来生成我们社区的向量表示。

步骤 5:文件处理

 在工作流程的这个阶段,开始处理文档图谱核心步骤包括文本块图谱的创建和文档的向量化表示。

文件处理

  • 链接到 TextUnits

 在此步骤中,我们将每个文档链接到第一阶段创建的文本单元,创建文本块之间的上下文关系。这使我们能够了解哪些文档与哪些文本单元相关。

  • 文档嵌入

 在此步骤中,我们使用文档切片的平均嵌入来生成文档的向量表示。我们对不重叠的块重新分块文档,然后为每个块生成嵌入。我们创建这些块的平均值,并按标记计数加权,并将其用作文档嵌入。这将使我们能够理解文档之间的隐式关系,并帮助我们生成文档的网络表示。

步骤 6:网络可视化

 在工作流程的这个阶段,我们执行了一些步骤来支持现有图中高维向量空间的网络可视化。此时有两个逻辑图表在起作用:实体关系图和文档图。

网络可视化

 对于每个逻辑图,我们执行 UMAP 降维以生成图的 2D 表示。这将使我们能够在 2D 空间中可视化图并了解图中节点之间的关系。然后将 UMAP 嵌入作为 Nodes 表发出。该表的行包括一个鉴别器,指示节点是文档还是实体,以及 UMAP 坐标。

查询过程深入解析

 查询引擎是 Graph RAG 库的检索模块。它是 Graph RAG 的核心组件之一。它负责以下任务:

  • 本地搜索
  • 全局搜索
  • 问题生成

本地搜索

  • 基于实体的推理
     本地搜索方法通过将 LLM 提取的知识图谱中的相关数据与原始文档的文本块相结合来生成答案。此方法适用于需要了解文档中提到的特定实体的问题(例如,洋甘菊的治疗功效是什么?)。

  • 方法论

本地搜索数据流

 给定用户查询和(可选)对话历史记录,本地搜索方法会从知识图谱中识别出一组与用户输入在语义上相关的实体。这些实体可作为知识图谱的访问点,从而提取更多相关详细信息,例如连接实体、关系、实体协变量和社区报告。此外,它还会从与已识别实体相关的原始输入文档中提取相关文本块。然后对这些候选数据源进行优先排序和筛选,以适应预定义大小的单个上下文窗口,该窗口用于生成对用户查询的响应。

问题生成

  • 基于实体的问题生成
     问题生成方法将知识图谱中的结构化数据与输入文档中的非结构化数据相结合,生成与特定实体相关的候选问题。此功能获取用户查询列表并生成下一个候选问题。这对于在对话中生成后续问题或为调查员生成问题列表以深入研究数据集非常有用。

  • 方法论
     给定先前用户问题的列表,问题生成方法使用与本地搜索相同的上下文构建方法来提取和优先处理相关的结构化和非结构化数据,包括实体、关系、协变量、社区报告和原始文本块。然后,这些数据记录被放入单个 LLM 提示中,以生成代表数据中最重要或最紧急的信息内容或主题的候选后续问题。

全局搜索

  • 基于整个数据集推理
     全局搜索方法通过以 map-reduce 方式搜索所有 AI 生成的社区报告来生成答案。这是一种资源密集型方法,但通常可以很好地回答需要了解整个数据集的问题(例如,本笔记本中提到的药材最重要的价值是什么?)。

在这里插入图片描述

 上图是一个经典的 MapReduce 原理图结构,包含以下主要步骤(包含全局 GraphRAG 流程的简单注解)。

  1. 将 input 的文件拆分成 splits,由于测试用的文件较小,所以每个文件作为一个 split,并将文件按行分割。这一步由 mapreduce 框架自动完成。(通过向量检索语义相关的社区)
  2. 将分割好的文件交给用户定义的 map 方法进行处理,生成<key,value>对。(生成社区和用户问题相关程度的分值,和社区节点本身组成 MAP)
  3. 得到 map 方法输出的<key,value>对后,shuffle 过程,会把相同 key 值相同的放到一起。(社区结果基于与问题的相关度做 Shuffle,可以理解成分组)
  4. Reduce 过程,把 key 值相同 value 值累加,得到新的<key,value>对,并作为 word count 的输出结果。(组内综合打分后排序过滤 0 分的结果,然后由 LLM 生成回复)

 Baseline RAG 很难处理需要汇总整个数据集的信息才能得出答案的查询。诸如“数据中的前 5 个主题是什么?”之类的查询表现不佳,因为 Baseline RAG 依赖于对数据集内语义相似的文本内容进行向量搜索。查询中没有任何内容可以将其引导至正确的信息。

 但是,使用 GraphRAG,我们可以回答这些问题,因为 LLM 生成的知识图谱的结构告诉我们整个数据集的结构(以及主题)。这允许将私有数据集组织成预先汇总的有意义的语义集群。使用我们的全局搜索方法,LLM 在响应用户查询时使用这些集群来总结这些主题。

  • 方法论

全局搜索数据流

 给定用户查询和(可选)对话历史记录,全局搜索方法使用来自图的社区层次结构指定级别的 LLM 生成的社区报告集合作为上下文数据,以 map-reduce 方式生成响应。在此 map 步骤中,社区报告被分割成预定义大小的文本块。然后使用每个文本块生成一个中间响应,其中包含一个要点列表,每个要点都附有数字评级,表明该要点的重要性。在此步骤中,reduce 从中间响应中筛选出的一组最重要的要点被汇总并用作上下文来生成最终响应。

 全局搜索响应的质量可能在很大程度上受到选择用于获取社区报告的社区层级的影响。较低层级的报告较为详细,因此往往会产生更全面的响应,但由于报告数量较多,生成最终响应所需的时间和 LLM 资源也可能会增多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488758.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL进阶篇】锁:全局锁、表级锁以及行级锁

一、锁的概述 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中除传统的计算资源&#xff08;CPU、RAM、I/O&#xff09;的争用以外&#xff0c;数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须要解决的一个问题&am…

基于Python的河南省天气数据分析与空气质量预测研究【含数据抓取与数据库自动存储】

有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 抓取天气网站 以下是部分代码展示 import matplotlib.pyplot as plt# 设置中文字体 plt.rcParams[axes.unicode_minus] False # 不使用中文减号 plt.rcParams[font.sans-serif] FangSong # …

Python爬虫技术 第14节 HTML结构解析

HTML 结构解析是 Web 爬虫中的核心技能之一&#xff0c;它允许你从网页中提取所需的信息。Python 提供了几种流行的库来帮助进行 HTML 解析&#xff0c;其中最常用的是 BeautifulSoup 和 lxml。 1. 安装必要的库 首先&#xff0c;你需要安装 requests&#xff08;用于发送 HTT…

Linux系统上安装zookeeper

百度网盘 通过网盘分享的文件&#xff1a;zookeeper_linux 链接: https://pan.baidu.com/s/1_hybXZVwTRkotz0VbwbSMw?pwd8888 提取码: 8888 1.将压缩包拖进虚拟机 2.解压压缩包 cd /ruanjian/zookeeper/ tar -zxvf apache-ZooKeeper-3.7.2-bin.tar.gz3. 进入到conf目录 cd …

Godot入门 03世界构建1.0版

在game场景&#xff0c;删除StaticBody2D节点&#xff0c;添加TileMap节点 添加TileSet图块集 添加TileSet源 拖动图片到图块&#xff0c;自动创建图块 使用橡皮擦擦除。取消橡皮擦后按住Shift创建大型图块。 进入选择模式&#xff0c;TileMap选择绘制&#xff0c;选中图块后在…

通过强大的语义层增强现代数据湖

在现代数据湖架构中&#xff0c;语义层通过向数据添加有意义的上下文来发挥至关重要的作用&#xff0c;否则这些上下文会丢失。此层充当现代数据湖&#xff08;数据仓库和查询引擎&#xff09;处理层中未整理的原始数据与利用此数据的工具和应用程序之间的桥梁。此服务对 AI 特…

【Golang 面试基础题】每日 5 题(七)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…

【中项】系统集成项目管理工程师-第5章 软件工程-5.6软件质量管理与5.7软件过程能力成熟度

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

ROS机械臂——rviz+gazebo仿真环境搭建

纲要 ROS的控制插件 常用控制器 完善机器人模型 为link添加惯性参数和碰撞属性 为joint添加传动装置 添加gazebo控制插件 加载机器人模型 启动仿真环境 问题&#xff1a;gazebo加载的模型只有一层阴影 解决方案&#xff1a;关闭虚拟机&#xff0c;设置虚拟机属性&#xff0c;…

【数据结构-前缀和】力扣2550.统计范围内的元音字符串数

给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内&#xff08;包含 这两个值&#xff09;并且以元音开头和结尾的字符串的数目。 返回一个整数数组&#xff0c;其中…

springboot实战(十二)之通过注解的方式记录接口出入参log入库

前言 生产过程中&#xff0c;为了更好的辅助线上问题排查避免不了对接口出入参进行日志输出的时候&#xff0c;并且为了分析接口数据效果需要将每次请求接口的出入参进行落库方便后续的数据分析&#xff0c;这时总不能每个接口入参之后、出参之前都打印一遍日志吧&#xff1f;如…

C++第十弹 ---- vector的介绍及使用

目录 前言vector的介绍及使用1. vector的使用1.1 vector的定义1.2 iterator的使用1.3 vector空间增长问题1.4 vector增删查改 2. vector迭代器失效问题(重点) 总结 前言 本文介绍了C中的vector数据结构及其使用方法。 更多好文, 持续关注 ~ 酷酷学!!! 正文开始 vector的介绍…

基本类型的包装类,面向对象三大特性,继承(inherit).一道力扣分享。

>>>基本类型的包装类 拆包–>封包 拆包–>包装类型转换为基本数据类型 封包—>基本数据类型转换为包装类型 编号基本数据类型包装类型1byteByte2shortShort3charCharacter4intInteger5longLong6floatFloat7doubleDouble8booleanBoolean 为何要用包装类型…

【echarts】中如何设置曲线展示最新值、最大值、最小值

需要用到的属性&#xff1a;图表标注 series-line. markPoint 默认可以通过 type直接标注&#xff1a;‘min’ 最小值、‘max’ 最大值、‘average’ 平均值。 markPoint: {data: [{type: max},{type: min}]}如何展示最新值 如果要展示最新值得话&#xff0c;需要设置 标注…

昇思25天学习打卡营第19天|DCGAN生成漫画头像

DCGAN生成漫画头像总结 实验概述 本实验旨在利用深度卷积生成对抗网络&#xff08;DCGAN&#xff09;生成动漫头像&#xff0c;通过设置网络、优化器以及损失函数&#xff0c;使用MindSpore进行实现。 实验目的 学习和掌握DCGAN的基本原理和应用。熟悉使用MindSpore进行图像…

Vue3时间选择器datetimerange在数据库存开始时间和结束时间

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

[算法]归并排序(C语言实现)

一、归并排序的定义 归并排序&#xff08;Merge sort&#xff09;是建立在归并操作上的一种有效的排序算法。该算法是采用分治法&#xff08;Divide and Conquer&#xff09;的一个非常典型的应用。 二、归并排序的算法原理 归并排序的算法可以用递归法和非递归法来实现…

介绍一下TCP/IP 模型和 OSI 模型的区别

OSI 模型是由国际标准化组织制定的一个用于计算机或通信系统间互联的标准体系&#xff0c;一共有七层&#xff0c;由上而下分别为应用层&#xff0c;表示层&#xff0c;会话层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层和物理层&#xff0c;虽然 OSI 模型理论…

华为网络模拟器eNSP安装部署教程

eNSP是图形化网络仿真平台&#xff0c;该平台通过对真实网络设备的仿真模拟&#xff0c;帮助广大ICT从业者和客户快速熟悉华为数通系列产品&#xff0c;了解并掌握相关产品的操作和配置、提升对企业ICT网络的规划、建设、运维能力&#xff0c;从而帮助企业构建更高效&#xff0…

Geoscene Pro的数据管理

GeoScene Pro是为新一代WebGIS平台而全新打造的一款具有高效、强大生产力且为全面国产的的高级桌面应用程序&#xff0c;可以对来自本地、GeoScene Online、或者GeoScene Portal的数据进行可视化、编辑、分析&#xff0c;可以同时在2D和3D中制作内容&#xff0c;并发布为要素服…