从GraphRAG最新论文综述探究如何改进微软 GraphRAG

最近北大、浙大等高校和蚂蚁集团等机构发布了一篇 GraphRAG 综述论文《Graph Retrieval-Augmented Generation: A Survey[1]》。本文首先对论文进行简单介绍,然后对论文中 GraphRAG 提到的三个阶段进行分别介绍,探索当前业界都在尝试哪些方法优化 GraphRAG,以及有哪些较为流行的GraphRAG框架。我也会穿插讲解微软 GraphRAG 中的实现和可能的优化方法。

1. 论文总览

文章首先介绍了大型语言模型(LLMs)在自然语言处理领域的革命性进展,以及它们在理解、解释和生成人类语言方面的能力。然而,LLMs 可能因为缺乏特定领域的知识、实时更新的信息和专有知识而受到限制,这些通常是在 LLMs 预训练语料库之外的。为了解决这些问题,检索增强生成(RAG)应运而生,它通过整合检索组件到生成过程中,以提高生成内容的质量和相关性。

文章特别关注了 GraphRAG,这是一种利用实体间结构化信息的方法,以实现更精确和全面的检索。GraphRAG 通过考虑文本之间的相互联系,能够更准确地检索关系信息,应对复杂的多跳问题。此外,图形数据(如知识图谱)提供了文本数据的抽象和总结,从而显著缩短了输入文本的长度,并减少了冗余信息的问题。下图对比了,LLM 直接回答、朴素 RAG 检索回答和 GraphRAG 检索回复。

在这里插入图片描述

LLM直答和朴素RAG回复和GraphRAg回复的比较

论文详细介绍了 GraphRAG 的工作流程,包括基于图的索引(Graph-Based Indexing)、图引导的检索(Graph-Guided Retrieval)和图增强的生成(Graph-Enhanced Generation)。作者还概述了每个阶段的核心技术和训练方法,并探讨了 GraphRAG 的下游任务、应用领域、评估方法和工业用例。最后,文章探索了未来的研究方向,以激发进一步地探究并推动该领域的发展。如下图所示,作者将整个 GraphRAG 的工作流程分为 G-Indexing、GRetrival 和 G-Generation。

在这里插入图片描述

我们从上图也能简单看出目前业界的研究方向或者优化方向,比如在 G-Retrival 中,有包含查询扩展和查询分解的查询增强,有包含知识合并、剪枝的知识增强。在 G-Generation 生成中,也包含了生成前增强、生成中增加以及生成后增强的优化方法。下面我们就逐一深入。

2. G-Indexing 索引

构建和索引图数据库是 GraphRAG 的基础,其中图数据库的质量直接影响 GraphRAG 的性能。图数据来源主要包括两类:开放知识图谱和自建知识图谱。

2.1 开放知识图谱

开放知识图谱主要包括通用知识图谱和领域知识图谱。其中前者,主要是一些百科全书,诸如基于 wikipedia 的 wikidata、Freebase 和 DBpedia 等。对于特定领域的知识图对于增强 LLMs 解决特定领域问题至关重要。这些知识图提供了特定领域的专业知识,比如生物医学领域的 CMeKG,基于 PubMed 的中文知识图谱 CPubMed-KG,电影领域里有 Wiki-Movies,还有涵盖学术、电子商务、文学、医疗和法律领域的 GR-Bench,以及用于评估 GraphRAG 系统的通用图格式数据集 GraphQA。

2.2 自建知识图谱

自构建图数据有助于将专有或特定领域的知识定制和整合到检索过程中。通常,这些自构建的图与特定方法的设计紧密相关,与前面提到的开放领域图数据有所区别,比如异构图文档图、共享关键词之间关系的图、使用命名实体识别和 LLM 构建的知识图、专利短语图和客服场景的历史问题建模为知识图等。

显然微软的 GraphRAG 属于使用 LLM 完成的自建知识图谱。

2.3 索引

基于图的索引在提高图数据库上的查询操作的效率和速度方面起着至关重要的作用,直接影响后续的检索方法和粒度。常见的基于图的索引方法包括图索引、文本索引和向量索引。基于图的索引在提高图数据库上的查询操作的效率和速度方面起着至关重要的作用,直接影响后续的检索方法和粒度。常见的基于图的索引方法包括图索引、文本索引和向量索引。

  • 图索引是最常用的方法,它保留了图的整个结构。这种方法确保了对于任何给定节点,都可以轻松访问其所有边和邻接节点。在检索中可以利用经典的图搜索算法,如广度优先搜索(BFS)和最短路径算法,来促进检索任务。

  • 文本索引涉及将图数据转换为文本描述以优化检索过程。这些描述存储在文本语料库中,可以应用各种基于文本的检索技术,如稀疏检索和密集检索。

    微软 GraphRAG 就是采用的这种,将实体、关系等转换为文本描述,从而后续存入 Lancedb 向量数据库中。

  • 向量索引将图数据转换为向量表示以提高检索效率,便于快速检索和有效的查询处理。可以通过查询嵌入无缝应用实体链接,并且可以利用有效的向量搜索算法,如局部敏感哈希(LSH)。

