小白学大模型RAG:十大步骤分析GraphRAG的工作原理

news2024/9/28 16:42:31

对于普通的RAG,也就是前面课程讲的RAG,它的原理是通过将文本进行切分和向量化,通过计算文本之间的向量相似度,从而得到两个文本之间的语义相似度,从知识库中找出跟问题语义相似的知识点,再送给LLM得出最终答案。

在这里插入图片描述

对于一般的问答类型知识库,普通RAG基本够用了,但是知识库类型如果更复杂一点,比如新闻报道、小说等文章类型,普通RAG就难以应付了,比如想针对《三国演义》做一个知识库,让用户能够搜索《三国演义》中的相关内容,比如“吴国有哪些大都督?”,那么普通RAG就比较难做了。

GraphRAG提出了一种新的RAG的方式,可以用来解决这种非结构化知识库的场景,它的做法如下。

第一步,先对文档进行切分,切分成多个TextUnit,也就是文本单元,默认一个文本单元最大长度为300个tokens,这里的token就是LLM中的token(一个字或一个词),可以通过配置进行修改,这一步没有其他目的,就是将长文档切短。

第二步,针对每个文本单元,利用LLM抽取出其中的实体信息,叫做Entity,所谓实体就是一个组织,或一个人,或一个地理位置等,你想让LLM从文本中抽取哪些类型的实体是可以配置的,实体信息包含实体名字、实体类型、实体描述,也就是Entity中有三个属性name、type、description,比如从文本单元中抽取出一个实体,类型为人,名字叫周瑜,描述为“三国时期的著名人物”。

不过需要注意,对于不同的文本单元,可能抽取的实体名字和实体类型相同,但实体描述不同,比如从文本单元A抽取了周瑜这个实体,但是得到描述信息是“周瑜长得非常帅”,但是从文本单元B中也抽取了周瑜这个实体,但是得到的描述信息是“周瑜技术非常厉害”,此时会把这两个描述信息都放在周瑜这个Entity的description属性中,description属性为一个list。

第三步,针对每个文本单元,利用LLM抽取其中实体之间的关系信息,一个文本单元可能包含多个实体,那么这一步就是抽取出这些实体之间的关系,比如文本单元中包含了一个人物和一个组织,比如周瑜和吴国,那么“周瑜属于吴国”,就是这两个实体之间的关系,关系信息叫做Relationship,包括两个实体的名字以及关系的描述信息,Relationship的三个属性为source、target、description。

同样,对于不同的文本单元,可能抽取出相同的两个实体,但是他们之间的关系不一样,比如文本单元A中发现“周瑜和孙策是兄弟关系”,但是文本单元B中发现“周瑜和孙策是君臣关系”,因此Relationship中的description属性也是一个list,用来存放一个关系信息的多种描述。

第四步,总结实体信息和关系信息,由于Entity和Relationship中的description属性都是一个list,都有可能对应多种描述,因此这一步所做的,就是通过LLM将多种描述信息进行总结,总结为一句话,比如将“周瑜和孙策是兄弟关系”和“周瑜和孙策是君臣关系”总结为"周瑜和孙策是亲如兄弟的君臣关系",这样做的目的是为了方便查询,因为查询时需要根据问题匹配知识库中的实体信息和关系信息时,只需要根据总结后的实体描述和关系描述就可以进行匹配了,不然得遍历list进行匹配。

第五步,这一步默认是没有开启的,这一步解决的问题是,对于抽取出来的实体,可能实体名字不同,但其实对应的是同一个实体,比如一个叫周瑜,一个叫公瑾,名字不同,但是对应的是同一个人,因此这一步就是发现并统一实体名字,比如统一都叫做周瑜,一旦出现了这种情况,也就是原本实体名字叫公瑾,现在要改为周瑜,就需要更新前面步骤的信息,包括关系信息,代价还是比较大的,所以默认是不开启的。

第六步,针对每个文本单元,利用LLM抽取其中发生的事件,比如赤壁之战,就是一次事件,我们把事件叫做Claim,一个事件信息包括事件的发起者、事件的报告者(不一定有,比如新闻事件就有报告者)、事件类型(LLM自己提炼)、事件状态(TRUE表示事件已经得到证实,FALSE表示事件是假的,SUSPECTED表示不确定)、事件的开始日期、事件的结束日期、事件的描述(比如事件发生的原因)、事件来源。

