首页 > 其他分享 >大模型入门到进阶:什么是Graph RAG?

大模型入门到进阶:什么是Graph RAG?

时间:2024-09-20 15:48:20浏览次数:3  
标签:RAG 社区 提取 进阶 Graph 文档 LLM 节点

自从 ChatGPT 的出现引爆了人工智能的炒作之后,检索增强生成 (RAG) 就主导了关于如何让 Gen AI 应用程序变得有用的讨论。这个想法很简单。一旦我们将 LLM 连接到我们的私人数据,它就会变得特别有用。

每个人都可以访问的基础模型与我们特定领域的数据相结合,作为秘密武器,产生了一个强大而独特的工具。就像在人类世界一样,人工智能系统似乎发展成为一个专家经济。一般知识是一个有用的基础,但专家知识将制定出你的人工智能系统的独特卖点。

RAG 本身还没有描述任何特定的架构或方法。它只描述了用任意检索方法对给定生成任务的增强。

一、本地和全局问题

基于文本嵌入的检索已多次被描述。它已经允许我们的 LLM 应用程序非常可靠地根据给定知识库的内容回答问题。Text2Vec 检索的核心优势依然是:提取嵌入知识库中表示的给定事实,并根据提取的事实制定对用户查询的答案。然而,文本嵌入搜索也面临着重大挑战。通常,每个文本嵌入都代表非结构化数据集中的一个特定块。最近邻搜索会找到表示与传入用户查询语义相似的块的嵌入。这也意味着搜索是语义的,但仍然非常具体。因此,候选质量高度依赖于查询质量。此外,嵌入表示知识库中提到的内容。这并不代表你希望回答需要跨文档或知识库中文档内概念进行抽象的问题的情况。

例如,想象一个知识库包含所有过去诺贝尔和平奖获得者的简历。向 Text2Vec-RAG 系统询问“谁获得了 2023 年诺贝尔和平奖?”是一个很容易回答的问题。这一事实在嵌入的文档块中得到了很好的体现。因此,最终答案可以基于正确的上下文。另一方面,RAG 系统可能会在询问“谁是过去十年中最著名的诺贝尔和平奖获得者?”时遇到困难。在添加更多背景信息(例如“谁是对抗中东冲突的最著名的诺贝尔和平奖获得者?”)后,我们可能会成功,但即使仅基于文本嵌入(考虑到嵌入模型的当前质量),这也将是一个难以解决的问题。

另一个示例是整个数据集推理。例如,你的用户可能有兴趣询问你的 LLM 应用程序“最近的诺贝尔和平奖获得者支持的三大主题是什么?”。嵌入的块不允许跨文档推理。我们的最近邻搜索正在知识库中寻找对“最近的诺贝尔和平奖获得者支持的三大主题”的具体提及。如果知识库中不包含这一点,任何纯基于文本嵌入的 LLM 应用程序都将举步维艰,并且很可能无法正确、详尽地回答这个问题。

我们需要一种替代的检索方法,让我们除了回答“本地”提取问题之外,还能回答这些“全局”聚合问题。

欢迎使用 Graph RAG!

知识图谱是一种半结构化的分层信息组织方法。一旦将信息组织成图,我们就可以推断出有关特定节点的信息,以及它们的关系和邻居。图结构允许在全局数据集级别进行推理,因为节点及其之间的连接可以跨越文档。根据此图,我们还可以分析相邻节点和节点社区,这些节点之间的连接比它们与其他节点之间的连接更紧密。可以预期,一个节点社区大致涵盖一个感兴趣的主题。跨社区节点及其连接的抽象化可以让我们对该主题中的概念有一个抽象的理解。Graph RAG 使用对知识图谱中社区的这种理解来为给定的用户查询提出上下文。

Graph RAG 管道通常遵循以下步骤:

  1. 图形提取
  2. 图形存储
  3. 社区检测
  4. 社区报告生成
  5. Map Reduce 用于最终上下文构建

二、图形提取

为我们的非结构化知识库构建抽象理解的过程始于提取将构建知识图谱的节点和边。你可以通过 LLM 自动执行此提取。此步骤的最大挑战是决定要包含哪些相关概念和关系。

举一个高度模糊的任务的例子:假设你正在从有关沃伦·巴菲特的文档中提取知识图谱。你可以将他的持股、出生地和许多其他事实提取为具有相应边的实体。这些信息很可能与你的用户高度相关。(使用正确的文档)你还可以提取他在上次董事会会议上领带的颜色。这(很可能)与你的用户无关。为应用程序用例和域指定提取提示至关重要。这是因为提示将决定从非结构化数据中提取哪些信息。例如,如果你有兴趣提取有关人员的信息,则需要使用与提取有关公司的信息不同的提示。