图索引便于访问结构信息,文本索引简化了文本内容的检索,向量索引实现了快速高效的搜索。目前微软 GraphRAG 只有一种文本索引,基于图本身的向量索引我看是有字段存储,但是实际查询是没有采用的。论文提到在实际应用中,混合索引是更为常用的方法。这样应该能够获得更多的上下文。

3. G-Retrival 检索

在 GraphRAG 中,检索过程对于确保生成输出的质量和相关性至关重要,它通过从外部图数据库中提取相关和高质量的图数据来实现。然而,检索图数据面临两个主要挑战:(1) 候选子图数量激增:随着图规模的增加,候选子图的数量呈指数级增长,这就需要使用启发式搜索算法来高效地探索和检索相关子图。(2) 相似性度量不足:准确测量文本查询和图数据之间的相似性需要开发能够理解文本和结构信息的算法。

如果你看过微软 GraphRAG 检索的上下文,它默认检索的 20 个实体,有时候其中大部分都是不相关的实体,相似性分数可能都到 0.1 甚至是 0.01 级别。之所以效果还行,全靠大模型自动过滤不相关的上下文。如果你尝试一个参数量小一些的模型,可能就会回答错误了。

作者将检索过程分为选择检索器、检索范式、检索粒度和检索增强 4 部分,如下图所示。我们按照检索的顺序来看,首先看检索增强中的查询增强。

在这里插入图片描述

3.1 查询增强

查询增强分为查询扩展和查询分解。由于查询通常较短且信息内容有限,查询扩展旨在通过补充或完善原始查询的额外相关术语或概念来改善搜索结果。

  • 基于知识图谱的关系路径以增强检索查询

  • 使用 SPARQL 获取查询实体的所有别名以增强检索查询,这有利于捕获同一实体的词汇变化

  • 基于共识视图知识检索方法来提高检索准确性,首先发现语义相关的查询,然后重新加权原始查询词以提高检索性能。

  • HyKGE 利用大型模型生成问题假设输出,将假设输出与查询连接作为检索器的输入。

不同于传统的查询增强,基于 GraphRAG 的查询增强可能要好好看看其他论文了,我没有太具体的概念要如何优化微软的 GraphRAG。

查询分解技术将原始用户查询分解为更小、更具体的子查询。每个子查询通常关注原始查询的一个特定方面或组成部分,成功地减轻了语言查询的复杂性和歧义性。例如,将主要问题分解为子句,每个子句代表一个不同的关系,并依次检索每个子句的相关三元组。

这是比较常见的。

3.2 选择检索器

在 GraphRAG 中,各种检索器因其独特的优势而用于解决检索任务的不同方面。作者根据其底层模型将检索器分类为三种类型:非参数检索器、基于语言模型的检索器和基于图神经网络的检索器。在检索过程中,非参数检索器表现出良好的检索效率,但可能由于缺乏对下游任务的训练而出现检索不准确的情况。与此同时,尽管基于语言模型的检索器和基于图神经网络的检索器提供了更高的检索准确性,但它们需要大量的计算开销。考虑到这种互补性,许多方法提出了混合检索方法来提高检索效率和准确性。许多方法采用多阶段检索策略,在每个阶段使用不同的模型。

3.3 检索范式

在 GraphRAG 中,不同的检索范式,包括一次性检索、迭代检索和多阶段检索,在提高检索信息的相关性和深度方面起着至关重要的作用。一次性检索旨在单次操作中收集所有相关信息。迭代检索基于先前检索的结果进行进一步搜索。这里我们将迭代检索进一步细分为自适应检索和非自适应检索,唯一的区别在于检索的停止是否由模型决定。另一种检索范式是多阶段检索,检索过程被线性地划分为多个阶段。在多阶段检索中,每个阶段可能使用不同类型的检索器,以实现更精确和多样化的搜索结果。

迭代检索和多阶段检索显然要花更长的时间,这对于实际应用来说是非常难受的,首 Token 响应时间在实际应用中非常重要的。

3.4 检索粒度

根据不同的任务场景和索引类型,研究人员设计了不同的检索粒度(即从图数据中检索的相关知识的表单),可以分为节点、三元组、路径和子图。每种检索粒度都有其自身的优势,使其适合不同的实际场景。

  • 节点允许对图中的单个元素进行精确检索,这对于目标查询和特定信息提取非常理想。通常,对于知识图谱,节点指的是实体。对于其他类型的文本属性图,节点可能包括描述节点属性的文本信息。通过检索图中的节点,GraphRAG 系统可以提供对其属性、关系和上下文信息的深入了解。

微软 GraphRAG 就是基于节点的描述、关系描述、社区描述和实体所在实体的上下文构建

  • 通常,三元组由实体及其关系组成,形式为主语-谓语-宾语元组,为图中的关系数据提供了结构化的表示。三元组的结构化格式允许清晰有序的数据检索,使其在需要理解实体之间关系和上下文相关性的场景中具有优势。

  • 路径粒度的检索可以看作是捕获实体之间关系序列的过程,增强了上下文理解和推理能力。在 GraphRAG 中,检索路径提供了明显的优势,因为它们能够捕获图中的复杂关系和上下文依赖性。然而,由于图规模的增加,可能的路径数量呈指数级增长,这使得路径检索变得具有挑战性,计算复杂性增加。

