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实现图像形状检测

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

11.25.2024刷华为OD

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

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

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

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

本文为学习自动驾驶决策规划算法第二章第四节(中) 路径二次规划算法》的学习笔记。 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 之上。其主要目的是使数据可视化更加美观、方便和高效。它提供了高层次的接口和各种美观的默认主题,能够帮助用户快速创建出具有吸引力的统计图表,用于数据分析和…

相交链表和环形链表

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

[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;因而会直接影响用户体感的性能与稳…

位运算在嵌入式系统开发中的应用

目录 一、数据存储与节省 “绝技” 1.1. 传感器数据存储挑战 1.2. 位运算解决方案 1.2.1. 数据整合 1.2.2. 数据提取 1.3. 收益分析 二、硬件控制 “精准操纵术” 2.1. 位运算操控硬件寄存器的实例 2.2. 位运算在硬件控制中的优势 2.3. 电机驱动芯片寄存器控制示例 …

设置redis

1.https://github.com/tporadowski/redis/releases下载对应版本 解压 启动redis临时服务 在 redis 文件夹下 cmd 输入redis-server.exe redis.windows.conf 临时服务启动 从新打开一个cmd 运行redis-cli 输入ping 启动成功 命令行输入shutdown关闭服务 创建永久服务 在…

排序学习整理(1)

1.排序的概念及运用 1.1概念 排序&#xff1a;所谓排序&#xff0c;就是使⼀串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作&#xff0c;以便更容易查找、组织或分析数据。 1.2运用 购物筛选排序 院校排名 1.3常见排序算法 2.实…

【Rust】unsafe rust入门

这篇文章简单介绍下unsafe rust的几个要点 1. 解引用裸指针 裸指针其实就是C或者说C的指针&#xff0c;与C的指针不同的是&#xff0c;Rust的裸指针还是要分为可变和不可变&#xff0c;*const T 和 *mut T&#xff1a; 基于引用创建裸指针 let mut num 5;let r1 &num …

# 01_Python基础到实战一飞冲天(三)--python面向对象(一)--简单类

01_Python基础到实战一飞冲天&#xff08;三&#xff09;–python面向对象&#xff08;一&#xff09;–简单类 一、面向对象-01-基本概念 1、面向对象(OOP) 面向对象编程 —— Object Oriented Programming 简写 OOP。 2、面向对象(OOP) 学习目标 了解 面向对象 基本概念…

Java 基础知识与核心概念

Java 作为一门广泛使用的编程语言&#xff0c;它的基础知识是每个开发者必须掌握的。无论是面向对象编程&#xff08;OOP&#xff09;还是集合框架的使用&#xff0c;理解这些核心概念能够帮助我们在日常开发中更加高效和准确地编写代码。本文将从设计模式、集合原理到常见类的…

【C++习题】24.二分查找算法_0~n-1中缺失的数字

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 剑指 Offer 53 - II. 0&#xff5e;n-1中缺失的数字 题目描述&#xff1a; 解法 哈希表&#xff1a; 建立一个hash表看哪个数字出现次数为0 直接遍历找结果&#xff1…

(即插即用模块-Convolution部分) 一、(ICLR 2022) ODConv 全维动态卷积

文章目录 1、Omni-dimensional Dynamic Convolution2、代码实现 paper&#xff1a;OMNI-DIMENSIONAL DYNAMIC CONVOLUTION Code&#xff1a;https://github.com/OSVAI/ODConv 1、Omni-dimensional Dynamic Convolution 论文首先分析了现有动态卷积的局限性&#xff0c;论文指出…

深度学习Python基础(2)

二 数据处理 一般来说PyTorch中深度学习训练的流程是这样的&#xff1a; 1. 创建Dateset 2. Dataset传递给DataLoader 3. DataLoader迭代产生训练数据提供给模型 对应的一般都会有这三部分代码 # 创建Dateset(可以自定义) dataset face_dataset # Dataset部分自定义过的…

(超详细图文详情)Navicat 配置连接 Oracle

1、下载依赖文件 Oracle官网下载直链&#xff1a;https://www.oracle.com/database/technologies/instant-client/winx64-64-downloads.html 夸克网盘下载&#xff08;oracle19c版本&#xff09;&#xff1a;https://pan.quark.cn/s/5061e690debc 官网下载选择对应 Oracle 版…