前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >使用Elasticsearch进行基于图的 RAG

使用Elasticsearch进行基于图的 RAG

原创
作者头像
点火三周
发布2025-01-29 13:55:16
发布2025-01-29 13:55:16
1630
举报
文章被收录于专栏:Elastic Stack专栏Elastic Stack专栏

检索增强生成(RAG)通过将大型语言模型(LLM)的输出与事实数据结合,提升其生成能力。然而,传统的基于文档的RAG存在一些局限,如上下文窗口狭窄和数据不连贯。一个有前景的解决方案是利用知识图谱,结构化地组织实体和关系,以实现更深入、更具上下文的检索。本文探讨了如何利用Elasticsearch高效地实现基于图的RAG,通过动态构建和修剪针对用户查询的知识子图,并将其线性化以供LLM使用,从而在不需要额外基础设施的情况下,实现可扩展性和精确性,为基于事实的AI应用开辟了新的可能性。

背景

自2022年以来,随着大型语言模型(LLM)及其令人印象深刻的语言生成能力的兴起,将其集成到众多任务和应用中的需求不断增长。然而,由于LLM主要通过预测下一个词进行训练,它们容易产生幻觉,生成的输出有时可能不可靠且不基于事实信息。

为了解决这一局限,出现了一种名为检索增强生成(RAG)的新架构。RAG通过将LLM的输出基于相关的领域特定数据,从而确保其可靠性。尽管前景广阔,传统的基于文档的RAG方法存在显著的局限性。具体而言,它只能利用数据库中的一小部分子集——通常是适合模型上下文窗口的少数几个文档。这种受限的数据访问在需要更广泛视角的信息时,限制了其有效性。

为了克服这一局限,研究人员提出利用知识图谱来增强RAG的性能。与基于文档的方法不同,知识图谱允许实体之间的结构化关系,从而实现更深入和更具上下文的检索。然而,将知识图谱无缝集成到RAG中仍然是一个挑战,特别是在使用Elasticsearch等工具时。尽管Elasticsearch在基于文档的RAG中表现非常有效,但它并不是为基于图的实现而设计的。

在本文中,我们将探讨图RAG背后的直觉,以及如何创造性地改造Elasticsearch以实现它。我们将首先讨论传统的基于文档的RAG架构及其局限性。接下来,我们将探讨在知识图谱上实现RAG的各种策略,以确定最适合我们具体使用场景的方法。最后,我们将详细解释如何使用Elasticsearch存储和查询图结构,从而实现快速且可扩展的图RAG。

I) 基于文档的RAG:原理及其不足之处

A) RAG架构简介

RAG(检索增强生成)的关键思想是基于用户查询的相似性,从数据存储中检索相关的文档或文档片段(称为)。可选地,经过重新排序阶段(这可以显著提高检索的精度)后,检索到的文档被集成到LLM的上下文中,以生成对用户查询的事实回答。

传统的基于文档的RAG系统架构
传统的基于文档的RAG系统架构

图1: 传统的基于文档的RAG系统架构。

B) 基于文档的RAG的局限性

虽然这种架构在学术界和企业界都引起了极大的兴趣,并且显著减少了幻觉的产生,但在应用于大型(超过10,000个文档)和领域特定的数据集时,它往往无法产生正确的答案。这主要是由于以下几个因素:

  • 查询依赖性: 检索阶段高度依赖于用户的查询。一个表述不清或不明确的查询将无法检索到最相关的文档。
  • 领域特定的嵌入问题: 在通用数据上训练的嵌入往往无法捕捉特定领域实体的意义。当所有文档都集中在相似主题时,检索的精度会降低。
  • 上下文窗口的限制: 经典RAG视野狭窄,因为它只能访问LLM上下文窗口中提供的有限内容。
  • 数据本身缺乏连接性: 文本文档往往不会明确包含用户问题的答案,因为相关的信息片段分散在多个文档中,使得基于文本的检索器很难重构拼图。

因此,经典的RAG系统难以识别不同实体之间的连接,除非这两个概念明确出现在同一文档中。这些琐碎的情况并不能涵盖用户查询的全部范围,导致召回性能较差。

例如,考虑以下查询:

“列出一些由前Google员工创办的初创公司。”

经典RAG只会检索最明显的文档,例如:

“Pinterest的创始人之一Ben Silbermann曾在Google工作,之后创办了现在广为人知的视觉发现平台Pinterest。”

然而,关键信息可能存在于数据库中,但分散在多个文档中。例如:

  1. “Ben Silbermann,被Google雇佣…”
  2. “Pinterest由Ben Silbermann创办…”

在这种情况下,检索阶段会遗漏连接,因为查询的两个组成部分(“前Google员工”和“初创公司创始人”)不在同一文档中共现。

