Graph RAG:图表使用指南

2024年10月22日 由 alex 发表 198 0

当 RAG 开发人员决定尝试图形 RAG(即构建知识图谱并将其集成到他们的 RAG(检索增强生成)系统中)时,根据互联网,他们有很多选择。有很多文章、指南和操作手册介绍了不同的工具来处理 RAG 图形和一般图形。因此,一些开发人员会立即投入其中,认为他们需要集成和配置一系列图形工具和技术才能正确使用图形 RAG。在搜索如何入门时,你通常会发现一些文章建议你需要以下部分或全部内容:

  1. 知识图谱--用于连接语义搜索无法捕捉的关键术语和概念
  2. 关键词和实体提取工具--用于构建知识图谱
  3. 图遍历算法--用于探索图中的联系
  4. 属性图实现--用于丰富图结构和遍历方法
  5. 图数据库(DB)--用于存储图和与图交互,以及高级图分析
  6. 图查询语言(QL)--用于对图节点和边进行复杂查询
  7. 图节点嵌入算法--用于将图对象嵌入到可搜索的向量空间中
  8. 向量存储--用于存储和搜索嵌入语义向量空间的文档


当然,这些工具和实现方式对特定的图形用例都很有帮助。但是,对于任何开始使用典型图 RAG 用例的开发人员来说,一个简单的事实依然存在:大多数 “图 ”工具都是在生成式人工智能革命之前设计和构建的。GenAI 用例与传统图用例有着本质区别,需要采用不同的方法,即使两者之间可以共享某些工具。


上述建议用于图 RAG 的工具列表包括一些典型 GenAI 用例通常不需要的工具。而且,除了不必要之外,添加其中一些工具还会使事情变得过于复杂--导致开发时间增加、成本上升,以及本可以避免的额外维护开销。通过专注于基本要素来保持技术堆栈的简单性,可以提高效率,并让你充分利用图形 RAG 的强大功能,而不会显得臃肿。


一个常见的误解是,要进行图形 RAG 就需要图形数据库。图形数据库和图形查询语言(图形 QL)是图形分析和深度图形算法的强大工具,但图形 RAG 和 GenAI 应用程序通常不会从这些类型的传统图形分析中受益。图数据库可以支持图 RAG,但也会给堆栈增加不必要的复杂性。


在本文中,我们将讨论涉及图的各种用例的软件需求,重点关注 GenAI 用例和应用,以及在从普通 RAG 转向图 RAG 时如何最大限度地减少额外工作和复杂性。在大多数情况下,我们并不需要大量的工具;采用与我们的目标相一致的几项关键技术不仅能简化我们的工作,而且往往能取得更好的结果。


GenAI的图表用例

语义向量搜索在查找与查询上下文相似的文档方面非常强大。但是,在有些情况下,这种方法会有不足之处,尤其是当所需信息是非语义信息或需要深入了解数据时。图形 RAG 技术可以通过利用非语义信息来补充矢量搜索的功能,例如在以下常见用例中:


利用文档中的非语义信息

虽然语义搜索在根据上下文相似性识别文档方面表现出色,但它往往会忽略对综合数据分析至关重要的非语义线索。图表可以纳入并利用元数据等非语义信息,其中包括链接、专业术语和定义、交叉引用、词汇表以及标题、标题和分节内容等文档结构。此外,图表还可以连接从文本中提取或推断出的实体、关键词和概念。


摘要

当目标是总结某个社区或一组相互关联的实体的内容时,基于图的方法是不可或缺的。图形可以识别数据中的群组或社区,总结多个文档或贡献者中的普遍主题或讨论。


邻域探索

探索图中特定节点或查询的 “邻域 ”或直接联系可以揭示仅通过语义搜索无法发现的关系和见解。上下文探索允许从起始节点开始遍历,探索相邻节点(文档、术语或概念),以发现相关信息,从而增加初始查询的深度。


14


为什么 GenAI 与传统图使用案例不同

在生成式人工智能之前,已经有了知识图谱和图数据库。这些图工具比 GenAI 早了很多年,而且一些相关技术是为非常不同的用例而设计的。这些技术主要针对结构化数据探索,而非 GenAI 擅长的非结构化文本处理和语义理解。


从传统图形用例到生成式人工智能的转变是数据处理技术的重大变革。传统图对于清晰、明确的关系来说非常出色,但它们往往缺乏灵活性,无法满足生成式人工智能的细微需求。


传统图形工具是为庞大、复杂的图形而设计的

知识图谱通常是来自不同来源的大量数据的聚合,在广泛的数据点之间连接着复杂且相互依存的关系。大量的节点和边,再加上其连接的复杂性,会使数据处理和分析任务变得计算密集和耗时。


