LLM应用实战:当图谱问答(KBQA)集成大模型(三)

1. 背景

最近比较忙(也有点茫),本qiang~想切入多模态大模型领域,所以一直在潜心研读中...

本次的更新内容主要是响应图谱问答集成LLM项目中反馈问题的优化总结,对KBQA集成LLM不熟悉的客官可以翻翻之前的文章《LLM应用实战:当KBQA集成LLM》、《LLM应用实战:当KBQA集成LLM(二)》。

针对KBQA集成LLM项目,该系列文章主要是通过大模型来代替传统KBQA的相关功能组件,实现知识图谱问答,以及如何针对问答效果、多轮对话、响应时间等优化工作总结,是妥妥的干货篇,感兴趣的客官可以持续关注!

本次的主要优化点在于如下:

1. 响应时间

项目的验收标准是流式首字的响应时间在3s内,而当前服务的平均响应时间在5s-7s之间,不符合项目验收标准。

2. 多轮对话

由于当前多轮对话中的指代消解、默认实体或概念对齐均由大模型处理,由于基座大模型的不稳定性,存在偶现的多轮对话中的对象指代错误的情况。

2. 响应时间优化

2.1 响应时间统计

基于前文展示的流程图,针对每个节点进行单次响应时间的统计,结果如下:

模块

耗时

图谱初始化

558ms(仅第一次会耗时)

候选schema召回

49ms

对齐prompt调用LLM完整响应时间

2800ms

对齐校准

15ms

对话prompt调用LLM首字响应时间

1800ms

可以发现两次调用大模型的响应时间耗时基本都在3s,因此重点对LLM调用环节进行优化。

优化方案包括三方面:prompt长度缩减、LLM输出结果简化、使用量化版LLM

2.2 prompt长度缩减

经过分析比对,不同文本长度,LLM的首字响应时间差别较大,尤其是增加安全机制的非公开LLM。

原因也众所周知,LLM推理过程是基于前文预测下一个token,纵然增加了KV缓存机制、FA2机制,较长的prompt首字响应时间必然大于较短prompt,因此可以针对prompt长度进行缩减,以提高LLM首字响应时间。

由于项目中对齐prompt的平均字符长度为5000字左右,且需要等待LLM全部输出结果后,方才进行后续流程,因此本次优化重点优化对齐prompt中的示例部分。

提供的fewshot示例大概40+条,且大部分示例和用户当前问题不相关,因此将fewshot示例向量化进行存储,当用户提问时,基于语义相似度将问题与fewshot示例进行pk,筛选出语义相似的10条示例作为对齐prompt中的fewshot,以达到缩减prompt长度的效果。

实验结果表明,将40条fewshot减小为10条,响应时间提高0.8s左右

对话prompt没有进行优化,因为对话prompt不需要等待全部结果输出,只需要首字响应并流式输出即可。

​​​​​​​2.3 LLM输出结果简化

LLM输出结果越长,输出全部结果的时间就越长,所以针对对齐prompt的输出长度也做了一些优化,虽然响应时间提升不高

原始对齐prompt调用LLM的输出如下:

(属性-等于-体重)且(属性值-等于-最大);(属性-等于-食性)且(属性值-等于-肉食性);(概念-等于-恐龙)

主要优化点在于:

  1. 属性、实体、概念、属性值分别用P, E, C, V表示
  2. 属性、实体、概念中三元组删除“等于”
  3. 属性值中的等于用eq代替
  4. 且、或分别用&, |表示

因此优化后的LLM输出结果如下:

(体重)&(V-eq-最大);(P-食性)&(V-eq-肉食性);(C-恐龙)

​​​​​​​2.4 大模型量化​​​​​​​

先前使用的非量化版的LLM,更换了INT 8量化版的LLM后,LLM的首响及完整响应时间有了质的提升。

其中对齐prompt完整输出结果由先前的2.8s提升至1.6s,对话prompt的首响时间由1.8s提升至0.6s

由于使用的是私有化部署的量化版,中间没有安全审核机制,再加上量化的有效推理,所以响应时间提升非常明显。

​​​​​​​2.5 思考

