简单了解一下GraphRAG

传统RAG的缺点

        当我们将一段文本信息以句子分割后,存入到向量数据库中。用户提问“老王喜欢吃什么”,这个问题会与向量数据库中的许多句子关联性比较强,能返回准确且具体的信息。

        但是,若是问题换成“出现了几次西瓜”,西瓜是一个比较具体的名词/物品,它容易出现在很多句子中,但是在出现的句子中占比又不是很大。

        用户的问题中的“西瓜”,在“老王喜欢吃西瓜”这句话中出现,但是这句话的只有一小部分信息是“西瓜”,所以,在提问这种比较细节性的问题时,在做问题与句子之间的相似度计算,相似度可能并不是很大,这就导致最后的查询结果会漏掉一些句子,甚至匹配错误。

        那么如果划分的颗粒度再细一点,将“老王喜欢吃瓜”,切成“老王”,“喜欢吃”,‘西瓜’,又分成了三段,那么问题“西瓜出现几次”这个问题可能会比较好解决了(因为“西瓜”单独出现了),但是回到原问题“老王喜欢吃什么”又难以解决了,因为“老王喜欢吃什么”,只会匹配到“老王”和“喜欢吃”,匹配不到‘西瓜’,所以原问题又难以得到解决。

        所以当划分段落的颗粒度比较粗,容易丢失细节,若划分颗粒度太细,语义之间的联系(老王--->喜欢吃---->西瓜)又被消除。这就是传统RAG的缺点之一。

1. 检索层面的缺点

  • 语义召回不稳定:依赖向量召回(如基于 embedding),可能出现召回不相关或遗漏关键信息的情况。

  • 知识碎片化:检索出的文档片段往往是局部的,缺乏整体结构,模型容易“拼凑”出不连贯的回答。

  • 依赖索引质量:如果文本清洗、切分、embedding 表达不佳,检索效果会大幅下降。

2. 生成层面的缺点

  • 上下文窗口限制:检索到的内容需要塞进模型上下文,受限于窗口大小,导致长文档场景容易丢失重要信息。

  • 幻觉问题仍存在:虽然 RAG 能缓解模型“胡编乱造”,但如果检索不准,模型仍可能基于错误内容生成回答。

  • 信息融合困难:模型可能无法很好地整合多个检索片段的信息,尤其是在需要推理、对比或跨段整合时。

3. 系统架构层面的缺点

  • 延迟较高:RAG 需要两步(检索 + 生成),相比纯生成模型响应更慢。

  • 维护复杂:需要单独维护知识库、向量索引和更新流程,工程成本高。

  • 难以动态更新:传统 RAG 对知识更新通常需要重新向量化和索引,实时性不足。

4. 应用层面的缺点

  • 鲁棒性不足:对用户提问方式敏感,表达不同可能导致检索结果差异显著。

  • 领域依赖强:在知识高度专业、语义微妙的领域(如法律、医疗),检索误差对结果影响极大。

  • 可解释性有限:虽然能返回检索片段,但生成结果和检索片段之间的逻辑联系往往不透明。

知识图谱

        为了解决传统RAG的缺点,人们就应用知识图谱。下面这张就是一个典型的图谱,有实体节点“老王”和“习惯”,也有关系节点“爱吃”。

        我们还可以赋予实体节点和关系节点属性和描述,比如实体节点“老王”,他的标签/属性可以是“人”,可以附带描述“爱吃西瓜”,关系节点“爱吃”,可以有描述“老王爱吃的东西”等等。比如,在neo4j图知识库中可以轻松做到这些。

        在传统知识图谱构建中,我们需要从这一段文字中找出实体,抽取出实体之间的关系,算法十分复杂而且性能也一般。但是,再出现大模型之后,这些步骤就相对容易许多,而且性能也很好。做法就是,写好一段示例,并加上数据传给大模型,让大模型来抽取出实体和关系。需要注意的是里面的实体类型,需要我们自己定义,你可以认为“人”是实体,可以认为“水果”是实体,还可以认为“味道”是实体。

        并且当大模型返回解析后的知识图谱之后,通常来说我们会将知识图谱和原文再发送给大模型,再让他解析,循环往复直到大模型任务这个原文的实体和关系都已经以最细的粒度抽取完毕了。

这样我们就借助大模型生成了某一文本段落的知识图谱。

GraphRAG

合并图谱

将拆分后的每个段落生成的知识图谱合并,节点和关系合并的时候,其所带的描述信息也会一同合并。

之后,把每个节点和关系(边)的合并后的描述信息再发送给大模型,让他对这些信息再总结一下,高度概括一下。

用大模型高度总结后的描述信息代替原本合并后的描述信息。此外GraphRAG还会一直维护着图谱和原文的关联信息。比如实体节点“老王”是由哪几段生成。

同理,一段原文也会对应着知识图谱中的哪些实体节点和关系节点

简化图谱

现在的知识图谱太大了,GraphRAG会通过算法合并部分图谱作为一个整体,比如将现在的知识图谱合并成了两个整体。