这就是图数据库(graph DBs)诞生的初衷。它们提供优化的存储解决方案和处理能力,旨在高效管理庞大的节点和边网络。除了图数据库,图查询语言(graph QLs)的设计也是为了方便对这些大型图及其子图进行复杂的查询操作。这些工具擅长执行涉及深度遍历、模式匹配和动态数据聚合的操作,这在图分析中非常典型。图数据库和图分析的常见用例包括社交网络分析、推荐系统、欺诈检测和复杂网络管理。在这些应用场景中,快速有效地分析大型数据集中复杂关系的能力至关重要。


图数据库和 QL 的一些典型用例:

  • 中心性分析--识别社交网络中最有影响力的人。涉及中心性度量,如度中心性、度间中心性和特征向量中心性。
  • 社群检测 - 将网络划分为社群或集群,在这些社群或集群中,成员之间的内部联系比与网络其他部分的联系更为紧密。
  • 路径寻路 - 寻找两个节点之间的最短路径,以了解个体之间的分离度。涉及 Dijkstra's 或 A*(A-star)等算法的最短路径计算。


当然,传统图形工具还设计了许多其他复杂的图形查询和图形分析用例,并擅长于这些用例。但是,这里所举的例子以及许多其他例子,与我们今天在 GenAI 应用中看到的图使用案例截然不同。


图 RAG 和向量搜索都在本地运行

之前,我将 “邻域探索 ”列为图在 GenAI 用例中的一种应用,但从概念上讲,它可以被视为一个广泛的总括术语,在这个术语下,你可以找到 GenAI 中几乎所有的图用例。换句话说,当我们在 GenAI 中使用图时,我们几乎肯定只是在探索邻域,而很少是探索整个图或图的大部分。我们最多会探索相对于整个图来说很小的子图。


在图论中,“邻域 ”是指图中与给定节点相邻的节点集合,由直接链接或边定义。因此,检索知识图谱中某一节点的邻域,应能得到一组与起始节点直接相关的项目或概念。同样,在矢量搜索中,标准实现会返回语义矢量空间中的 “近似近邻”(ANN),这意味着结果集中的文档是那些在语义意义上与查询关系最密切的文档。(近似近邻之所以是 “近似 ”的,是因为精确近邻的速度更慢、成本更高)。


因此,矢量搜索和从起始节点开始几步的图遍历都是在寻找 “最近的邻居”,而 “最近 ”在这两种情况下的含义是不同的。矢量搜索查找最近的语义邻居,而图遍历则查找图邻居--如果整合得好,它们可以将在语义方面和各种非语义方面相关的文档整合在一起,而这些相关性仅受你构建知识图谱的方式的限制。


这里重要的一点是要注意,图 RAG 完全关注的是探索局部邻域,无论是图还是矢量--就像 RAG 在纯矢量方面的一贯做法一样。这意味着我们的图 RAG 软件栈应该建立在擅长局部邻域搜索和检索的基础之上,因为我们在 GenAI 应用程序中的所有查询都集中在特定的知识领域,不需要对整个知识图谱进行全面的探索或分析。


15


点菜式图形工具:只采用你需要的工具

回到本文开头列出的图形工具 “清单”,让我们来仔细看看在什么情况下需要或不需要将它们作为图形 RAG 堆栈的一部分。


知识图谱

  • 何时采用 - 始终以某种形式采用。知识图谱是图形 RAG 的核心部分。
  • 何时避免 - 永远不要,除非摆脱图 RAG,转而使用普通 RAG。


实体和关键词提取工具

  • 何时采用--直接从文本内容中构建知识图谱时,自动提取可以有效地将相关实体和关键词填充到图谱中。
  • 何时避免使用 - 如果你的数据不适合自动提取,或者文档链接、手动整理或专用解析器等替代方法更适合你的数据和用例。


图遍历算法

  • 何时采用 - 始终采用。对于图 RAG 而言,简单的图遍历算法是必要的,例如,通常是从起始节点开始深度为 1-3 的简单行走。
  • 何时避免 - 虽然基本的遍历是必要的,但应避免过于复杂的算法,除非你的使用案例特别需要高级图形导航功能。


属性图实现

  • 何时采用 - 当你的项目需要对复杂的关系和边中的属性进行复杂的建模,远远超出基本的链接时。
  • 何时避免 - 对于大多数标准图形 RAG 实现,不需要如此复杂的关系建模。较简单的图模型通常就足够了。


