揭秘微软开源GraphRAG:下一代RAG技术的领跑者

发表时间: 2024-07-19 18:37

微软在今年4月份的时候提出了GraphRAG的概念,发布了GraphRAG的论文《From Local to Global: A Graph RAG Approach to Query-Focused Summarization》。在这篇论文中,微软的研究人员提出了一种从文本构建并增强知识图的方法,来解决 Baseline RAG 系统在全局理解上的缺陷。

2024 年 7 月,微软在 Github 开源了 GraphRAG 项目代码。


有兴趣的同学也可以直接访问对应的代码仓库和文档,自己动手试一试。

  • 项目仓库:github.com/microsoft/g…
  • 项目文档:microsoft.github.io/graphrag/



Graph RAG(Graph Retrieval-Augmented Generation)是一种基于图的知识检索增强技术,它结合了知识图谱的广泛知识表示能力和大语言模型(LLM)的生成能力。不同于使用纯文本片段的简单语义搜索方法。GraphRAG 流程包括从原始文本中提取知识图谱、构建社区层次结构、为这些社区生成摘要,然后在执行基于 RAG 的任务时利用这些结构。

GraphRAG VS 传统 RAG 的区别

文档存储模型

  1. 传统RAG:主要依赖于向量序列来表示信息,通过词嵌入或Transformer模型将文档中的词或短语转换为高维向量,形成文档的向量表示。这种方式在处理复杂语义关系时可能存在局限性,难以全面捕捉和表示文档中的信息结构。


  • GraphRAG:引入了知识图谱这一革命性技术元素,通过LLM(大型语言模型)从源文档中提取实体、关系和属性等信息,并将这些信息组织成一个结构化的知识图谱。知识图谱中的节点代表实体,边代表实体之间的关系,这种结构化的表示方式使得信息更加清晰、易于理解和推理。


信息检索与融合

  1. 传统 RAG:通过向量相似性搜索技术在已有的知识库中进行相似度计算,找到与输入文档最相关或最匹配的信息。然后,将这些信息与原始输入文档进行融合,生成相应的响应或输出。这种方式更侧重于局部信息的匹配和融合。
  2. GraphRAG:在知识图谱构建完成后,使用社区检测算法(如Leiden算法等)来识别图谱中紧密相关的实体组(社区)。每个社区代表一个特定的主题或领域,GraphRAG会为每个社区生成一个摘要。当用户输入查询时,GraphRAG会根据查询内容在知识图谱中查找相关的社区和摘要,并基于这些相关的社区和摘要生成部分响应。最后,将所有相关的部分响应进行汇总和整合,形成一个完整的全局答案。这种方式能够捕获全局信息,提供更全面、准确的回答。


GraphRAG 原理

Graph RAG通过以下步骤实现:

  1. 构建知识图谱:首先,利用LLM从源文档中提取实体、关系及相关描述,构建一个实体知识图谱。
  2. 社区检测与摘要:接着,使用社区检测算法(如Leiden算法)将知识图谱划分为多个紧密相关的实体社区,并为每个社区生成描述性摘要。
  3. 查询处理:对于用户查询,Graph RAG利用每个社区的摘要独立且并行地生成部分回答,然后将这些部分回答汇总成最终答案。

详细步骤

  1. 源文档到文本块将源文档划分为多个文本块,以便LLM能够有效处理。较长的文本块可以减少LLM的调用次数,但可能面临上下文窗口的限制。


  1. 文本块到元素实例使用LLM从每个文本块中提取实体、关系及其描述。这包括识别实体名称、类型、描述,以及实体之间的关系。

  1. 元素实例到元素摘要对提取的实体、关系实例进行进一步摘要,生成描述性文本。这些摘要将作为图节点和边的描述。


  1. 元素摘要到图社区基于社区检测将元素摘要组织成图结构,并使用社区检测算法(如Leiden)将图划分为多个社区。每个社区代表一组紧密相关的实体和关系。


  1. 图社区到社区摘要为每个社区生成报告式摘要,以描述社区内实体的共同特征和关系。这些摘要将用于后续的查询处理。


  1. 查询过程:社区摘要到社区答案到全局答案对于用户查询,Graph RAG首先利用社区摘要并行生成部分回答。然后,根据这些部分回答的重要性和相关性,将它们汇总成最终的全局答案。


总结

Graph RAG结合了知识图谱的广泛性和LLM的生成能力,能够有效处理针对整个文本集合的全局查询。它特别适用于生成针对复杂数据集的查询聚焦摘要和回答,如科学发现、情报分析等领域。

通过构建和索引图结构的知识表示,Graph RAG能够高效地检索和整合相关信息,从而生成更全面、更多样化的回答。这种技术有望在未来成为处理大规模文本数据的重要工具。


有兴趣的同学也可以直接访问对应的代码仓库和文档,自己动手试一试。

  • 项目仓库:github.com/microsoft/g…
  • 项目文档:microsoft.github.io/graphrag/


参考文档

https://microsoft.github.io/graphrag/posts/get_started/

https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/

https://juejin.cn/post/7392115478561325083

https://blog.csdn.net/weixin_44324814/article/details/133752972


— END —