为什么说知识图谱 + RAG > 传统 RAG?

近期,微软开源GraphRAG的新闻成为热门话题。GraphRAG (Graph-Augmented Retrieval-Augmented Generation) 是一种基于图的检索增强生成技术,结合了知识图谱和传统的检索增强生成(RAG)方法,旨在提升大语言模型处理私有数据集问答的能力。

本文从知识图谱的原理等角度,结合一个 GraphRAG 的生动类比,说明了为什么知识图谱+RAG 的方案优于传统的 RAG 方案。

以下为译文:

01 什么是知识图谱?

你是否曾觉得自己的大脑充斥了一团乱麻般的随机事实?知识图谱模拟了我们大脑思考事物,以及事物间关系的方式,同时又规避了大脑会遗忘和错误决策等问题。


我们可以将知识图谱视为带了主语、谓语和宾语的三元组。它们将信息表示为一个由相互连接的实体组成的网络,以及实体之间的关系。本质上,知识图谱利用基于图的数据模型,其中节点代表实体(如人、地点或概念的主体和宾语),边表示这些实体之间的关系或谓语。

OpenSPG 是一个语义增强的可编程知识图谱,GitHub地址如下,欢迎大家Star关注~

https://github.com/OpenSPG/openspg

换句话说,你可以把知识图谱看做是对经典"六度分隔"理论的数据层面的呈现,而且它不仅仅是将你连接到 Kevin Bacon,而是在一个广阔而多维的关系网络中链接所有可能的实体。

图片来源:Langchain

知识图谱的真正魔力在于其近乎超自然的连接数据能力,而且灵活且可扩展。知识图谱能无缝整合各种数据源,包括结构化和非结构化数据。这种融合创造出信息的统一视图,常常揭示出隐藏的联系和模式。先进的知识图谱融合了本体和语义 Schema,为领域中的概念及其相互关系提供了正式的定义。

这个语义层提升了图谱的逻辑推理能力,支持诸如传递闭包这样的操作,可以根据已有的关系推导出新的关系。例如,如果图谱中包含"约翰住在旧金山"和"旧金山在加利福尼亚"的信息,即使没有明说,知识图谱也能正确地推断出"约翰住在加利福尼亚"这个事实。

图片来源:Neo4j 博客

02 知识图谱的应用场景

那么知识图谱的应用场景有哪些呢?

我们可以通过延时、持久性和查询类型这三个维度的框架,去理解知识图谱在各种应用场景中的多样化。在分析方面,知识图谱在处理即时查询和系统性分析方面表现出色,从实时的客户洞察到复杂的财务建模都能实现。

另外,知识图谱具有持久数据存储和快速检索的能力,这在复杂的推荐系统和以用户为中心的界面中至关重要。在算法方面,知识图谱非常擅长处理系统查询,尤其是高级自然语言处理和链路优化。这进一步佐证了我们之前提到的灵活性,即既能处理实时分析,又能支持持久的系统数据结构。


这也是为何去年年底知识图谱技术会这么流行的原因,也就引出了今天的话题——GraphRAG 才是王道!

03 什么是 GraphRAG?

今年 4 月,微软研究团队 GraphRAG 的论文一经发布,就得到了业界的关注。7 月初,Graph RAG 在 GitHub 上开源,短短半个月,star 数量就达到 12k!

那么,GraphRAG(GRAG)究竟是什么呢?下面我们将从 GraphRAG 的论文开始介绍:

图片来源:Arxiv,《GRAG: Graph Retrieval-Augmented Generation》

为了让你更容易理解,我和 Sonnet 3.5 一起头脑风暴讨论出了一个关于 GraphRAG 的形象解释:

GRAG 就像是信息世界中最优秀的城市规划师。传统的 RAG 方法就像游客随意向行人问路,而 GRAG 则是了解城市每个角落的市长。它不仅了解单个建筑(或信息片段),还能看到整个城市的全貌,牢记错综复杂的街道、街区和社区网络。这种鸟瞰式的视角让 GRAG 能够像一个熟知所有捷径的老司机一样,高效地在这些街道中穿梭。

图片来源:arXiv,《GRAG: Graph Retrieval-Augmented Generation》

GRAG 之所以引人注目,是因为它能够识别并探索任何给定问题的相关“街区”(子图)。利用其“软修剪”技术(主要针对无关信息),GRAG 可以清理这些邻域,去除杂乱无章的信息,突出最相关的特征。然后,通过同时运用城市规划语言(图结构)和地方方言(文本信息)的双重提示,GRAG 作出的回答不仅能捕捉事实,还能揭示城市景观的丰富背景和内在联系。这就好比从一位长期居住在本地的历史专家那里获取的内部信息,远胜于任何旅游指南所能提供的信息。

微软《From Local to Global》的论文,将其应用于聚焦查询的总结,用自然语言总结知识图谱的内容以便检索。沿用之前的类比,我们可以将 GraphRAG 看作是知识库(或城市)的高级城市规划和信息检索系统。这个系统的运行主要分为两个阶段:索引和检索。

