【大模型 知识图谱】ChatKBQA:KBQA知识图谱问答 + 大模型

ChatKBQA:KBQA知识图谱问答 + 大模型

    • 提出背景
      • 传统方法处理流程
      • ChatKBQA处理流程
      • 对比优势
    • 总结
      • ChatKBQA框架概览
      • 特征1:逻辑形式生成
      • 特征2:无监督实体和关系检索
      • 特征3:参数高效的微调
      • 特征4:GQoT 可解释的查询执行
      • 特征5:错误减少和避免

 


论文:https://arxiv.org/abs/2310.08975

代码:https://github.com/LHRLAB/ChatKBQA

 

提出背景

用生成再检索代替检索再生成。

传统的KBQA方法是先检索相关信息,然后基于这些信息生成回答。

这种方法效率低下,因为它需要在大量的数据中进行检索。

ChatKBQA改变了这个流程,先通过大型语言模型(LLM)生成一个问题的逻辑形式,再去检索与逻辑形式匹配的具体实体和关系。

这样做提高了检索效率,因为直接生成的逻辑形式更准确地指向了需要检索的信息。

假设用户想知道:“阿司匹林用于治疗哪种疾病?”这是一个典型的知识库问答(KBQA)任务,需要准确地从医学知识库中检索信息。

传统方法处理流程

  1. 实体识别和链接:首先,系统需要识别“阿司匹林”为药物实体,并尝试将其链接到知识库中的对应实体。
  2. 关系识别:然后,系统需要理解用户询问的是关于“治疗”这一动作的信息,这需要复杂的自然语言处理技术来识别“治疗”为关系。
  3. 检索和答案生成:最后,系统根据识别的实体和关系,在知识库中检索相关信息,并生成答案。

ChatKBQA处理流程

  1. 逻辑形式生成:ChatKBQA利用fine-tuned的LLM直接将问题“阿司匹林用于治疗哪种疾病?”转换为准确的逻辑形式,如“(treats ‘Aspirin’ ?disease)”。

    能够精确匹配到问题中的关键实体和时间,提高了检索的准确性和相关知识的覆盖范围。

    这个步骤快速准确地缩小了搜索范围。

    避免了在庞大的知识库中进行广泛的搜索,直接锁定相关的实体和关系,显著提高了检索效率。

  2. 无监督检索:然后,ChatKBQA使用先进的无监督检索技术,如SimCSE,直接在知识库中寻找符合逻辑形式的实体和关系,无需复杂的实体和关系识别步骤。

  3. 答案生成:最后,基于检索到的准确信息,ChatKBQA生成答案,如“心脏病”。

生成的SPARQL查询不仅精确反映了用户的查询需求,还能通过知识图谱的查询路径提供清晰的解释性,如通过查询路径展示两者的直接关联。

用户不仅得到了准确的答案,还能理解答案的来源和逻辑,减少了对答案的疑惑,提高了用户的信任度。

对比优势

  • 效率:ChatKBQA通过直接生成逻辑形式和利用无监督检索技术,大大简化了查询过程,提高了检索效率,而传统方法需要经过多步骤的实体和关系识别,效率较低。
  • 准确性:ChatKBQA利用LLMs的强大语义理解能力,能更准确地理解用户的查询意图,并通过无监督检索精确地匹配知识库中的信息,减少了因实体和关系识别错误导致的误检。
  • 可解释性:ChatKBQA生成的答案是基于明确的逻辑形式和知识库查询路径的,这为用户提供了答案来源的透明度和可解释性,而传统方法可能因复杂的中间处理步骤而难以追踪答案来源。

ChatKBQA在处理效率、准确性和可解释性方面相较于传统KBQA方法的显著优势。

ChatKBQA能够更直接、准确地理解和回答复杂的医学查询,是利用最新NLP技术优化知识库问答系统的一个典范。

在这里插入图片描述
这图展示了传统的“检索-然后-生成”知识库问答(KBQA)框架与ChatKBQA的“生成-然后-检索”框架之间的对比。

左侧:传统的检索-然后-生成框架

  • 展示了处理一个问题(例如,Benjamin Netanyahu在哪个国家担任政府职位的宗教信仰是什么?)的传统步骤:
    • 实体检索:首先尝试找到与问题相关的实体标识符(如Benjamin Netanyahu)。
    • 关系检索:接着检索与问题相关的关系(如政府职位或宗教信仰)。
    • 三元组/子图检索:然后检索相关的三元组或子图。
    • 逻辑形式生成:最后根据检索结果生成逻辑形式,这可能会包含错误,因为是基于不完全准确的检索结果。

