關(guān)于RAG應(yīng)用中怎么高質(zhì)量的進(jìn)行數(shù)據(jù)召回——召回策略的研究 原創(chuàng)
“ 數(shù)據(jù)召回是RAG技術(shù)的重要領(lǐng)域,而不同的召回策略甚至?xí)a(chǎn)生完全不同的效果?!?/strong>
RAG技術(shù)的核心原理很簡(jiǎn)單,本質(zhì)上就是在外部維護(hù)一個(gè)資料庫,在進(jìn)行大模型問答之前,先從資料庫中找到相關(guān)的內(nèi)容,然后一起輸入到大模型中。
但由于文檔的復(fù)雜性,在進(jìn)行文檔處理時(shí)很難真正做到高質(zhì)量的數(shù)據(jù)處理;因此,在做數(shù)據(jù)召回時(shí)就會(huì)面臨著各種各樣的問題。
所以,怎么進(jìn)行高質(zhì)量的數(shù)據(jù)召回,就成為RAG必須要研究的一個(gè)課題;而今天,我們就來簡(jiǎn)單介紹一下常見的幾種召回策略。
召回策略
RAG的難點(diǎn)主要有兩個(gè),一個(gè)是前期的文檔處理;其次就是數(shù)據(jù)的召回;由于大模型本身無法分辨輸入到模型中的文檔質(zhì)量,因此關(guān)于數(shù)據(jù)的召回只能進(jìn)行人為的控制,而人為控制的方法只能通過技術(shù)手段來進(jìn)行約束。
因此,在不考慮前期文檔處理的情況下,RAG應(yīng)用中最重要的一點(diǎn)就是解決數(shù)據(jù)召回的問題。
召回的本質(zhì)其實(shí)很簡(jiǎn)單,就是快速準(zhǔn)確地從外部資料庫中找到與問題相關(guān)的數(shù)據(jù);比如說,用戶的問題是怎么學(xué)習(xí)人工智能?
然后就需要從大量的外部數(shù)據(jù)中快速找到與人工智能相關(guān)的內(nèi)容,包括,書籍,視頻,論文等多種不同的形式。
舉例來說,以目前世界上現(xiàn)存的知識(shí)體系為例;涉及的領(lǐng)域沒有一千也有八百;而一個(gè)人不可能什么領(lǐng)域都能涉及,什么領(lǐng)域都懂;因此,如果有一個(gè)人想快速入門一個(gè)領(lǐng)域應(yīng)該怎么辦?
首先,他可以通過互聯(lián)網(wǎng)搜索任何他想從事的領(lǐng)域的內(nèi)容資料;但現(xiàn)在的問題是,世界上的資料,文檔那么多,搜索引擎怎么知道怎么找到與之相關(guān)的數(shù)據(jù)?
這就是搜索引擎要解決的事情,而RAG需要解決的也是這個(gè)事情。
RAG是基于神經(jīng)網(wǎng)絡(luò)模型做的語義性檢索,因此其與傳統(tǒng)的字符匹配方式檢索有很大的區(qū)別,比較直觀的體現(xiàn)就是向量計(jì)算;因此基于RAG系統(tǒng)有專門的向量數(shù)據(jù)庫進(jìn)行向量檢索。
當(dāng)然,并不是說RAG只能使用向量數(shù)據(jù)庫,RAG的本質(zhì)是快速找到相關(guān)數(shù)據(jù),但RAG不會(huì)在意你的數(shù)據(jù)是使用向量數(shù)據(jù)庫存儲(chǔ)還是傳統(tǒng)的關(guān)系數(shù)據(jù)庫存儲(chǔ)。也就是說RAG和數(shù)據(jù)持久化是無關(guān)的,或者說數(shù)據(jù)持久化只是RAG的一部分。
召回策略
關(guān)于RAG的召回策略有多種實(shí)現(xiàn)方式,最簡(jiǎn)單的就是基于傳統(tǒng)的字符匹配和搜索技術(shù),以及目前比較火的語義檢索方式——向量計(jì)算。
什么是語義檢索?
所謂的語義就是指,你不但要聽到我所說的話,你還要能聽懂我所說的意思。
比如說,問你吃飯了嗎?這可能只是一種問候語,也可能是他想請(qǐng)你吃飯,順便聊聊天,在不同的環(huán)境下其語義是不同的。
RAG的主要召回策略有以下幾種:
- 基于傳統(tǒng)的字符匹配和分詞檢索
- 基于向量計(jì)算的語義檢索
- 數(shù)據(jù)重排技術(shù)——Rerank
- 問題拆分技術(shù)
- 多路召回
基于傳統(tǒng)的字符匹配和分詞檢索
在大模型出現(xiàn)之前,搜索引擎主要采用的就是字符匹配和分詞技術(shù);常見的技術(shù)載體就是關(guān)系型數(shù)據(jù)庫和ES這種分詞檢索工具。
在某些業(yè)務(wù)場(chǎng)景下,RAG依然會(huì)使用這些技術(shù),原因就在于其技術(shù)體系比較成熟,解決方案也比較完善,并且效果也不錯(cuò)。
基于向量計(jì)算的語義檢索
基于向量計(jì)算的語義檢索,常見的就是向量數(shù)據(jù)庫或者支持向量計(jì)算的傳統(tǒng)關(guān)系型數(shù)據(jù)庫;其本質(zhì)是通過Embedding(嵌入)模型,把文本轉(zhuǎn)化成向量,然后通過歐式距離或余弦計(jì)算等方式,計(jì)算其相似度。
數(shù)據(jù)重排技術(shù)——Rerank
數(shù)據(jù)重排也是基于向量計(jì)算的一種方式,其原理是通過把第一步檢索到的結(jié)果通過重排技術(shù),找到其“分?jǐn)?shù)”也就是相似度最高的數(shù)據(jù)。
舉例來說,你搜索孫悟空,可能會(huì)得到很多與之相關(guān)的內(nèi)容,比如說介紹四大名著的內(nèi)容,介紹三打白骨精的內(nèi)容,亦或者大鬧天宮的內(nèi)容;
而你想了解的可能只是大鬧天宮,或者三打白骨精,這時(shí)介紹四大名著的內(nèi)容可能就不需要了。
而通過重排序就可以實(shí)現(xiàn)召回?cái)?shù)據(jù)的二次篩選,達(dá)到更加精確的數(shù)據(jù)匹配。
問題拆分技術(shù)
問題拆分原理很簡(jiǎn)單,本質(zhì)上就是利用大模型來分析你的問題,然后給出幾個(gè)相似的問題;然后通過這幾個(gè)相似問題去進(jìn)行召回,這樣就可以提高召回?cái)?shù)據(jù)的精度。
比如說,用戶問題是我想去旅游,你有什么建議嗎?
這時(shí)大模型就可以根據(jù)這個(gè)問題幫你拆分幾個(gè)相似性的問題;比如說,我想去一個(gè)風(fēng)景優(yōu)美的地方;我想找個(gè)地方放松一下心情;亦或者我想去看看祖國的大好河山。
通過問題拆分的方式,用戶就可以得到多個(gè)相似性的問題,這樣就可以從更多的維度去向量數(shù)據(jù)庫或者其它地方召回更多相關(guān)的問題;之后再通過重排序技術(shù),來找到其中最相關(guān)的內(nèi)容。
多路召回
多路召回的原理也很簡(jiǎn)單,就是通過多種不同的策略,或者模型或渠道,檢索出多個(gè)與之相關(guān)的內(nèi)容;其有點(diǎn)類似于問題拆分的思想,但區(qū)別是問題拆分是從問題入手,而多路召回是從檢索策略或檢索途徑入手。
舉一個(gè)比較形象的例子就是,如果你想了解某個(gè)行業(yè);你可以選擇從公網(wǎng)上查找數(shù)據(jù),也可以選擇找專門的行業(yè)論壇或社區(qū)了解內(nèi)容;還可以通過找專業(yè)人士交談來了解。
而這種通過多種不同的方式,以及不同的渠道進(jìn)行數(shù)據(jù)召回的方式就是多路召回。
當(dāng)然,召回技術(shù)并不僅僅只限于RAG領(lǐng)域,在傳統(tǒng)的搜索引擎領(lǐng)域,召回技術(shù)同樣扮演著重要角色;因此,RAG技術(shù)也同樣可以應(yīng)用于搜索引擎領(lǐng)域。
當(dāng)然,這里僅僅只是介紹一下簡(jiǎn)單的,比較常見的召回策略;在RAG的具體實(shí)踐中,在不同的場(chǎng)景下也會(huì)存在一些特殊的召回方式和策略;比如說數(shù)據(jù)分類,建立索引等方式,以及知識(shí)圖譜等新型技術(shù)。
最重要的是,你要理解這些召回方式并不是互斥的;在很多場(chǎng)景下都是把這些策略進(jìn)行組合使用,以此達(dá)到更加精準(zhǔn)的召回質(zhì)量;特別是在大數(shù)據(jù)量的情況下,完全基于向量相似度計(jì)算的方式,其對(duì)算力和響應(yīng)的要求,是不被允許的。
因此,在大數(shù)據(jù)量的情況下,先進(jìn)行快速的非精確匹配,然后再進(jìn)行更加精確的相似度計(jì)算是一種常見的召回方式。
本文轉(zhuǎn)載自公眾號(hào)AI探索時(shí)代 作者:DFires
原文鏈接:??https://mp.weixin.qq.com/s/plrG1-UsjxygOazV7hNsPw??
