LLM之RAG理论(七)| 高提升RAG检索的四种方法

news2024/11/16 7:30:50

​      RAG两大核心组件:检索生成。本文将总结四种提高RAG系统检索质量的技术:1)子问题查询引擎(来自LlamaIndex),2)RAG-Fusion、3)RAG-end2end和4)LoRA微调

一、LLM对问题进行分解

       RAG系统根据用户的查询使用LLM生成自然语言答案。有时候直接对原问题生成答案效果不佳,这时我们可以通过要求LLM首先将用户的查询分解为子问题,然后,文档检索器可以检索每个较小的问题,这样可以提供更丰富的上下文。

接下来就有一下问题:如何合并这样子查询的答案呢?

       简单地说,我们可以将检索到的文档集连接起来,并在生成答案时将它们作为上下文提供给LLM。我们可能完全不知道我们展示检索到的文档的顺序。或者,我们可以做得更好。

       在LlamaIndex中提供了Sub Question Query Engine[2]来提升RAG检索性能。对于每个检索到的文档集,都会生成相应子问题的答案。然后,LLM会根据这些子答案,而不是检索到的文档本身,得出最终答案

二、RAG-Fusion

       RAG-Fusion[3]仍然将文档作为上下文提供给LLM。首先,它根据每个文档出现的回忆集数量对文档进行排序。这种技术被称为Reciprocal Rank Fusion (RRF)。RRF假设:

  • 与更多子问题相关的文档更有助于回答原始查询。(反例是一篇与每个问题都相关的通用文章,但不够具体,无法为最终答案提供任何价值。)
  • LLM可以用更大的权重对排名靠前的结果进行优先级排序,而不是将列表视为无序集。

       RRF允许人们通过不同的搜索方法来组合结果,这种模式通常被称为“混合搜索”。

  • Azure AI Search[4]使用它来聚合来自传统的逐字文本搜索和基于嵌入的矢量搜索的召回集。
  • 还有一个例子是Obisidian-Copilot[5],它是笔记应用Obsidian[6]的一个插件,它将基于BM25的搜索(通过OpenSearch)与语义搜索相结合。
  • 如果想自己实现一个,矢量数据库提供商Pinecone有一个教程[7]可以参考。

提供给RRF的各种搜索方法的不同之处仅在于它们如何到达它们的回忆集,而不是具有可供选择的不相交的文档集。至关重要的是,文档首先必须有机会出现在单独的回忆集中,然后才能通过相互出现来重新排序。

三、RAG-end2nd

       RAG的一个主要优势是“不需要训练任何模型”,它可以使用现成的嵌入模型和LLM来构建。

       RAG-end2nd[8]提出了Dense Passage Retrieval(DPR;“RAG”中的“R”)方法,对编码器(比如BERTs)进行一些微调,性能超过BM25 25%。

四、LoRA

       LoRA是大模型微调的技术之一,它来自论文《LoRA: Low-Rank Adaptation of Large Language Models》[9],基本原理是冻结大模型参数,在原始模型中添加少量的可训练参数AB矩阵来适应特定领域知识,由于微调的参数量较少,比较适合低资源的场景和用户。

五、总结

       在这篇短文中,回顾了四种提高RAG管道相关性的技术。其中两种依赖于分解原始查询并利用LLM的生成能力,而另外两种则致力于利用特定领域的知识进一步增强模型本身。

参考文献:

[1] https://lmy.medium.com/four-ways-to-improve-the-retrieval-of-a-rag-system-91626ab2ad65

[2] https://docs.llamaindex.ai/en/stable/examples/query_engine/sub_question_query_engine.html

[3] https://github.com/Raudaschl/rag-fusion

[4] https://learn.microsoft.com/en-us/azure/search/hybrid-search-overview

[5] https://eugeneyan.com/writing/obsidian-copilot/

[6] https://obsidian.md/

[7] https://www.pinecone.io/learn/hybrid-search-intro/

[8] https://arxiv.org/abs/2210.02627

[9] https://arxiv.org/abs/2106.09685

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

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

相关文章

司铭宇老师:门店经理培训:如何成为一位卓越的门店经理

门店经理培训:如何成为一位卓越的门店经理 在激烈的市场竞争中,门店经理作为门店的灵魂人物,肩负着提升门店业绩、维护品牌形象、带领团队成长等重要职责。本文将为您解析如何成为一位卓越的门店经理,助力您的职业生涯迈向新高峰…

5个程序员可以接私活的平台和一些建议

22年之前我从没有接触过程序员外包接单,也没有任何的私活接单经验,就纯纯看自己瞎摸索,通过Google搜索,在各类程序员私活接单平台上摸爬滚打,硬是杀出一条血路,从一开始的年入3k到现在每月稳定收入1w&#…

【排序算法】C语言实现归并排序,包括递归和迭代两个版本

文章目录 🚀前言🚀归并排序介绍及其思想🚀递归实现🚀迭代实现 🚀前言 大家好啊!阿辉接着更新排序算法,今天要讲的是归并排序,这里阿辉将讲到归并排序的递归实现和迭代实现&#xff…

AI服务器行业分析:预计2023年全球市场规模将达211亿美元

AI服务器需求暴增,机构指出,AI时代浪潮汹涌,海量数据催生庞大的算力需求,带动AI服务器需求量与日俱增,用于服务器内、外部数据传输等接口芯片也随之攀升。 ChatGPT大火后,各大科技企业纷纷发力AI大模型&…

