RAG知识库之知识库图谱应用

news/2024/9/20 16:05:47/文章来源:https://www.cnblogs.com/softlin/p/18379101

      上篇文章介绍了使用大模型构建生成知识图谱,其实也可不用大模型用其他方式构建生成知识图谱,但RAG要结合知识图谱使用关键还是怎么把图谱的内容查询出来;简单来说可以先查出Chunk集在关联查出每个Chunk所关联的实体Entity再查询出实体之间的的关系集;这里说的RAG结合知识图谱和微软开源的GraphRAG具体实现是不同的,GraphRAG效果提升会更好。

      在Neo4j中使用Cypher查询语言可以轻松实现图谱数据的查询,通过Chunk元数据fileName以及Document与Chunk节点的关系PART_OF、Chunk与实体的关系HAS_ENTITY就可查询到了该文档的完整知识图谱。图谱查询的具体流程如下:

      1、将问题转为嵌入向量
      2、如果选择了Document过滤则会根据Chunk的字段fileName过滤Chunk否则使用问题向量查询匹配vector索引所对应的chunk
      3、计算Chunk节点的嵌入embedding字段与问题向量的余弦相似度作为score
      4、查找与Chunk节点具有PART_OF关系的Document并使用fileName过滤文档
      5、查找与Chunk节点具有HAS_ENTITY关系的Entity实体节点根据fileName过滤实体
      6、组装从Chunk节点到实体节点的路径、从实体到实体的路径等
      7、返回Chunk节点text内容、所有chunk的平均分score、Chunk元数据(源文档名称、chunkId、余弦相似度分数score等)、实体集、关系集
      8、计算问题嵌入向量与返回的图谱文档嵌入向量余弦相似度,根据预设阈值过滤掉相似度较低的图谱文档
      9、提交提问问题与经过过滤的图谱文档作为上下文到LLM

示例

      海南岛文档其内容如下:

定安县位于海南岛东北部为海南省直辖县,最近的机场是美兰机场距30公里左右。

      假如此段文本生成的图谱如上图所示。

提问问题:定安
限定文档:海南岛

      在这个知识图谱中查询数据时会发生一下情况:

      1、根据海南岛文档名称查询到其文档存在两个Chunk因为两个Chunk存fileName为海南岛的元数据
      2、根据Chunk与Doc的Part_of关系溯源到Dunk所属与海南岛文档
      3、根据Chunk与Entity的HAS_ENTITY关系查找到《海南省》、《定安县》、《美兰机场》实体
      4、根据查找到的实体查找实体间的关系、实体的属性

      经过如上4个流程后在图谱中查询到的文档内容如下:

定安县位于海南岛东北部为海南省直辖县,最近的机场是美兰机场距30公里左右。
实体集:行政区划:海南省 县:定安县 机场:美兰机场 关系集:行政区划:海南省 管辖 县:定安县  县:定安县 距离30公里:美兰机场

      由于返回的此段文本与提问问题余弦相似度超过阈值所以保留该文档,讲该文档作为提问问题上下文提交到大模型。

      当然在这个简单的图谱可能看不出知识图谱的优势,但可以明显的看到经过知识图谱的RAG得到的上下文比普通基于向量的RAG其上下文多了实体集、关系集信息,如图谱质量较高实体与关系的比较精准此时的上下文对于LLM还是会有很大帮助,对于RAG的准确性也会有所提高;

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

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

相关文章

快速开店新策略:新手如何利用API接口开启电商之旅

随着电子商务的蓬勃发展,越来越多的新手卖家希望建立自己的在线商店。但是,对于没有技术背景的新手来说,如何快速、高效地开设网店是一个挑战。幸运的是,API接口提供了一种解决方案,可以帮助您轻松实现网店的搭建和管理。本文将向您展示如何利用API接口快速开设网店。 一、…

省钱的开源项目「GitHub 热点速览」

本期,我从上周的热门开源项目中挑选了 5 个既省钱又省事,还好玩的开源项目。 首先,推荐的是省钱的电动汽车智能充电管理平台 evcc,它可以根据分时电价智能安排电动车充电时间,从而降低电费,如果你家还有太阳能充电和储能设备,evcc 更能最大限度地利用电能,让你的充电成…

新手入门 | 搭建 AI 模型开发环境

目录安装显卡驱动和开发库对于 Tesla 系列显卡对于 N 卡安装 CUDA 和 cuDNN安装 Miniconda安装 PyTorch 和 Transformers使用 Modelscope 下载加载模型PyCharm 项目配置模型加载和对话CPU 和 GPU 问题transformers 版本错误TORCH_USE_CUDA_DSA 错误 学习模型开发时,搭建环境可…

数据库中查询含有某个emoji表情的行数据

数据库中查询含有某个emoji表情的行数据MySQL的情况 代码如下​ create table tt6(id int, name varchar(800)); insert into tt6 select 1, 121😊33; insert into tt6 select 2, ddd; insert into tt6 select 3, 3669Ef; ​ ​ select * from tt6同样,name字段包含了各种字…

24.9.2——小学期开发实记

1.IDEA导入项目出现Error: java: 程序包javax.servlet.http不存在错误的解决办法 解决方法:打开File>Project Structure>Libraries,点击右侧加号,寻找到tomcat的lib文件夹。 2.IDEA控制台乱码问题对象的知识: 在 Java 中,使用 new 关键字创建对象时:堆内存分配: 首…

读软件开发安全之道:概念、设计与实施16安全开发最佳实践

安全开发最佳实践1. 安全测试的最佳实践 1.1. 编写可靠的安全测试用例是提升任何代码库安全性的重要方式 1.2. “测试驱动的开发”(Test Driven Development,TDD)1.2.1. 在编写新代码的同时编写测试用例1.3. 利用集成测试1.3.1. 集成测试(integration testing)可以把系统置于它…

C#|.net core 基础 - 如何判断连续子序列

想判断一个集合是不是另一个集合的连续子序列,你能想到什么方法?序列化字符串后再比较和滑动窗口那个更靠谱?前两天同事遇到了一个小需求,想判断一个集合是不是在另一个集合中存在,并且要求顺序一致,然后一起讨论了下应该怎么做,有没有什么比较好的方式?下面分享一下我…

全网最适合入门的面向对象编程教程:44 Python内置函数与魔法方法-重写内置类型的魔法方法

在 Python 中,内置类型的行为是通过一组特殊的“魔法方法”来实现的,这些魔法方法以双下划线开头和结尾,比如 init 和 str,你可以通过重写这些魔法方法来定制或扩展内置类型的行为。全网最适合入门的面向对象编程教程:44 Python 内置函数与魔法方法-重写内置类型的魔法方法…

软件工程课程第一次个人作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/SE2024这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13243这个作业的目标 开始初步学习软件工程,掌握学习的基础和必备条件,为后续学习做准备学号 1022011401.Markdown编辑器2.个人logo…

Python 环境配置(三)安装pytorch

Python 环境配置(三)安装pytorch 一、CUDA 安装CUDA视安装的Pytorch版本而定,GPU版本 需要 安装CUDA,CPU版本 无需 安装CUDA。 1、查看驱动版本 方法一:方法二:2、下载 CUDA Toolkit Archive | NVIDIA Developer选择对应的版本,对应的!!!此后依次选择下载即可注意 wi…

财务知识-合并报表底层逻辑

合并报表如何拆分,如何勾稽,下面两张图教会你!↓