指定提取提示的最简单方法是通过多重提示。这涉及为 LLM 提供所需输入和输出的多个示例。例如,你可以为 LLM 提供一系列有关人员的文档,并要求其提取每个人的姓名、年龄和职业。然后,LLM 将学习从新文档中提取这些信息。指定提取提示的更高级方法是通过 LLM 微调。这涉及在所需输入和输出的示例数据集上训练 LLM。这可以带来比多样本提示更好的性能,但也更耗时。

这是 Microsoft graphrag 提取提示:
https://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/graph/prompts.py

三、图形存储

你设计了一个可靠的提取提示并调整了 LLM。你的提取管道可以正常工作。接下来,你必须考虑存储这些结果。Neo4j 和 Arango DB 等图形数据库 (DB) 是直接的选择。但是,通过另一种数据库类型扩展你的技术堆栈并学习新的查询语言(例如 Cypher/Gremlin)可能会很耗时。从我的高级研究来看,也没有很好的无服务器选项可用。如果处理大多数图形数据库的复杂性还不够,那么对于像我这样的无服务器爱好者来说,最后一个就是杀手级的。不过还有其他选择。只要对正确的数据模型稍加创意,图形数据就可以格式化为半结构化,甚至是严格结构化的数据。为了激发你的灵感,我将 graph2nosql 编码为一个简单的 Python 接口,用于在你最喜欢的 NoSQL 数据库中存储和访问图形数据集。

https://github.com/jakobap/graph2nosql

数据模型定义了节点、边和社区的格式。将这三者存储在单独的集合中。每个节点、边和社区最终通过唯一标识符 (UID) 进行识别。然后,Graph2nosql 实现了处理知识图谱时所需的几个基本操作,例如添加/删除节点/边、可视化图谱、检测社区等。

四、社区检测

提取并存储图表后,下一步是识别图表中的社区。社区是节点集群,它们与图表中的其他节点之间的连接比它们更紧密。这可以使用各种社区检测算法来实现。

一种流行的社区检测算法是 Louvain 算法。Louvain 算法通过迭代将节点合并到社区中,直到满足某个停止标准。停止标准通常基于图表的模块性。模块性是衡量图表划分为社区的程度的标准。

其他流行的社区检测算法包括:

  • Girvan-Newman 算法
  • 快速展开算法
  • Infomap 算法

五、社区报告生成

现在使用生成的社区作为基础来生成社区报告。社区报告是每个社区内节点和边缘的摘要。这些报告可用于了解图形结构并确定知识库中的关键主题和概念。在知识图中,每个社区都可以理解为代表一个“主题”。因此,每个社区都可能是回答不同类型问题的有用背景。

除了总结多个节点的信息外,社区报告是跨概念和文档的第一个抽象级别。一个社区可以跨越多个文档添加的节点。这样,你就可以构建对索引知识库的“全局”理解。例如,从诺贝尔和平奖获得者数据集中,你可能提取了一个社区,该社区代表所有类型为“人”的节点,这些节点与节点“诺贝尔和平奖”相连,边缘描述为“获奖者”。

Microsoft Graph RAG 实现的一个好主意是“发现”。除了一般的社区摘要之外,这些发现是关于社区的更详细见解。例如,对于包含所有过去诺贝尔和平奖获得者的社区,一个发现可能是将他们的大多数活动联系起来的一些主题。

与图形提取一样,社区报告生成质量将高度依赖于领域和用例适应的水平。要创建更准确的社区报告,请使用多镜头提示或 LLM 微调。

这是 Microsoft graphrag 社区报告生成提示:
https://github.com/microsoft/graphrag/blob/main/graphrag/index/graph/extractors/community_reports/prompts.py

六、Map reduce 用于最终上下文构建

在查询时,你使用 map-reduce 模式首先生成中间响应和最终响应。

在 map 步骤中,你将组合每个社区-用户查询对,并使用给定的社区报告生成对用户查询的答案。除了对用户问题的中间响应之外,你还要求 LLM 评估给定社区报告作为用户查询上下文的相关性。

然后,在 Reduce 步骤中,你对生成的中间响应的相关性分数进行排序。前 k 个相关性分数代表回答用户查询感兴趣的社区。相应的社区报告可能与节点和边缘信息相结合,构成最终 LLM 提示的上下文。

七、写在最后的话

Text2vec RAG 在知识库问答任务方面存在明显差距。Graph RAG 可以弥补这些差距,而且做得非常好!通过社区报告生成增加的抽象层可以为你的知识库提供重要见解,并建立对其语义内容的全局理解。这将为团队节省大量时间,无需筛选文档以获取特定信息。如果你正在构建 LLM 应用程序,它将使你的用户能够提出重要的大问题。你的 LLM 应用程序将突然能够似乎在思考并了解用户数据中发生了什么,而不是“仅仅”引用它。

