ChatkBQA:一个基于大语言模型的知识库问题生成-检索框架11.13

ChatkBQA:一个基于大语言模型的知识库问题生成-检索框架

  • 摘要
  • 1 引言
  • 3 准备工作
  • 4 方法
    • 4.1 ChatKBQA概述
    • 4.2 在LLMS上进行高效微调
    • 4.3 用微调LLMS生成逻辑形式
    • 4.4 实体和关系的非监督检索
    • 4.5 可解释查询执行

在这里插入图片描述

摘要

基于知识的问答(KBQA)旨在从大规模知识库(KBs)中获得自然语言问题的答案,通常分为两个研究部分:知识检索和语义分析。然而,三个核心的挑战仍然存在,包括低效的知识检索,检索错误的语义分析产生不利影响,和以前的KBQA方法的复杂性。在大型语言模型(LLM)时代,我们引入了ChatKBQA,这是一种基于Llama-2,ChatGLM 2和Baichuan 2等开源LLM微调的新型生成然后检索KBQA框架。ChatKBQA建议首先使用微调的LLM生成逻辑形式,然后通过无监督检索方法检索和替换实体和关系,这更直接地改进了生成和检索。实验结果表明,ChatKBQA在标准KBQA数据集、WebQSP和ComplexWebQuestions(CWQ)上实现了最新的性能。这项工作还提供了一个新的范例,结合LLM与知识图谱(KG)的可解释性和知识要求的问题回答。

1 引言

基于知识的问答(KBQA)是一种经典的NLP任务,用于基于大规模知识库(KB)上的事实回答自然语言问题,例如Freebase,和DBpedia,其由结构化知识图(KG)组成,所述结构化知识图谱(KG)由包括(头实体、关系、尾实体)的三元组构建。以前的KBQA方法主要集中在解决两个核心问题:知识检索和语义解析。知识检索主要是从知识库中根据问题定位最相关的实体、关系或三元组,缩小了考虑的范围。然后,语义解析本质上将问题从非结构化的自然语言转换成结构化的逻辑形式(诸如S表达式),然后可以将其转换为可执行的图形数据库查询语言(例如SPARQL)以获得精确的答案和可解释的路径。

以前的KBQA工作提出了具有命名实体识别(NER)技术的不同知识检索方法,实体链接或子图检索。然后,他们利用检索到的事实三元组,使用seq2seq模型(如T5)直接得出问题的答案。其他在检索相关三元组之后执行语义解析以生成逻辑形式,然后在KB上执行相应的转换后的SPARQL查询以获取答案。此外,Yu等人将这两种方法结合起来,进一步提高了KBQA任务的准确性。
在这里插入图片描述
尽管如此,如图1左侧所示,仍然存在三个主要挑战。

  • (1)检索效率低。传统的方法首先确定候选实体的跨度,然后进行实体检索和关系检索。由于自然语言问题的结构与知识库事实不同,大多数方法需要训练专用模型来进行低效的提取和链接。
  • (2)不正确的检索结果会误导语义分析。先前的方法还利用检索到的三元组作为与原始问题一起沿着到seq2seq模型的引用的输入。然而,由于检索到的三元组并不总是准确的,它们会对语义解析结果产生不利影响。此外,如果有许多检索到的三元组,seq2seq模型需要更长的上下文长度。
  • (3)多个处理步骤使KBQA成为一项非常复杂的任务。先前的工作将KBQA任务分解为多个子任务,形成复杂的流水线处理,这使得复制和迁移具有挑战性。在大型语言模型(LLM)正在重构传统的NLP任务,一个更直接的解决方案,利用LLM重新制定传统的KBQA范式是有前途的。

为了克服这些挑战,我们引入了ChatKBQA,这是一种基于微调开源LLM的新型生成然后检索KBQA框架和百川2-7 B。如图1右侧所示,ChatKBQA为KBQA提出了一种直接的方法:
1.首先生成逻辑形式,
2.然后进行实体和关系的检索,旨在避免检索对逻辑形式生成的影响,提高检索效率。
在生成阶段,我们使用指令调优技术微调开源LLM,使他们具备以逻辑形式感知和生成的能力。由于LLM的特殊学习能力,波束搜索结果表明,大约74%的测试问题,一旦转换为逻辑形式,已经匹配基本事实。此外,在实体和关系被屏蔽(骨架)的情况下,超过91%的样本具有与地面事实一致的逻辑形式结构。在检索阶段,我们提出了一种无监督的实体和关系的检索方法,进行短语级语义检索的实体集和关系集的知识库中的实体和关系的逻辑形式,并取代它们在各自的位置。整个ChatKBQA框架简单易用,其中LLM部分可以替换为当前开源的LLM,检索部分可以灵活地与其他语义匹配模型交换,确保了即插即用的出色性能。

