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系統時,不應僅依賴語義搜索。混合搜索能夠提供更全面的檢索結果,確保系統的健壯性和可靠性。嘗試不同的查詢,你會發現混合搜索在平衡語義理解和關鍵詞匹配方面的優勢。