記一次RAG問題優(yōu)化——當(dāng)需要從多個向量庫中召回數(shù)據(jù)會面臨那些問題? 原創(chuàng)
“ 要想做好一個RAG系統(tǒng),需要在實(shí)踐中不斷地優(yōu)化和調(diào)整,很難做到一蹴而就。”
昨天遇到了一個小問題,就是在數(shù)據(jù)召回的時候有部分應(yīng)該召回的數(shù)據(jù)但沒有顯示出來;所以不確定到底是因?yàn)閿?shù)據(jù)本身沒有被召回,還是被召回之后由于某種原因被過濾掉了。
因此,今天就查了一下這個問題產(chǎn)生的原因,然后就發(fā)現(xiàn)了一些問題;目前系統(tǒng)中,不同的數(shù)據(jù)是分在多個不同的向量庫中,然后在召回的時候發(fā)現(xiàn)每個庫中都可以召回數(shù)據(jù),但理論上來說跟問題無關(guān)的庫中應(yīng)該找不到數(shù)據(jù)才對。
所以,就需要思考為什么會產(chǎn)生這種問題,這種現(xiàn)象說明了什么?
多庫召回問題
拋開標(biāo)量召回(傳統(tǒng)的字符匹配方式)方式,在相似度召回過程中,是通過把問題向量化,然后通過向量計算的方式匹配更近似的數(shù)據(jù),雖然向量計算的算法不同,但本質(zhì)上是一樣的。
所以,再回到今天這個問題,在使用相似度召回時,雖然不同庫中的數(shù)據(jù)不一樣;從理論上來說,在相似度計算時,其它庫中的計算結(jié)果應(yīng)該是與問題無關(guān)的。

但這里有個問題就是,一是可能由于我們前期文檔處理的質(zhì)量不好,導(dǎo)致進(jìn)行相似度計算時出現(xiàn)一定的偏差,因?yàn)槟壳跋嗨贫日倩氐拈撝翟O(shè)置的就比較低;第二個可能的原因就是,其它文檔中也有與問題相關(guān)的內(nèi)容,導(dǎo)致其數(shù)據(jù)被召回,這個產(chǎn)生的原因就是業(yè)務(wù)需求和設(shè)計有問題,導(dǎo)致文檔無法完全做到邏輯隔離。
但既然問題已經(jīng)產(chǎn)生了,那么就需要找到一個解決方案,面對這樣的問題應(yīng)該怎么處理?
我們都知道,相似度召回是RAG中非常重要的一個技術(shù)手段;但單純的相似度召回很難達(dá)到我們要求的文檔質(zhì)量,因此一般情況下在相似度召回之后還需要對召回的文檔進(jìn)行rerank重排序,目的就是過濾掉其中相關(guān)性不高的文檔。

因此,作者遇到這個問題之后就是采用先召回,后重排過濾的方式來剔除其它無關(guān)庫中的數(shù)據(jù);但由于不好控制閾值,因此還是有部分其它庫中的數(shù)據(jù)被保留了下來。
所以,這里就有了一個難點(diǎn)也是問題點(diǎn),怎么完全過濾掉無關(guān)文檔的影響?
如果僅僅只是通過提高閾值的方式,會導(dǎo)致部門正確的文檔被過濾掉,導(dǎo)致文檔不足,影響結(jié)果;而閾值太低就無法完全避免以上問題。
所以,遇到這種問題完全通過技術(shù)手段好像很難實(shí)現(xiàn);因此,我們只能換個思路從結(jié)構(gòu)來解決這問題,雖然說這并不一定是一個好的解決方案。

簡單來說就是,通過兩次召回和排序的方式來解決這個問題;第一次使用高閾值對數(shù)據(jù)進(jìn)行召回和重排序,找到其中最相關(guān)的幾條數(shù)據(jù)。然后,再拿到這幾條數(shù)據(jù)所在庫表,之后再在這個庫表中再次召回,而第二次召回的閾值相對可以放得低一點(diǎn);這樣通過兩次召回的方式,就能盡量避免以上問題的發(fā)生,雖然說還無法完全避免。
總之,在RAG中文檔召回的質(zhì)量直接響應(yīng)到大模型的表現(xiàn);但影響召回率和準(zhǔn)確率的原因又有很多,因此我們只能在具體的實(shí)踐過程中對系統(tǒng)進(jìn)行不斷的調(diào)整和優(yōu)化才可能達(dá)到我們想要的效果。
本文轉(zhuǎn)載自??AI探索時代?? 作者:DFires

















