RAG知识库之构建知识库图谱

news/2024/9/20 13:32:55/文章来源:https://www.cnblogs.com/softlin/p/18353588

      前面几篇文章谈了多种针对RAG的优化如多表示索引(Multi-representation indexing)、Raptor等但其都是存储在向量库中的,这里将介绍一种新的存储模式,图数据库,适合存储数据高度相关的数据。其存储实体与实体间的关系,存储着丰富的关系类型数据,能给RAG知识库带来更精准的上下文信息。

      在图数据库中三元组是数据存储的基本单位,它由头实体、关系和尾实体组成,用于表示实体之间的关系。三元组通常用于构建知识图谱,其中每个三元组代表一个事实或断言。例如,在知识图谱中,一个三元组可以表示“(海南,管辖,定安)”这样的关系,其中“海南”是头实体,“管辖”是关系,“定安”是尾实体。

      图形数据模型使得节点和关系可以自然地表示实体之间的连接。使用知识图谱后RAG除了能获取到与问题相关的上下文描述外还能得到上下文所包含的实体间的三元组使得其上下文信息更丰富。
      但知识图谱的构建并不容易,往往要花很多时间去识别三元组(头实体、关系、尾市体)有了大模型之后三元组的识别会方便很多,但三元组的质量可能还需要人工去识别修正。
      这里先介绍如何用LLM构建neo4j知识图谱,后面再看图谱如何与RAG的结合应用,在这里由于要结合知识图谱RAG使用所以加了两个特殊的节点:Document与Chunk节点,每个文档会有一个Document节点,文档分割后的块为Chunk节点,分割为几块就有几个Chunk节点。

图谱构造

      知识图谱构造最重要的工作时识别三元组,这边我们把它交给了LLM来完成,所以剩下了的主要任务是拿到三元组数据集后我们怎么构造图谱的节点及其关系比较使其能够适应与RAG结合的场景。
      在RAG的使用场景中通常是抓取Web网页源作为内容或上传的文档作为内容生成知识图谱后,对所上传或抓取得到的内容进行提问,从图谱中搜索问题相关内容作为上下文提交给LLM,让LLM进行回答。这里需要考虑的问题有:文档太大、答案溯源等。
      这两个问题在RAG向量库存储时也是比较常见的问题:分割、打标签就能解决。

      构建知识图谱主要有这么几个流程:

1、创建原文件节点

      主要用于文档溯源其属性包括文件名称等;

2、分割文档并创建分割文档后块节点、创建chunk以及块与源文档的关系

      文档分割主要用于解决文件过大问题,主要参数有:chunk_size、 chunk_overlap控制块大小与重叠大小。

3、创建向量索引

      为每个chunk创建embeddings属性,为chunk文本内容的词嵌入向量,为chunk块节点embeddings创建向量索引,用于问题上下文的检索。

4、合并chunk

      将指定数量的chunk合并组合为一个combined chunks,得到combined chunks列表
如果不合并chunk直接每个chunk生成一个图谱可能会由于文档分割时某些上下文丢失导致生成的图谱可靠性下降,多个chunk合并组合为一个chunk组可能会减少此类情况出现。也可不合并因为文本分割重叠参数从一定程度上也避免了类似情况。也可以不合并chunk直接将每个chunk文档提交给LLM生成返回图谱json,在neo4j中创建图谱并创建源文档节点。

5、生成图谱数据集

      将chunks列表遍历提交给LLM,LLM返回节点及节点间关系集后生成图谱以及源文档节点,图谱质量取决与LLM返回数据集的质量;

6、创建chunks与实体的关系

7、获取未进行词嵌入的实体节点、并对实体节点的text生成词嵌入向量

      大模型现阶段生成知识图谱完全没问题,但是要高质量的图谱恐怕还需要人为介入对数据进行清洗、修复重复项错误数据、验证完整性等。不过对于只是需要将知识图谱作为RAG知识库的内容引用来说有一定影响,但只要不是胡说八道的错误视乎影响不是特别大。

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

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

相关文章

《花100块做个摸鱼小网站! 》第二篇—后端应用搭建和完成第一个爬虫

一、前言 大家好呀,我是summo,前面已经教会大家怎么去阿里云买服务器(链接在这,需要自取),以及怎么搭建JDK、Redis、MySQL这些环境或者数据库。从这篇文章开始就进入正式的编码阶段了,我们从后端开始,先把热搜数据获取到,然后再开始前端部分。 本来我想把后端应用搭建…