右侧:ChatKBQA的生成-然后-检索框架

  • 显示了ChatKBQA框架的步骤:
    • 生成:首先,使用fine-tuned的LLM根据问题直接生成逻辑形式。
    • 直观计算图:然后构建一个直观的计算图表示,这有助于理解如何从问题到逻辑形式的转换过程。
    • 无监督匹配模型检索:使用无监督的方法检索与生成的逻辑形式相匹配的实体和关系。
    • 最终逻辑形式:基于检索到的信息更新逻辑形式,并转换为SPARQL查询以获取答案。

这两个框架的主要区别在于处理的顺序和方法。

ChatKBQA采用先生成逻辑形式再进行检索的方法,而传统方法是先检索实体和关系再生成逻辑形式。

ChatKBQA的方法可以减少因错误检索信息而导致的逻辑形式生成错误的可能性,并且能够更直接地利用LLMs的强大语义理解能力。
 


总结

ChatKBQA 为什么被拆解成这些特定的子解法?

整个解题步骤是:从理解问题到找到答案,再到解释答案的过程。

  1. 逻辑形式生成(直接语义映射):首先,我们需要理解用户的问题。

    这就像是读懂一个复杂问题的第一步,把它翻译成一种计算机能理解的“逻辑形式”。

    这一步骤跳过了传统的实体和关系识别过程,直接利用大型语言模型的能力将问题转化为结构化的查询,就像是用直接的方式把问题翻译成计算机语言。

  2. 无监督实体和关系检索(无监督语义检索):有了这个“逻辑形式”,我们接下来要在知识库中找到匹配的信息。

    这一步就像是在图书馆里根据索引卡找到你需要的书一样,但是更高级,因为它用的是无监督学习的技术,可以在没有明确指导的情况下找到正确的信息。

  3. 参数高效的微调(精细化参数调优):为了确保这个过程既准确又高效,我们还需要确保我们的工具(即大型语言模型)针对这个特定任务是最佳状态。

    这就像是调整你的搜索工具,确保它既不会错过重要信息,也不会浪费时间在不相关的信息上。

  4. GQoT 可解释的查询执行:最后,当我们找到了答案,我们还需要能够解释我们是怎么得到这个答案的。

    这就像是不仅给你答案,还要告诉你答案的来源,让整个过程对用户来说是透明的,增加了用户对答案的信任。

ChatKBQA框架概览

在这里插入图片描述

生成阶段

  • 说明了ChatKBQA如何使用训练数据(自然语言问题与对应的逻辑形式)通过指令调优来fine-tune开源LLMs。
  • 展示了输入的自然语言问题是如何经过fine-tuned的LLM和beam search来生成候选的逻辑形式。

检索阶段

  • 展示了如何从知识库中检索与候选逻辑形式相匹配的实体和关系。
  • 介绍了无监督检索的使用,如SimCSE、Contriever和BM25,来优化逻辑形式,并最终生成可以执行的SPARQL查询。

这张图提供了一个整体的流程图,说明了从用户输入问题到获取答案的整个过程,包括使用LLMs生成逻辑形式,以及后续的无监督检索步骤,最后形成可执行的查询以提供答案。

特征1:逻辑形式生成

  • 描述:使用大型语言模型(LLM)将自然语言问题转换成逻辑形式。这个过程利用了LLM的语义理解能力,通过指令调优(Instruction Tuning),训练模型能够理解问题并生成一个精确的逻辑形式表达,如S-expression或其他结构化表示。
  • 方法名称:语义解析优化(Semantic Parsing Optimization)
  • 新方法:如果传统方法主要依赖手工规则或复杂的算法转换,ChatKBQA则使用直接的语言模型生成,我们可以称之为“直接语义映射(Direct Semantic Mapping)”。

特征2:无监督实体和关系检索

  • 描述:在生成逻辑形式后,ChatKBQA采用无监督方法进行实体和关系的检索。这一步骤不依赖于大量标注数据,而是利用现有的知识库结构和内容,通过语义相似性匹配来查找和逻辑形式中相对应的实体和关系。
  • 方法名称:高效知识检索(Efficient Knowledge Retrieval)
  • 新方法:相较于传统的基于规则或监督学习的检索,这里的“无监督语义检索(Unsupervised Semantic Retrieval)”方法更加灵活和准确。

