近來,RAG成了大語言模型的“救命稻草”,可讓大語言模型回答更準(zhǔn)確、更靠譜??蓡栴}來了,很多 RAG 應(yīng)用的檢索系統(tǒng)還是有點(diǎn)“笨”:要么漏掉關(guān)鍵信息,要么抓回一堆無關(guān)緊要的“噪聲”,搞得最終答案質(zhì)量參差不齊。
那么,我們?cè)撛趺磧?yōu)化 RAG 的檢索算法,讓它既精準(zhǔn)又高效呢?今天就來聊聊這個(gè)話題,帶你一步步解鎖 RAG 檢索的“進(jìn)階玩法”!
為什么非得優(yōu)化檢索算法不可?
RAG 的工作流程其實(shí)很簡(jiǎn)單:
用戶丟出一個(gè)問題(Query)
系統(tǒng)去“翻箱倒柜”找相關(guān)文檔(Retriever)
把文檔塞給 LLM,讓它生成答案(Generator)
聽起來挺順暢,對(duì)吧?但關(guān)鍵就在第二步——檢索。如果翻出來的文檔不靠譜,哪怕 LLM 再聰明,也只能“巧婦難為無米之炊”。所以,檢索算法就是 RAG 的命門,優(yōu)化它,才能讓整個(gè)系統(tǒng)“起飛”!
傳統(tǒng)檢索方法介紹
我們先來看看常見的檢索方法,各自有啥優(yōu)缺點(diǎn):
BM25(關(guān)鍵詞搜索)
優(yōu)點(diǎn):擅長(zhǎng)精準(zhǔn)匹配,像查字典一樣適合結(jié)構(gòu)化數(shù)據(jù)。
缺點(diǎn):完全不理解語義,同義詞、變體詞一概不認(rèn),漏掉的信息可不少。
向量搜索(語義搜索)
優(yōu)點(diǎn):能“讀懂”句子意思,非常適合非結(jié)構(gòu)化數(shù)據(jù)。
缺點(diǎn):有時(shí)候太“腦洞大開”,抓回一堆似是而非的東西,誤召回讓人頭疼。
單獨(dú)靠 BM25 或向量搜索,總覺得差點(diǎn)火候。要不信息丟了,要不噪聲太多。所以,咱們得玩點(diǎn)更高級(jí)的——混合搜索(Hybrid Search)!
Hybrid Search簡(jiǎn)介
混合搜索就是把 BM25 和向量檢索“捏”在一起,既能抓住關(guān)鍵詞,又能理解語義,簡(jiǎn)直是“魚和熊掌兼得”。具體怎么操作呢?
第一步:BM25 出馬
根據(jù)關(guān)鍵詞鎖定一批相關(guān)文檔,精準(zhǔn)打擊!
第二步:向量搜索補(bǔ)刀
用 Embedding 計(jì)算語義相似度,再撈一批“深藏不露”的好文檔。
第三步:結(jié)果融合
加權(quán)融合:給 BM25 和向量搜索的分?jǐn)?shù)加個(gè)權(quán)重,算個(gè)平均值。
交集/并集策略:要么取兩者的“重合部分”(求穩(wěn)),要么全收下(求全),看需求靈活調(diào)整。
Reranker:給結(jié)果來個(gè)“大洗牌”
Hybrid Search 雖然厲害,但偶爾還是會(huì)混進(jìn)一些“雜牌軍”。這時(shí)候,Reranker 就該登場(chǎng)了!它的任務(wù)是把檢索結(jié)果重新排個(gè)序,讓最靠譜的文檔站到“C位”。
Reranker 怎么玩?
先用 BM25 和向量搜索召回一堆文檔。
然后請(qǐng) Reranker 出馬,逐一打分,把最貼合問題的文檔頂?shù)角懊妗?/p>
Query Expansion:讓查詢更“會(huì)說話”
有時(shí)候,用戶的問題太簡(jiǎn)短或模糊,檢索系統(tǒng)“摸不著頭腦”。這時(shí)候可以用 Query Expansion,幫查詢“充實(shí)”一下,提高召回率。
擴(kuò)展招式:
WordNet 同義詞擴(kuò)展:給關(guān)鍵詞找“兄弟姐妹”,適合 BM25。
LLM 生成擴(kuò)展:讓大模型直接改寫查詢,適合語義搜索。
錦上添花的優(yōu)化小技巧
除了上面的大招,還有幾招“小而美”的優(yōu)化方法:
MetaData 過濾:用文檔的時(shí)間、分類等元數(shù)據(jù),篩掉不相關(guān)的“路人甲”。
動(dòng)態(tài)調(diào)權(quán)重:在 Hybrid Search 里,根據(jù)場(chǎng)景調(diào)整 BM25 和向量搜索的比重。
多輪對(duì)話優(yōu)化:讓用戶多聊幾句,提供更多上下文,查詢自然更精準(zhǔn)。
支持Hybrid Search的開源庫
目前,有許多支持 Hybrid Search 的開源庫,它們結(jié)合了 BM25 關(guān)鍵詞搜索 和 向量搜索,并支持各種后處理優(yōu)化(如 Reranking)。以下是幾款常見的 Hybrid Search 開源庫:
01、LlamaIndex
Github地址:https://github.com/run-llama/llama_index
簡(jiǎn)介:LlamaIndex 是一個(gè)流行的 RAG 框架,支持 Hybrid Search(BM25 + 向量檢索),并且能夠與 LLM 結(jié)合。
特點(diǎn):
內(nèi)置 BM25 + 向量檢索融合(可調(diào)權(quán)重)
支持 FAISS、Weaviate、Qdrant、ChromaDB 等
支持 Reranker(如 Cohere Rerank)提升精準(zhǔn)度
02、Jina AI
Github地址:https://github.com/jina-ai/serve
簡(jiǎn)介:Jina AI 提供一個(gè)強(qiáng)大的 Hybrid Search 解決方案,支持結(jié)合 BM25 和向量搜索,并內(nèi)置多種 Reranker。
特點(diǎn):
支持 FAISS、HNSW、Qdrant、Weaviate 等
可結(jié)合 Reranker 提高搜索質(zhì)量
可用于 RAG、推薦系統(tǒng)等場(chǎng)景
03、Weaviate
Github地址:https://github.com/weaviate/weaviate
簡(jiǎn)介:Weaviate 是一個(gè)企業(yè)級(jí)的向量數(shù)據(jù)庫,內(nèi)置 Hybrid Search,允許同時(shí)使用 BM25 + 向量搜索 進(jìn)行檢索。
特點(diǎn):
支持 OpenAI、Hugging Face 的 Embedding
內(nèi)置 BM25 搜索,可進(jìn)行關(guān)鍵詞匹配
支持 GraphQL 查詢,可擴(kuò)展性強(qiáng)
04、Qdrant
Github地址:https://github.com/qdrant/qdrant
簡(jiǎn)介:Qdrant 是一個(gè)高性能的向量數(shù)據(jù)庫,支持 Hybrid Search,能夠結(jié)合 BM25 + 向量搜索 進(jìn)行檢索。
特點(diǎn):
輕量級(jí),適合本地或云端部署
支持 Reranker
05、ElasticSearch
Github地址:https://github.com/elastic/elasticsearch
簡(jiǎn)介:ElasticSearch 結(jié)合 BM25 和 kNN 向量檢索,實(shí)現(xiàn) Hybrid Search,適用于企業(yè)級(jí)應(yīng)用。
特點(diǎn):
支持 BM25 關(guān)鍵詞搜索 + kNN 語義搜索
可與 OpenAI、Hugging Face 的 Embedding 結(jié)合
適用于大規(guī)模數(shù)據(jù)檢索