GraphRAG:一种新型的RAG技术

news2024/9/23 11:18:08

微软前几天发布的 GraphRAG 架构非常厉害,但是具体的原理和内容可能不太好理解。Neo4j 的 CTO 写了一篇详细的文章《GraphRAG 宣言:为 GenAI 增加知识》,通俗易懂的介绍了 GraphRAG 的原理、与传统 RAG 的区别、GraphRAG的优势、知识图谱的创建和利用知识图谱工作。

一、图:概念解析

当我们提到“图”时,并不是指图表(chart),而是指一种数据结构,能够表示实体(如人、地点、事物)及其之间的关系,这种数据结构在知识图谱和GraphRAG中非常重要。

Graph“图”示例

《权游》人物关系图

伦敦地铁图

二、两种知识表示方法:向量和图形

在NLP和AI领域中,有两种方法来理解和表示知识:传统的基于向量的检索(RAG)和基于知识图谱的方法(GraphRAG)。

RAG的核心是向量搜索,它接收一段文本,并从大量书面材料中返回概念上相似的文本。这种方法简单且有效,对于基本搜索非常有用。但是,人们可能不会经常思考向量是什么样子,或者相似性计算是如何进行的。

以苹果为例,人类对苹果的表示是复杂且多维的,无法完全在纸上捕捉。向量表示苹果是一个数字数组,是统计领域的构造。向量的魔力在于它们能够以编码形式捕捉它们对应文本的本质。

在RAG的上下文中,向量在需要识别一组单词与另一组单词的相似性时才有价值。这可以通过运行相似性计算(即向量数学)并得到匹配来实现。

然而,如果你想理解向量内部的内容,理解其周围的事物,掌握文本中所代表的事物,或者理解这些事物如何适应更大的上下文,那么向量作为表示方式就无法做到这一点。

与此相反,知识图谱是对世界的符号表示,人类和机器都能够理解和推理知识图谱。你可以查询、可视化、注释、修复和扩展知识图谱。知识图谱代表了你的世界模型——即你正在工作的领域所代表的世界部分。

三、GraphRAG vs. RAG

GraphRAG 和 RAG 并不是竞争关系,它们各自在检索和生成文本方面都有其独特的价值。GraphRAG 并不仅仅是基于文本中单词的嵌入相似性,而是在 RAG 的基础上增加了图查询的能力。GraphRAG 是 RAG 的一种形式,其中检索路径包括了一个知识图谱。

在 GraphRAG 中,首先触发一个图查询。这个查询可以是简单的,比如基于关键词或向量的搜索,目的是找到一组初始的节点(在图数据库中,节点可以代表实体或概念)。在进行图查询的同时,可以选择性地包括一个向量相似性组件。系统会考虑节点之间的向量相似性,以增强搜索的准确性。

可以选择将图和向量存储在两个不同的数据库中,或者使用像 Neo4j 这样的图数据库,它同时支持图存储和向量搜索。这种灵活性允许开发者根据具体需求选择最合适的存储和查询策略。

GraphRAG 的常见使用模式

  1. 首先进行向量或关键词搜索,以找到一组初始节点。
  2. 然后遍历图,获取这些节点相关的信息。这可以通过图数据库中的查询来实现,比如使用图遍历算法。
  3. 最后,可以选择使用基于图的排名算法(如 PageRank)对文档进行重新排名。PageRank 是一种著名的图排名算法,最初由 Google 开发,用于确定网页的重要性。

GraphRAG 提供了更高的准确性和更完整的答案,它能够通过知识图谱提供更丰富的上下文信息。知识图谱的使用使得开发和维护 RAG 应用也变得更加容易,因为数据在构建应用时是可见的。图谱还可以被人类和机器理解,提供了更好的可解释性和可审计性。

四、GraphRAG的生命周期

使用 GraphRAG 的 GenAI 应用遵循与任何 RAG应用相同的模式,但增加了一个初始的“创建图”步骤。创建图类似于将文档分块并加载到向量数据库中。

图表具有高度迭代性——你可以从一个“最小可行图”开始,并从那里扩展。一旦你的数据进入知识图,它就变得非常容易演化。你可以添加更多种类的数据,以获得数据网络效应的好处。你还可以提高数据的质量,从而提升你的应用结果的价值。

将图创建步骤添加到早期的流程图中,你会得到一个看起来像这样的流程:

五、GraphRAG的优势