为了测试我们提出的框架的性能,我们在两个标准KBQA数据集WebQSP和复杂网络问题(CWQ),使用和不使用黄金实体的设置。实验结果表明,ChatKBQA在KBQA任务中实现了新的最先进的性能。我们还设置了额外的实验,以验证我们的生成,然后检索方法是否提高了生成结果和检索效率。最后,我们还讨论了如何从这个框架的见解使我们设想未来的LLM和KG的组合。

3 准备工作

在本节中,我们定义了我们工作的两个基本概念:知识库和逻辑形式,其次是知识库问答任务的问题陈述。

定义1:知识库(KB)

定义2:逻辑形式
逻辑形式是自然语言问题的结构化表示。以S-表达式为例,一个逻辑形式通常由投影和各种运算符组成。

投影操作表示三元组(s,r,o)在s或o上的单跳查询,其中,(?,r,o)记为(JOIN r o),而(s,r,?)表示为(JOIN(R r)s)。

各种运算符包括 “ A N D ”( A N D E 1 E 2 ) “AND”(AND E_1 E_2) ANDANDE1E2表示取 E 1 和 E 2 E_1和E_2 E1E2的交点,
“ C O U N T ”( C O U N T E 1 ) “COUNT”(COUNT E_1) COUNTCOUNTE1表示计数 E 1 E_1 E1
“ A R G M A X ”( A R G M A X E 1 r ) “ARGMAX”(ARGMAX E_1 r) ARGMAXARGMAXE1r表示取 E 1 在 r E_1在r E1r关系中投影后获得的最大文字,
“ A R G M I N ”( A R G M I N E 1 r )表示取 E 1 的 r “ARGMIN”(ARGMIN E_1 r)表示取E_1的r ARGMINARGMINE1r)表示取E1r关系的投影之后获得的最小文字,
“ G T ”( G T E 1 l ) “GT”(GT E_1 l) GTGTE1l表示取 E 1 的大于 l E_1的大于l E1的大于l的部分,
“ G E ”( G E E 1 l )表示取 E 1 “GE”(GE E_1 l)表示取E_1 GEGEE1l)表示取E1中大于或等于1的部分,
“ L T ”( L T E 1 l )表示取 E 1 “LT”(LT E_1 l)表示取E_1 LTLTE1l)表示取E1中小于1的部分,
“ L E ”( L E E 1 l )表示取 E 1 “LE”(LE E_1 l)表示取E_1 LELEE1l)表示取E1中小于或等于 l l l的部分,其中 E 1 或 E 2 E_1或E_2 E1E2表示子层逻辑形式。

问题陈述
对于KBQA任务,给定自然语言问题Q和知识库K,我们需要首先将Q转换为逻辑形式 F = S p ( Q ) ,其中 S p ( . ) F = Sp(Q),其中Sp(.) F=Sp(Q),其中Sp(.)是一个语义解析函数。然后将 F 转换为等价的 S P A R Q L 查询 q = C o n v e r t ( F ) F转换为等价的SPARQL查询q = Convert(F) F转换为等价的SPARQL查询q=ConvertF,其中 C o n v e r t ( . ) Convert(.) Convert(.)是固定的转换函数。最后,最后一组答案 A = E x e c u t e ( q ∣ K ) A = Execute(q | K) A=Execute(qK)是通过对K执行q而获得的,其中 E x e c u t e ( . ) Execute(.) Execute(.)是查询执行函数。

4 方法

在本节中,我们首先概述ChatKBQA框架,然后介绍对开源大型语言模型(LLM)的有效微调,通过微调LLM生成逻辑形式,实体和关系的无监督检索,以及可解释的查询执行。

4.1 ChatKBQA概述

ChatKBQA是一个生成然后检索的KBQA框架,用于使用微调的开源LLM进行知识库问答(KBQA)。

首先,ChatKBQA框架需要通过指令微调,基于KBQA数据集中的(自然语言问题,逻辑形式)对 有效地微调开源LLM。
然后使用微调的LLM通过语义解析将新的自然语言问题转换为相应的候选逻辑形式。
然后,ChatKBQA在短语级别检索这些逻辑形式中的实体和关系,并搜索转换为SPARQL后可以对KB执行的逻辑形式。
最后,利用转换后得到的SPARQL得到最终的答案集,并获得可解释的和知识所需的自然语言问题的答案。
在这里插入图片描述

