以FastGPT为例提升Rag知识库应用中的检索召回命中率

news2024/9/24 7:18:00

提升Rag知识库应用中的检索召回命中率

在构建Rag(Retrieval-Augmented Generation)知识库应用时,检索召回知识片段的命中率是至关重要的。高效、准确的检索机制是确保AI系统能够精准响应用户查询的基础。当前,FastGPT主要采用三种检索方式:语义检索(向量化检索)、全文检索,以及结合两者的混合检索。每种方式均可搭配重排模型以优化结果排序。

检索方式评估

  • 全文检索:虽适用于关键词检索,但在对话场景下,直接将用户问题作为关键词进行检索,效果欠佳,因对话的复杂性和语境敏感性难以通过简单关键词捕捉。
  • 混合检索:旨在结合语义检索与全文检索的优势,但受限于知识库最大引用tokens,其效果并未如预期般显著提升。实际测试中,混合检索的结果排序往往不如单独使用语义检索时精确,且对检索效率的提升有限。
  • 语义检索:经过反复测试,语义检索因其能够捕捉更丰富的语义信息,被证明在对话应用中表现最佳。其通过向量化技术,将用户查询与知识库中的内容进行深度语义匹配,从而有效提升了召回命中率。

重排模型的考量

重排模型旨在进一步优化检索结果的排序,但其效果依赖于初始检索结果的准确性。当语义检索已经能够提供高度相关的结果时,重排模型可能仅带来边际提升,同时增加计算复杂度和响应时间,影响用户体验。因此,在语义检索效果良好的情况下,引入重排模型需慎重考虑其必要性与成本效益。

优化语义检索的关键

提升语义检索的准确度是优化检索召回命中率的核心。要实现这一目标,需深入理解语义检索的原理,并针对性地优化其实现细节。这可能包括:

  • 优化向量表示:采用更先进的自然语言处理模型(如BERT、GPT系列等)来生成更精确、更具区分度的向量表示。
  • 精细化索引构建:根据知识库的特点和用户查询的习惯,优化索引的构建策略,确保关键信息得到有效索引。
  • 动态调整阈值:根据实际应用场景和反馈,动态调整检索过程中的相似度阈值,以平衡召回率与准确率。

综上所述,提升Rag知识库应用中的检索召回命中率,关键在于优化语义检索的准确度。通过深入理解语义检索原理,并采取有效措施提升其实现效果,可以显著提升AI系统的响应质量和用户体验。同时,在引入重排模型等优化手段时,需充分考虑其必要性与成本效益,避免过度复杂化系统架构。

语义检索原理

字数相似

用户输入问题的字数和知识库存储的知识片段的字数之间有相似度的影响,比如用户输入“你好呀”,知识库里由“你好”、“你好呀”、“你好啊”、“您好”、“你也好呀”,进行检索。
在这里插入图片描述
从检索结果来分析,知识库里和用户问题一模一样的相似度为1,最靠前。其次是意思相同,字数也相同的。最后是意思相同,字数不同的知识段落。

关键词频率

我们还用你好进行召回测试,知识库添加“你好你好”和“你好你好你好”,查询结果如下:
在这里插入图片描述
从检索结果来分析,知识库里和用户问题一模一样的相似度还是1,最靠前。其次是“你好你好”、“您好”、“你好你好你好”、“你好啊”,从查询结果排序不难看出,“你好”这个关键词出现的多的相似会高,但是也不是关键词出现频率越高相似越高。还受到字数相似的影响,在字数相近的情况下,关键词出现的越多,相似度越高。

倒叙索引

我们还用你好进行召回测试,知识库添加“你好兄弟”和“兄弟你好”,查询结果如下:
在这里插入图片描述
从结果来看,“兄弟你好”排在“你好兄弟”前面,可见在意思相同,字数相同的情况下,关键词在段落中出现的越靠后,相似度越高。

语义匹配

我们还用“城市”进行召回测试,知识库添加“你好兄弟”和“兄弟你好”,查询结果如下:
在这里插入图片描述
从结果来看,除了第一个一模一样的以外。其他结果的都没出现城市两个字,只出现了和城市相关的北京和首都。他们虽然字不一样,但是语义是一样的。