经过上述三方面的优化后,平均响应时间2.1s-2.9s之间,满足项目的验收标准。但引入的问题还是需要进一步验证。如prompt输入长度缩减、LLM输出结果长度缩减、切换量化版LLM是否引入问答准确性的降低呢?

针对该问题,基于先前整理的测试集,进行测试验证,准确率层面效果基本保持不变,说明以上优化方法有效!

3. 多轮对话效果优化

3.1 示例

怎么辨认慈母龙

它有啥能力

分布在那些地方?

海百合是百合么?

那它分布在哪里?

上述示例为多轮问答,在测试验证中,运行10次该多轮问答,其中会出现2次”那它分布在哪里?”中的”它”指代到了”慈母龙”,而非正确的”海百合”,因为对齐prompt调用LLM后,输出了“(E-慈母龙)&(P-分布区域)”原因当然可以归咎于LLM的基础能力不足,但如何进行优化呢?

尝试了两种方案:a. 对齐prompt中增加历史参考内容;b. 当前问题与历史问题通过LLM比较,判定是否二者存在关联性。

3.2 历史参考内容

想法也非常简单,LLM直接针对历史的问题和答案进行总结,大概率会存在指代不清的问题,那么如果将历史的问题以及对应指代的实体或概念作为参考项,提供给LLM,那么LLM就多了一层参考,进而可以提高指代的准确性。

历史参考内容引入到对齐prompt部分内容如下:

第一个问题prompt, 历史输入为空,ref也为空

历史输入:

```

```

现在回答:

in: 怎么辨认慈母龙

out:

第二个问题prompt, 存在第1个问题及实体,当前问题的参考ref为”慈母龙”

历史输入:

```

in: 怎么辨认慈母龙

ref: 慈母龙

```

现在回答:

in: 它有啥能力

ref: 慈母龙

out:

第三个问题prompt, 存在第1,2个问题及实体,当前问题的参考ref仍为”慈母龙”

历史输入:

```

in: 怎么辨认慈母龙

ref: 慈母龙

in: 它有啥能力

ref: 慈母龙

```

现在回答:

in: 分布在那些地方?

ref: 慈母龙

out:

第四个问题prompt, 存在第1,2,3个问题及实体,当前问题的参考ref也为”慈母龙”,即将之前的实体继续带入下一轮,大模型会根据当前问题,结合历史输入,进行实体抽取

历史输入:

```

in: 怎么辨认慈母龙

ref: 慈母龙

in: 它有啥能力

ref: 慈母龙

in: 分布在那些地方?

ref: 慈母龙

```

现在回答:

in: 海百合是百合么?

ref: 慈母龙

out:

第五个问题prompt, 存在前四个问题及实体,ref当前为”海百合”

历史输入:

```

in: 怎么辨认慈母龙

ref: 慈母龙

in: 它有啥能力

ref: 慈母龙

in: 分布在那些地方?

ref: 慈母龙

in: 海百合是百合么?

ref: 海百合

```

现在回答:

in: 那它分布在哪里?

ref: 海百合

out:

这样即使是20轮以上的问答,LLM也能根据当前ref进行分析比较,保障当前问题描述的实体或概念

3.3 当前问题与历史问题关联性分析

理论上通过引入历史参考内容可以有效解决多轮对话中的指代消解问题,但由于LLM本身泛化能力问题,偶尔会出现ref引入错误的情况,例如,上述第二个问题,当前的ref引入为”海百合、慈母龙”,如何针对该问题进行优化呢?

原因可能是历史问题存在多个时,大模型偶尔无法按照指令针对历史问题进行语义分析,因此可以将当前问题与历史中最后一次出现实体或概念的问题进行关联性分析,比较是否描述的是同一个对象,进而基于分析结果,将ref中的内容进一步约束。即,如果当前问题与历史最后一次出现的问题的实体相关时,则引入历史的实体,否则不引入历史实体。

举个例子说明下,”怎么辨认慈母龙”和”分布在那些地方?”存在关联性(默认第二个问题不存在实体,自动引用前一个问题的实体),则ref为”慈母龙”,而”怎么辨认慈母龙”和”海百合是百合么?”不相关,则ref中只保留”海百合”。

关联性分析也是通过prompt调用LLM实现,对应的prompt内容如下:

你是一个关于自然博物馆的多轮对话的识别器,主要用于识别当前问题与历史问题是否在讨论同一个或一组对象,以便进一步区分多轮对话的边界,请参考如下要求和示例进行输出:

1. 输出只能包含"是", "否",禁止输出其他内容;

2. 一定要结合历史的问题,与当前问题进行语义层面分析与比较,判断当前问题是否有历史的问题是否在讨论同一个或一组对象,如存在指代消解等;

3. 如果输出为"是",表示当前问题与历史问题存在关联性,则表示二者共同;

4. "q"表示问题,"a"表示输出;

5. 如果当前问题存在"它"或"它们",表示存在指代情况,则输出"是";

6. 如果当前问题没有明确任何询问的对象,表示默认使用历史讨论的对象,输出"是";

7. 如果当前问题存在具体的询问对象,且与历史问题不存在指代问题,则输出"否";

示例如下:

```

示例

q: 怎么辨认慈母龙

q: 有啥能力?

a: 是

示例

q: 怎么辨认慈母龙

q: 分布在那些地方?

a: 是

示例

q: 怎么辨认慈母龙

q: 海百合是百合么?

a: 否

示例

q: 海百合是百合么?

q: 那它分布在哪里?

a: 是

示例

q: 霸王龙的体长?

q: 梁龙有何生活习性?

a: 否

```

现在请根据上述要求及示例,针对以下问题进行关联性分析:

q: {}

q: {}

a:

4. 总结

一句话足矣~

本文主要是针对KBQA方案基于LLM实现存在的问题进行优化,主要涉及到响应时间提升优化以及多轮对话效果优化,提供了具体的优化方案以及相应的prompt

读者可以按照这套方案进行其他KBQA的构建尝试,如有问题,可私信沟通。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

弘君资本:苹果股价暴涨,创历史新高!

当地时间6月11日,美股三大指数涨跌纷歧,标普500指数与纳指再创新高。 到收盘,道指跌0.31%,纳指涨0.88%,标普500指数涨0.27%。 苹果大涨逾7%创前史新高。美联储开端召开6月货币方针会议,周三发布利率决定。…

传神论文中心|第11期人工智能领域论文推荐

在人工智能领域的快速发展中,我们不断看到令人振奋的技术进步和创新。近期,开放传神(OpenCSG)社区发现了一些值得关注的成就。传神社区本周也为对AI和大模型感兴趣的读者们提供了一些值得一读的研究工作的简要概述以及它们各自的论…

如何进行电子故障失效分析FA?

在电子主板生产的过程中,一般都会出现失效不良的主板,因为是因为各种各样的原因所导致的,比如短路,开路,本身元件的问题或者是认为操作不当等等所引起的。 所以在电子故障的分析中,需要考虑这些因素&#x…

5.5 业务流程和业务逻辑设计

一、引言 1.1 项目背景 经过上述的论述,我们讨论一下业务流程和业务逻辑设计,通过合理的业务流程设计和业务逻辑设计,可以提高用户的购物体验,降低用户的操作成本,并确保用户的购物行为符合平台的规则和要求。同时&a…

旅游网页(HTML+CSS+JS)

前言 本篇博客就不给大家讲解了,直接上代码 💓 个人主页:普通young man-CSDN博客 ⏩ 文章专栏:https://blog.csdn.net/2302_78381559/category_12644031.html?spm1001.2014.3001.5482https://blog.csdn.net/2302_78381559/catego…

Linux防火墙管理

计算机防火墙用于保护内部网络,主机和网络安全,有硬件防火墙和软件防火墙两种,软件主要是用对数据包进行分析过滤来保证软件层面安全。 此外还有根据对数据封包形式确定的分类方法, 如代理服务器,类似网关的形式监控整…

Mcgs 屏幕Modbus RTU通讯调试

目录 1. 设备窗口1.1 添加设备构件1.2 设备配置1.2.1 通用串口父设备配置1.2.2 设备0--ModbusRTU配置2. 设计用户窗口2.1 关联设备通道与实时数据库2.3 用户窗口3. 通信测试本文想要实现通过Modbus协议与Mcgs屏幕进行通信收发数据。在使用Mcgs屏幕进行Modbus通信时,一般Mcgs屏…

如何完美解决 sun.security.validator.ValidatorException: PKIX path building failed