先较于纯向量RAG,GraphRAG的优势主要体现在以下三个方面:

  1. 更高的准确性和更完整的答案(运行/生产优势)
  2. 创建知识图谱后,更容易构建和维护 RAG 应用(开发时间优势)
  3. 更好的可解释性、可追溯性和访问控制(治理优势)

1、更高的准确性和更完整的答案

GraphRAG 提供了更高质量的响应。例如,数据目录公司 Data.world 在 2023 年底发布的一项研究表明,GraphRAG在43个业务问题中,平均将LLM响应的准确性提高了3 倍。基准测试发现,在知识图谱的支持下,响应的准确性显著提高。

微软在 2024 年 2 月开始发表了一系列文章,标题为“GraphRAG: Unlocking LLM discovery on narrative private data”,并附有相关的研究论文和软件发布。微软观察到,纯向量RAG存在以下两个问题:

  • RAG 难以将各个点连接起来。当回答问题需要通过共享属性遍历不同的信息片段以提供新的综合见解时,就会发生这种情况。
  • 当被要求全面理解大型数据集合甚至单个大型文档中的总结语义概念时,RAG 的表现不佳。

微软发现,“通过使用 LLM 生成的知识图谱,GraphRAG 大大改善了 RAG 的‘检索’部分,用更相关的内容填充上下文窗口,从而得出更好的答案并捕捉证据来源。”他们还发现 GraphRAG 需要的token与其他方案相比少 26% 到 97%,这不仅使其在提供答案方面更好,而且更便宜、更可扩展。

不仅仅是答案的正确性重要,答案的实用性也同样重要。人们发现 GraphRAG 不仅提高了答案的准确性,还使答案更加丰富、更完整、更有用。LinkedIn 的一篇论文描述了 GraphRAG 对其客户服务应用程序的影响,提供了一个很好的例子。GraphRAG 提高了回答客户服务问题的正确性和丰富性(因此也提高了其实用性),将其客户服务团队每个问题的平均解决时间减少了 28.6%。

还有一个例子来自于Writer,Writer 最近宣布了一份基于 RobustQA 框架的 RAG 基准测试报告,比较了他们基于 GraphRAG 的方法与竞争中的最佳工具。GraphRAG 的得分为 86%,这比竞争对手的得分(在 33% 到 76% 之间)有显著提高,同时具有等效或更好的延迟。

2、提高数据理解能力,加速迭代

知识图谱在概念和视觉上都很直观。用户可以探索这些图谱,常常能够揭示新的洞见。许多用户报告说,一旦他们投入了创建知识图谱的努力,他们发现这有助于以意想不到的方式构建和调试他们的GenAI应用。

当你将数据以图形的方式展示时,可以更直观地理解数据,这是向量表示无法做到的。图形可以展示数据之间的关系和结构,而不仅仅是数据点本身。

比如下面关于锂暴露问题的示例。如果将向量可视化,你可能会得到一个有很多行和列的复杂图表:

相比之下,当你将数据作为图形处理时,可以以一种向量表示无法实现的方式理解数据。

例如LlamaIndex的一个网络研讨会,展示了他们如何提取向量化的文本块(词汇图谱)和LLM提取的实体(领域图谱),并将它们通过“提及”关系联系起来。这种方法不仅适用于LlamaIndex,Langchain、Haystack、SpringAI等其他工具也提供了类似的功能。

拥有一个丰富的数据结构可以为开发和调试打开广泛的可能性。数据的各个部分保留了它们的价值,而结构本身存储并传达了额外的意义,这可以用来增加应用的智能。

不仅仅是可视化,更重要的是数据以一种传达和存储意义的方式被结构化。这有助于开发者理解数据如何驱动GenAI决策,并确保数据的正确性。这是知名金融科技公司的开发人员在将知识图谱引入其 RAG 工作流程一周后的反应:

3、治理:可解释性、安全性等

GraphRAG 提供了更好的可解释性,因为它允许开发者和用户理解生成答案背后的逻辑和数据。这在需要高度透明度和可审计性的领域(如金融或医疗保健)尤为重要。知识图谱的可追溯性也有助于追踪数据的来源和流向,这对于确保数据的准确性和可靠性至关重要。

例如,Lettria的Charles从一个包含10,000篇金融文章的知识图谱中提取实体,并与LLM一起使用GraphRAG来提供更好的答案。将数据以图的形式展示是第一步。这些数据不仅可导航和查询,还可以随着时间的推移进行更正和更新。

访问控制方面,知识图谱允许更细粒度的权限管理,确保只有授权用户才能访问特定的数据,从而增强了数据的安全性和隐私保护。

