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

大模型RAG中的retrieve策略

        最近一直做大模型RAG(检索增强)相关的一些事情,现阶段模型还没办法做到足够智能,需要有RAG(检索增强)进行一些能力加强,特别是一些事实类和实时类的信息

之前聊过RAG如何切块的问题,我们在实践过程中也落地了很多策略,比如我们发现在某些场景下较小的query和较小的块匹配精准度更好一些,但是较小的块容易遗漏很多上下文信息,所以我们尝试先将文本切成不同size 的块,小块和大块之间有一定的关联,然后用小块做embedding匹配,然后再query找小块对应的大块,这样既兼顾了准确性也考虑到了充足的上下文,整体效果还不错。

llamaindex中retrieve策略之BM25Retriever

BM25Retriever是一个词袋模型,简单介绍一下词袋模型向量化的思路,大体是这样的:

1、先将文本进行分词,有很多开源优秀的分词器,大家自行搜索

2、将这些分词进行去重整理,得到的所有词组成的集合可以理解成是一个词袋

3、query和文本向量化时,看一下词袋中的词在这个query中是否出现,如果出现标记为1,不出现标记为0,这样就可以将任意一个文本转成N维的向量(N维即分词的数量,一般情况下用所有分词结果可能会有维度不可控的风险,所以词袋一般会选前k个经常出现的词汇作为词袋)

词袋模型比较简单,它的缺点主要在于原文本的词序信息会丢失,所以我们目前暂时没有使用过词袋模型,llamaindex正好实现了这个策略,顺便看了一下,有需要的可以自己去读读源码

llamaindex中retrieve策略之AutoMergingRetriever

AutoMergingRetriever策略其实就有点类似我前文说的切块策略了,先将文本切成不同size的块,然后在向量匹配相似度阶段,如果匹配的结果是小块,会尝试和它对应的大块进行merge,思想差不多,我们简单看一下如何使用:

1、使用HierarchicalNodeParser进行切块,当然你可以自己来实现分层切块的策略,默认值下会切成3层,第一层chunk size 2048,第二层512,第三层128;

2、查相似结果时,先用正常向量相似度匹配的结果作为基础查询结果

3、然后使用大小块之间的关联关系尝试合并,我们简单看一下这块的源代码

先查基础节点,然后再尝试合并节点,合并代码:

核心的几步:

1、如果当前父节点下相似的小块占比(可自定义)比较高的时候,开始尝试合并

2、合并比较简单,其实就是平均一下所有相似小块的打分作为父节点的打分

3、添加父节点也就是大块,然后把属于这个大块的小块都删除

RAG(检索增强)终究还是一个辅助作用,一定要合理的使用,最好的情况是模型足够智能不需要RAG,又或者是模型自己来决策使用什么样的策略来提高它自己的准确性,否则又做会了传统的检索系统,大模型的能力会被掩盖


http://www.kler.cn/a/564161.html

相关文章:

  • 采样算法一:去噪扩散概率模型(DDPM)采样算法详解
  • wpf中如何让TextBox 显示字体的颜色为白色
  • DeepSeek如何辅助学术写作的性质研究?
  • 365天之第P7周:马铃薯病害识别(VGG-16复现)
  • Java之File(文件操作)
  • LeetCode225.用队列实现栈
  • Linux 使用 sosreport 生成系统报告
  • VC++ MFC中 CTreeCtrl的自绘
  • Cesium高级开发教程之四十三:缓冲区分析#线
  • Python毕业设计选题:基于协同过滤算法的儿童图书推荐系统_django
  • 第十一章:服务器信道管理模块
  • 验证环境中为什么要用virtual interface
  • 【R包】pathlinkR转录组数据分析和可视化利器
  • 常用空间数据结构对比
  • visual studio 2022 C++ OpenCV开发环境配置(详细教程)
  • 通过AI大模型 下达指令控制物理设备实现完全自动化
  • JavaScript 深浅拷贝全面解析
  • 《模拟器过检测教程:Nox、雷电、Mumu、逍遥模拟器 Magisk、LSposed 框架安装与隐藏应用配置》
  • JAVA多商户家政同城上门服务预约服务抢单派单+自营商城系统支持小程序+APP+公众号+h5
  • 如何通过JS实现关闭网页时清空该页面在本地电脑的缓存存储?