改進RAG管道檢索文檔質量的五種方法 原創
RAG可以利用外部信息提升大型語言模型的性能,其性能依賴于檢索文檔的質量。除了標準檢索方法之外,還有4種方法可以提高所檢索文檔的質量。
檢索增強生成(RAG)是利用外部信息定制大型語言模型的重要技術之一。但是,RAG的性能取決于檢索到的文檔的質量。除了在RAG管道中使用的標準檢索方法之外,還有這4種技術有助于提高所檢索文檔的質量。
基于標準嵌入的檢索
RAG管道中使用的標準檢索方法是在用戶查詢和知識語料庫的嵌入之間進行相似性搜索。在這種方法中,可以通過以下步驟準備知識庫:
1.文檔首先被分解成更小的塊(例如500~1000個令牌)。
2.編碼器模型(例如SentenceTransformers或OpenAI嵌入)計算每個塊的嵌入。
3.嵌入存儲在向量數據庫中(例如Pinecone或Qdrant)。
圖1使用標準檢索方法檢索相關文檔
一旦向量數據庫準備就緒,那么RAG管道就可以開始向用戶查詢添加場景:
1.用戶向應用程序發送查詢。
2.在準備階段使用的編碼器模型計算查詢的嵌入。
3.將嵌入與向量數據庫中存儲的嵌入進行比較,以檢索最相似的文檔。
4.檢索到的文檔的內容作為場景添加到用戶提示中。
5.將更新后的提示信息發送給LLM。
圖2使用嵌入和向量數據庫檢索相關文檔
文檔和查詢域對齊
有時,包含有用信息的文檔在語義上與用戶的查詢不一致。因此,它們嵌入的相似性得分將非常低,RAG管道將無法檢索到它們。
文檔領域對齊可以通過修改提示的方式來解決,使其與相關文檔更加接近。文檔對齊的一種有效技術是假設文檔嵌入(HyDE)。
給定一個查詢,假設文檔嵌入(HyDE)會提示語言模型生成一個包含答案的假設文檔。這個生成的文檔可能包含虛假的細節,但它將具有知識語料庫中相關文檔附近的相關模式。在檢索階段,不是使用用戶查詢,而是將假設文檔的嵌入發送到向量數據庫,以計算與索引文檔的相似度得分。
圖3假設文檔嵌入(HyDE)框架
還有另一種方法可以改進查詢和文檔之間的一致性。在“查詢域對齊”中,使用LLM生成一組問題,每個文檔可以回答這些問題,并將它們的嵌入存儲在向量存儲庫中。在檢索過程中,將查詢的嵌入與問題的嵌入進行比較,并返回與最佳匹配對應的文檔。將問題與問題進行比較可以確保查詢和向量存儲之間更好地對齊。
混合搜索
傳統的RAG管道非常有效,但也有其局限性。嵌入模型在捕獲語義信息方面非常有效,但在尋找精確匹配時可能返回不精確的結果。為此,可以使用經典搜索算法或SQL查詢來增強RAG管道。
例如,可以使用像BM25這樣的算法,根據用戶查詢的關鍵字搜索文檔。BM25的優點是它會自動降低可能出現在大型語言模型(LLM)查詢中的常見詞的權重,并專注于最重要的關鍵詞。
或者,可以使用文本到SQL技術(??text-to-SQL techniques??),該技術使用LLM根據用戶的請求創建SQL查詢。然后可以將查詢發送到關系數據庫以檢索匹配的記錄。
可以組合由不同檢索方法檢索的文檔,刪除重復的文檔,并將它們作為場景添加到提示符中。這可以確保獲得不同檢索方法的值。
圖4基于嵌入檢索和BM25的混合搜索
場景檢索
在許多情況下,包含查詢答案的文檔塊缺少重要的信息。如果要處理被分成多個塊的大型文檔,這一點尤其正確。在這種情況下,用戶查詢的答案可能需要來自文檔多個塊的信息。
例如,知識語料庫可能包括X公司的季度收益,想回答這個問題:“X公司2024年第一季度的收入增長是多少?”
季度文件的其中一個部分可能包含正確的答案:“公司的收入與上一季度相比增長了3%。”但這部分并沒有指明是哪家公司,也沒有說明是指哪個時間段。
在這些案例下,可以通過在計算嵌入和索引之前向每個塊添加場景信息來增強檢索。最近,Anthropic AI引入了場景檢索。在上述示例中,包含答案的文檔塊前面將添加以下信息:“這個塊來自X公司的季度收益。它討論了該公司2024年第一季度的收益。”
重新排序
無論如何改進索引和檢索機制,都有可能遺漏某些提示的重要文檔。一個易于實施且廣受歡迎的解決方法是重新排序。
重新排序算法將文檔的全文與用戶查詢進行比較。雖然它們在對整個語料庫進行處理時效率不高,但可以非常快速地處理幾十篇文檔。因此,如果希望將n個文檔作為場景添加到LLM中,則可以檢索2n或3n個文檔,并通過重新排序算法運行它們,以檢索與查詢相關的前n個文檔。
??Cohere Rerank??? 是一個快速且易于使用的基于API的重新排序工具。如果想要一個開源的重新排序模型,可以使用??bge-reranker??????。
圖5 采用重新排序的RAG
注意事項
雖然使用先進檢索技術可以提高RAG管道的性能,但考慮權衡因素同樣重要。增加復雜性層次可能會導致計算和存儲成本上升,或者減慢檢索過程。例如,文檔域對齊需要在RAG流程中額外調用一次LLM,從而減慢流程并在大規模應用時顯著增加成本。采用經典搜索算法和重新排序為RAG增加了額外的處理步驟。場景檢索需要多次調用LLM來生成場景信息,從而增加了準備和索引步驟的成本。
通常從為任務設定預期準確率開始,然后確定額外的努力和成本是否值得回報。例如,在一個寫作輔助應用程序中,如果期望一位對該主題有全面了解的專家來審查和糾正整個答案,那么可能不需要通過向RAG管道添加額外的處理層來獲得幾個百分點的準確率提升。另一方面,如果正在開發一個應用程序,其中檢索文檔的準確性是一個很大的差異化因素,并且用戶不介意多等待幾秒鐘來獲得更準確的答案,那么添加額外的技術是有意義的。
原文標題:??4 ways to improve the retrieval of your RAG pipeline???????,作者:Ben Dickson