特征3:参数高效的微调

  • 描述:为了适应特定的KBQA任务,ChatKBQA在大型语言模型上进行参数高效的微调。通过技术如LoRA、QLoRA、P-Tuning v2等,只微调模型的一小部分参数,既保持了模型性能,又大幅减少了计算资源的消耗。
  • 方法名称:参数高效微调(Parameter-Efficient Fine-Tuning)
  • 新方法:这种微调方法比全模型微调(Full Model Fine-Tuning)更加资源高效,可以称为“精细化参数调优(Fine-grained Parameter Optimization)”。

特征4:GQoT 可解释的查询执行

  • 描述:将生成的逻辑形式转换成可执行的SPARQL查询,并在知识库上执行,获取答案。这个过程不仅提供了准确的答案,还能通过查询的结构和逻辑提供答案的解释,增加了用户对结果的信任。
  • 方法名称:可解释性增强(Enhanced Interpretability)
  • 新方法:如果传统KBQA系统往往难以提供答案的详细解释,ChatKBQA的“查询路径可视化(Query Path Visualization)”提供了一种新的可解释性增强方法。

GQoT(Graph Query of Thoughts)是一个新概念,将知识图谱查询看作是大型语言模型思考的过程。

这意味着模型生成的查询不仅仅是用于检索数据,而是反映了模型对问题的理解和解答思路。

通过这种方式,结合LLM和知识图谱(KG)的优势,实现了一种新的协同推理问答模式,不仅能给出答案,还能提供推理路径,增强了答案的可解释性。

特征5:错误减少和避免

  • 描述:利用LLM生成的逻辑形式和无监督检索减少了因实体识别错误或关系映射不准确导致的错误。此外,通过可解释的查询执行,用户可以更容易地验证答案的正确性。
  • 方法名称:错误减少机制(Error Reduction Mechanism)
  • 新方法:与传统方法相比,这里的“动态错误校正(Dynamic Error Correction)”为ChatKBQA特有,强调在整个KBQA流程中动态减少和校正潜在的错误。

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

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

相关文章

《ShardingSphere JDBC?Sharding JDBC?》基本小白脱坑问题

因为在短链接中的很多操作也需要依靠sharding JDBC来完成所以同时也在短链接的文章中。 在网上看了很多文章,可能是因为技术的迭代等等原因,看的越多蒙的越快。在学习的道路上梳理一下,希望可以帮助到别的小伙伴。 官网地址: A…

git stash 正确用法

目录 一、背景 二、使用 2.1 使用之前,先简单了解下 git stash 干了什么: 2.2 git stash 相关命令 2.3 使用流程 1. 执行 git stash 2. 查看刚才保存的工作进度 git stash list 3. 这时候在看分支已经是干净无修改的(改动都有暂存到 stash) 4. 现在…

Fusion OS

1 VMware workstation搭建华为FusionCompute实验环境 VMware workstation搭建华为FusionCompute实验环境(三)保姆级安装教程,可运行虚拟机-CSDN博客 在VMware Workstation以及云服务器上安装华为FusionCompute_vm安装华为存储模拟软件-CSDN…

C# ICloneable的特点及其用法

在C#中,ICloneable 是一个接口,用于定义允许一个对象创建自身的精确副本,即“克隆”的能力。ICloneable 接口只包含了一个方法:Clone,该方法在实现时应该返回当前对象的一个副本。 这里是 ICloneable 接口的定义&…

git提交代码冲突

用idea2023中的git提交代码,出现 error: Your local changes to the following files would be overwritten by merge: ****/****/****/init.lua Please commit your changes or stash them before you merge. Aborting 出现这个错误可能是因为你的本地修改与远…

Leetcode 3039. Apply Operations to Make String Empty

Leetcode 3039. Apply Operations to Make String Empty 1. 解题思路2. 代码实现 题目链接:3039. Apply Operations to Make String Empty 1. 解题思路 这一题的话其实挺简单的,想清楚的话其实最后一轮遗留的字符必然是出现频率最高的一个或多个字符的…

SpringBoot常见问题