另一方面,Graph RAG 管道(如此处所述的原始形式)需要比 text2vec RAG 管道更多的 LLM 调用。特别是社区报告和中间答案的生成是潜在的弱点,在金钱和延迟方面会花费很多。

正如在搜索中经常发生的那样,你可以预期围绕高级 RAG 系统的行业将转向混合方法。在扩展 RAG 应用程序时,使用正确的工具来处理特定查询至关重要。例如,可以想象一个分类层来分离传入的本地和全局查询。也许社区报告和调查结果生成就足够了,将这些报告作为抽象知识添加到索引中作为上下文候选就足够了。


如何学习大模型?

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

5. 大模型面试题

面试不仅是技术的较量,更需要充分的准备。

在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费

如有侵权,请联系删除

标签:RAG,社区,提取,进阶,Graph,文档,LLM,节点
From: https://blog.csdn.net/Code1994/article/details/142355982

相关文章

  • RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体
    RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验1.RAGflow简介最近更新:2024-09-13增加知识库问答搜索模式。2024-09-09在Agent中加入医疗问诊模板。2024-08-22支持用RAG技术实现从自然语言到SQL语句的转换。2024-08-02支持Gr......
  • 兼收并蓄 TypeScript - 进阶: ArrayBuffer
    源码https://github.com/webabcd/TypeScriptDemo作者webabcd兼收并蓄TypeScript-进阶:ArrayBuffer示例如下:advanced\arrayBuffer.ts{/***1、ArrayBuffer-内存之中的一段二进制数据,需要通过视图操作数据*2、TypedArray-视图,用于操作ArrayBuf......
  • 兼收并蓄 TypeScript - 进阶: promise
    源码https://github.com/webabcd/TypeScriptDemo作者webabcd兼收并蓄TypeScript-进阶:promise示例如下:advanced\promise.ts{/***Promise-用于异步编程(非多线程)*有3种状态:pending(进行中),fulfilled(已成功),rejected(已失败)*状态只能从......
  • 兼收并蓄 TypeScript - 进阶: async/await
    源码https://github.com/webabcd/TypeScriptDemo作者webabcd兼收并蓄TypeScript-进阶:async/await示例如下:advanced\async_await.ts{/***async/await-用于异步编程(非多线程)*asyncfunction返回的是Promise对象*await用于等Pro......
  • 兼收并蓄 TypeScript - 进阶: iterator, generator
    源码https://github.com/webabcd/TypeScriptDemo作者webabcd兼收并蓄TypeScript-进阶:iterator,generator示例如下:advanced\iterator_generator.ts{/***iterator-迭代器(可迭代对象有Array,TypedArray,Map,Set,String)*next()-迭代到......
  • 兼收并蓄 TypeScript - 进阶: proxy, reflect
    源码https://github.com/webabcd/TypeScriptDemo作者webabcd兼收并蓄TypeScript-进阶:proxy,reflect示例如下:advanced\proxy_reflect.ts{//Proxy-代理(拦截目标对象的属性操作和函数操作)lettarget={name:'webabcd',age:40,......
  • FLUENT离心风机仿真手把手零基础入门进阶有声解说教程(#331)
    本文摘要(由AI生成):本文主要介绍了FLUENT中旋转机械仿真方法,包括旋转坐标系模型、多参考坐标系模型、混和平面模型、滑移网格模型和重叠网格模型。其中,多重参考系法与滑移网格法设置几乎相同,两者相互转换容易。本文以离心风机为例,介绍了使用WORKBENCH19.2平台及其对应的DM、ICEM......
  • Vue 2&3进阶面试题:(第二天)
    目录5.vue常用操作指令?6.v-for为什么要绑定key?7.v-if和v-show的区别?8.vue中的修饰符5.vue常用操作指令?v-text指令:用于更新标签包含的文本,它的作用跟双大括号效果是一样的v-html指令:绑定一些包含html代码的数据在视图上v-show指令:指令的取值为true/false,分别对应着显示......
  • R语言安装graph包报错:package graph is not available for this version of R
    我的R语言版本是4.0.2,安装graph包的时候出现如下报错尝试过换源都无法下载后来尝试在google想搜索graph包的官网,搜出来:https://cran.r-project.org/web/packages/graph/index.html 应该是graph包被CRAN更新了,现在已不在使用根据它的提示,进入链接:https://www.bioconductor.or......
  • P9705 「TFOI R1」Unknown Graph题解
    思路题目给出了每个点的初度和入度,由于图是无重边无自环的有向图。要求满足限制的图有多少条边与建图方案。我们可以考虑使用网络流中的最大流。我们知道这是一道网络流后,题目的难点就转移到网络流的建模以及输出方案的办法。网络流的建模:题目所给的条件没有源点汇点并指出......