如果您从事受监管的业务(例如银行或医疗保健),则任何特定员工对信息的访问权限可能取决于该员工的角色。无论是 LLM 还是向量数据库,都没有很好的方法来限制信息范围以与角色相匹配。您可以使用知识图谱中的权限轻松处理此问题,其中任何特定参与者访问数据的能力均受数据库控制,并排除他们无权查看的结果。这是一个简单安全策略的模型,您可以在具有细粒度访问控制的知识图谱中实现该策略:

六、知识图谱的构建

首先,理解下与 GenAI 应用程序最相关的两种图谱:

1、领域图(Domain graph):这是对你应用相关的世界模型的图表示。领域图可以帮助你理解和表示你的应用领域内的各种实体和它们之间的关系。

2、词汇图(Lexical graph):这是文档结构的图表示。最基本的词汇图为每段文本都有一个节点。这种图谱可以扩展,包括文本块与文档对象(如表格)、章节、部分、页码、文档名称/ID、集合、来源等之间的关系。

组合领域图与词汇图:

一旦你拥有了知识图谱,就会有许多框架可用于执行 GraphRAG。这些框架包括 LlamaIndex 的 Property Graph Index、Langchain 的 Neo4j 集成,以及 Haystack 等其他工具。

在构建知识图谱方面,有许多工具可用。例如,Neo4j Importer 提供了一个图形用户界面,用于将表格数据映射和导入到图中。下图总结了构建知识图谱的步骤:

扩展知识:

图表和知识图谱:Neo4j的GraphAcademy、Andrew Ng的Deeplearning.ai课程

GraphRAG项目:microsoft/graphrag: A modular graph-based Retrieval-Augmented Generation (RAG) system (github.com)

【推广时间】

给大家推荐一个性价比超高的GPU算力平台:UCloud云计算旗下的Compshare算力共享平台,目前注册送20元测试金,可以畅享7小时4090算力,预装了主流的大模型和环境的镜像,开箱即用,非常方便。

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

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

相关文章

lua 游戏架构 之 LoaderWallet 异步加载

定义了一个名为LoaderWallet class,用于管理资源加载器(Loader)。这个类封装了资源加载的功能,包括异步加载,以及资源的释放和状态查询。下面是对代码的详细解释: ### 类定义和初始化 这里定义了一个名为…

初学者对 WebGL 与 WebGPU 的看法(A Beginner’s Perspective of WebGL vs WebGPU)

初学者对 WebGL 与 WebGPU 的看法(A Beginner’s Perspective of WebGL vs WebGPU) WebGL 和 WebGPU 之间的主要区别:WebGL 是什么以及它适合哪些人使用?WebGPU 是什么?它适合谁使用?WebGL 和 WebGPU 的代码…

spring事件发布器ApplicationEventPublisher的使用

1、前言 spring中有一个事件发布器,使用了观察者模式,当有事件发布的时候,事件监听者会立刻收到发布的事件。今天我们来介绍下这个事件发布器怎么使用。 2、简单使用 2.1、创建事件实体类 事件实体类需要继承ApplicationEvent。我们模拟老师发布事件的诉求。 public class T…

【51项目】基于51单片机protues交通灯的设计(完整资料源码)

基于51单片机protues交通灯的设计 一、 项目背景 1.1背景 随着科技的不断发展,LED技术在交通领域的应用越来越广泛。LED模拟交通灯作为一种新型的交通信号控制设备,以其高效、节能、环保等优点,逐渐取代了传统的交通信号灯。近年来&#xff…

【人工智能】Transformers之Pipeline(三):文本转音频(text-to-audio/text-to-speech)

​​​​​​​ 一、引言 pipeline(管道)是huggingface transformers库中一种极简方式使用大模型推理的抽象,将所有大模型分为音频(Audio)、计算机视觉(Computer vision)、自然语言处理&#x…

【深度学习入门篇 ⑨】循环神经网络实战

【🍊易编橙:一个帮助编程小伙伴少走弯路的终身成长社群🍊】 大家好,我是小森( ﹡ˆoˆ﹡ ) ! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官…

把当前img作为到爷爷的背景图

(忽略图大小不一致,一般UI给的图会刚好适合页面大小,我这网上找的图,难调大小,我行内的就自己随便写的宽高),另外悄悄告诉你最后有简单方法~~ 先来看看初始DOM结构代码 …

【接口自动化_12课_基于Flask搭建MockServer】