再把每个整体中的所有节点和关系的描述信息发送给大模型,再让大模型进行高度总结,甚至还能推理。比如通过“老王爱吃瓜和桃”和“小王只爱吃瓜”能总结/推理出“小王不爱吃桃”,再将高度总结后的更宽泛更高维的信息返回。

循环此操作,就可以得到一个层级结构的知识图谱,越往上,信息越凝练高度概括,越往下信息越详细

查询

把这个层级结构的知识图谱中的每条边每个节点的实体信息和描述都当做文本片段embedding后存入向量数据库中

同时,将原文的每个切片也都存入向量数据库中

接下来就是把用户的提问转为embedding之后,可以和知识图谱某基层也可以和原文片段进行匹配,也可以全部查一遍

local_search策略:先从最底层(详细接近原文)的知识图谱中找出和问题最近的实体,再反向查询这个底层的知识图谱是由原文中哪些片段组成的,这个底层的知识图普相关的上层(有高层次的抽象问题)或相邻的节点(低层次的细节问题)和关系也会被找到,最后将这些节点和边的信息和原文片段和问题一起发给大模型。local_search从最底层,所以适应细节问题

global_serch从知识图谱的顶层开始查起,所以比较适用于高层次抽象问题,比如“这篇文章的主旨是什么”

补充

莱顿社区检测算法

b站:AI知识图谱 GraphRAG 是怎么回事?_哔哩哔哩_bilibili

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTTP 状态码背后的逻辑:从请求到响应的完整流程解析(含完整流程图)

在日常的 Web 开发与 API 调试中,我们经常会遇到各种 HTTP 状态码 ——404 Not Found、401 Unauthorized、500 Internal Server Error... 这些数字背后并非随机出现,而是服务器处理请求过程中不同阶段的 "反馈信号"。理解这些状态码的触发逻辑…

Vue:下拉框多选影响行高

目录 一、 出现场景二、 解决方案 一、 出现场景 在使用el-select增加multiple属性进行多选时&#xff0c;会出现高度塌陷的情况 二、 解决方案 首先需要在el-select中增加collapse-tags属性&#xff0c;并在style中增加如下样式 方案一 <style scoped> ::v-deep .e…

如何在高通跃龙QCS6490 Arm架构上使用Windows 11 IoT企业版?

1.简介研华已将高通跃龙QCS6490 技术应用于嵌入式模块、单板电脑和AI摄像头等各种规格的嵌入式硬件中。QCS6490平台支持全面的操作系统生态系统&#xff0c;包括Windows、Ubuntu、Yocto和 Android。Windows 11 IoT企业版是微软新一代的物联网操作系统&#xff0c;具有更强的安全…

阿里云国际代理:如何利用RDS构建高可用、可扩展的数据库架构

讲下云数据库RDS案例解析&#xff0c;若在上云或用云过程中有不懂的&#xff0c;可寻云枢国际yunshuguoji助力免卡上云用云。1、RDS MySQL数据库代理支持读写分离、连接保持、就近访问、事务拆分、连接池、SSL加密等功能&#xff0c;能够降低主实例负载&#xff0c;提高实例可用…

C++之特殊类设计

文章目录前言一、 设计一个不能被拷贝的类1. C98 实现方式2. C11 实现方式二、设计一个只能在堆上创建对象的类1. 方法一&#xff1a;析构函数私有&#xff0c;提供destory接口释放资源2. 方法二&#xff1a;构造函数私有三、 设计一个只能在栈上创建对象的类1. 实现方式四、设…

TupiTube,一款免费开源的 2D 动画创作工具

TupiTube&#xff0c;一款免费开源的 2D 动画创作工具 ** ** 功能 ** &#xff1a;开源、免费的 2D 动画软件&#xff0c;界面简单&#xff0c;支持逐帧动画、剪纸动画、定格动画&#xff0c;能导入素材并导出多种视频和图片格式&#xff0c;适合儿童、学生和动画爱好者入门创作…

MoE架构训练系统设计:专家并行与门控网络优化策略

点击 “AladdinEdu&#xff0c;同学们用得起的【H卡】算力平台”&#xff0c;注册即送-H卡级别算力&#xff0c;80G大显存&#xff0c;按量计费&#xff0c;灵活弹性&#xff0c;顶级配置&#xff0c;学生更享专属优惠。 摘要 混合专家&#xff08;Mixture of Experts&#xf…

使用Python爬虫,selenium和requests谁更强?

py爬虫的话&#xff0c;selenium和reqeusts谁更强&#xff0c;selenium是不是能完全取代requests? 答案基本是可以的&#xff0c;selenium适合动态网页抓取&#xff0c;因为它可以控制浏览器去点击、加载网页&#xff0c;requests则比较适合静态网页采集&#xff0c;它非常轻…

编译原理-文法压缩练习

这个任务的目标就是把一个给定的文法变得“干净”和“高效”&#xff0c;剔除所有无用的部分。根据幻灯片&#xff0c;无用的&#xff08;多余的&#xff09;规则分为两大类&#xff1a; 不可达规则&#xff1a;规则的“头”&#xff08;左部非终结符&#xff09;从起始符号出发…