4.2 在LLMS上进行高效微调

为了构造指令微调训练数据,ChatKBQA首先将KBQA数据集中测试集的自然语言问题对应的SPARQL转换为等价的逻辑形式,然后将实体ID(例如,“m.06w2sn5”)与相应的实体标签(例如,“[ Justin比伯]”),让LLM比无意义的实体ID更好地理解实体标签。然后,我们联合自然语言问题(例如:“贾斯汀比伯兄弟的名字是什么?”)以及处理后的对应逻辑形式(例如“(AND(JOIN [ people,person,gender ] [ Male ])(JOIN(R [ people,sibling relationship,sibling ])(JOIN(R [ people,person,sibling s ])[ Justin比伯])”)分别作为“输入”和“输出”,并添加“指令”为“生成检索与给定问题对应的信息的逻辑形式查询”。构成了开源LLM的指令微调训练数据。

为了降低微调具有大量参数的LLM的成本,ChatKBQA利用参数高效微调(PEFT)的方法来微调仅少量的模型参数,并实现与完全微调相当的性能。其中,LoRA通过使用低秩近似来减少在微调期间具有变化权重的大型语言模型的内存占用。QLoRA通过将梯度反向传播到冻结的4位量化模型中来进一步减少存储器,同时保持完整的16位微调任务的性能。P调谐v2采用前缀调谐方法,该方法在输入之前的每一层处并入可微调参数。Freeze通过仅微调Transformer最后几层的全连接层参数,同时冻结所有其他参数,加快了模型的收敛速度。ChatKBQA可以在所有上述有效的微调方法以及LLM之间切换,例如Llama-2-7B和ChatGLM 2-6B。

4.3 用微调LLMS生成逻辑形式

通过微调,LLM在一定程度上掌握了从自然语言问题转换为逻辑形式的语义解析能力。因此,我们使用微调的LLM对测试集中的新问题进行语义解析,我们发现大约63%的样本已经与地面真值逻辑形式相同。当我们使用波束搜索时,LLM输出的候选逻辑形式C列表包含约74%的具有真实逻辑形式的样本,这表明微调的LLM具有良好的语义解析任务的学习和解析能力。此外,如果我们用“[ ]”替换所生成的候选逻辑形式中的实体和关系(例如,“(AND(JOIN [ ] [ ])(JOIN(R [ ])(JOIN(R [ ])[ ]))“)形成逻辑形式的骨架,则为地面真实逻辑形式的骨架,出现在候选骨架中的样本百分比大于91%。这表明我们只需要将这些逻辑形式中相应位置的实体和关系替换为知识库中已有的实体和关系,就可以进一步提高性能。

4.4 实体和关系的非监督检索

由于微调LLM的良好的生成能力的逻辑形式的骨架,在检索阶段,我们采用了无监督的检索方法,它采取的实体和关系的候选逻辑形式,并通过他们通过短语级语义检索和替换,得到最终的逻辑形式转换为SPARQL可执行的知识库。
在这里插入图片描述
具体地,如算法1所示,输入是所生成的候选逻辑形式列表C,并且我们按顺序遍历这些逻辑形式F中的每一个。首先,我们执行实体检索。对于F中的每个实体 e e e,我们计算与知识库K实体集合E中的每个实体 e ′ e' e的标签的相似度 s e ← S i m i E n t i t i e s ( e , e ′ ) s_e ← SimiEntities(e,e') seSimiEntities(e,e)。我们根据相似度对检索到的实体进行排序,取最高的 k e k_e ke和大于阈值 t e t_e te的,得到该实体的检索结果 e l i s t ← T o p K w i t h T h r e s h o l d ( e l i s t , k e , t e ) e_{list}← TopKwithThreshold(e_{list},k_e,t_e) elistTopKwithThresholdelistkete。PermuteByEntity函数对检索到的每个位置的实体进行排列,得到实体检索后的结果 F l i s t F_{list} Flist。根据 F l i s t F_{list} Flist中的概率,取top k1且大于阈值t1,得到一个新的候选逻辑形式列表 C ′ . a p p e n d ( T o p K w i t h T h r e s h o l d ( F l i s t , k 1 , t 1 ) ) C′.append(TopKwithThreshold(F_{list},k_1,t_1)) C′.append(TopKwithThreshold(Flist,k1,t1))

然后,我们执行关系检索。与实体检索相似,但不同的是,对于 F ∈ C ′ F ∈ C′ FC中的每个关系 r r r,我们根据逻辑形式EF的实体集的邻域计算与每个候选关系 r ′ r′ r的相似度 s r ← S i m i R e l a t i o n s ( r , r ′ ) s_r ←SimiRelations(r,r′) srSimiRelations(rr)。我们还根据相似度对检索到的关系进行排序,取最高的 k r k_r kr和大于阈值的 t r t_r tr,得到检索结果 r l i s t ← T o p K w i t h T h r e s h o l d ( r l i s t , r e , r e ) r_{list}←TopKwithThreshold(r_{list},r_e,r_e) rlistTopKwithThreshold(rlist,re,re)。通过对每个位置的关系检索结果进行排列,得到关系检索后的结果Flist,然后取top k2且大于阈值t2,得到新的候选逻辑形式列表 C ′ ′ . a p p e n d ( T o p K w i t h T h r e s h o l d ( F l i s t , k 2 , t 2 ) ) C''.append(TopKwithThreshold(F_{list},k_2,t_2)) C′′.appendTopKwithThresholdFlist,k2,t2))

