GRAG: Graph Retrieval-Augmented Generation

GRAG: Graph Retrieval-Augmented Generation

摘要

简单检索增强生成 (Naive RAG) 聚焦于单一文档的检索,因此在处理网络化文档时表现不足,例如引用图、社交媒体和知识图谱等应用中非常常见的场景。为了解决这一限制,我们提出了图检索增强生成 (Graph Retrieval-Augmented Generation, GRAG),它针对检索文本子图和将文本与拓扑信息联合整合到大型语言模型(LLMs)中以增强生成的基本挑战。

为了实现高效的文本子图检索,我们提出了一种新颖的分而治之策略,能够以线性时间检索出最优子图结构。为了实现图上下文感知生成,GRAG通过两种互补视角——文本视角和图视角——将文本图整合到LLMs中,使其能够更有效地理解和利用图上下文。

引言

大型语言模型(LLMs) 在多种推理任务(包括基于图数据的任务)中展现了卓越能力 (Hu et al., 2023b; Chen et al., 2024; Fatemi et al., 2023)。然而,由于训练数据的局限性及缺乏实时知识,LLMs在事实性错误上仍然存在问题 (Mallen et al., 2023; Min et al., 2023)。检索增强生成(RAG) 方法通过将外部数据检索整合到生成过程中,帮助LLMs获取相关信息以生成更精准的回答,从而减少事实性错误 (Tang and Yang, 2024)。
在这里插入图片描述

然而,传统的RAG方法仅聚焦于单个文档,通过文本相似性检索相关内容。然而,现实世界中的文档(如社交媒体帖子、科研论文、知识条目和产品评论)通常不是孤立的,而是以文本图的形式网络化 (He et al., 2023; Jin et al., 2023; Li et al., 2023)。这种网络信息在检索相关文档和引导LLMs生成文本时至关重要 (Yang et al., 2024; Tang and Yang, 2024)。例如,科研论文形成引用图,当一个太阳物理学家想了解太阳耀斑预测的最新技术时,引用关系需要被考虑,以便全面检索相关研究并理解技术演进(如图1所示)。类似地,社交媒体交互、知识图谱中的实体关系以及产品评论系统中的购买关系在LLMs利用这些外部数据时也是不可或缺的。问题是:在执行RAG任务时,LLMs如何有效利用这类网络化文档?
为解决上述问题,我们提出了图检索增强生成(GRAG),它扩展了传统的RAG方法以整合图上下文。与仅聚焦单个文档的传统RAG不同,GRAG需要在检索和生成阶段同时考虑文档之间的网络结构,面临两大核心挑战:

  1. 检索阶段:如何高效地检索相关的文本子图?文本子图检索具有挑战性,因为节点和边的文本特征维度高,搜索空间巨大。
  2. 生成阶段:如何将文本子图的文本和拓扑信息整合到LLMs中?生成阶段需要将网络化文档传递给LLMs,同时保留文本和拓扑信息及其相互依赖性。

1. 高效文本子图检索
我们提出了一种分而治之策略,将高维组合优化问题分解为以下步骤:

(1)首先检索最相关的自中心图(ego-graphs)。
(2)然后通过图软剪枝机制对自中心图进行优化与合并。
这一方法为识别最相关的文本子图结构提供了一种近似解法,从而避免了对所有子图进行穷尽搜索的NP难题 (Johnson and Garey, 1979)。
2. 整合文本子图到LLMs中
我们从两个互补视角将文本图整合到LLMs中:

(1)文本视角(text view):通过硬提示(hard prompts)以文本标记(text tokens)形式提供输入。
(2)图视角(graph view):通过软提示(soft prompts)以图标记(graph tokens)形式提供输入。
具体步骤如下:
使用图算法将检索到的文本子图转化为层次化的文本描述,作为硬提示输入,以编码文本中的拓扑信息。
同时,使用图编码器直接对图的拓扑信息进行编码,将文本信息作为图节点或边的属性,生成软提示。
在生成过程中,硬提示和软提示共同引导LLMs更深入地理解实体间的关系,从而生成符合文本图上下文的回答。

相关工作

1.提示调优(Prompt Tuning)

与传统的微调方法(如低秩适配(LoRA),Hu等, 2021)需要更新模型参数不同,提示调优通过修改输入来更有效地引导模型的响应 (Liu等, 2023; Jia等, 2022)。
例如,Auto-Prompt (Shin等, 2020) 和 Prompt Tuning (Lester等, 2021) 引入了自动化技术,能够无需人工干预生成高效的提示。特别是,Lester等提出直接将软提示作为嵌入进行学习,在保留模型原始参数的同时实现针对特定任务的适应。
在此基础上,近期研究探索了适应提示嵌入以应对多模态上下文的应用 (Zhou等, 2022; Khattak等, 2023; Yang等, 2022; Ge等, 2023),为通过提示调优将LLM整合到不同领域提供了一种灵活的机制。