第七步,社群检查,通过前面的步骤,可以从所有文本单元中抽取出所有的实体信息、关系信息、事件信息,社群检查就是利用这些信息将实体进行分类,比如周瑜和孙策属于吴国,曹操和司马懿属于魏国,刘备和关羽属于蜀国,而吴国、魏国、蜀国都属于东汉,其中东汉是一个大社群,魏蜀吴是三个小社群,当执行查询时,可以指定社区的级别,如果指定的是低级别社群,那么查找的结果就比较微观,比如问三国时期有哪些著名人物,如果指定的社群为吴国,那么匹配的就只有周瑜和孙策,如果指定的社群为东汉,那么就能找到更多的著名人物。

第八步,生成社群报告,社群叫做Community,社群报告叫做Community Report,社群报告相当于就是在描述社群的构成,一个社群报告包含了社群中的实体信息、关系信息、事件信息,最重要的是还包含了一份对于该社群的描述description信息,这个描述也是通过LLM生成的,后续根据问题匹配社群时,就需要用到社群描述信息。

第九步,向量化,不管是实体还是关系,还是社群,都有描述信息,这一步就是对各个描述信息进行向量化,比如Entity中除开有description属性,还有description_embedding属性,进行向量化的目的也是为了查询,能够更容易的根据问题找到语义相似的实体、关系、社群。

第十步,原始文本向量化,相当于做一次普通RAG的知识库创建动作,将文本单元直接进行向量化。

以上就是GraphRAG进行知识库创建(GraphRAG中叫做Indexing)的十大步骤,这十大步骤是我自己总结的,和官网教程并不完全相同,但大致相同,这样应该更容易理解,通过以上步骤能够将一些非结构化的知识转变为结构化的知识,知识图谱就是所谓的结构化知识,比如新闻报告、小说等非结构化知识,通过抽取实体、关系、事件、社群得信息从而得到知识图谱,而知识图谱就描述各个实体之间的关系,使得在查询时,能通过问题搜索到更加全面、存在关系的知识点,而不只是单纯的语义相似的知识点。

以上就是GraphRAG创建知识库的大致过程,接下来,我们来看看GraphRAG的查询过程,GraphRAG中查询分两种:Local Search和Global Search。

首先,GraphRAG也是一种RAG,在查询时也是根据问题从知识库出检索出知识点,然后把找到的知识点添加到提示词模版中输入给LLM得到答案,GraphRAG和普通RAG的区别除开知识库创建的方式不同,知识库查询的方式也不同。

所谓Local Search就是根据问题利用向量搜索,找出跟问题匹配的实体信息、关系信息、事件信息、社群信息、原始文本信息,然后分别取匹配度最高的前几条,作为检索结果输入给LLM,其中原始文本信息就相当于进行了一次普通RAG从知识库查询得到的结果,而其他信息就是GraphRAG额外查询出来的,也就相当于GraphRAG从知识库中找到了跟问题有关的更多信息,从而提高问题回答的质量,这种方式的核心仍然是向量相似度,是从左往右依次匹配知识点的过程,适合回答有特点实体的问题,比如“周瑜的老婆是谁?”。

所谓Global Search就是利用LLM来决定要回答该问题应该用哪几个社群的信息,这个过程涉及到map-reduce的思想,先让LLM分析每个社群对于解决该问题的重要程度,具体做法是利用每个社群的社群报告描述信息和当前问题组合成提示词,让LLM来分析这个社群和问题的匹配程度,这是map的过程,然后选择匹配度较高的几个社群以及社群中的实体信息、关系信息、事件信息,再让LLM根据这些信息回答问题,这是reduce的过程。总而言之,Global Search是先找社群,再得到社群里的知识点,是从上往下匹配知识点的过程,适合回答总结性的问题,比如“三国里有哪些著名人物?”。

在大模型时代,我们如何有效的去学习大模型?

现如今大模型岗位需求越来越大,但是相关岗位人才难求,薪资持续走高,AI运营薪资平均值约18457元,AI工程师薪资平均值约37336元,大模型算法薪资平均值约39607元。
在这里插入图片描述

掌握大模型技术你还能拥有更多可能性

• 成为一名全栈大模型工程师,包括Prompt,LangChain,LoRA等技术开发、运营、产品等方向全栈工程;