相比之下,其他数据库表示方法,如知识图谱,可以无缝地将这些概念链接在一起,生成全面且准确的响应。

II) 如何与知识图谱进行对话?

A) 什么是知识图谱?

知识图谱(KG)由Google等公司推广,是一种以最细粒度水平表示信息的工具。从数学上讲,知识图谱是一个图,其中:

  • 节点代表重要的实体或概念(可以包括附加字段或属性)。
  • 代表这些实体之间的关系。这些关系可以来自特定本体中的预定义列表(例如,“连接到”“位于”),也可以更加开放和灵活。

知识图谱可以表达为三元组列表,形式为:

(实体1, 关系, 实体2)

这些三元组可以高效地存储在各种类型的数据库中(例如Elasticsearch)。

有几种常见的方法可以从文本数据库构建知识图谱,既可以使用传统的NLP技术(如命名实体识别(NER)识别实体,基于规则的系统提取关系,信息提取模型进行三元组提取),也可以通过提示大型语言模型(LLMs)。

构建知识图谱有几个优点:

  • 统一表示: 整个数据库的信息被整合到一个对象中。
  • 细粒度数据: 知识图谱捕捉精确的细粒度信息,减少噪音内容和无关数据。
  • 数学运算: 图结构允许强大的数学运算,如节点聚类、最短路径识别或模块性估计。

这些特性使知识图谱在确定实体之间的连接、挖掘相关见解和丰富用户查询的响应方面特别有效。

B) 图RAG与文档RAG

基于上述所有原因,利用知识图谱(KG)代替或结合经典RAG方法,似乎是克服基于文档系统局限性的有前途的解决方案。

图RAG相比传统的基于文档的方法,具有多种优势:与经典RAG仅基于单个文档检索信息不同,图RAG可以突出即使不在同一文档中共现的实体之间的关系。这对于发现隐含的连接特别有用。通过依赖结构化的三元组(实体、关系、实体),知识图谱提供了数据库的综合且无噪音的版本。这增加了RAG系统的召回率,因为相关连接不限于文档边界。

例如,想象询问,“告诉我关于Nancy Pelosi的一切信息。” 在经典的RAG设置中,最相关的检索文档可能主要集中在她作为政治家的角色上。这种冗余通常会导致信息重复,忽略她生活的其他方面,如她的教育或私人生活。相反,知识图谱将展示更多样化和结构化的信息,例如:

  • (Nancy Pelosi, 是, 政治家)
  • (Nancy Pelosi, 就读于, Trinity学院)
  • (Nancy Pelosi, 出生于, 巴尔的摩)

这种结构化数据消除了噪音内容,同时提供了查询实体的全面视图。

尽管在概念上听起来相似,但图RAG和文档RAG在技术上非常不同。

基于文档的RAG

基于图的RAG

易于实现

原理简单/实现复杂 如何检索?如何提供给LLM?

限于提供有限数量的上下文(上下文窗口的技术限制)

专注于三元组。能够在提示中提供更大比例的知识库。

无法跨越多个文档连接信息

能够(参见图的数学属性)轻松确定命名实体之间的链接(或其缺乏)并使用所有文档的信息。

表1: 比较基于文档和基于图的RAG解决方案

C) 实现图RAG的不同提案

最近的研究探讨了几种将知识图谱与大型语言模型(LLMs)连接的方法。以下是最有前景的策略:

1) 节点和关系提取

这种方法将知识图谱的组件(顶点(节点)和边(关系))嵌入到相关的嵌入技术中,与查询的嵌入方法对齐。然后,这些嵌入基于向量相似性进行检索。例如,在研究《通过三元组检索进行问题回答的图推理》(Li等,2023)中,作者提出将知识图谱三元组线性化为句子并嵌入以检索最相关的三元组。然而,这种方法与经典的RAG非常相似,知识图谱三元组充当“块”。它未能充分利用知识图谱的独特数学和结构属性,如关系路径和图遍历。

2) 图聚类和聚类摘要(微软:https://arxiv.org/pdf/2404.16130

这种技术包括将相似的节点分组为聚类,并选择最相关的聚类来回答查询。通过总结聚类,系统在与LLM交互之前减少了图的复杂性。尽管具有创新性,但这种方法计算成本高,尤其是对于具有高维数据的大规模图。

3) 将查询转换为图查询

受到文本到SQL技术的启发,这种方法将用户的自然语言查询转换为图数据库查询(例如,使用Neo4j的Cypher)。然后执行图查询以提取最相关的子图供LLM处理。

这种方法不幸的是仅适用于可以有效转换为数据库风格查询的查询。它需要将数据存储在能够执行此类查询的图数据库中,这将需要为混合RAG架构维护两个单独的数据存储(一个用于文档,一个用于图)。