《熬夜整理》保姆级系列教程-玩转Wireshark抓包神器教程(3)-Wireshark在MacOS系统上安装部署

1.简介 上一篇中介绍和讲解、分享了Wireshark在Windows系统上安装部署,今天就介绍和讲解、分享Wireshark在MacOS系统上安装部署。Wireshark不仅是Windows系统网络协议分析软件也是一款mac网络协议分析软件,任何负责的网络分析人员都对这个软件情有独钟。如今,几乎没有哪种产…

下一代浏览器和移动自动化测试框架:WebdriverIO

1、介绍 今天给大家推荐一款基于Node.js编写且号称下一代浏览器和移动自动化测试框架:WebdriverIO 简单来讲:WebdriverIO 是一个开源的自动化测试框架,它允许测试人员使用 Node.js 编写自动化测试脚本,用于测试Web应用、移动应用和桌面应用程序。能够执行端到端(e2e)、单…

七天.NET 8操作SQLite入门到实战详细教程(选型、开发、发布、部署)

教程简介 EasySQLite是一个七天.NET 8操作SQLite入门到实战详细教程(包含选型、开发、发布、部署)! 什么是SQLite?SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎。SQLite 源代码不…

【Mac】Termius for mac(终端模拟器/SSH/SFTP客户端)

今天给大家介绍一款软件叫Termius,这是一款终端模拟器/SSH/SFTP客户端。软件介绍 Termius for Mac是一款功能强大的跨平台SSH客户端,专为开发人员、系统管理员和网络工程师设计。它支持SSH、Telnet、Mosh等多种协议,能够安全地连接和管理各种远程服务器和设备。Termius for …

基于概率判断矩阵A*B是否等于C

如果是\(O(n^3)\)的暴力肯定会T,那么我们想有没有一种方法可以不用直接让 \(A*B\) 而是间接得到, 我们可以随一个n*1的矩阵 D 出来,矩阵乘法是满足交换律的: \(A*B=C\) \(A*B*D=C*D\) \(A*(B*D)=C*D\) 这样我们就可以在\(O(n^2)\)的复杂度完成判断, 根据不知道是啥的秩_零化…

pyCharm 设置 签名,时间

#!python3.8 # -*- coding: utf-8 -*- # --- # @File: ${NAME}.py # @Author: ${USER} # @Time: ${MONTH_NAME_SHORT} ${DAY}, ${YEAR} # ---

Pycharm 设置 flask 监听端口

新建 flask 项目之后,Pycharm 会默认生成1个 flask server,在默认端口 5000运行 如果要设置自己的 flask 端口,就再编写 run.py 文件,然后运行它from flask import Flaskapp = Flask(__name__)@app.route(/) def hello_world(): # put applications code herereturn Hello …

2024-8-11 算法学习

P4301 [CQOI2013] 新Nim游戏 题意:给定一串数列,拿走数列中的一些数,使得剩下来的一些数的所有非空子集的异或和都不为0,且拿走的数的和要最小 类似于线性代数,如果一些元素能够异或和为0,那么说明这些元素“线性相关”,所以只要留下无关的数,那么就满足题意。 采取线性…

vue组件的完整原型链

转自:https://blog.csdn.net/weixin_65692463/article/details/128173817 vue组件的完整原型链构造函数原型 prototype构造函数通过原型分配的函数是所有对象所共享的JavaScript 规定,每一个构造函数都有一个 prototype 属性,指向另一个对象。注意这个 prototype 就是一个对…

Ethereum学习笔记 ---- 通过 Event 学习《合约ABI规范》

以太坊合约ABI规范见 官方文档-合约ABI规范 这里通过实验来印证 ABI 编码在 Event log 中的实现。 本地启动 ganache 首先在本地启动 ganache 作为 evm 链单节点,稍后与以太坊的交互都是通过与本地的 ganache 节点交互来实现的。 Ganache官网 将 ganache 节点的端口设置为以太…

pycharm专业版的安装和破解教程

1. 下载资源后解压,以管理员身份运行pycharm-professional-2024.1.exe 解压码:520000 下载链接:https://pan.xunlei.com/s/VO41LIAJ5geCjsQuhaUTNRM8A1?pwd=tjwt# 2. 安装程序内:下一步 -> 设置安装目录(软件安装不推荐放c盘,可以改成别的盘),下一步 -> 根据需要…