• 能够拥有模型二次训练和微调能力,带领大家完成智能对话、文生图等热门应用;

• 薪资上浮10%-20%,覆盖更多高薪岗位,这是一个高需求、高待遇的热门方向和领域;

• 更优质的项目可以为未来创新创业提供基石。

可能大家都想学习AI大模型技术,也_想通过这项技能真正达到升职加薪,就业或是副业的目的,但是不知道该如何开始学习,因为网上的资料太多太杂乱了,如果不能系统的学习就相当于是白学。为了让大家少走弯路,少碰壁,这里我直接把都打包整理好,希望能够真正帮助到大家_。

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

一、AGI大模型系统学习路线

很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,下面是我整理好的一套完整的学习路线,希望能够帮助到你们学习AI大模型。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

在这里插入图片描述

三、AI大模型经典PDF书籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

在这里插入图片描述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四、AI大模型各大场景实战案例

在这里插入图片描述

结语

【一一AGI大模型学习 所有资源获取处(无偿领取)一一】
所有资料 ⚡️ ,朋友们如果有需要全套 《LLM大模型入门+进阶学习资源包》,扫码获取~

👉[CSDN大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)]()👈

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

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

相关文章

学习Java (五)

1.学习封装 package com.msb.test07; //封装 public class Girl {private int age; // 赋值public void setAge(int age){if(age > 30){this.age 18;}else{this.age age;}} // 读取public int getAge(){return age;} }package com.msb.test07;public class Test {p…

【Linux 报错】“make: ‘xxxx‘ is up to date.” 解决办法

一、报错原因 我们使用 make 命令,想要将 text.c 文件编译形成 可执行文件 text 时,报错如下 make: test is up to date. 中文含义:test 文件已经达到最新状态 意思是: test.c 文件里面的 所有源代码都没有修改过,你…

c++11~c++20 numeric_limits

在c中应该尽量少使用宏&#xff0c;用模板取而代之是明知的选择。我们可以使用numeric_limits来获取最大值和最小值&#xff0c;例如 #include <iostream> #include <limits> #include <iostream> using namespace std;int main() {cout << "int…

Go基础学习04-变量重声明;类型转换;类型断言;Unicode代码点;类型别名;潜在类型

目录 变量重声明 类型断言 类型转换 类型转换注意事项 Unicode代码点 类型别名、潜在类型 类型别名的意义 变量重声明 编写代码&#xff1a; package mainimport "fmt"var container []string{"Beijing", "Shanghai"}func main() {fmt.Pr…

Qt开发技巧(八)自带对话框的美化,内置快捷代码段,巧用匿名槽函数,另类动态换肤,资源动态加载

继续讲一些Qt开发中的技巧操作&#xff1a; 1.自带对话框的美化 Qt中有一些自带的对话框&#xff0c;比如文件选择对话框&#xff0c;颜色选择对话框等等&#xff0c;这些对话框看着跟系统的对话框没太大差别&#xff0c;实际这是Qt有意为之&#xff0c;为的是跟系统保持一致。…

欺诈文本分类检测(十七):支持分类原因训练

1. 引言 前文数据校正与增强进行了数据增强&#xff0c;本文将使用增强后的数据对模型进行进一步训练&#xff0c;以便得到能同时预测出分类标签、欺诈者、分类原因多个信息的模型。 为此&#xff0c;我们需要对整个训练过程进行调整&#xff0c;包括&#xff1a; 交叉训练逻…

苹果端侧AI布局深度分析

苹果 - 国际巨头的端侧 AI布局 深度分析 1.1.1 苹果AI&#xff1a;模型侧&#xff1a;MM1 3月&#xff0c;苹果发布多模态大模型MM1&#xff0c;拥有高达300亿参数。MM1融合密集模型与MoE变体&#xff0c;涵盖300亿、70亿、30亿参数版。MM1预训练指标领先&#xff0c;在多个多…

ubuntu 安装k8s

#关闭 Swap 内存&#xff0c;配置完成建议重启一下 nano /etc/fstab #注释下面相似的一行 #/swapfile none swap sw 0 0 #重启 reboot#部属k8s apt update && apt install -y apt-transport-https 下载 gpg 密钥 curl https://mi…

基于SpringBoot+Vue的高校实习管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

一次眼睛受损然后恢复的过程