尽管这些策略具有前景,但它们面临显著的挑战,例如计算成本、有限的可扩展性和基础设施复杂性。我们希望在确保可扩展性和效率的同时,利用知识图谱的强大属性,而无需增加存储基础设施。希望我们能想到使用Elasticsearch的创造性方法来实现这一目标。

III) 使用Elastic存储图:如何操作?

为了概述,一个包含10万个文档的数据存储可以转换为一个包含约200万个关系的知识图谱(KG)。这些巨大的图结构难以理解且资源密集型。然而,两种简单的观察可以帮助我们重新定义并简化任务:

用户理解: 最终用户只关心他们能够理解的内容。一个包含几十个节点的图是可管理的,而包含数百万个节点的图是无用的。

六度分隔原理: 根据匈牙利科学家Frigyes Karinthy的理论(著名的“凯文·贝肯游戏”),每个人最多通过六次握手与其他人相连。在受限环境中,这个数字进一步下降。相同的原理适用于实体和概念:我们不需要关注整个图来回答特定问题。

关键思想是提取与用户问题相关的连贯知识子图。这是可行的,因为知识图谱以三元组形式存储在文本数据库中 (来源, 目标, 关系)。可选地,三元组可以包括文档中说明关系的句子。

A) 一个四步过程将KG提供给信息饥渴的LLM

假设我们想在一个关注法国外交政治的大型数据库中找出Nancy Pelosi和Rachida Dati(法国最有个性的一位女政客)之间的关系。经典RAG无法找到相关连接,因为这两个实体在数据库中的任何文档中都没有共现。我们能在图中恢复这两位女性之间的联系吗?这实际上可以通过四个步骤实现:

1) 从用户查询中提取相关节点

使用命名实体识别(NER)管道,我们从用户的查询中提取主要实体和概念。

用户查询中的命名实体和概念识别
用户查询中的命名实体和概念识别

图2: 用户查询中的命名实体和概念识别

2) 使用Elastic生成相关的知识子图

既然我们已经从用户的问题中提取了最相关的实体,如果有多个实体,我们可以查询图以确定它们是否紧密连接。虽然查询一个包含数百万节点的图数据库并计算最短路径可能非常昂贵,但在Elastic中以三元组形式存储的节点是通过在来源和目标上进行过滤搜索轻松提取的。我们利用这种能力,通过以下过程迭代扩展来自查询实体的搜索:

检查两个实体是否连接

  • 首先检查两者之间是否存在直接关系。
  • 如果没有,使用过滤查询,我们检索连接到任一实体的节点列表。
  • 利用Elastic的布尔查询堆叠能力,我们检查关系存储是否包含连接到第一个实体的任何元素和连接到第二个实体的任何元素之间的至少一个连接。
    • 如果找到连接,我们停止图扩展。
    • 否则,我们重复该过程,检查连接到第一个和第二个实体的节点的所有直接邻居。
  • 我们将迭代次数限制为三次,因为连接超过六跳的两个实体关系较弱。
如何即时构建连接Nancy Pelosi和Rachida Dati的知识图谱?
如何即时构建连接Nancy Pelosi和Rachida Dati的知识图谱?

图3: 如何即时构建连接Nancy Pelosi和Rachida Dati的知识图谱?

我们即时生成的这个子图的大小不可预测,完全取决于查询和数据集的内容。在即时图生成过程中,我们唯一的约束是每个节点不收集超过100个邻居。因此在最佳情况下,如果两个实体之间存在直接连接,图中最多包含2(主要实体)+ 2 x 100 = 202(主要实体的直接邻居)个节点和201条边。此外,由于Elastic的默认查询结果限制为10,000个(我们认为这是合理的,没有扩展),每个扩展阶段最多可以带来10,000个新节点,因此在最坏情况下,对于包含两个实体的查询,图中最多可能包含3(跳数)x 2(扩展过程的两个方面)x 10,000 = 60,002个节点。

但实际上,这样的数字很少达到,主要是由于知识图谱的固有拓扑,通常显示出少量枢纽(高基数节点)和许多只有一个邻居的节点(数据库中唯一的实体),这些节点不会扩展搜索。数据库中最频繁的实体的基数约为24,700,而像“Rachida Dati”这样较“谦虚”的实体只有60。每个节点的平均连接数为16.75。即使在过程中捕获了一些高基数实体,将每个实体的邻居数量限制为100个关系也确保生成的子图很少超过1,000个节点。这也是由于枢纽通常连接到所有其他枢纽,如果我们想连接到枢纽的实体,路径会非常短(跳数少,因此邻居数量的指数漂移较少),但如果我们想连接到不太连接的节点,路径会更长,但只会遍历低基数实体,确保图的大小不会膨胀。

这种策略使我们能够动态生成仅与用户查询相关的节点和边的子图。最终连接这两位政客。

3) 图修剪