1 引言 Spring Boot是一个基于Spring框架的快速开发脚手架,它简化了Spring应用的初始化和搭建过程,提供了众多便利的功能和特性,比如自动配置、嵌入式Tomcat等,让开发人员可以更加专注于业务逻辑的实现。   Spring Boot还提供了…

单机启动/开机启动SpringBoot服务的正确方式

此操作只针对于测试环境或单机部署的情况下,使用Jenkins自动化部署或docker部署SpringBoot服务请忽略。 SpringBoot单机启动和集群启动的区别: 部署方式:单机启动可以直接运行jar文件或使用IDE启动应用程序,而双机集群启动需要将…

[鸿蒙开发]一款便捷开发的本地关系数据操作框架

# cjdb## 简介_cjdb 是一套简化数据库操作,面相程序开发的简洁架构,正在不断完善中,欢迎各位大佬指正_#### CJDBUtil API1. init(config: { context: any, dbName?: string, securityLevel?: relationalStore.SecurityLevel }): Promise<void> 2. query\<T>(c…

MySQL全量备份

一、实验素材 1.创建student和score表 (1) student表 create database school; use schoolCREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) );(…

C++项目 -- 高并发内存池(五)释放内存过程

C项目 – 高并发内存池&#xff08;五&#xff09;释放内存过程 文章目录 C项目 -- 高并发内存池&#xff08;五&#xff09;释放内存过程一、Thread Cache释放内存1.完善FreeList功能2.Thread Cache释放内存 二、Central Cache释放内存三、Page Cache释放内存四、释放内存过程…

Pytorch关于CIFAR-10测试

下载 CIFAR-10数据集&#xff1a; 官网&#xff1a;https://www.cs.toronto.edu/~kriz/cifar.html CIFAR-10的网络结构&#xff1a; import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linear, Sequential#定义网络结构 class Model(nn.Mo…

shell脚本控制模板判断

读取 ip文件列表 执行脚本 #!/bin/bash declare hj$1 echo $hj function duqu01(){ while :;do cat /root/wwd/0206/ip_list01|while read m s;do declare $m declare $s echo ‘’ echo $mastet’asdasdasdasd’ echo $slave’bbbbbbbbbb’ done #exit 0 done } function duq…

【社区投稿】Rust登陆华为鸿蒙操作系统之Native模块开发

Rust登陆【华为鸿蒙】操作系统之Native模块开发 名词解释 【鸿蒙操作系统】的英文全名是Open Harmony Operation System。正文将以其首字母缩写词ohos引用该词条。【鸿蒙软件开发工具包】的英文全名是Open Harmony Software Development Kit。正文也将以它的首字母缩写词ohsdk引…

【矩阵】托普利茨矩阵

每日一道算法题之托普利茨矩阵 一、题目描述二、思路三、C代码 一、题目描述 题目来源&#xff1a;LeetCode 给你一个 m x n 的矩阵 a 。如果这个矩阵是托普利茨矩阵&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果矩阵上每一条由左上到右下的对角线上…

SQL查询数据是否存在

SQL查询是否存在 count优化总结 根据某一条件从数据库表中查询是否有数据存在。 大多数时候&#xff0c;我们习惯性使用count。 count 大多数时候&#xff0c;我们在业务中会“肌肉记忆”&#xff0c;使用count来做这样的需求 mapper.xml中&#xff1a; <select id"c…

C++-带你初步走进继承(1)

1.继承的概念及定义 1.1继承的概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段&#xff0c;它允许程序员在 保 持原有类特性的基础上进行扩展 &#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承 呈现了面向对象 …

如何在IDEA中使用固定公网地址SSH远程连接服务器开发环境

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

【牛客】寒假训练营1 H-01背包,但是bit 题解

传送门&#xff1a;01背包&#xff0c;但是bit 标签&#xff1a;动态规划 题目大意 共有n件物品&#xff0c;每件物品有价值vi与重量ui两个属性。但特别地&#xff0c;所选物品的总重量并不是每件物品的重量和&#xff0c;而是所有所选物品的重量进行按位或运算的结果。请你计…

Compose 1.6 发布:性能大升级、拖放新功能、文本新变化...

翻译自&#xff1a; https://android-developers.googleblog.com/2024/01/whats-new-in-jetpack-compose-january-24-release.html 基于 1 月 24 号的 Compose 发行计划&#xff0c;我们正式推出了 Jetpack Compose 1.6 版本。 作为 Android 平台备受推崇的原生 UI 工具包&…