RAG 檢索增強之 Reranker 重排序模型詳解!
什么是Reranker模型?
ReRanker模型是對RAG檢索返回的結(jié)果進行重新排序的模型。也就是下圖所示中2nd Retrieval的模型。具體來說,ReRanker模型在RAG Pipeline中扮演著第二階段的角色,即在初始檢索步驟之后,對檢索出的文檔塊chunks進行重新排序,以確保相關(guān)的文檔塊優(yōu)先被傳遞給LLM進行處理。
為什么需要Reranker模型?
在回答這個問題之前,我們先深入了解一下背后的問題。
RAG通過在大量文本文檔中進行語義搜索來工作,這些文檔數(shù)量可能達到數(shù)十億。為了實現(xiàn)大規(guī)模搜索的快速響應(yīng),我們一般采用向量搜索技術(shù),即將文本轉(zhuǎn)化為向量后,放入一個向量空間內(nèi),通過余弦相似度等度量標準來比較它們與查詢向量之間的相似度。
向量搜索的前提是需要向量。這些向量基本上是將文本背后的意義壓縮成固定維度的向量(如768或1536維),這一過程不可避免地會導(dǎo)致信息丟失。因此,常常會發(fā)現(xiàn),即便是排名靠前的文檔,也可能會遺漏一些關(guān)鍵信息。
如果較低位置的文檔包含了有助于LLM更好地形成回答的相關(guān)信息,這些信息就很容易被忽略。這該怎么辦?一個簡單的方法就是增加返回的文檔數(shù)量,即增加top_k值,并將它們?nèi)總鬟f給LLM。
我們此處關(guān)注的指標是召回率,即“我們檢索到了多少相關(guān)文檔”。值得注意的是,召回率衡量的是系統(tǒng)能夠找到的相關(guān)文檔的比例,而不考慮檢索到的文檔總數(shù)。因此,理論上通過返回所有文檔可以實現(xiàn)完美的召回率。
然而,這在實際操作中是不可行的,一是因為大語言模型(LLM)對輸入文本量有一定的限制,我們稱之為「上下文窗口」。即使像Anthropic 的 Claude這樣的模型擁有高達100K Token的巨大上下文窗口,也不能無限制地增加輸入文本量。二是當上下文窗口被過多的Token填滿時,大語言模型的回憶能力和執(zhí)行指令的效果都會受到影響。研究表明,過度填充上下文窗口會降低模型在該窗口中檢索信息的能力,從而影響生成回答的質(zhì)量。
為了解決召回率和LLM上下文窗口之間的矛盾,Reranker模型提供了一種有效的解決方案。具體步驟如下:
(1) 最大化檢索召回率
在初始檢索階段,通過增加向量數(shù)據(jù)庫返回的文檔數(shù)量(即增加 top_k 值),可以提高檢索的召回率。這意味著盡可能多地檢索相關(guān)文檔,確保不會遺漏任何可能有助于 LLM 形成高質(zhì)量回答的信息。
(2) 重新排序并篩選最相關(guān)的文檔
在第二階段,使用 Reranker 模型對檢索到的大量文檔進行> 重新排序。Reranker 模型能夠更精確地評估查詢與文檔的相> 關(guān)性,篩選出最相關(guān)的文檔,并減少最終傳遞給 LLM 的文檔> 數(shù)量。這一步驟的關(guān)鍵在于:
- 重新排序:根據(jù)查詢和文檔的相關(guān)性分數(shù)對文檔進行重新排序。
- 篩選:只保留最相關(guān)的文檔,確保這些文檔在 LLM 的上下文窗口內(nèi)。
(3) 確保 LLM 處理高質(zhì)量信息
通過上述兩步,Reranker 模型不僅提高了檢索的召回率,還確保了傳遞給 LLM 的文檔是最相關(guān)的。這使得 LLM 能夠基于高質(zhì)量的信息生成更準確、更有價值的回答,同時避免了上下文窗口過載的問題。
Reranker模型的原理
重排序模型(也被稱為Cross-Encoder)是一種模型,能夠針對一個查詢和文檔對,輸出它們的相似度分數(shù)。我們利用這個分數(shù)對文檔按照與查詢的相關(guān)性進行重新排序。
其本質(zhì)是一個包含兩階段的檢索系統(tǒng):
- 第一階段:快速檢索(Vector DB或Bi-Encoder檢索):使用雙編碼器(Bi-Encoder)或稀疏嵌入模型從大數(shù)據(jù)集中快速提取一組相關(guān)文檔。這一階段的核心目標是高效地縮小搜索范圍,確保能夠在短時間內(nèi)處理大規(guī)模數(shù)據(jù)集。雙編碼器將查詢和文檔分別編碼為向量,并通過余弦相似度等度量標準計算它們的相似性。
- 第二階段:精確重排序(Reranker / Cross-Encoder):使用重排序模型(Reranker)對第一階段提取的文檔進行重新排序。Reranker模型能夠更精確地評估查詢與文檔的相關(guān)性,輸出它們的相似度分數(shù),并根據(jù)相似度分數(shù)對文檔進行重新排序,返回最相關(guān)的前K個文檔。這一階段的目標是提高檢索結(jié)果的相關(guān)性,確保最相關(guān)的文檔優(yōu)先傳遞給大語言模型(LLM)。
為什么采用兩階段策略?
是因為從大數(shù)據(jù)集中檢索少量文檔的速度遠快于對大量文檔進行重排序。簡而言之,重排序器處理較慢,而檢索器速度快。
盡管重排序器的處理速度較慢,但我們?nèi)匀贿x擇使用它們,關(guān)鍵在于其精確度遠超過嵌入模型。
雙編碼器(Bi-Encoder)精度較低的根本原因在于:
- 雙編碼器將文檔和查詢分別編碼為固定維度的向量(如768或1536維),這一過程不可避免地會導(dǎo)致信息丟失。文本的豐富語義被壓縮成一個低維向量,無法完全保留原始文本的所有潛在含義。
- 雙編碼器在用戶提出查詢之前就已經(jīng)創(chuàng)建了嵌入,因此它對查詢的具體內(nèi)容一無所知。這意味著它只能生成一個泛化的、平均化的含義,而無法針對具體查詢進行優(yōu)化。這種靜態(tài)的嵌入方式限制了其在處理復(fù)雜查詢時的表現(xiàn)。
而重排序器(Reranker / Cross-Encoder)能夠在大型Transformer中直接處理原始文本信息,避免了信息壓縮帶來的損失。它可以直接分析查詢和文檔的原始文本,確保所有相關(guān)信息都能被充分考慮。
然而,盡管重排序器具有更高的精度,但它也有代價,就是需要更多的時間來生成相似度分數(shù)。
因此在實際應(yīng)用中,通常會結(jié)合兩者優(yōu)勢,采用兩階段檢索策略:
- 第一階段:使用雙編碼器快速檢索出一批候選文檔。
- 第二階段:使用重排序器對這批候選文檔進行重新排序,確保最終返回的文檔是最相關(guān)的。
這種組合方式既能保證檢索的速度,又能提高結(jié)果的準確性。例如,在處理4000萬條記錄的情況下,如果僅使用重排序器,可能會需要超過50小時來返回一個查詢結(jié)果;而使用雙編碼器和向量搜索,則可以在不到100毫秒內(nèi)完成初步篩選。隨后,再用重排序器對篩選出的少量文檔進行精排,既提高了效率又保證了質(zhì)量。