在索引阶段,城市规划者(LLMs)首先将城市景观(原始文档)划分为可管理的区域(文本片段)。然后,他们调查每个区域,识别关键地标和连接(元素实例)——这就像标定重要的建筑物、公园以及连接它们的道路。这些个体元素随后被总结为简洁的描述(元素摘要),就像为每个社区地标创建简短的概况。

接着,利用先进的城市分析工具(如 Leiden 社区检测算法),规划者将这些元素分组为自然社区,就像在城市中识别出不同的街区或行政区一样。最后,他们为每个社区制作详细的“社区报告”(社区摘要),提供一个丰富、多层次的全城指南。通过索引阶段,我们就创建了一个全面、分层次的、从单个建筑到整个区域的城市景观理解。

图片来源:Arxiv,《From Local to Global: A Graph RAG Approach to Query-Focused Summarization》

当需要进行检索时,GraphRAG 在处理全局范围的查询时表现出色。它不会向随机位置派遣调查员,而是参考预先准备的社区报告。每个社区以其本地视角对全局问题作出贡献,就像城市规划师结合各个行政区的反馈来理解全市趋势一样。这种方法在处理“全局”问题时特别有效,给到答案的广度和多样性方面都优于传统方法。


论文中还提到了一个非常有趣的结论,文本块的大小至关重要。例如,使用 600 个 token 比使用 2400 个 token 可以获得更多的提取实体(见上图)。但这需要做一些平衡,因为文本块太小可能会导致上下文信息丢失。

正如我们之前多次讨论过的,在使用大模型时,我们总是要在成本、延迟、隐私和准确性之间进行平衡。图的性能伴随着更多的 token 数量和推理时间,因此采用与否在很大程度上取决于具体的应用场景,以及基于图的摘要是否是最优方案。

图片来源: Gradientflow 博客

04 关键区别:GraphRAG vs PAPTOR

这时可能有人会问,GraphRAG 与目前 RAG 技术中常用的 RAPTOR 有何不同。可以沿用之前的比喻概括一下,如果把 RAPTOR 看作是建筑师在设计一栋多层的高楼,从每一层楼向下看,都能看到城市的不同细节:

  • 一楼有特定地点的详细信息;
  • 随着楼层的上升,每层都提供一个更概括的视角,覆盖更大的区域;
  • 顶层可以鸟瞰整个城市。

回答问题时,Raptor 会在这栋大楼中上下移动,根据需要从不同楼层收集信息。对于需要结合具体细节和宏观背景的复杂问题,它尤其有效。

图片来源:Arxiv,《RAPTOR: Recursive Abstractive Processing for Tree-Organized Retrieval》GraphRAG vs RAPTOR 的主要区别如下:

  1. GraphRAG 侧重于城市不同部分之间的联系(实体之间的关系),而 Raptor 则按信息的抽象程度来组织信息;
  2. GraphRAG 最适用于需要全面了解整个城市的问题,显示所有事物之间的相互关系。Raptor 则擅长处理需要将城市不同部分的具体细节拼凑在一起,同时保留更广泛背景的问题。
  3. GraphRAG 的优势在于展示城市的多样性和相互关联性。Raptor 的优势在于能在详细信息和摘要信息之间有效切换。

END

我们建立了 OpenSPG 技术交流群,欢迎对知识图谱技术感兴趣的同学,添加小助手微信加入:jqzn-robot

文章推荐

OpenSPG v0.0.3 发布,新增大模型统一知识抽取&图谱可视化

开放开源!蚂蚁集团浙江大学联合发布开源大模型知识抽取框架OneKE

Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,可以得知prompt+RAG的流程如下: 1. 首先,使用Retriever部分在知识库中检索出top-k个匹配的文档zi。 2. 然后,将query和k个文档拼接起来作为QA的prompt,送入seq2seq模型。 3. seq2seq模型生成回复y。 4. 如果需要进行Re-rank,可以使用LLM来rerank,给LLM写好prompt即可。 下面是一个简单的示例代码,演示如何使用prompt+RAG: ```python from transformers import RagTokenizer, RagRetriever, RagSequenceForGeneration # 初始化tokenizer、retriever和seq2seq模型 tokenizer = RagTokenizer.from_pretrained('facebook/rag-token-base') retriever = RagRetriever.from_pretrained('facebook/rag-token-base', index_name='exact', use_dummy_dataset=True) model = RagSequenceForGeneration.from_pretrained('facebook/rag-token-base') # 设置query和context query = "What is the capital of France?" context = "France is a country located in Western Europe. Paris, the capital city of France, is known for its romantic ambiance and iconic landmarks such as the Eiffel Tower." # 使用Retriever部分检索top-k个匹配的文档 retrieved_docs = retriever(query) # 将query和k个文档拼接起来作为QA的prompt input_dict = tokenizer.prepare_seq2seq_batch(query, retrieved_docs[:2], return_tensors='pt') generated = model.generate(input_ids=input_dict['input_ids'], attention_mask=input_dict['attention_mask']) # 输出生成的回复 generated_text = tokenizer.batch_decode(generated, skip_special_tokens=True)[0] print(generated_text) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值