如何完美解决 sun.security.validator.ValidatorException: PKIX path building failed 博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的…

一种改进盲解卷积算法在旋转机械故障诊断中的应用(MATLAB)

滚动轴承故障形成后,故障区与其他零部件表面接触将产生循环平稳的瞬态脉冲。由于受到系统传递函数、轴转频和环境噪声的干扰,故障脉冲特征受到大幅衰减,在测得信号中表现十分微弱甚至完全不可见。盲解卷积算法通过搜索一个最优的有限脉冲响应…

“面向绿色流域构建的生态处理技术创新与实践论坛”在成都召开

由中华环保联合会、福州大学、上海大学联合主办,中华环保联合会水环境治理专业委员会、福建省环境功能材料先进技术工程研究中心、上海大学环境与化学工程学院承办的“2024全国水科技大会暨技术装备成果展览会”于5月14日在成都世纪城国际会议中心隆重开幕。 期间&a…

Python 中 Selenium 的 send_keys() 函数

我们将介绍 Selenium Python 中的 send_keys() 函数并演示其用法。 任何应用程序在进入市场之前都需要经过一些测试。 应用程序应首先满足与其名称相关的所有要求。 我们应该全面测试应用程序,因为没有人能够预测给予应用程序的确切输入。 Python Selenium 可以帮…

新书速览|Autodesk Inventor 2024入门与案例实战:视频教学版

《Autodesk Inventor 2024入门与案例实战:视频教学版》 本书内容 《Autodesk Inventor 2024入门与案例实战:视频教学版》以Autodesk Inventor 2024为平台,重点介绍Autodesk Inventor 2024中文版的各种操作方法及其在工程设计领域的应用。《Au…

企业光纤专线和家用的区别

企业光纤专线与家用宽带之间的主要区别在于服务对象、技术特性、性能、成本以及服务等级。以下是一些关键差异: 服务对象: 企业光纤专线:专门为企业用户设计,通常需要提供营业执照作为申请条件,适用于需要稳定、高速和…

计算机组成原理之运算方法和运算器

文章目录 数据与文字的表示方法定点表示法机器码(机器数)原码 反码补码移码 浮点表示法尾数规格化 数据与文字的表示方法 定点表示法 机器码(机器数) 正数的原码、反码、补码一样,负数的原码、反码、补码的符号位均为…

Surface安装Windows和Ubuntu双系统方法(包括Ubuntu适配触控屏的方法)

这是一个目录0.0 前言让我们从一块砖头开始现在你有了能进入windows系统的surface并且想安装Ubuntu现在Ubuntu也有了再见 前言 之前我的Surface装上Ubuntu了好好的,能用,但是Ubuntu原本的内核是不支持很多Surface的功能的,比如触控屏&#xf…

SpringCloudAlibaba组件集成

SpringCloudAlibaba组件集成 Nacos服务注册与发现 1.Nacos认识与安装 1.1.什么是Nacos Nacos和Eureka有着相同的能力,甚至更为强大,作为Dubbo 生态系统中重要的注册中心实现。官方对它有如下定义: Nacos致力于帮助您发现,配置…

AI产品经理还不会数据挖掘❓看完这篇就够了

前言 在数字化时代的浪潮中,AI产品经理正成为推动科技与商业融合的重要力量。然而,面对海量的数据,如何从中挖掘出有价值的信息,为AI产品的开发提供有力支持?这已成为AI产品经理必须面对的挑战。今天,我们…

文心一言 VS 讯飞星火 VS chatgpt (279)-- 算法导论20.3 6题

六、创建一个全域大小为 u 的 vEB 树,需要 O(u) 的运行时间。假设我们想得到确切时间。如果 vEB 树中每个操作的摊还时间为 〇(lglgu),那么最小的操作数 n 是多少?如果要写代码,请用go语言。 文心一言: 首先&#xf…

iOS、Android、PC 、NAS、docker最近值得下载的5个工具

iOS & Android 1、timeto.me:在线时间管理与 productivity 工具 帮助用户提高工作效率,特别是对于需要跟踪任务耗时或是想要实施番茄工作法的人来说非常有用。该工具通常允许用户创建任务列表,并使用计时器来监控完成每个任务所花费的时…