GraphRAG
是一种结合了知识图谱(Knowledge Graph)和大型语言模型(Large Language Model, LLM)的检索增强生成(Retrieval-Augmented Generation, RAG)技术。它通过引入图结构化的知识表示和处理方法,显著提升了传统RAG系统的能力,为处理复杂和多样化数据提供了强有力的支持。
RAG的目标是通过知识库增强内容生成的质量,通常做法是将检索出来的文档作为提示词的上下文,一并提供给大模型让其生成更可靠的答案。更进一步地,RAG的整体链路还可以与提示词工程(Prompt Engineering)、模型微调(Fine Tuning)、知识图谱(Knowledge Graph)等技术结合,构成更广义的RAG问答链路。
1.1 传统RAG的核心链路分为三个阶段
- 索引(向量嵌入):通过Embedding模型服务实现文档的向量编码,写入向量数据库。
- 检索(相似查询):通过Embedding模型服务实现查询的向量编码,使用相似性查询(ANN)实现topK结果搜索。
- 生成(文档上下文):Retriver检索的结果文档作为上下文和问题一起提交给大模型处理。
1.2 传统RAG技术核心步骤与通用优化方法
- 文档切分
- 根据关键字符切分或根据字符串长度切分、以及滑动窗口切分等;
- 围绕不同类型文本,可选不同切分策略;
- 文本数据清洗占绝大多数时间,也是本环节提效的关键;
- 文档匹配与输入
- 根据Embedding进行文本词向量化处理,并根据余弦相似度判断和问题相关的文档;
- 选择更好的Embedding模型、以及匹配后文本增强、重排等,是优化的关键;
- 模型问答
- 灵活判断文档段落内容是否可用、并根据文档进行回答;
- 真实性检验、后处理、用户意图判断是本环节优化的关键;
1.3 传统RAG无法克服的问题
传统RAG希望通过知识库的关联知识增强大模型问答的上下文以提升生成内容质量,但也存在诸多问题。
其中某论文总结了传统RAG的7个问题:
- 知识库内容缺失:现有的文档其实回答不了用户的问题,系统有时被误导,给出的回应其实是“胡说八道”,理想情况系统应该回应类似“抱歉,我不知道”。
- TopK截断有用文档:和用户查询相关的文档因为相似度不足被TopK截断,本质上是相似度不能精确度量文档相关性。
- 上下文整合丢失:从数据库中检索到包含答案的文档,因为重排序/过滤规则等策略,导致有用的文档没有被整合到上下文中。
- 有用信息未识别:受到LLM能力限制,有价值的文档内容没有被正确识别,这通常发生在上下文中存在过多的噪音或矛盾信息时。
- 提示词格式问题:提示词给定的指令格式出现问题,导致大模型/微调模型不能识别用户的真正意图。
- 准确性不足:LLM没能充分利用或者过度利用了上下文的信息,比如给学生找老师首要考虑的是教育资源的信息,而不是具体确定是哪个老师。另外,当用户的提问过于笼统时,也会出现准确性不足的问题。
- 答案不完整:仅基于上下文提供的内容生成答案,会导致回答的内容不够完整。比如问“文档 A、B和C的主流观点是什么?”,更好的方法是分别提问并总结。
总的来看:
- 问题1-3:属于知识库工程层面的问题,可以通过完善知识库、增强知识确定性、优化上下文整合策略解决。
- 问题4-6:属于大模型自身能力的问题,依赖大模型的训练和迭代。
- 问题7:属于RAG架构问题,更有前景的思路是使用Agent引入规划能力。
2.1 GraphRAG的核心原理
GraphRAG技术的核心原理在于将知识图谱与图机器学习相结合,通过结构化的知识表示和高效的图算法,提升大型语言模型在处理复杂数据时的理解和推理能力。具体来说,GraphRAG首先将非结构化的文本数据转换为结构化的图谱形式,其中文本中的实体和概念被视为图中的节点,而它们之间的关系则构成节点之间的边。这种结构化的知识表示方法不仅增强了模型对数据的理解能力,还为模型提供了更丰富的信息检索和推理路径。
接下来,利用图神经网络(GNN)等图机器学习技术,GraphRAG能够进一步挖掘知识图谱中的深层信息和复杂关系。GNN通过对图谱中的节点和边进行特征提取和信息传递,实现了对图中信息的深度学习和推理。这使得Graph RAG在处理涉及复杂关系和多步骤推理的问题时表现出色,能够提供更全面且准确的答案。
GraphRAG
通过利用大模型从原始文本数据中提取知识图谱来满足跨上下文检索的需求。该知识图谱将信息表示为互连实体和关系的网络,与简单的文本片段相比,提供了更丰富的数据表示。这种结构化表示使 GraphRAG
能够擅长回答需要推理和连接不同信息的复杂问题。具体来看,GraphRAG
定义了一个标准化数据模型,整体框架由几个关键组件组成,分别用于表示文档、TextUnit、实体、关系和社区报告等信息。像传统RAG
一样,GraphRAG
过程也涉及两个主要阶段:索引和查询。
在索引(Indexing)过程中,输入的文本被分为可管理的块,称为TextUnits
。然后大模型从这些文本单元中提取实体、关系和声明,形成知识图谱。
索引阶段执行流程
步骤1. 文本切分(Text Unit Splitting)
- GraphRAG 需要处理的是一大篇文档或语料库。首先,它会将这些文档切分为 Text Units(文本单元),这些 Text Units 是对输入文档的细分,通常是按照段落、句子或固定长度的文本块来进行切分。
- 这样做的目的是为了便于对文本内容进行分析,尤其是当需要进行实体识别和关系抽取时,能够精准地关联到文档中的具体上下文。
步骤2. 实体识别(Entity Extraction)
- 在文本切分之后,GraphRAG 会使用大模型(如 OpenAI GPT 或其他 LLM) 对每个 Text Unit 进行处理,提取其中的实体。这些实体通常是指文档中出现的人物、地点、组织、概念等信息。
- 实体识别的目的是构建 实体图谱(Entity Graph),将所有实体提取出来并为后续的关系挖掘和查询做准备。
步骤3. 关系挖掘(Relationship Extraction)
- 关系挖掘是从文本中识别出实体之间的 关系,例如:谁与谁有关联、某个实体与另一个实体之间的关系是“属于”、“合作”、“对立”等。
- 通过这种关系提取,GraphRAG 可以构建关系图谱(Relationship Graph),这些关系将有助于后续的查询引擎理解和推理。
步骤4. 文本嵌入(Text Embedding)
- 在识别了文本中的实体和关系之后,GraphRAG 会利用嵌入模型(如 OpenAI 的 Embedding 模型)将文本和实体表示为向量(vectors)。这些向量不仅包括了文本的语义信息,还能为后续的检索和查询提供高效的表示。
- 这些嵌入向量将存储在 向量数据库(如 LanceDB)中,为查询时提供快速的相似度搜索。
步骤5. 构建社区和层级结构(Community and Hierarchical Clustering)
- 通过使用 图谱聚类算法(如 Leiden 算法),GraphRAG 会将不同的实体和关系分组,形成多个社区(Community)。这些社区是根据实体之间的相似度或关系的密切程度进行划分的。
- 这种分组帮助 GraphRAG 更好地理解不同知识领域的结构,为查询时提供更具层次性的上下文信息。
步骤6. 生成索引文件(Indexing)
- 完成上述步骤后,所有的实体、关系、社区报告、文本单元等信息都会存储在磁盘上的 Parquet 文件中。
- 这些索引文件实际上就是构建好的 知识图谱,包括了文本内容、文本中涉及的实体和关系的结构化表示,并且这些文件是为后续的查询引擎和推理过程提供基础。
总的来说GraphRAG 的 索引阶段 是一个 多步骤 的过程,基本流程是:
- 文本切分(Text Units)
- 实体识别(Entity Extraction)
- 关系挖掘(Relationship Extraction)
- 文本嵌入(Text Embedding)
- 社区划分和层级结构(Clustering)
- 生成索引文件(Indexing)
整个过程的目的是将文档中的原始文本转化为可以进行检索和推理的结构化知识图谱。
而 实体识别 和 关系挖掘 通常是在文本切分之后进行的,因为需要先确保文本已经切分成足够小的单元才能进行更精细的分析和抽取。
查询阶段执行流程
在GraphRAG的查询阶段,核心任务是基于构建好的知识图谱来检索相关信息并生成回答。具体来说,查询阶段会利用之前在索引阶段构建的所有实体、关系和社区报告等信息,结合用户的查询请求,自动选择最相关的上下文,并通过大语言模型(如GPT等)生成智能化的回答。
2.2 GraphRAG的优势与挑战
独特的优势
GraphRAG技术相较于传统的RAG方法和大型语言模型,具有以下几方面的独特优势:
- 理解能力更强:通过结合知识图谱和图机器学习技术,GraphRAG能够深入理解文本中的实体、概念及其相互关系,从而更准确地把握数据的内涵和外延。这种能力使得GraphRAG在处理需要深度上下文理解的任务时表现出色,能够提供更精确和全面的分析结果。
- 推理能力更出色:GraphRAG利用图中的节点和边进行信息传递和推理计算,能够实现复杂的多步骤推理过程。这种推理能力使得GraphRAG在处理需要复杂逻辑分析的任务时更具优势,能够提供更深入、全面的分析结果。
- 检索效率更高:基于知识图谱的结构化表示和图检索技术,GraphRAG能够快速定位到相关信息,提高检索效率和准确性。这种高效的检索能力使得GraphRAG在处理大规模数据集时更具优势,能够更快地响应用户查询。
- 可扩展性更好:随着新数据的不断加入,GraphRAG能够自动更新知识图谱,保持信息的时效性和准确性。同时,该技术还易于扩展到跨领域的数据整合和分析任务中,为不同领域的应用提供了广泛的可能性。
面临的挑战
尽管GraphRAG技术展现出了强大的潜力和优势,但在实际应用中仍然面临一些挑战。首先,构建一个高质量的知识图谱需要大量的资源和时间,尤其是在领域知识深奥复杂的情况下。此外,知识图谱的更新与维护也是一个重要问题,如何保证知识图谱中信息的时效性和准确性仍然是一个技术挑战。其次,在处理大规模的知识图谱和文档库时,如何保持高效的检索和推理速度是另一个技术难题。
GraphRAG需要进一步优化其算法和架构,以应对大规模数据处理的需求。最后,由于GraphRAG需要处理大量外部数据,包括敏感的个人信息或商业机密,如何在确保模型性能的同时保护隐私和遵循道德规范,是其未来发展需要考虑的重要问题。
2.3 GraphRAG的应用场景
GraphRAG技术在多个领域具有广泛的应用潜力。以下列举几个典型的应用场景:
- 私有数据分析:企业可以利用GraphRAG从内部数据中提取有价值的洞察和趋势,为业务决策提供支持。例如,在金融领域,该技术可用于识别潜在的风险点和投资机会;在电商领域,则可用于挖掘用户购买行为和兴趣偏好等信息。
- 新闻媒体与内容创作:GraphRAG技术可用于自动化生成新闻摘要、故事梗概等内容,提高内容生产效率和质量。同时,该技术还可用于实现个性化的内容推荐和分发服务,满足用户多样化的信息需求。
- 学术研究与知识发现:研究人员可以借助GraphRAG技术对文献数据进行深度挖掘和关联分析,识别研究热点和前沿动态。此外,该技术还可用于构建领域知识库和专家系统,为科研工作者提供便捷的知识检索和咨询服务。
- 医疗健康信息管理:在医疗健康领域,GraphRAG技术有助于整合病历记录、医学研究和治疗指南等多元化的信息资源,为医生提供全面的诊断支持和个性化治疗方案建议。同时,该技术还可以用于药物研发过程中的分子结构分析和作用机制预测等任务中。
2.4 GraphRAG的应用流程
2.5 GraphRAG的发展历程
微软GraphRAG自提出,已历时快一年,我们对其发展历程进行了专门梳理与总结:
- 2024年4月,为解决传统RAG在全局性的查询总结任务上表现不佳,微软多部门联合提出Project GraphRAG(大模型驱动的KG);
- 2024年7月,微软正式开源GraphRAG项目,引起极大关注,至今24.4k star,但落地时却面临巨大成本痛点(具体:LLM用于实体关系抽取+描述,社区总结);
- 2024年11月,为了上述痛点,微软发布了LazyGraphRAG,将数据索引成本降低1000倍,只有GraphRAG的0.1%(使用 NLP 名词短语提取来识别概念及其共现,再利用图形统计来优化概念图并提取分层社区结构);
- 时隔3月,微软GraphRAG项目迎来2.0.0版本,正式开源LazyGraphRAG,即NLP graph extraction功能。
3.1 LazyGraphRAG的革新性改进
尽管GraphRAG在许多场景中表现出色,但在处理全局数据查询时,其成本问题一直受到诟病,尤其是在大规模AI模型中,查询的延迟和准确性也成为了瓶颈。为了解决这些问题,微软研究院在近日推出了GraphRAG的全新升级版——LazyGraphRAG。LazyGraphRAG的最大亮点在于其极低的成本,数据索引的开销仅为GraphRAG的0.1%。并且微软还采用了创新的混合数据搜索方法,使得生成结果的准确性和效率都有显著提升。LazyGraphRAG将很快以开源的形式加入GraphRAG库,进一步扩展其应用范围。
为什么称为 “Lazy”?
LazyGraphRAG 被称为“懒惰”,是因为它推迟了对大型语言模型(LLM)的使用。在索引阶段,LazyGraphRAG 仅使用轻量级的自然语言处理(NLP)技术来处理文本,将 LLM 的调用延迟到实际查询时。这种“懒惰”的策略避免了前期高昂的索引成本,实现了高效的资源利用。
3.2 LazyGraphRAG的优势
低成本的数据索引
LazyGraphRAG的最大亮点在于其数据索引阶段的创新。传统的GraphRAG需要通过大型语言模型提取和描述实体及其关系,并为每个实体生成详细总结,这一过程导致了高昂的成本。而LazyGraphRAG则通过NLP名词短语提取技术,识别概念及其共现关系,再通过图形统计优化概念图,并提取分层社区结构。这样,LazyGraphRAG不仅保留了GraphRAG的强大功能,而且大幅降低了计算成本,其索引成本仅为完整GraphRAG的0.1%。
高效的查询处理
LazyGraphRAG采用了“懒惰”模式,结合了最佳优先搜索(Best-first Search)和广度优先搜索(Breadth-first Search)的优势。首先,按相似度排名文本片段,然后通过动态选择相关社区来逐步细化查询结果。相比传统的广度优先搜索,LazyGraphRAG能够更加高效地找到最佳匹配的文本块,同时考虑整个数据集的广度,极大地提高了查询的效率。
4 其他RAG技术
LightRAG:轻量级图增强检索框架
LightRAG 是由港大黄超团队开发的 RAG(检索增强生成)优化框架,旨在通过图结构与双层检索机制,显著降低大模型检索成本,同时提升复杂查询的处理能力。其设计理念为 “Less is More”,强调轻量化、高效性和动态知识更新。
NanoGraphRAG:轻量级复现与教学框架
NanoGraphRAG 是微软GraphRAG的轻量化复现项目,旨在简化原始框架的复杂性,保留核心功能(如社区聚类、分层查询),便于开发者学习与快速部署。其代码量仅为官方实现的20%,适合学术研究与本地化应用。