总结

要想提升语义检索的准确度,需要从以下几个方面入手

  • 尽量保持知识库的分段字数相近
  • 尽量避免同一段落内出现太多意思相近的词
  • 当用户输入多个问题里包含多个关键词时,如果想让有些关键词的检索时候权重高一点,需要人工在对应段落,增加该关键词的向量索引。

相关文章推荐

《使用 Xinference 部署本地模型》
《Fastgpt接入Whisper本地模型实现语音输入》
《Fastgpt部署和接入使用重排模型bge-reranker》
《Fastgpt部署接入 M3E和chatglm2-m3e文本向量模型》
《Fastgpt 无法启动或启动后无法正常使用的讨论(启动失败、用户未注册等问题这里)》
《vllm推理服务兼容openai服务API》
《vLLM模型推理引擎参数大全》
《解决vllm推理框架内在开启多显卡时报错问题》
《Ollama 在本地快速部署大型语言模型,可进行定制并创建属于您自己的模型》

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

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

相关文章

四步实现网站HTTPS访问

随着网络安全的重要性日益凸显,HTTPS(超文本传输安全协议)已成为现代网站的标准配置。HTTPS协议作为HTTP协议的安全版本,通过SSL协议加密数据传输,不仅能保护用户数据的安全,还能提升搜索引擎排名&#xff…

一文带你搞懂C++友元和类型转换

6. C友元 在C中,一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。…

【ai】Easy-RAG 6:安装bge-reranker-large、 成功部署并通过frpc访问

作者用到了funasrwhisper还有RAG的rerank模型这里用的是bge-reranker-large , 要从 https://huggingface.co/BAAI/bge-reranker-large 下载。AttributeError: module ‘numba’ has no attribute ‘jit’ 【ai】Easy-RAG 4: 修复依赖项:numpy numba omegaconf 等作者的地址是…

英特尔宣布针对对Llama 3.1进行优化 以提升所有产品的性能

日前Meta正式发布了Llama 3.1开源大模型,以其庞大的参数量和卓越性能,首次在多项基准测试中击败了GPT-4o等业界领先的闭源模型。允许开发者自由地进行微调、蒸馏,甚至在任何地方部署,这种开放性为AI技术的普及和创新提供了无限可能…

关于promise的一些例题(运行步骤详细说明)

关于promise的一些例题(详细说明) 基本例题 // 直接运行 输出 1 2 const promise new Promise((resolve, reject) > {console.log(1);resolve();console.log(2); });// then后面放入微队列 promise.then(() > {console.log(3); });// 输出4 之后没有代码了所以运行为队…

秋招突击——7/23——百度提前批面试准备和正式面试

文章目录 引言一面准备面试预演一1、讲一下hashcode()和equals()关系2、equals()和有什么区别3、讲一下重载和重写的区别4、讲一下深拷贝、浅拷贝的区别5、讲一下Java异常的基类,运行时异常举几个例子,什么情况下会出现?6、讲一下Java中线程的…

【管控业财一体化】

1. 引言 大型集团在现代企业管理中扮演着举足轻重的角色,其管控业财一体化解决方案是实现企业高效运营的关键。随着数字化转型的加速,业财一体化不再局限于财务与业务流程的简单融合,而是向着更深层次的数据驱动、智能化决策和价值创造方向发…

光猫设置桥接 路由器pppoe拨号 设置正常访问光猫 (openwrt)

