GraphRAG
开源项目
- 微软的Graph RAG
- 蚂蚁开发了首个对外开源的Graph RAG框架,蚂蚁全自主的开源产品:DB-GPT[50] + OpenSPG[42] + TuGraph[46]
-
跨图谱零拷贝融合,连接数据孤岛:替代实现,不断推理,建立逻辑关系
-
深度语义上下文关联:替代实现高级抽象
-
知识符号化表示,与大模型双向驱动:
- SPG-Reasoner逻辑规则推理,通过谓词语义和逻辑规则来定义知识之间的依赖和传递
-
GraphRAG过程
索引构建过程
- 使用文本分段技术将文档进行分块
- 关系(LPG)提取,分析每个文本单元并提取图元素:实体、关系和协变量
- 把文本加上合适的prompt,喂给LLM,要求 LLM 提供简短的摘要来完成
- 实体消歧
- 协变量提取
- 图增强
- 理解图的拓扑结构,并进行分类
- 使用分层莱顿算法生成node group的层次结构
- 使用 Node2Vec算法生成图中节点的向量表示。使我们能够理解图的隐式结构,并提供额外的向量空间,以便在查询阶段搜索相关概念
- 理解图的拓扑结构,并进行分类
- node group 总结 -- 总结和推理出额外的信息
- LLM 生成每个社区(node group)的摘要
- 能够了解每个社区中包含的独特信息,并从高级或低级角度提供对图表的范围理解
- 这些报告包含执行概述,并引用社区子结构中的关键实体、关系和声明
- 生成社区报告、社区报告摘要和社区报告标题的文本嵌入来生成社区的向量表示
- LLM 生成每个社区(node group)的摘要
- 文件处理
- 链接到已经存在的TextUnits
- 将每个文档链接到第一阶段创建的文本单元,创建文本块之间的上下文关系
- 了解哪些文档与哪些文本单元相关
- 文档嵌入
- 使用文档切片的平均嵌入来生成文档的向量表示
- 对不重叠的块重新分块文档,然后为每个块生成嵌入
- 创建这些块的平均值,并按标记计数加权,并将其用作文档嵌入
- 能够理解文档之间的隐式关系,并帮助生成文档的网络表示
- 链接到已经存在的TextUnits
- 网络可视化
- 对于每个逻辑图,执行 UMAP降维以生成图的 2D 表示
查询过程
- 本地搜索
- 从低层级的节点开始搜索指定最大结果数量
- 使用向量查询关键Node和相关的Node
- MapReduce
- 问题+搜索到的原文+总结性描述 一起打包发给LLM
- 问题生成
- 全局搜索
- 从高层级的总结(node)开始搜索指定最大结果数量
缺点
- 关系太简单、固定,不能真正表达复杂的内含关系
- 关系的种类太少,只能识别简单的类似“A是B”的逻辑关系
- 关系的处理的深度太浅,广度太窄
- 只能处理自然语言能够表达的逻辑,不能处理非常抽象的概念
- 根据已经有的资料库总结和推理出额外的信息的能力不够
- 抽象的级别不够高级
- 抽象的级别不够高级
- 只能处理已经写好的(prompt)里面的逻辑关系
- 不能自动不断积累(增加)需要分析的逻辑关系、能力
- 不能根据实际内容进行有目的的动态索引
- 按照固定算法搜索匹配数据库,不能根据实际逻辑关系动态控制
- 效率低
- 信息爆炸,需要处理的token非常庞大,导致速度非常慢
- 回答的风格和具体的模型非常相关
- 好的,用户让我用中文解释“xxx”
- ### xxx的定义与核心内涵 ### xxx的技术实现路径 ### xxx的协同创新维度 ### 总结与展望
待解决
- 符合需求的数据集
- 数据集难以构建和被准确得评估
- 通过对数据集得label进行打分,分数是一个可以被量化的指标
- 数据集难以构建和被准确得评估
- 逻辑操作的种类很多,prompt放不下
- 基础设施的完善
- 图数据库,向量数据库
- 逻辑规则推理Reasoner
No comments to display
No comments to display