引入上下文檢索(Contextual Retrieval):提升AI模型的精準度與效率 原創
01、概述
在當今的數字時代,人工智能(AI)模型的應用場景越來越廣泛,從客戶支持聊天機器人到法律分析助手,每一種應用都需要準確的背景知識。為了讓AI在特定環境中更有用,開發者通常會利用一種叫做“檢索增強生成(RAG)”的方法。這種方法通過從知識庫中檢索相關信息并將其附加到用戶的提示中,從而顯著提升模型的響應質量。然而,傳統的RAG方案在編碼信息時往往會丟失上下文,導致系統無法有效地檢索到相關信息。
在本文中,我們將介紹一種名為“上下文檢索”的新方法,該方法通過引入兩種子技術——上下文嵌入和上下文BM25,顯著提升了RAG中的檢索步驟。通過這種方法,我們的研究顯示,檢索失敗率減少了49%,而結合重新排序(reranking)時,失敗率甚至減少了67%。這一系列的改進直接提高了后續任務的表現。
02、什么是上下文檢索?
上下文檢索的核心在于在每個文本塊前加上特定的上下文說明,這樣即便是獨立的文本塊也能被準確理解。傳統的RAG方法通常將知識庫中的文檔拆分成較小的文本塊,這樣做雖然提高了檢索效率,但也可能導致每個塊缺乏足夠的上下文信息。例如,在處理財務信息時,如果我們收到這樣的問題:“2023年第二季度ACME公司的收入增長是多少?”相關的文本塊可能只包含“公司的收入比上一季度增長了3%”,但并沒有提到具體是哪個公司,或者增長的時間段。這使得檢索信息的準確性大打折扣。
上下文檢索解決了這個問題,通過將特定上下文附加到每個塊前,確保每個塊在被嵌入和創建BM25索引時都能包含足夠的背景信息。例如,對于我們提到的SEC文件,原始塊“公司的收入比上一季度增長了3%”可以被轉換為“這個塊來自于關于ACME公司2023年第二季度業績的SEC文件;上一季度的收入為3.14億美元。公司的收入比上一季度增長了3%?!?/p>
如何實施上下文檢索?
當然,手動為數以千計的塊注釋并不切實際。為了實施上下文檢索,我們可以借助Claude。我們編寫了一個提示,指導模型為每個塊提供簡潔的塊特定上下文,以提高檢索效果。具體的提示如下:
<document>
{{WHOLE_DOCUMENT}}
</document>
這里是我們希望定位的塊
<chunk>
{{CHUNK_CONTENT}}
</chunk>
請為該塊提供簡潔的上下文,以便改善該塊的檢索效果。只回答上下文,不要其他內容。
通過這個過程,我們可以確保上下文信息被有效地附加到每個文本塊上。
03、傳統RAG方法的局限性
傳統的RAG方法在檢索時可能會破壞上下文信息。由于文檔通常被拆分成較小的塊,如果這些塊單獨存在,可能會導致信息不完整。比如,在處理技術支持數據庫時,如果用戶查詢“錯誤代碼TS-999”,嵌入模型可能會找到關于錯誤代碼的一般信息,但卻可能錯過確切的“TS-999”匹配。這時,BM25這種基于詞匯匹配的老方法則能有效幫助找到確切的匹配。
04、提升檢索精度的方法
結合上下文嵌入和BM25,我們可以通過以下步驟顯著提升檢索的準確性:
- 將知識庫中的文檔拆分為較小的文本塊,通常不超過幾百個token;
- 為這些塊創建TF-IDF編碼和語義嵌入;
- 使用BM25找到基于精確匹配的最佳塊;
- 利用嵌入查找基于語義相似度的最佳塊;
- 結合并去重第三和第四步的結果,使用排序融合技術;
- 將前K個塊添加到提示中以生成響應。
通過這種方式,傳統的RAG系統可以更全面、準確地檢索信息,平衡了精確匹配與廣泛語義理解之間的關系。
05、進一步提升性能的重新排序
在傳統RAG中,AI系統在檢索知識庫時,可能會返回大量相關信息塊,有時甚至是數百個。這時,重新排序(reranking)成為一種常用的過濾技術,確保只有最相關的塊被傳遞給模型,從而提升響應質量并減少成本和延遲。
重新排序的步驟
- 進行初步檢索以獲取最相關的塊(使用了前150個塊);
- 將前N個塊及用戶的查詢通過重新排序模型;
- 使用重新排序模型為每個塊根據其與提示的相關性和重要性打分,然后選擇前K個塊(使用前20個塊);
- 將前K個塊傳遞給模型生成最終結果。
通過上下文檢索和重新排序的結合,可以進一步優化檢索的精度。實驗表明,結合上下文嵌入和BM25的重新排序將前20個塊的檢索失敗率減少了67%。
成本與延遲考慮
重新排序的一個重要考慮因素是對延遲和成本的影響,尤其是在需要對大量塊進行重新排序時。由于重新排序增加了運行時的額外步驟,雖然它是并行處理的,但不可避免地會增加一些延遲。因此,尋找重新排序更多塊以提高性能與減少延遲和成本之間的平衡是至關重要的。
06、結語
通過我們的實驗,我們發現以下幾條經驗總結:
- 嵌入加BM25的組合優于單獨使用嵌入;
- Voyage和Gemini是測試中效果最好的嵌入模型;
- 將前20個塊傳遞給模型比僅傳遞前10或前5個更有效;
- 為塊添加上下文顯著提高檢索準確性;
- 重新排序效果明顯優于不使用重新排序。
所有這些改進都是相輔相成的,最大化性能提升的方式是將上下文嵌入(來自Voyage或Gemini)、上下文BM25、重新排序步驟以及將20個塊添加到提示中結合在一起。
在未來,隨著知識庫的不斷擴展,上下文檢索將成為提升AI模型性能的重要工具,幫助開發者更高效地實現智能化的應用。希望本文能為你在AI開發和應用的道路上提供一些有價值的見解與啟發。
參考:
?
本文轉載自公眾號Halo咯咯 作者:基咯咯
