怎么解决大模型知识库的检索问题,RAG检索增强之ReRank(重新排序) 原创
“ 面临日益增长的海量数据,怎么高效和准确的检索数据一直是一个值得思考的问题 ”
对大模型应用有所了解的人应该都知道RAG技术——检索增强,本公众号前前后后也写过好几次关于RAG的文章;但在实际的企业应用中,RAG还是面临着各种各样的问题,比如效率问题,准确度问题等等。
这些问题虽然在一些应用场景中并没有什么影响,但在某些场景中却是不可接受的;因此就有很多人想方设法的优化RAG技术,比如使用更加高效和准确的检索算法,更加合理的数据结构,优化提示词,关键词等。
但总的来说有些时候还是差强人意,而随着RAG技术的发展,ReRank技术被提了出来。ReRank技术可以说是对RAG技术的增强,虽然它还无法完全解决RAG存在的问题,但优中选优ReRank是比RAG更好的一种检索方式。
ReRank——重新排序
什么是ReRank技术?
ReRank 中文翻译过来就是重新排序技术,那么什么是重新排序技术,以及为什么需要重新排序技术?
在之前的检索系统中,通常是通过字符匹配的方式进行数据检索;虽然后来有了ES这种检索中间件,采用了分词以及相似度搜索的方式实现了更加高效的数据检索;但总体来说其效果也不是太好,特别是在语言分析方面。
虽然随着大模型技术的出现,基于语义的向量检索方式大行其道;但怎么从大量数据中高效与准确的检索出所需的数据,依然是一个亟待解决的问题。
同样,外部知识检索作为对大模型能力缺陷的补充,是目前企业应用中最常见的解决方案;但面临着日益复杂的应用环境,以及用户端的快速响应,RAG技术目前仍然饱受诟病,特别是RAG技术看起来入门很容易,但想深入确实很难。
RAG技术所面临的问题是什么?
RAG技术所面临的两个主要问题就是检索的效率和准确性;为什么会出现这种问题?
不论是使用传统的检索方式,还是使用embedding向量检索的方式,面临大量数据RAG技术依然力不从心。
一旦数据达到一定规模或者用户对数据准确性要求较高,RAG技术就很难满足用户的需求。当然,这是从应用的角度得出的结论,那么从技术角度呢?
比如说,面临一个数十亿甚至上百亿数据量的知识库,基于RAG技术的检索方式是怎么实现的?
在检索方面刚开始使用的就是最传统的暴力搜索算法,什么是暴力搜索算法?
所谓的暴力搜索就是,遍历全部数据,然后通过字符匹配或相似度搜索以及向量搜索等方式查询出所需要的数据。
但有一点算法基础的人应该都知道,虽然八大排序算法在小规模数据中具有很大的优势;但在大量数据中八大排序完全没什么用。
原因是什么?
原因就是效率太低。
虽然后期通过优化,比如说通过数据治理的方式,把不同的数据根据某种规则进行分仓,或者构建索引加快检索速度;但等到索引大量增长的时候,依然会出现很多问题。
所以,现在更加高级的检索方式,ReRank就出现了。
ReRank的技术实现原理是什么?
ReRank技术就像一个筛子,通过多筛几次的方式检索到所需要的数据;第一遍通过快速检索等方式,从海量的数据中快速检索出所需要的数据;比如说全世界的知识作为一个数据库,这时你需要查询与孙悟空相关的数据。
这时ReRank技术就用最快的方式,从这个数据库中检索到所有与孙悟空有关的内容,不论是齐天大圣,还是孙猴子等等,甚至与其无关的其它三大名著的内容。
为什么要这样做?
这样做的原因就是,面对如此庞大的数据库,遍历所有数据显然是不可能的,即使技术上能实现,时间上也不允许。
所以,第一遍就通过最快速的方式从中检索到与任何与孙悟空有关的数据;比如说检索到了一百万条数据。
然后再从这一百万条数据中再次检索,也就是再过一遍筛子;比如使用语义检索,从中匹配出相关度更高的数据。
最后通过多次筛选,通过精确匹配等方式,拿到最终的数据。
这样做有一个很明显的好处就是,虽然遍历一百万数据也很难;但至少比遍历全部数据要简单的多。
这也是分治思想在数据检索中的一种应用;这就像我们选兵员一样;先把全国的青壮年选出来,然后再在里面优中选优,这样选出来的士兵素质肯定会更好,也会更快。
本文转载自公众号AI探索时代 作者:DFires