怎么解決大模型知識庫的檢索問題,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