这个子图(几百个关系)小到足以进行非常便宜的图操作,但仍然太大,无法直接提供给LLM生成答案。因此,我们需要一个简化它的启发式方法:

第一步:选择在兴趣实体之间的最短路径上的关系,从而避免噪音三元组。

第二步:如果剩余的关系集仍然太大,我们应用图修剪算法。这个算法减少了关系数量,同时最小化删除最短路径的数量,并保持这些路径上实体的多样性。

图修剪算法的结果
图修剪算法的结果
图修剪算法结果
图修剪算法结果

图4:图修剪算法的结果,将路径数量从18条减少到5条,同时保持节点多样性

这种修剪操作将极大地限制图的大小,只保留查询实体的直接邻居(100 x 实体数量个节点)和出现在最短路径上的节点。我们无法提前预测最短路径的数量,因为这取决于图的拓扑结构,但最小化循环确保在最坏情况下,仅保留100 x 实体数量 + 最短路径数量 x 7(3跳 x 2 + 1连接)个节点。

4) 图的文本线性化

为了回答用户的查询,我们选择图的相关部分,但需要将其转换为可以提供给LLM的格式以生成最终答案。我们选择将图线性化为文本格式,从图生成两种类型的“伪文档”

从图创建伪文档的两种方式
从图创建伪文档的两种方式

图5:从图创建伪文档的两种方式

这些伪文档通过将知识图谱的三元组串联成可读格式生成。包括文档存储中说明每个三元组的句子,增强可读性并提供支持证据。这些文档然后被提供给LLM,作为经典RAG检索器检索的文档的替代或补充。

线性化图的示例
线性化图的示例

图6:线性化图的示例

B) 利用Elasticsearch的灵活性进行时间优化策略

利用Elasticsearch(ES)在文本数据上高效的检索能力,我们可以动态构建、简化和线性化图,所需时间与传统RAG管道中的文档检索和重新排序相当。在最终生成答案之前,无需调用LLM或使用嵌入模型。

这种节约资源的方法无缝扩展到包含超过10万文档的语料库,在最坏情况下连接多个实体的时间不到2秒。以下ES功能使这成为可能:

  • 结合过滤布尔查询:用于限制构建图所需的查询数量,对于构建具有三次扩展阶段的KG,最多需要10次ES查询(这里没有包括,因为它们可能比实际文章占用更多空间)。
  • 过滤KNN查询:应用于根据与用户查询的相似性有效地重新排序三元组。
KNN查询提取与用户查询最相关的实体关系
KNN查询提取与用户查询最相关的实体关系

图7:KNN查询提取与用户查询最相关的实体关系

由于实体可能与不同的关系相连,通过从关系索引派生第二个索引(称为聚合关系索引)可以进一步优化。由于每个实体平均有17个关系,使用聚合关系索引使某些检索过程的步骤的延迟降低了17倍。

三元索引结构
三元索引结构

图8:三元索引结构

该索引仅存储源、目标和每两个实体之间的链接次数。这样做:

  • 只保留一个对象表示实体A和B之间的链接。
  • 降低计算复杂性,特别是对于高基数节点。
查询聚合关系索引
查询聚合关系索引

图9:查询聚合关系索引:快速了解节点连接到哪些节点

使用三重ES索引结构,我们实现了使用单一数据库引擎的混合文档和基于图的RAG系统。这种方法实现了高效的图构建和检索,无需额外的基础设施。

混合RAG管道
混合RAG管道

图10:结合文档和基于图的检索的混合RAG管道概览

结论

使用知识图谱增强检索增强生成(RAG)是一项迅速发展的有前途的工作。尽管研究人员和从业者提出了各种策略,但许多实现缺乏实际大规模应用所需的简便性和可扩展性。

本文概述的方法展示了如何利用Elasticsearch的向量数据库功能,动态生成与每个用户查询相关的子图。通过专注于知识图谱中最重要的部分,这种方法避免了需要单独的图数据库,减少了基础设施的复杂性,同时有效扩展到数百万文档和关系。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • I) 基于文档的RAG:原理及其不足之处
    • A) RAG架构简介
    • B) 基于文档的RAG的局限性
  • II) 如何与知识图谱进行对话?
    • A) 什么是知识图谱?
    • B) 图RAG与文档RAG
    • C) 实现图RAG的不同提案
      • 1) 节点和关系提取
      • 2) 图聚类和聚类摘要(微软:https://arxiv.org/pdf/2404.16130)
      • 3) 将查询转换为图查询
  • III) 使用Elastic存储图:如何操作?
    • A) 一个四步过程将KG提供给信息饥渴的LLM
      • 1) 从用户查询中提取相关节点
      • 2) 使用Elastic生成相关的知识子图
      • 3) 图修剪
      • 4) 图的文本线性化
    • B) 利用Elasticsearch的灵活性进行时间优化策略
  • 结论
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档