微信扫码
与创始人交个朋友
我要投稿
最近北大、浙大等高校和蚂蚁集团等机构发布了一篇 GraphRAG 综述论文《Graph Retrieval-Augmented Generation: A Survey[1]》。本文首先对论文进行简单介绍,然后对论文中 GraphRAG 提到的三个阶段进行分别介绍,探索当前业界都在尝试哪些方法优化 GraphRAG,以及有哪些较为流行的GraphRAG框架。我也会穿插讲解微软 GraphRAG 中的实现和可能的优化方法。
文章首先介绍了大型语言模型(LLMs)在自然语言处理领域的革命性进展,以及它们在理解、解释和生成人类语言方面的能力。然而,LLMs 可能因为缺乏特定领域的知识、实时更新的信息和专有知识而受到限制,这些通常是在 LLMs 预训练语料库之外的。为了解决这些问题,检索增强生成(RAG)应运而生,它通过整合检索组件到生成过程中,以提高生成内容的质量和相关性。
文章特别关注了 GraphRAG,这是一种利用实体间结构化信息的方法,以实现更精确和全面的检索。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 生成中,也包含了生成前增强、生成中增加以及生成后增强的优化方法。下面我们就逐一深入。
构建和索引图数据库是 GraphRAG 的基础,其中图数据库的质量直接影响 GraphRAG 的性能。图数据来源主要包括两类:开放知识图谱和自建知识图谱。
开放知识图谱主要包括通用知识图谱和领域知识图谱。其中前者,主要是一些百科全书,诸如基于 wikipedia 的 wikidata、Freebase 和 DBpedia 等。对于特定领域的知识图对于增强 LLMs 解决特定领域问题至关重要。这些知识图提供了特定领域的专业知识,比如生物医学领域的 CMeKG,基于 PubMed 的中文知识图谱 CPubMed-KG,电影领域里有 Wiki-Movies,还有涵盖学术、电子商务、文学、医疗和法律领域的 GR-Bench,以及用于评估 GraphRAG 系统的通用图格式数据集 GraphQA。
自构建图数据有助于将专有或特定领域的知识定制和整合到检索过程中。通常,这些自构建的图与特定方法的设计紧密相关,与前面提到的开放领域图数据有所区别,比如异构图文档图、共享关键词之间关系的图、使用命名实体识别和 LLM 构建的知识图、专利短语图和客服场景的历史问题建模为知识图等。
显然微软的 GraphRAG 属于使用 LLM 完成的自建知识图谱。
基于图的索引在提高图数据库上的查询操作的效率和速度方面起着至关重要的作用,直接影响后续的检索方法和粒度。常见的基于图的索引方法包括图索引、文本索引和向量索引。基于图的索引在提高图数据库上的查询操作的效率和速度方面起着至关重要的作用,直接影响后续的检索方法和粒度。常见的基于图的索引方法包括图索引、文本索引和向量索引。
图索引是最常用的方法,它保留了图的整个结构。这种方法确保了对于任何给定节点,都可以轻松访问其所有边和邻接节点。在检索中可以利用经典的图搜索算法,如广度优先搜索(BFS)和最短路径算法,来促进检索任务。
文本索引涉及将图数据转换为文本描述以优化检索过程。这些描述存储在文本语料库中,可以应用各种基于文本的检索技术,如稀疏检索和密集检索。
微软 GraphRAG 就是采用的这种,将实体、关系等转换为文本描述,从而后续存入 Lancedb 向量数据库中。
向量索引将图数据转换为向量表示以提高检索效率,便于快速检索和有效的查询处理。可以通过查询嵌入无缝应用实体链接,并且可以利用有效的向量搜索算法,如局部敏感哈希(LSH)。
图索引便于访问结构信息,文本索引简化了文本内容的检索,向量索引实现了快速高效的搜索。目前微软 GraphRAG 只有一种文本索引,基于图本身的向量索引我看是有字段存储,但是实际查询是没有采用的。论文提到在实际应用中,混合索引是更为常用的方法。这样应该能够获得更多的上下文。
在 GraphRAG 中,检索过程对于确保生成输出的质量和相关性至关重要,它通过从外部图数据库中提取相关和高质量的图数据来实现。然而,检索图数据面临两个主要挑战:(1) 候选子图数量激增:随着图规模的增加,候选子图的数量呈指数级增长,这就需要使用启发式搜索算法来高效地探索和检索相关子图。(2) 相似性度量不足:准确测量文本查询和图数据之间的相似性需要开发能够理解文本和结构信息的算法。
如果你看过微软 GraphRAG 检索的上下文,它默认检索的 20 个实体,有时候其中大部分都是不相关的实体,相似性分数可能都到 0.1 甚至是 0.01 级别。之所以效果还行,全靠大模型自动过滤不相关的上下文。如果你尝试一个参数量小一些的模型,可能就会回答错误了。
作者将检索过程分为选择检索器、检索范式、检索粒度和检索增强 4 部分,如下图所示。我们按照检索的顺序来看,首先看检索增强中的查询增强。
查询增强分为查询扩展和查询分解。由于查询通常较短且信息内容有限,查询扩展旨在通过补充或完善原始查询的额外相关术语或概念来改善搜索结果。
不同于传统的查询增强,基于 GraphRAG 的查询增强可能要好好看看其他论文了,我没有太具体的概念要如何优化微软的 GraphRAG。
查询分解技术将原始用户查询分解为更小、更具体的子查询。每个子查询通常关注原始查询的一个特定方面或组成部分,成功地减轻了语言查询的复杂性和歧义性。例如,将主要问题分解为子句,每个子句代表一个不同的关系,并依次检索每个子句的相关三元组。
这是比较常见的。
在 GraphRAG 中,各种检索器因其独特的优势而用于解决检索任务的不同方面。作者根据其底层模型将检索器分类为三种类型:非参数检索器、基于语言模型的检索器和基于图神经网络的检索器。在检索过程中,非参数检索器表现出良好的检索效率,但可能由于缺乏对下游任务的训练而出现检索不准确的情况。与此同时,尽管基于语言模型的检索器和基于图神经网络的检索器提供了更高的检索准确性,但它们需要大量的计算开销。考虑到这种互补性,许多方法提出了混合检索方法来提高检索效率和准确性。许多方法采用多阶段检索策略,在每个阶段使用不同的模型。
在 GraphRAG 中,不同的检索范式,包括一次性检索、迭代检索和多阶段检索,在提高检索信息的相关性和深度方面起着至关重要的作用。一次性检索旨在单次操作中收集所有相关信息。迭代检索基于先前检索的结果进行进一步搜索。这里我们将迭代检索进一步细分为自适应检索和非自适应检索,唯一的区别在于检索的停止是否由模型决定。另一种检索范式是多阶段检索,检索过程被线性地划分为多个阶段。在多阶段检索中,每个阶段可能使用不同类型的检索器,以实现更精确和多样化的搜索结果。
迭代检索和多阶段检索显然要花更长的时间,这对于实际应用来说是非常难受的,首 Token 响应时间在实际应用中非常重要的。
根据不同的任务场景和索引类型,研究人员设计了不同的检索粒度(即从图数据中检索的相关知识的表单),可以分为节点、三元组、路径和子图。每种检索粒度都有其自身的优势,使其适合不同的实际场景。
微软 GraphRAG 就是基于节点的描述、关系描述、社区描述和实体所在实体的上下文构建
路径检索,对于解决多跳的问题是个很好的参考。
总结:在实际应用中,这些检索粒度之间没有明确的界限,因为子图可以由多个路径组成,路径可以由几个三元组形成。(2) 各种粒度如节点、三元组、路径和子图在 GraphRAG 过程中各有优势。在选择粒度时,根据特定任务的上下文,在检索内容和效率之间进行平衡至关重要。对于简单的查询或当效率至关重要时,可能会优先选择更细的粒度,如实体或三元组,以优化检索速度和相关性。相比之下,复杂场景通常从混合方法中受益,该方法结合了多种粒度。这种方法确保了对图结构和关系的更全面理解,增强了生成响应的深度和准确性。因此,GraphRAG 在粒度选择上的灵活性使其能够有效地适应各种信息检索需求。
在检索到初步结果后,应用知识增强策略来提炼和改进检索器的结果。这一阶段通常涉及知识合并和知识修剪过程,以突出显示最相关的信息。这些技术旨在确保最终检索结果集不仅全面而且与用户的信息需求高度相关。
由于微软 GraphRAG 默认提取的实体,有时候会有有很多不相关实体被 topk 强制提取出来,我尝试使用 BGE Rerank 计算了相似度,可以过滤掉很多不相关的实体。具体效果我个人觉得还行,还没有尝试 RAGas 进行评估。
生成器的选择通常取决于手头的下游任务类型。对于判别性任务(例如,多项选择题回答)或可以表述为判别性任务的生成任务(例如,知识库问答),可以使用图神经网络或判别性语言模型来学习数据的表示。然后,这些表示可以映射到与不同答案选项相关的逻辑上。或者,可以使用生成性语言模型直接生成答案。然而,对于生成任务,仅使用图神经网络和判别性语言模型是不够的。这些任务需要生成文本,这就需要部署解码器。
这一节,我们重点看一下生成增强。除了将检索到的图数据转换为生成器可接受的格式,并将查询和转换后的图数据一起输入以生成最终响应外,许多研究人员还探索了各种生成增强技术,以提高输出响应的质量。这些方法可以根据应用阶段分为三类:预生成增强、中期生成增强和后期生成增强。
我觉得这个就是检索后的一些知识增强,包括剪枝和知识合并。
微软 GraphRAG 中全局查询,使用两阶段 map 和 reduce,一阶段对社区报告跟问题让大模型进行打分,然后在二阶段裁剪结果重新生成答案。
在讲解应用之前,还讲解了一些训练、应用和评估,这里不再多说了。目前已有的框架,我只用过微软的GraphRAG,有时间可以对比测试一下。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-07-18
2024-05-05
2024-09-04
2024-06-20
2024-05-19
2024-07-09
2024-07-09
2024-07-07
2024-06-13
2024-07-07