由于多年没有社交比较宅,多年长期盯着电脑和手机,没有保护好眼睛 之前早上醒来有一段时间我眼睛老是分泌各种乱起八遭的东西,导致我眼睛看不清, 2023年3月有天的早上,我又不小心眼睛揉出血了,出门上班路上的时候才知道有这个问题,第二天早上就挂了去了眼科,医生给我开了如下的药…

单细胞转录组|scATAC-seq 数据整合

引言 本文在此展示了如何将多个源自人类外周血单核细胞的单细胞染色质数据集进行整合。其中一个数据集是通过10x Genomics的多组学技术获得的&#xff0c;它涵盖了每个细胞的DNA可及性和基因表达数据。另一个数据集则是通过10x Genomics的单细胞ATAC测序(scATAC-seq)技术得到的…

Mybatis-Plus自动填充时间的配置类

引言&#xff1a;在现代软件开发中&#xff0c;数据库操作是不可或缺的一部分。为了确保数据的准确性和完整性&#xff0c;我们常常需要在数据库记录中添加时间戳&#xff0c;例如创建时间和更新时间。MyBatis-Plus作为一个流行的持久层框架&#xff0c;提供了灵活的机制来实现…

官方权威解读|CNAS-CL01计量溯源性部分解读,供CNAS软件测试实验室参考

CNAS-CL01《检测和校准实验室能力认可准则》是软件测试实验室申请CNAS资质&#xff0c;建设符合CNAS要求的实验室质量管理体系时必须要参考的一部强制性准则。CNAS-CL01一共分为五大核心部分&#xff1a;通用要求、结构要求、资源要求、过程要求和管理体系要求。前面的文章中我…

【零散技术】微信支付保姆教程(一)

序言:时间是我们最宝贵的财富,珍惜手上的每个时分 微信支付十余年&#xff0c;早已成为国内必不可少的支付工具。但是开发对接中 繁杂的各类参数与文档&#xff0c;以及各种证书的申请&#xff0c;着实也成了不少开发者的噩梦&#xff0c;那么今天我们来看看&#xff0c;如何申…

3-3 AUTOSAR RTE 对SR Port的作用

返回总目录->返回总目录<- 一、前言 RTE作为SWC和BSW之间的通信机构,支持Sender-Receiver方式实现ECU内及ECU间的通信。 对于Sender-Receiver Port支持三种模式: 显式访问:若运行实体采用显示模式的S/R通信方式,数据读写是即时的;隐式访问:当多个运行实体需要读取…

小阿轩yx-案例:代码管理系统简介与部署

小阿轩yx-案例&#xff1a;代码管理系统简介与部署 前言 开发一个项目时&#xff0c;如果只有几十行代码或几百行代码时维护还算简单&#xff0c;但是代码数量达到一定程度或两三个人共同开发一个项目时&#xff0c;就很容易会出现代码混乱、冲突、排错难等问题。代码编写完成…

vue3中< keep-alive >页面实现缓存及遇到的问题

vue3中< keep-alive >页面实现缓存及遇到的问题 实现原理&#xff1a;keep-alive 是 Vue 的内置组件&#xff0c;当它包裹动态组件时&#xff0c;会缓存不活动的组件实例&#xff0c;而不是销毁它们。实现不同路由是否缓存只需要设置对应路由参数keepAlive为true&#xf…

Excel里的 $ 是什么意思,绝对引用用法详解来了

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f511; 在Excel中&#xff0c;$符号是一个功能强大的工具&#xff0c;它用于实现单元格引用的绝对引用和混合引用。了解它的用法对于编写公式和处理数据至关重要。今天&#xff0c;我们将详细介绍$符号的用法和一些实…

【C++】设计用户级缓冲区

目录 缓冲区功能分析 缓冲区空间分配策略分析 数据设计和函数介绍 完整代码 接口介绍 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 缓冲区功能分析 1.可以向缓冲区写入数据 2.可用从缓冲区读取数据 3.可用窥探数据——把数据拷贝给上层&#xff0c;但缓冲区数据不减少 …

巧用枚举消除条件判断

shigen坚持更新文章的博客写手&#xff0c;记录成长&#xff0c;分享认知&#xff0c;留住感动。个人IP&#xff1a;shigen 在上一篇的文章结合HashMap与Java 8的Function和Optional消除ifelse判断中有讲到如何结合HashMap与Java 8的Function和Optional消除ifelse判断&#xff…