给定一个查询,无监督检索方法不需要额外的训练来选择语义上与候选集最相似的前k个作为检索到的答案集。BM 25使用词频和逆文档频率来根据文档与给定查询的相关性对文档进行排名。SimCSE是使用比较学习模型的无监督密集信息检索。ChatKBQA可以在上述所有实体检索和关系检索的无监督检索方法之间切换。

4.5 可解释查询执行

在检索之后,我们得到最终的候选逻辑形式列表 C ′ ′ C'' C′′,我们顺序地通过逻辑形式 F ∈ C ′ ′ F ∈ C'' FC′′进行查询,并将其转换为 S P A R Q L 查询 q = C o n v e r t ( F ) SPARQL查询q = Convert(F) SPARQL查询q=Convert(F)的等价形式。当找到第一个可以对KB K执行的q时,我们执行以获得最终答案集 A = E x e c u t e ( q ∣ K ) A = Execute(q | K) A=Execute(qK)。通过这种方法,我们也可以得到一个完整的推理路径的自然语言问题的基础上 S P A R Q L SPARQL SPARQL查询具有良好的可解释性。综上所述,ChatKBQA提出了一种思想,既利用LLM进行自然语言语义解析以生成图查询,又调用外部知识库对查询进行解释性推理,我们将其命名为思维图查询(GQoT),这是一种很有前途的LLM+KG组合范式,可以更好地利用外部知识,提高Q&A的可解释性,并避免LLM的幻觉。

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

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

相关文章

Windows Server 2012 R2系统服务器远程桌面服务多用户登录配置分享

Windows Server 2012系统在没有安装远程多界面的情况下,最多只能同时运行2个远程桌面,如果是有多个技术员、合伙人同时操作或是像游戏开发需要用到多界面,但是没有安装就很不方便,今天飞飞来和你们分享Windows server 2012R2系统远…

C++ opencv基本用法【学习笔记(九)】

这篇博客为修改过后的转载,因为没有转载链接,所以选了原创 文章目录 一、vs code 结合Cmake debug1.1 配置tasks.json1.2 配置launch.json 二、图片、视频、摄像头读取显示2.1 读取图片并显示2.2 读取视频文件并显示2.3 读取摄像头并写入文件 三、图片基…

通过注释来埋点

目录 开始 插件编写 功能一 功能二 功能三 合并功能 运行代码 总结 这篇文章主要讲如何根据注释,通过babel插件自动地,给相应函数插入埋点代码,在实现埋点逻辑和业务逻辑分离的基础上,配置更加灵活 这篇文章想要达到的效…

2023最受推荐的五款项目管理工具

1、进度猫 进度猫是国内一款轻量级项目管理工具,适用于实时协作的团队。 以甘特图为向导,基于任务清单todolist,支持多用户协作; 甘特图显示具体任务清单、时间和任务的进度; 对未完成任务、已完成任务进行分类管…

Vue3源码reactive和readonly对象嵌套转换,及实现shallowReadonly

前言 官方文档中对reactive的描述: 响应式转换是“深层”的:它会影响到所有嵌套的属性。一个响应式对象也将深层地解包任何 ref 属性,同时保持响应性。 官方文档中对readonly的描述: 只读代理是深层的:对任何嵌套属性的访问都将是…

深入了解域名与SSL证书的关系

在如今数字化的世界里,网络安全成为我们关注的重要议题之一。为了确保数据在网络上传输的安全性,我们通常会采取各种安全措施,其中最常用的就是SSL证书。然而,很多人并不了解SSL证书是如何与域名相互关联的。 首先,我…

[C/C++] 数据结构 链表OJ题:相交链表(寻找两个链表的相交起始结点)

题目描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返…