路径检索,对于解决多跳的问题是个很好的参考。

  • 检索子图提供了显著的优势,因为它能够捕获图中的全面关系上下文。这种粒度使 GraphRAG 能够提取和分析嵌入在更大结构中的复杂模式、序列和依赖性,从而促进了对语义连接的更深入和更细致的理解。

  • 混合粒度,考虑到上述各种检索粒度的优势和劣势,一些研究人员提出使用混合粒度,即从图数据中检索多种粒度的相关信息。这种类型的粒度增强了系统捕获详细关系和更广泛上下文理解的能力,从而减少了噪声,提高了检索数据的相关性。

总结:在实际应用中,这些检索粒度之间没有明确的界限,因为子图可以由多个路径组成,路径可以由几个三元组形成。(2) 各种粒度如节点、三元组、路径和子图在 GraphRAG 过程中各有优势。在选择粒度时,根据特定任务的上下文,在检索内容和效率之间进行平衡至关重要。对于简单的查询或当效率至关重要时,可能会优先选择更细的粒度,如实体或三元组,以优化检索速度和相关性。相比之下,复杂场景通常从混合方法中受益,该方法结合了多种粒度。这种方法确保了对图结构和关系的更全面理解,增强了生成响应的深度和准确性。因此,GraphRAG 在粒度选择上的灵活性使其能够有效地适应各种信息检索需求。

3.5 知识增强

在检索到初步结果后,应用知识增强策略来提炼和改进检索器的结果。这一阶段通常涉及知识合并和知识修剪过程,以突出显示最相关的信息。这些技术旨在确保最终检索结果集不仅全面而且与用户的信息需求高度相关。

  • 知识合并,检索信息可以压缩和聚合信息,这有助于通过合并多个来源的相关信息来获得更全面的视图。这种方法不仅增强了信息的完整性和连贯性,还减少了与输入长度限制相关的问题。

  • 知识修剪涉及过滤掉不太相关或冗余的检索信息,以提炼结果。以前的修剪方法主要包括(重新)排名方法和基于大型语言模型的方法。(重新)排名方法涉及使用量身定制的指标或标准重新排序检索到的信息。有人使用 bge_reranker_large 模型进行重排、也有利用查询和检索信息之间的相似性进行排名,还有使用新的指标进行重新排名,用于衡量检索到的文本块的影响和时效性。

由于微软 GraphRAG 默认提取的实体,有时候会有有很多不相关实体被 topk 强制提取出来,我尝试使用 BGE Rerank 计算了相似度,可以过滤掉很多不相关的实体。具体效果我个人觉得还行,还没有尝试 RAGas 进行评估。

4. G-Generation 生成

生成器的选择通常取决于手头的下游任务类型。对于判别性任务(例如,多项选择题回答)或可以表述为判别性任务的生成任务(例如,知识库问答),可以使用图神经网络或判别性语言模型来学习数据的表示。然后,这些表示可以映射到与不同答案选项相关的逻辑上。或者,可以使用生成性语言模型直接生成答案。然而,对于生成任务,仅使用图神经网络和判别性语言模型是不够的。这些任务需要生成文本,这就需要部署解码器。

这一节,我们重点看一下生成增强。除了将检索到的图数据转换为生成器可接受的格式,并将查询和转换后的图数据一起输入以生成最终响应外,许多研究人员还探索了各种生成增强技术,以提高输出响应的质量。这些方法可以根据应用阶段分为三类:预生成增强、中期生成增强和后期生成增强。

  • 预生成增强技术侧重于在将数据输入生成器之前改进输入数据或表示的质量。事实上,预生成增强和检索之间没有明确的界限。

我觉得这个就是检索后的一些知识增强,包括剪枝和知识合并。

  • 中期生成增强涉及在生成过程中应用的技术。这些方法通常根据中间结果或上下文线索调整生成策略。

  • 后期生成增强发生在初始响应生成之后。后期生成增强方法主要涉及整合多个生成响应以获得最终响应。一些方法专注于整合在不同条件或输入下由同一生成器生成的输出。另外一些方法是首先将查询分解为几个子问题,然后为每个子问题生成答案,最后合并所有子问题的答案以获得最终答案。

微软 GraphRAG 中全局查询,使用两阶段 map 和 reduce,一阶段对社区报告跟问题让大模型进行打分,然后在二阶段裁剪结果重新生成答案。

5. 应用框架

在讲解应用之前,还讲解了一些训练、应用和评估,这里不再多说了。目前已有的框架,我只用过微软的GraphRAG,有时间可以对比测试一下。

  • 微软GraphRAG[2]

  • Nebula 的GraphRAG[3]

  • 蚂蚁集团的GraphRAG[4]

  • Neo4j 的Nallm[5]

  • Neo4j 的LLM Graph Builder[6]

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值