当前位置: 首页 > news >正文

知识图谱问答召回机制-llm-graph-builder

背景

以Neo4j开源的 llm-graph-builder (以下简称 LGB)为例,说明 graph + RAG的模式下,如何进行知识的召回操作。

原理说明

graph + RAG模式下,依旧保持了RAG的思想,使用了向量作为语义召回的手段。

  • 在 LGB 中,对于用户提出的问题,系统首先会将问题进行 Embedding 操作,从而得到问题的向量表示。
  • 使用问题的向量表示,去neo4j中召回相关的文档片段,并按照所属文档进行分组。
  • 从召回的文档片段中,找出基于片段生成的实体,并根据实体关联的文本片段数进行排序,取前25个。
  • 寻找从实体 e 出发,通过最多1步的关系(排除 HAS_ENTITYPART_OF 关系)到达的路径,这些路径不能包含 ChunkDocument 类型的节点。
collect { OPTIONAL MATCH path=(e)(()-[rels:!HAS_ENTITY&!PART_OF]-()){0,1}(:!Chunk&!Document) RETURN path }
  • 从上述实体中,找出实体的相关关系,并返回关系列表
// de-duplicate nodes and relationships across chunks
RETURN collect{ unwind paths as p unwind relationships(p) as r return distinct r} as rels,
collect{ unwind paths as p unwind nodes(p) as n return distinct n} as nodes, entities
}
  • 将收集到的文本片段、实体、关系、节点按照一定的结构进行组合
// generate metadata and text components for chunks, nodes and relationships
WITH d, avg_score,[c IN chunks | c.chunk.text] AS texts, [c IN chunks | {id: c.chunk.id, score: c.score}] AS chunkdetails, apoc.coll.sort([n in nodes | coalesce(apoc.coll.removeAll(labels(n),['__Entity__'])[0],"") +":"+ 
n.id + (case when n.description is not null then " ("+ n.description+")" else "" end)]) as nodeTexts,apoc.coll.sort([r in rels // optional filter if we limit the node-set// WHERE startNode(r) in nodes AND endNode(r) in nodes | 
coalesce(apoc.coll.removeAll(labels(startNode(r)),['__Entity__'])[0],"") +":"+ 
startNode(r).id +
" " + type(r) + " " + 
coalesce(apoc.coll.removeAll(labels(endNode(r)),['__Entity__'])[0],"") +":" + endNode(r).id
]) as relTexts
, entities
// combine texts into response-textWITH d, avg_score,chunkdetails,
"Text Content:\n" +
apoc.text.join(texts,"\n----\n") +
"\n----\nEntities:\n"+
apoc.text.join(nodeTexts,"\n") +
"\n----\nRelationships:\n" +
apoc.text.join(relTexts,"\n")as text,entities
  • 将组合后的数据,返回出来
RETURN text, avg_score as score, {length:size(text), source: COALESCE( CASE WHEN d.url CONTAINS "None" THEN d.fileName ELSE d.url END, d.fileName), chunkdetails: chunkdetails} AS metadata

以上就是 LGB 召回文档内容的过程。

请求prompt

在获取到结构化的数据素材后,按照一定的格式和提示词,组装出问答的promt。

prompt中,实体和关系的形式,均是以实体名称、关系类型的形式召回并组合的,并未使用实体描述和关系描述。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • BCLinux Euler 21.10 安装mysql 8.0.37 (二进制安装)
  • 数组、向量与矩阵
  • 常见的数据库面试题分享
  • 解决 mfc140.dll 文件丢失的问题,5种mfc140.dll解决方法
  • C++初学者指南-5.标准库(第二部分)–特殊容器
  • 构建并升级openssh至OpenSSH_9.8p1
  • leetcode54 螺旋矩阵
  • Python | Leetcode Python题解之第372题超级次方
  • 【MySQL】MySQL 表的增删改查(进阶)
  • Scipy||第二章 Scipy核心模块概述
  • redis 开启事务 pipeline.multi(); 需要关闭嘛?
  • 基于SSM+JSP的手机商城系统网站
  • CentOS 7上开放端口(开放链接)
  • Java IO精髓:高效块读写入技术深入解析
  • Beyond Compare忽略特定格式文本
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ES6系列(二)变量的解构赋值
  • ES6系统学习----从Apollo Client看解构赋值
  • HTML-表单
  • JS字符串转数字方法总结
  • mysql外键的使用
  • Node项目之评分系统(二)- 数据库设计
  • PAT A1050
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 翻译:Hystrix - How To Use
  • 关于Flux,Vuex,Redux的思考
  • 离散点最小(凸)包围边界查找
  • 前端存储 - localStorage
  • 前端攻城师
  • 前端学习笔记之观察者模式
  • 浅谈web中前端模板引擎的使用
  • 设计模式 开闭原则
  • 微信公众号开发小记——5.python微信红包
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 阿里云移动端播放器高级功能介绍
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​经​纬​恒​润​二​面​​三​七​互​娱​一​面​​元​象​二​面​
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #Spring-boot高级
  • #每天一道面试题# 什么是MySQL的回表查询
  • #知识分享#笔记#学习方法
  • $.ajax中的eval及dataType
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (21)起落架/可伸缩相机支架
  • (52)只出现一次的数字III
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (六)c52学习之旅-独立按键
  • (区间dp) (经典例题) 石子合并
  • (一)appium-desktop定位元素原理
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)ORM