网络信息展示 光猫桥接很简单吧,就不说了。先来列出修改前的网络接口和网络信息。 光猫192.168.1.1,openwrt 10.0.0.0/8 初始配置 需要记录的信息:WAN的网络设备(eth1),光猫的IP(192.168.1.1&am…

RV1126 Linux 系统,接外设,时好时坏(一)应该从哪些方面排查问题

在 Linux 系统中接外设时,遇到“时好时坏”的问题,可能是由多种因素引起的。以下是一些排查问题的建议。 1. 硬件方面的排查 1.1 连接检查 物理连接: 确保外设与主板之间的连接良好,检查插头、插座及线缆是否牢固。引脚配置: 确认设备树中引脚的配置是否正确,尤其是引脚…

linux modetest常用命令

1 通过help有哪些参数 130|:/ # modetest -h usage: modetest [-acDdefMPpsCvrw]Query options:-c list connectors-e list encoders-f list framebuffers-p list CRTCs and planes (pipes)Test options:-P <plane_id><crtc_id>:<w>x&l…

Web开发:ASP.NET CORE中前端使用Ajax定时获取后端数据

一、低难度&#xff08;刷新a标签&#xff09; 1、需求 给a标签每15s刷新一次&#xff0c;显示最新的时间&#xff08;时间必须由后端获取&#xff09; 应该如何操作呢 2、代码 后端 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Mi…

go语言开发Prometheus Exporter(DM数据库)

一、介绍 源码步骤基于dameng_exporter源码讲解&#xff0c;看完本篇文章可以直接进行二次开发。 dameng exporter的开源地址&#xff1a;https://github.com/gy297879328/dameng_exporter&#xff08;可直接对接prometheusgrafana 提供表盘&#xff09; 开发一个exporter 其…

智谱OpenDay“大有可玩”:30秒将任意文字生成视频

Sora毫无疑问带来AI大模型的全新玩法&#xff0c;大模型可基于任意文字生成视频&#xff0c;这也是这个“大家庭”若干努力&#xff08;包括Runway的Gen系列、微软的Nuwa、Meta的Emu、谷歌的Phenaki/VideoPoet、CogVideo等&#xff09;的一个全新高度。 7月26日&#xff0c;这…

数据结构(5.3_4)——线索二叉树的概念

普通二叉树找某结点前驱和后继的方法 中序线索二叉树 n个结点的二叉树&#xff0c;有n1个空链域!可用来记录前驱&#xff0c;后继的信息 中序线索二叉树的存储结构 //线索二叉树结点 typedef struct ThreadNode {ElemType data;struct BiTNode* lchild, * rchild;int ltag,…

Git、Gitlab以及分支管理

分布式版本控制系统 一、Git概述 Git是一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更。它由Linus torvalds创建的&#xff0c;最初被设计用于Linux内核的开发。Git 允许开发人员跟踪和管理代码的版本&#xff0c;并且可以在不同的开发人员之间进行协作。 Githu…

【学习笔记】解决Serial Communication Library编译问题

【学习笔记】解决编译 Serial Communication Library 时的 Catkin 依赖问题 Serial Communication Library 是一个用 C 编写的用于连接类似 rs-232 串口的跨平台库。它提供了一个现代的 C 接口&#xff0c;它的工作流程设计在外观和感觉上与 PySerial 相似&#xff0c;但串口速…

操盘手分享:葆奕康平台获上市公司投资3300万,大健康新零售模式!

文丨微三云胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 2024年的项目越来越难做&#xff0c;不是随便开个盘在线上零撸、嘘投、空转&#xff08;无实业&#xff09;&#xff0c;这种没实力、没资本、没实业、没生态的项目90%的都活不过…

linux如何卸载python3.5

卸载&#xff1a; 1、卸载python3.5 sudo apt-get remove python3.5 2、卸载python3.5及其依赖 sudo apt-get remove --auto-remove python3.5 3、清除python3.5 sudo apt-get purge python3.5 或者 sudo apt-get purge --auto-remove python3.5

LeetCode 2844.生成特殊数字的最少操作(哈希表 + 贪心)

给你一个下标从 0 开始的字符串 num &#xff0c;表示一个非负整数。 在一次操作中&#xff0c;您可以选择 num 的任意一位数字并将其删除。请注意&#xff0c;如果你删除 num 中的所有数字&#xff0c;则 num 变为 0。 返回最少需要多少次操作可以使 num 变成特殊数字。 如…

第二证券:台风的后遗症竟然是台股!

今日早盘&#xff0c;中国台湾的台湾加权指数开盘大跌逾4%&#xff0c;台积电跌超6%。此前&#xff0c;因为飓风的原因&#xff0c;台湾股市暂停生意两天。暂停生意前&#xff0c;台湾加权指数收报22871点&#xff0c;上升614点&#xff0c;涨幅高达2.76%。 剖析人士认为&…