AI News HubLIVE
站內改寫1 分鐘閱讀

在RAG中實現混合語義-詞彙搜尋

本文介紹瞭如何在檢索增強生成(RAG)系統中構建混合搜尋策略,結合BM25詞彙搜尋與語義搜尋,並透過互惠排名融合(RRF)合併排名。詳細說明了Python實現步驟,包括資料集載入、BM25和語義搜尋函式的編寫,以及混合搜尋的整合。實驗表明,混合搜尋在小型資料集上也能取得合理結果,優於單獨使用任一方法。

來源Machine Learning Mastery作者: Iván Palomares Carrascosa

在構建現代檢索增強生成(RAG)系統時,從原型過渡到生產就緒解決方案的關鍵步驟之一是實施混合搜尋策略。儘管基於稠密向量或嵌入的語義搜尋在理解語義、同義詞和上下文方面表現出色,但基於關鍵詞的詞彙搜尋(如BM25)能夠覆蓋語義搜尋忽視的一個小盲點。因此,將兩者結合是提升RAG系統檢索機制的完美方案。

本文將透過一個溫和的編碼示例,逐步引導你實現混合搜尋策略。首先,需要安裝必要的Python庫:rank_bm25(BM25演算法實現)、sentence-transformers(用於生成文本嵌入)和requests(用於獲取資料集)。

接下來,載入資料集。示例使用了一個包含九個關於亞洲國家的文本文件的小型資料集。將文件儲存為列表後,開始分階段實現混合搜尋。

第一階段:詞彙搜尋(BM25)。使用rank_bm25庫對每個文件進行分詞,並計算查詢與文件的詞彙相關性分數,然後返回排名靠前的文件。

第二階段:語義搜尋。使用sentence-transformers中的'all-MiniLM-L6-v2'模型將文件和查詢編碼為嵌入向量,然後透過餘弦相似度計算語義相關性,同樣返回排名靠前的文件。

第三階段:融合。使用互惠排名融合(RRF)將兩個排名列表合併。RRF透過為每個文件分配一個基於其排名位置的總分(1/(k+rank)),最終選擇總分最高的文件。這裡使用標準常數k=60。

最後,透過一個示例查詢“哪個國家最以稻田和水田聞名?”測試該系統。語義搜尋返回越南、韓國、泰國;BM25返回印度尼西亞、日本、菲律賓;混合搜尋返回越南、泰國、印度尼西亞。雖然結果並不完美,但考慮到僅九個文件的資料集,表現合理。

本文強調了在生產環境中擴充套件RAG系統時,不應僅依賴語義搜尋。混合搜尋能夠提供更全面的檢索結果,確保系統的健壯性和可靠性。嘗試不同的查詢,你會發現混合搜尋在平衡語義理解和關鍵詞匹配方面的優勢。