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