2 大型语言模型(LLMs)在图相关任务中的应用

LLMs 在图任务中的作用可以分为两方面:

文本嵌入能力:LLMs 可以对节点和边的文本属性进行编码,直接促进分类任务的效果 (Hu等, 2023b; Chen等, 2023, 2024),并支持知识图谱的构建 (Trajanoska等, 2023; Yao等, 2023)。
上下文推理能力:LLMs 在零样本场景中能进行图推理和问题回答 (Baek等, 2023; Hu等, 2023a),支持复杂的图推理任务 (Wang等, 2024; Jiang等, 2023; Luo等, 2023)。
尽管通过大规模文本语料库训练,LLMs 在处理简单图结构方面表现出稳健的语言理解能力,但它们并未被固有地赋予理解或推理复杂图结构数据的能力,因为文本数据缺乏显式的拓扑信息 (Huang等, 2023; Chen等, 2024; Merrer and Trédan, 2024)。
为此,近期提出的图提示调优(Graph Prompt Tuning) (Perozzi等, 2024; Tian等, 2024) 成为一种强大的工具,用于帮助LLMs处理和理解拓扑信息。

3 图上的检索

Yasunaga等的方法通过检索相关节点并创建一个包含问题回答上下文和相关节点的联合图。
Kang等和Kim等则聚焦于检索三元组,而非单个节点或边,以捕获更复杂的关系数据
一些检索问题可以通过推理链解决,这些推理链可以简化为检索问题与目标实体之间的路径 (Lo和Lim, 2023; Choudhary和Reddy, 2023)。
Edge等利用社区检测算法将图划分为若干社区,随后检索和聚合相关社区以生成问题的最终答案。
Li等通过整合文本和拓扑信息提升了检索过程,使模型更好地捕捉图结构数据中的结构关系。

问题定义

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型

在这里插入图片描述
在本节中,我们介绍 GRAG 的解决方案。如上图 (a) 所示,为了解决文本子图检索的挑战,我们提出了一种分而治之的策略
该策略基于以下假设:一个重要的子图由重要节点及其部分邻居组成。具体来说:

我们首先搜索重要的自中心图(ego-graph)。
然后将最相关的前 N 个自中心图合并,并通过**软剪枝操作(soft pruning)**减少冗余节点和边的影响,生成一个近似最优的子图结构。
与直接子图搜索在这里插入图片描述
相比,我们的检索-剪枝方法将检索空间限制为 ∣V∣ 个自中心图,从而显著提高了效率。
如上图 (b) 所示,为了同时保留文本和拓扑信息,我们采用文本图的两种互补视角:

  1. 图视角:学习文本图的表示作为软提示,以保留文本间的连接关系。
  2. 文本视角:将文本图转换为层次化文本描述作为硬提示,保留连接方式的叙述形式。

1. 文本子图检索

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
文本子图索引
在这里插入图片描述
文本子图排序
在这里插入图片描述
文本子图软剪枝
在这里插入图片描述

2. 文本图增强生成

在本节中,我们介绍了为大语言模型(LLMs)提供文本图两种互补视角的方法:文本视角和图视角。
在这里插入图片描述
在这里插入图片描述

文本图的图视角
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/62663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python OpenCV实现图像形状检测

目录 一、环境准备 二、读取和预处理图像 读取图像 灰度化 滤波去噪 三、边缘检测 四、查找轮廓 五、绘制轮廓 六、形状分类 七、显示结果 八、完整代码示例 九、总结 图像形状检测是计算机视觉领域中的一项关键技术,广泛应用于工业自动化、机器人视觉、医学图像处…

微知-git如何添加空目录的几种方式?(.gitkeep, githook, gitconfig)

背景 在Git中,空目录(空文件夹)默认是不会被跟踪的,因为Git主要跟踪文件的变化。但是如何让git添加空目录? #mermaid-svg-3Y4NksLyEeuMs4FC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…

11.25.2024刷华为OD

文章目录 HJ76 尼科彻斯定理(观察题,不难)HJ77 火车进站(DFS)HJ91 走格子方法,(动态规划,递归,有代表性)HJ93 数组分组(递归)语法知识…

【RISC-V CPU Debug 专栏 1 -- RISC-V debug 规范】

文章目录 RISC-V Debug调试用例支持的功能限制和不包括的内容RISC-V 调试架构的主要组件用户与调试主机调试翻译器调试传输硬件调试传输模块(DTM)调试模块(DM)调试功能触发模块版本介绍RISC-V Debug RISC-V 调试规范为 RISC-V 处理器提供了一套标准化的调试接口和功能,旨…

#Python 同声传译工具 开发中

功能概述 允许用户选择通过麦克风(microphone)或者获取系统声音(system_sound)作为语音输入源。 对输入的语音进行识别,得到对应的文本内容。 将识别出的文本翻译成指定的目标语言。 把翻译后的文本转换为语音并播放出…