Vue的生命周期方法

beforeCreate 在实例初始化之后,数据观测(data observe)和 event/watcher 事件配置之前被调用。在当前阶段 data、methods、computed 以及 watch 上的数据和方法都不能被访问。 created 实例已经创建完成之后被调用。在这一步,实…

坚持刷题 |对称二叉树

文章目录 题目考察点代码实现实现总结扩展用迭代的方式判断是否为对称二叉树递归和迭代的对比可能的扩展提问 坚持刷题,老年痴呆追不上我,今天真的好累,就不难为自己了,刷个简单级别的吧:对称二叉树 题目 101.对称二叉…

大数据开发之SparkSQL

第 1 章:spark sql概述 1.1 什么是spark sql 1、spark sql是spark用于结构化数据处理的spark模块 1)半结构化数据(日志数据) 2)结构化数据(数据库数据) 1.2 为什么要有sparksql hive on s…

如何开发一款独立游戏?

如何开发一款独立游戏? 2023年,Steam平台共发行了14533款游戏,我们可以清晰地看到独立游戏市场的蓬勃发展和不断增长的活力。我们从SteamDB数据统计网站获悉,2023年Steam平台的游戏发行数量比2022年的12562款增加了1971款&#xf…

理想汽车大模型算法工程师面试,被问的瑟瑟发抖。。。。

最近我们技术群的一位小伙伴,分享了他面试理想汽车大模型算法工程师的经历与经验。 今天整理后分享给大家,如果你对这块感兴趣,可以文末加入我们的技术&面试讨论群 一面(1.5h,感觉有点难) 自我介绍&…

推荐收藏!48道数据分析师高频面试题汇总!

大家好,最近很多小伙伴私信我,讲一下数据分析的面试题,今天给大家整理了48道数据分析师面试时被频繁问到的题目,找数据分析岗位的同学一定要码住认真看。 想了解最新的面试动态、最新高频考点、技术交流的同学,可以文…

Windows和Linux访问不了GitHub的解决方法

一、Windows访问不了GitHub 问题描述 使用Windows访问GitHub时,出现如下情况,显示无法访问。 解决方案: 打开域名查询网站:https://tool.chinaz.com/dns 输入GitHub的域名,点击立即检测。 出现如下页面&#xff0c…

RK3399平台开发系列讲解(USB篇)BusHound 工具使用介绍

🚀返回专栏总目录 文章目录 一、BusHound简介二、BusHound的下载三、BusHound设备窗口四、BUSHound发送命令窗口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 BusHound软件是由美国perisoft公司研制的一种专用于PC机各种总线数据包监视和控制的开发工具软件,其名…

2024年学鸿蒙开发有前途吗?

随着科技的不断发展和智能设备的普及,鸿蒙系统作为华为自主研发的操作系统,正逐渐受到市场的关注。2024年,学鸿蒙开发是否有前途,成为了很多开发者和学生关心的问题。本文将从多个角度分析鸿蒙系统的发展前景,以及学习…

JavaScript入门分享

文章目录 一、JavaScript简介二、第一个JavaScript案例三、在浏览器中执行JavaScript代码四、JavaScript的输出方法五、JavaScript的语法六、JavaScript的数据类型七、JavaScript的定义变量/函数八、热门文章 一、JavaScript简介 JavaScript是一种高级编程语言,用于…

esxi配置NTP自动对时与手动对时

目录 背景解法配置NTP服务器立即与NTP服务器同步时间 附:几个常用的NTP服务器列表 背景 VMware ESXi 6.7运行了一段时间后偶然发现系统时间与标准时间有5分钟左右的差异,于是研究了下如何自动对时以及用命令行立即对时。 解法 配置NTP服务器 首先在管…

手把手教你使用MDK仿真调试

当今的嵌入式系统开发领域中,高效的调试工具对于工程师来说至关重要。它们能够极大地减少开发周期中的错误追踪时间,并加速产品的上市时间。MDK作为业界领先的嵌入式开发工具之一,其内置的调试功能被广大开发者所赞誉。这些功能不仅提供了对代…

PostgreSQL 是不是大小写敏感

如果你踩过 MySQL 的大坑的话就知道:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。 如果你稍加不注意就会出现在本机开发的程序运行一切正常,发布到服务器行就出现表名找不到的问题。 这是我们前一个项目遇到的巨大问题…

Python中函数的参数有哪些?

目录 ①必选参数 ②默认参数 ③可变参数 ④关键字参数 ⑤命名关键字参数 学习python函数部分的时候,发现除了正常定义的必选参数外,还使用默认参数、可变参数、关键字参数和命名关键字参数,在这里理清楚这些参数具体是怎么回事吧&#x…

nvm 配置淘宝镜像失效,以及安装node后 npm-v 无效

win11 nvm版本 1.1.4 和1.1.7和1.1.12(目前最新版本24年 一月二十三日) 以上nvm版本都会出现一下问题, 从https://github.com/coreybutler/nvm-windows/releases 下载nvm安装包如下图 傻瓜式安装后,不用去配置环境变量&#…

动态IP代理与静态IP代理:详细区别与比较全析

动态代理IP和静态代理IP在跨境业务中具有非常广泛的实用性,但仍然有非常多小白选手并不清楚什么场景适合用哪一类IP,哪一中代理IP类型更适合你?其实他们各有其优点和缺点,为了使您的网络营销、社媒推广、跨境电商运营、网络抓取尽…