图形数据库

  • 何时采用 - 当需要处理大量复杂查询,以及需要执行超出标准系统能力的高级图形分析和遍历时。
  • 何时避免 - 如果你的图形 RAG 系统不进行复杂、广泛、特定于图形的操作。在这种情况下采用图形数据库会导致不必要的系统复杂性和资源分配。


图形查询语言(Graph QLs)

  • 何时采用 - 如果采用图形数据库。当复杂的图形数据查询对你的应用至关重要时,允许对相互关联的数据进行复杂的操作和检索。
  • 何时避免--对于较简单的图 RAG 设置,基本检索方法就足够了,采用图 QL 可能会使架构过于复杂。


图节点嵌入算法

  • 何时采用 - 当你有一个图,并希望将图节点转换为向量时。这是一种特殊的用例,有利有弊。请参见流行算法 node2vec。
  • 何时避免 - 如果你的系统不需要将图形节点作为向量进行搜索。


向量存储

  • 何时采用: 始终采用。必须采用,因为它们是存储和搜索对 RAG 系统至关重要的高维向量表示的基础。
  • 何时避免--绝不。


每个组件都应符合你的图形 RAG 系统的具体需求和复杂性,确保采用的每项技术都能增加价值并提高系统性能,同时避免不必要的复杂性。


16


最小图 RAG 系统的要求

考虑到上述有关图工具和技术的说明,这些是任何图 RAG 系统所需的核心组件:

  1. 矢量存储--矢量存储对任何 RAG 框架都是必不可少的,在图 RAG 中,矢量存储对保持文档检索的可扩展性和效率更为重要。矢量存储为存储和搜索嵌入语义矢量空间的文档提供了基础设施,这是 RAG 系统检索过程的基础。
  2. 知识图谱 - 知识图谱是图形 RAG 与普通 RAG 的定义概念,它将语义矢量搜索可能遗漏的关键术语和概念联系起来。知识图谱对于扩展上下文和增强 RAG 系统可用的关系数据至关重要,因此在图式 RAG 中发挥着核心作用。
  3. 图遍历--浏览知识图谱需要一个简单的图遍历算法。该组件不需要过于复杂,因为图 RAG 主要要求探索与查询直接相关的本地邻域或小型子图,而不是深度或广度图导航。


对于特殊用例,或者如果最小实现的性能不够好,可以添加更多的图工具和功能--下一节将概述一些重要的考虑因素。


从向量开始,根据需要添加 “图”--而不是相反

在处理 GenAI 用例时,知识的基础是向量空间。我们使用矢量优化工具(如矢量存储),因为它们直接使用 LLM 和其他 GenAI 模型的语言(矢量)进行操作。我们对 GenAI 应用程序的实现应该是向量优先的,因为最重要的向量操作(如近似近邻搜索)在时间和金钱上都很昂贵,所以我们应该优化这些操作,以提高性能和效率。将图形添加到 GenAI 应用程序中应该只是:将图形功能添加到现有的矢量优化基础架构中。在某些特定用例中,可能需要从矢量优化的基础架构转向图原生基础架构,但在绝大多数情况下,这会使技术堆栈复杂化,并使部署更具挑战性。


从典型的图形 RAG 实施开始,并考虑添加更复杂的图形工具和功能时,必须仔细评估使用案例的特定挑战和要求,而不是普遍认为更先进或更复杂的图形工具天生就更适合任何图形使用案例。


以下是一些关键的考虑因素:

  • 图操作的局部性--在图 RAG 中,图操作主要是局部操作,只涉及邻域和小型子图内的简单遍历。这种方法通常不会受益于复杂的图算法,因为复杂的图算法可能会使检索过程过于复杂。
  • 矢量存储在图形操作方面的能力--现代矢量存储能够执行必要的图形操作,尤其是在操作不太复杂的情况下。这样就可以实现无缝集成,使矢量和图形技术相辅相成,而不需要单独的图形数据库。
  • 现代矢量存储的可扩展性和效率--矢量存储旨在高效处理大规模文档数据集,因此非常适合作为 RAG 系统的骨干,在这种系统中,快速检索至关重要。在矢量存储中直接使用图形功能还可以在不影响性能的情况下满足必要的图形操作。
  • 图形数据库、QL 和分析的复杂性--在堆栈中引入图形数据库会使软件架构不必要地复杂化。鉴于图形 RAG 中的图形需求通常不需要复杂的大型图形操作,利用矢量存储的现有功能来处理这些需求会更有效,并使系统架构更简单。



文章来源:https://medium.com/towards-data-science/a-graph-too-far-graph-rag-doesnt-require-every-graph-tool-5f9adb227bdf
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
写评论取消
回复取消