知识非核心点,面试题较少。框架搭建的过程中的细节才是面试要点 第三方接口,不方便进行测试, 自己要一个接口去进行模拟。去作为我们项目访问模拟接口。自己写一个接口,需要怎样写 一、flask:轻量级的web应用的框架 安装命令 pip install flask 1、flask-web应用 1)…

【防雷】浪涌保护器的选择与应用

浪涌保护器(SPD)是一种用于保护电气设备免受电力系统突发的电压浪涌或过电压等干扰的重要装置。供电系统由于外部受雷击、过电压影响,内部受大容量设备和变频设备的开、关、重启、短路故障等,都会产生瞬态过电压,带来日…

你下载的蓝光电影,为什么不那么清晰?

1080P 为什么糊 蓝光对应的就是 1080P分辨率为 1920 * 1080 随便抽取一帧画面,得到的就是一张有 1920 * 1080 个像素点的图片大多数电影是每秒播放 24 张图片,也就是一个 24 帧的电影 电影在电脑上的储存 压缩方案 不仅仅有如下两种,还有…

Vue3 + uni-app 微信小程序:仿知乎日报详情页设计及实现

引言 在移动互联网时代,信息的获取变得越来越便捷,而知乎日报作为一款高质量内容聚合平台,深受广大用户喜爱。本文将详细介绍如何利用Vue 3框架结合微信小程序的特性,设计并实现一个功能完备、界面美观的知乎日报详情页。我们将从…

Linux LVM扩容方法

问题描述 VMware Centos环境,根分区为LVM,大小50G,现在需要对根分区扩容。我添加了一块500G的虚拟硬盘(/dev/sdb),如何把这500G扩容到根分区? LVM扩容方法 1. 对新磁盘分区 使用fdisk /dev/sdb命令,进…

C++:类和对象1

1.类的定义 类定义在面向对象编程中是一个核心概念,它定义了对象的结构和行为。在C中,类定义包含类的名称、数据成员(也称为属性或者字段)和成员函数(也称为方法或者操作)多个部分。数据成员定义了对象的状…

2024-07-16 Unity插件 Odin Inspector5 —— Conditional Attributes

文章目录 1 说明2 条件特性2.1 DisableIf / EnableIf2.2 DisableIn / EnableIn / ShowIn / HideIn2.3 DisableInEditorMode / HideInEditorMode2.4 DisableInInlineEditors / ShowInInlineEditors / HideInInlineEditors2.5 DisableInPlayMode / HideInPlayMode2.6 ShowIf / Hi…

docker安装mysql突然无法远程连接

docker安装mysql突然莫名其妙的无法远程连接 docker安装mysql突然无法远程访问问题背景发现问题排查问题解决问题总结 docker安装mysql突然无法远程访问 问题背景 大概一年前在服务器中通过docker安装mysql5.7端口映射关系是3308->3306 前期在服务器上开方了3308端口 fir…

Python用Pyqt5制作音乐播放器

具体效果如下 需要实现的功能主要的几个有: 1、搜索结果更新至当前音乐的列表,这样播放下一首是搜素结果的下一首 2、自动播放 3、滚动音乐文本 4、音乐进度条 5、根据实际情况生成音乐列表。我这里的是下面的情况,音乐文件的格式是 歌…

图——图的遍历(DFS与BFS算法详解)

前面的文章中我们学习了图的基本概念和存储结构,大家可以通过下面的链接学习: 图的定义和基本术语 图的类型定义和存储结构 这篇文章就来学习一下图的重要章节——图的遍历。 目录 一,图的遍历定义: 二,深度优先…

【MySQL】:学习数据库必须要知道的背景知识

客户端—服务器 客户端是一个“客户端—服务器”结构的程序 C(client)—S(server) 客户端和服务器是两个独立的程序,这两个程序之间通过“网络”进行通信(相当于是两种角色) 客户端 主动发起网…

CV12_ONNX转RKNN模型(谛听盒子)

暂时简单整理一下: 1.在边缘设备上配置相关环境。 2.配置完成后,获取模型中间的输入输出结果,保存为npy格式。 3.将onnx格式的模型,以及中间输入输出文件传送到边缘设备上。 4.编写一个python文件用于转换模型格式&#xff0c…

对某根域的一次渗透测试

前言 两个月之前的一个渗透测试项目是基于某网站根域进行渗透测试,发现该项目其实挺好搞的,就纯粹的没有任何防御措施与安全意识所以该项目完成的挺快,但是并没有完成的很好,因为有好几处文件上传没有绕过(虽然从一个…