GPU硬件架构和配置的理解

从公司架构理解GPU架构想象一个GPU就像一家大型科技公司&#xff0c;它的任务是处理图形和计算任务&#xff08;“干活”&#xff09;。硬件概念公司架构比喻作用和特点Platform (平台)集团公司最大的独立实体。比如谷歌Alphabet是一个集团公司&#xff0c;它旗下有谷歌、Waymo…

【硬件开发】电源抑制比PSRR

电源抑制比PSRR是电压输入量和电压输出量的比值&#xff0c;通常用dB来表示。 PSRR这个参数经常和运放&#xff0c;LDO,DCDC变换器有关联。(2 封私信 / 58 条消息) 电源抑制比(PSRR)的基础知识 - 知乎

七、卷积神经网络

目录 7.1 整体结构 7.2 卷积层 7.2.1 全连接层存在的问题 7.2.2 卷积运算 7.2.3 填充 7.2.5 3维数据的卷积运算 7.2.6 结合方块思考 7.2.7 批处理 7.3 池化层 7.4 卷积层和池化层的实现 7.4.1 4维数组 7.4.2 基于 im2col的展开 7.4.3 卷积层的实现 7.4.4 池化层的…

加餐加餐!烧烤斗破苍穹

忽然起了吃烧烤的念头&#xff0c;便掏出手机点了一堆。不过二十分钟&#xff0c;外卖小哥便按响了门铃&#xff0c;手里提着一个方正的纸袋&#xff0c;还冒着热气。我将烧烤一一取出&#xff0c;排在茶几上。肉串油光发亮&#xff0c;韭菜翠绿间点缀着蒜蓉&#xff0c;茄子剖…

搜索引擎收录网站带www和不带www有区别吗?

这是一个非常常见且重要的问题。简单直接的回答是&#xff1a;有区别&#xff0c;但对搜索引擎来说&#xff0c;处理得当就不会重复&#xff1b;处理不当则会造成严重重复和权重分散。下面我为您详细解释一下&#xff0c;并提供正确的处理方法。核心区别&#xff1a;两个不同的…

AFSim2.9.0学习笔记 —— 2、AFSim的Wizard软件概述(ArkSIM集成开发环境 (IDE))

&#x1f514; AFSim2.9.0 相关技术、疑难杂症文章合集&#xff08;掌握后可自封大侠 ⓿_⓿&#xff09;&#xff08;记得收藏&#xff0c;持续更新中…&#xff09; 若还没有下载AFSim2.9.0完整软件或源码&#xff0c;请先进入本人另篇文章了解下载。 正文 ▪️主界面 打开 Ar…

建自己的Python项目仓库,使用工具:GitHub(远程仓库)、GitHub Desktop(版本控制工具)、VSCode(代码编辑器)

结合 GitHub&#xff08;远程仓库&#xff09;、GitHub Desktop&#xff08;版本控制工具&#xff09;、VSCode&#xff08;代码编辑器&#xff09; 三个工具&#xff0c;以下是更具体的Python项目仓库搭建流程&#xff0c;包含工具协同操作的详细步骤&#xff1a; 一、整体流程…

iDEA Lombok 失效 和 slf log 变量失效问题

1. lombok 失效&#xff1a;检查下配置有没有使用注解处理器&#xff1b;且这个处理中有没有带上版本&#xff1b;版本号需要与上面引入的依赖版本一致。2. 对于找不到 log 变量的操作&#xff0c;则是使用下面将这个变量使用下面的代码定义出来&#xff1b;上面去掉 slf4j注解…

go资深之路笔记(二) sync.Pool

一、 使用 sync.Pool 减少 GC 压力&#xff0c;提升性能 简单讲下go的gc&#xff0c;它的核心原理就是三色标记法和写屏障&#xff0c;可以实现优秀并发处理。gc一般不会频繁调用&#xff0c;他是根据GOGC的值来判断&#xff0c;具体就是上次触发GC后总堆值大于等于上次的(1GO…

【面试笔记-Java开发岗】

目录&#xff1a;1. synchronized 和 ReentrantLock 的区别及应用场景2. HashMap 与 LinkedHashMap 的区别3. ConcurrentHashMap 的数据结构及 JDK1.7 与 JDK1.8 区别4. Spring 常用的模式及应用场景5. 事务的四大特性&#xff08;ACID&#xff09;6. 锁机制&#xff1a;行级锁…

CSS :has() 选择器详解:为什么它是“父选择器”?如何实现真正的容器查询?

一、前言 在传统的 CSS 中&#xff0c;我们只能根据元素的自身属性、类名、ID 或其子元素/兄弟元素来设置样式&#xff0c;却无法根据其父元素或后代元素的状态来改变自身样式。 直到 :has() 选择器的出现&#xff0c;这一局面被彻底改变。 :has() 被称为 “父选择器” 或 “…