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