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

大模型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,又或者是模型自己来决策使用什么样的策略来提高它自己的准确性,否则又做会了传统的检索系统,大模型的能力会被掩盖

相关文章:

  • AE 安装包 绿色版(Win,Mac)(2018-2025)合集
  • conda env remove与conda remove
  • RuoYi使用$.modal.closeTab方法关闭当前tab标签页刷新另外一个tab标签页
  • Python毕业设计选题:基于Python的社区爱心养老管理系统设计与实现_django
  • 国漫工业化革命:AI如何让“一人团队”产出影视级动画?
  • Bend Labs弯曲传感器:柔性设计,多轴测量,高精度传感
  • 时间无关和时间相关的N-S方程
  • 凸函数和凹函数的定义怎么来的?
  • openssl的aes128_ECB加密解密运算实例
  • 【精】使用 Apktool 反编译 APK 并重新签名的详细教程
  • 工具MyBatis Generator(MBG)
  • 网页聊天室测试报告
  • ubuntu下r8125网卡重启丢失修复案例一则
  • 使用 Java 更新 Word 文档中的图表数据-超详细
  • Qt 对象树详解:从原理到运用
  • 多线程之旅:锁策略
  • C++中map容器常见用法(AI)
  • 游戏引擎学习第127天
  • Spring Boot 集成 EasyExcel 导出 Excel 文件【复杂表头】
  • python绘图之三维核密度图