多线程篇-8--线程安全(死锁,常用保障安全的方法,安全容器,原子类,Fork/Join框架等)

1、线程安全和不安全定义 (1)、线程安全 线程安全是指一个类或方法在被多个线程访问的情况下可以正确得到结果,不会出现数据不一致或其他错误行为。 线程安全的条件 1、原子性(Atomicity) 多个操作要么全部完成&a…

API 与 SDK 之间的区别

API 与 SDK 之间的区别 很多人在软件开发中经常会分不清 SDK 与 API ,今天就来浅谈一下两者之间的区别。 直白地说,SDK 包含了 API ,是一套完整的,能完成更多功能的工具包,无论你想获取什么样的信息,SDK …

自动驾驶决策规划算法-路径决策算法:二次规划

本文为学习自动驾驶决策规划算法第二章第四节(中) 路径二次规划算法》的学习笔记。 1 二次型 二次型的形式为 1 2 x T H x f T x \begin{equation} \frac{1}{2}\boldsymbol{x}^TH\boldsymbol{x}f^T\boldsymbol{x} \end{equation} 21​xTHxfTx​​ 约束 A e q x b e q \be…

AI开发-数据可视化库-Seaborn

1 需求 概述 Seaborn 是一个基于 Python 的数据可视化库,它建立在 Matplotlib 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题,能够帮助用户快速创建出具有吸引力的统计图表,用于数据分析和…

详细介绍Node.js的中间件及使用方法

在Node.js的生态中,中间件(Middleware)是一个不可或缺的概念,它为构建灵活而高效的应用程序提供了强大的支持。以下是对Node.js中间件的详细介绍: 中间件的概念与定义 中间件是一种软件架构的设计模式,用…

指针与字符串简单练习

【问题描述】使用字符型指针数组,存储周一到周日的英文(首字母大写)。输入数字1-7任意一个数字,输出英文Monday-Sunday的对应英文。 【输入形式】 数字1-7的任一数字。 【输出形式】 英文Monday-Sunday的对应英文。 【样例输入…

相交链表和环形链表

(一)相交链表 相交链表 思路:先分别计算出A列表和B列表的长度,判断它们的尾节点是否相等,如果不相等就不相交,直接返回空。然后让两个列表中的长的列表先走它们的差距步,然后再一起走&#xff…

【学术投稿】Imagen:重塑图像生成领域的革命性突破

【连续七届已快稳ei检索】第八届电子信息技术与计算机工程国际学术会议(EITCE 2024)_艾思科蓝_学术一站式服务平台 更多学术会议请看 https://ais.cn/u/nuyAF3 目录 引言 一、Imagen模型的技术原理 1. 模型概述 2. 工作流程 3. 技术创新 二、Ima…

简单搭建qiankun的主应用和子应用并且用Docker进行服务器部署

在node18环境下,用react18创建qiankun主应用和两个子应用,react路由用V6版本,都在/main路由下访问子应用,用Dockerfile部署到腾讯云CentOS7.6服务器的8000端口进行访问,且在部署过程中进行nginx配置以进行合理的路由访…

封闭解(Closed-Form Solution)与复杂数值优化(Complex Numerical Optimization)的比较:中英双语

中文版 什么是封闭解? 在数学和统计学中,封闭解(Closed-Form Solution) 是指通过有限次基本运算(如加减乘除、开方、对数、指数运算等)即可明确表达的解。这意味着,当我们遇到一个数学问题或模…

[Redis#12] 常用类型接口学习 | string | list

目录 0.准备 1.string get | set set_with_timeout_test.cpp set_nx_xx_test.cpp mset_test.cpp mget_test.cpp getrange_setrange_test.cpp incr_decr_test.cpp 2.list lpush_lrange_test.cpp rpush_test.cpp lpop_rpop_test.cpp blpop_test.cpp llen_test.cpp…

A054-基于Spring Boot的青年公寓服务平台的设计与实现

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

【经典】星空主题的注册界面HTML,CSS,JS

目录 界面展示 完整代码 说明&#xff1a; 这是一个简单的星空主题的注册界面&#xff0c;使用了 HTML 和 CSS 来实现一个背景为星空效果的注册页面。 界面展示 完整代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8&…

TiDB 优化器丨执行计划和 SQL 算子解读最佳实践

作者&#xff1a; TiDB社区小助手 原文来源&#xff1a; https://tidb.net/blog/5edb7933 导读 在数据库系统中&#xff0c;查询优化器是数据库管理系统的核心组成部分&#xff0c;负责将用户的 SQL 查询转化为高效的执行计划&#xff0c;因而会直接影响用户体感的性能与稳…

C_接口函数

接口函数在编程中是一种常见的设计模式&#xff0c;广泛应用于实现模块化、解耦合、提高代码可复用性等方面。在 C 语言中&#xff0c;接口函数通常通过函数指针传递函数作为参数&#xff0c;从而允许动态选择执行的功能或算法。接口函数的使用场景很多&#xff0c;下面我会列举…