關于相似度計算和Rerank重排序的區別和作用 原創
“ 相似度召回的作用是快速從海量文檔中召回相關文檔,而rerank重排序的作用是在這些相關文檔中找到相關性最高的文檔。”
這段時間在完成基于RAG的聊天對話系統之后,開始優化各個環節的功能;這時才真正發現,RAG做出來不難,想做好真的不容易。
這次在優化上下文結構時發現了一個問題,那就是相似度計算和重排序;在剛開始對相似度計算和重排序的理解就是,通過相似度進行數據召回,然以后再通過重排序找到其中最相關的內容。
這樣理解雖然不能說有錯,但理解的卻不夠透徹;在系統開發的過程中曾經遇到過一個問題,那就是召回率不足;很多相關的數據無法召回,至于原因么有很多,但主要原因是處理的文檔質量不高,導致相似度召回時,其閾值特別低。

因此,為了解決這個問題,暫時就通過降低閾值,并去掉重排序的方式來提高召回率;因為,很多時候即使通過相似度或其它方式召回數據,但最終在重排序時會被過濾掉。也就是說召回的相似度高的數據,和問題關聯度并不一定高。
相似度召回和重排序
之所以注意到相似度召回和重排序的原因是,在多個向量庫中進行相似度召回的時候發現,明明在這個向量庫中并沒有與問題相關的數據,但事實上卻召回了一部分數據,并且這部分數據的相似度值比原文檔所在的向量庫中的值更高。
也就是說,在本應該有問題相關文檔的庫中召回的數據,還沒有其它庫中無關數據的相似度高;這就是一個很奇怪的問題,到底是因為文檔處理的質量太低,還是因為嵌入的時候有問題。

因此,面對這種情況肯定需要對召回的文檔進行重排序,以篩掉無關的數據;因此,在使用rerank模型進行排序時發現,那些其它庫中相似度高的數據都被篩掉了,而原本庫中相似度低的數據反而留了下來;當然這樣才屬于正常。
但這個無關數據的相似度更高的問題還是沒有被解決;而在相似度召回中,有好幾種相識度計算的方式,比如說余弦相似度,內積,歐式距離等多種計算方式。
因此面對不同的業務場景和數據類型,選擇合適的相似度計算方式,也能間接增強召回的準確度。
Reranker與embedding模型的區別
盡管Reranker和Embedding模型都用于信息檢索系統,它們的定位和功能卻是不同的。
Embedding模型主要用于初步篩選文檔。它將文本轉換為向量表示,并計算這些向量之間的相似度,從而篩選出一組可能相關的候選文檔。Embedding模型的優勢在于它的計算效率高,適合處理大規模數據集。

Reranker則用于對Embedding模型篩選出的候選文檔進行精細排序。Reranker通?;趶碗s的深度神經網絡,能夠更好地理解文本的上下文和細微差異,從而提供更高的排序精度。
簡單來說,Embedding模型負責“找出一批可能相關的候選文檔”,而Reranker負責“在這些候選文檔中找出最相關的,并將它們按相關性排序”。
Reranker能否直接用于檢索?
理論上,Reranker可以直接用于檢索,但在實際應用中并不常見。這是因為Reranker的計算復雜度較高,直接使用它對整個數據集進行排序會導致極高的計算成本,難以滿足實時性要求。因此,通常我們會先用Embedding模型進行初步篩選,將文檔集合縮小到一個合理的范圍,然后再使用Reranker進行精細排序。
總結
結合Embedding模型和Reranker的優勢,實現了效率和準確性的平衡。Embedding模型負責快速篩選候選文檔,而Reranker則通過更細致的分析對這些文檔進行精準排序,雖然其計算開銷較高,但它在提升排序準確性方面的作用不可忽視。
本文轉載自??????AI探索時代?????? 作者:DFires

