HTML简单介绍

且视他人之疑目如盏盏鬼火,大胆地去你的夜路。 目录 1.网页 2.Web标准 3.HTML 3.1HTML结构 3.2HTML标签​编辑 4.标签介绍 4.1排版标签 4.2文本格式化标签 4.3媒体标签 4.3.1图片标签 4.3.2 音频标签 4.3.3视频标签 5.相对路径 6.链接标签 6.1target属…

图论15-有向图-环检测+度数+欧拉回路

文章目录 1. 有向图设计1.1 私有变量标记是否有向1.2 添加边的处理,双向变单向1.3 删除边的处理,双向变单向1.4 有向图的出度和入度 2 有向图的环检测2.1 普通的算法实现换检测2.2 拓扑排序中的环检测 3 欧拉回路 1. 有向图设计 1.1 私有变量标记是否有…

燃气管网监测系统|全面保障燃气安全

根据新华日报的报道,2023年上半年,我国共发生了294起燃气事故,造成了57人死亡和190人受伤,燃气事故的发生原因有很多,其中涉及到燃气泄漏、设备故障等因素。因此,加强燃气安全管理,提高城市的安…

电磁场与电磁波part1--矢量分析

目录 1、方向导数 2、散度定理(高斯定理) 3、散度与旋度的比较 4、旋度定理(斯托克斯定理) 5、关于点乘、叉乘、梯度、散度、旋度的计算 ~~~~~~~~~~~~~~~~~~~~~~~~ 确认过眼神,是我看不懂的 ~~~~~~~~~~~~~~~~…

IDEA没有Add Framework Support解决办法

点击File—>Settings 点击第一个设置快捷键 点击apply和ok即可 我们要点击一下项目,再按快捷键ctrlk 即可

C++入门(2)—函数重载、引用

目录 一、函数重载 1、参数类型不同 2、参数个数不同 3、参数顺序不同 4、 链接中如何区分函数重载 二、引用 1、规则 2、特征 3、使用场景 做参数 做返回值 4、常引用 5、传值、传引用效率比较 6、引用和指针的区别 接上一小节C入门(1)—命名空间、缺省参数 一…

Python 如何实现适配器设计模式?什么是适配器(Adapter)设计模式?

什么是适配器设计模式? 适配器(Adapter)设计模式是一种结构型设计模式,它允许接口不兼容的类之间进行合作。适配器模式充当两个不兼容接口之间的桥梁,使得它们可以一起工作,而无需修改它们的源代码。 主要…

C++ 基础

准备工具Vscode或者Clion或者Dev C或者Vs studio 和 MSYS2 是C跨平台的重要工具链. 基础一 准备工作安装MSYS2软件 创建文件 一、基本介绍1.1C源文件1.2 代码注释1.3变量与常量1.3.1变量1.3.2 常量1.3.3 二者的区别: 1.4 关键字和标识符 二、数据类型2.1 基本数据类…

C/C++ 实现获取硬盘序列号

获取硬盘的序列号、型号和固件版本号,此类功能通常用于做硬盘绑定或硬件验证操作,通过使用Windows API的DeviceIoControl函数与物理硬盘驱动程序进行通信,发送ATA命令来获取硬盘的信息。 以下是该程序的主要功能和流程: 定义常量…

2023版Idea创建JavaWeb时,右键new没有Servlet快捷键选项

问题:右键时,没有创建servlet的快捷键,如下图: 解决方法: 1.打开idea,点击File>settings(设置),进入settings页面,如下 从上图中的Files选项中没看到有servlet选项,…

正则表达式入门教程

一、本文目标 让你明白正则表达式是什么,并对它有一些基本的了解,让你可以在自己的程序或网页里使用它。 二、如何使用本教程 文本格式约定:专业术语 元字符/语法格式 正则表达式 正则表达式中的一部分(用于分析) 对其进行匹配的源字符串 …

线程锁的应用与示例代码

为了解决这个问题,可以使用线程锁来确保在提取zip文件中的每个文件时,同一时间只有一个线程可以访问文件。这样可以避免多个线程同时访问和写入文件,从而解决race condition的问题。以下是修改后的示例代码: python import reque…

提升pip速度!设置pip全局镜像源,速度飞起!

文章目录 💢 问题 💢💯 解决方案 💯🐾 镜像源🐾 镜像全局配置🍄 Windows系统🍄 Linux和macOS系统🍄 添加环境变量的方式💢 问题 💢 由于“某些网络限制”原因,我们在使用pip安装python模块的时候速度会比较慢,这个时候我们就需要用到一些镜像源,本文将…