這裏分享同濟大學 Haofen Wang
的關於檢索增強生成的報告:《Retrieval-Augmented Generation (RAG): Paradigms, Technologies, and Trends》 ,RAG 範式、技術和趨勢。
RAG 概述
爲什麼會有RAG
, 主要是緣於LLM的一些不足:
- 幻覺
- 過時的信息
- 參數化知識效率低
- 缺乏專業領域的深入知識
- 推理能力弱
對在企業裏的真實的應用,需要綜合考慮:
- 領域支持的精準回答
- 數據頻繁更新的需求
- 生成內容需要可追溯可解釋
- 可控的成本
- 隱私數據保護
因此有了RAG(Retrieval-Augmented Generation 檢索增強生成),RAG的基本流程是,當回答問題時,首先從大量文檔中檢索到相關信息,然後基於這些信息,讓LLMs生成答案。這樣通過附加一個外部知識庫,無需爲每個特定任務重新訓練整個大型模型。
因此RAG模型特別適合於知識密集型任務。
RAG 還是 Fine-tuning
要優化大模型,可以通過提示詞優化(Prompt Engineering),RAG 和 Fine-tuning方法。 RAG 和 FT有什麼區別?根據對外部知識的依賴程度和模型調整的需求,他們都有適合自己的應用場景。
RAG就像是爲模型提供了一本定製的帶有信息檢索的教科書,非常適合特定領域的查詢。另一方面,FT就像是隨着時間的積累將知識內化的學生,因此更適合模仿特定的結構、風格或格式。FT可以通過增強基礎模型的知識、調整輸出和教授複雜指令來提高模型的性能和效率。然而,它不擅長整合新知識或快速迭代新的使用案例。RAG和FT並不是相互排斥的,它們是互補的,結合起來使用會產生更佳的效果。
RAG 應用
RAG 非常適合下面的場景:
- 長尾數據
- 頻繁更新的知識
- 需要驗證和可追溯性的答案
- 專業領域知識
- 數據隱私保護
RAG 範式的演變
作者將RAG分爲Naive RAG
,Advanced RAG
,和Modular RAG
三種範式。
Naive RAG
就是傳統的RAG 流程,先Indexing,然後Retrieval,最後Generation。Naive RAG
在檢索、生成和增強方面面臨着許多挑戰,因此隨後提出了Advanced RAG
範式,增加了預檢索
和檢索後處理
中的額外處理。在檢索之前,可以使用query改寫
、routing路由
和query擴展
等方法來對齊問題和文檔塊之間的語義差異。檢索後,對檢索到的doc進行一個rerank
,可以避免“中間丟失”現象,也可以對上下文進行過濾壓縮,縮短窗口長度。
隨着RAG技術的進一步發展和進化,產生了模塊化RAG
的概念。在結構上,它更自由、更靈活,引入了更具體的功能模塊,如查詢搜索引擎和多個答案的融合。在技術上,它將檢索與微調、強化學習和其他技術相結合。在流程方面,RAG模塊經過設計和編排,形成了各種RAG模式。
然而,模塊化RAG也不是突然出現的,三種方式存在繼承與發展的關係。可以這麼理解Advanced RAG
是模塊化RAG的一個特例,而Naive RAG
是Advanced RAG
的特例。
RAG的三個關鍵問題
- 檢索粒度 可以是token、短語,還是chunk,段落、實體或者知識圖譜
- 什麼時候檢索
- 如何利用檢索到的信息
關於檢索什麼層級的內容,我們可以從檢索粒度的粗細,以及數據結構化的高低來看業界研究結果。
X軸結構化從低到高,Y軸從精細到粗粒度。
三個代表:
- Chunk級別,非結構化數據,搜索會召回大量信息,但是準確度低,會包含冗餘信息
- 知識圖譜,豐富的語義和結構化數據,檢索效率低,效果嚴重依賴KG的質量
- KNN-LMM 擅長處理長尾和跨域問題,計算效率高,但需要大量存儲
如何使用檢索到的內容
在推理過程中,將檢索到的信息集成到生成模型的不同層中
檢索的時機
按照檢索的頻率從低到高,有:
- 一次檢索,只檢索一次,效率高,但可能導致檢索結果相關度低
- 自適應檢索,平衡效率和檢索效果
- 每N個token檢索1次,會導致檢索次數過多,並召回大量冗餘信息
RAG 技術發展樹
RAG 關鍵技術
數據索引優化
- 核心是chunk的策略:
- Small-2-Big 在sentense級別做embedding
- Slidingwindow 滑動窗口,讓chunk覆蓋整個文本,避免語義歧義
- Summary 通過摘要檢索文檔,然後從文檔中檢索文本塊。
- 另外爲了提升效果,還可以添加一些額外的meta信息,例如page,時間,類型,文檔標題等。
- 有了meta,就能進行過濾,或者增強信息量
Small 2 Big方法:
Abstract方法
僞metadata方法,也就是HyDE
,y將用戶的原始查詢轉換爲一個或多個假設性文檔。這些文檔是針對查詢構建的文本片段,它們包含了可能回答查詢所需的信息,然後用這些文檔計算embedding,從真實文檔庫檢索真實的文檔,識別出與原始查詢最相關的文檔,檢索到的真實文檔被用作生成響應的上下文信息,可以輔助語言模型生成更準確、更相關的回答。
meta過濾方法:
核心就是數據很多,通過meta過濾,可以減少範圍,提高精度。
結構化檢索文檔庫
可以分層組織檢索文檔庫
- Summary → Document方法, 用摘要檢索取代文檔檢索,不僅可以檢索最直接相關的節點,還可以探索與這些節點相關的其他節點。
- Document → Embedded Objects 比如一個PDF文檔具有嵌入對象(如表、圖表),首先檢索實體引用對象,然後查詢底層對象,如文檔塊、數據庫、子節點
KG作爲召回數據源
GraphRAG 從用戶的輸入查詢中提取實體,然後構建子圖以形成上下文,並最終將其輸入到大模型中進行生成
- 使用LLM 從問題中提取關鍵entity
- 基於提取的到entity實體,檢索子圖,並深入到一定的深度,比如2跳或者更多
- 利用獲得的上下文通過LLM生成答案
下面是一個具體的案例:
Query 優化
問題和答案並不總是具有很高的語義相似性,所以我們可以適當的調整query,以便獲得更佳的檢索效果,可以通過Query Rewriting
改寫技術和Query Clarification
澄清技術。
- Query 改寫: 將query改寫成一個或者多個search query,分別查詢,這樣可以得到更佳的召回效果,比如下面例子中,問兩個人的共同
profession
職業,那麼可以先分別查詢各自的,然後讓大模型去解決。
- Query Clarification
Embedding 嵌入模型優化
- 一方面,可以選擇一個合適的商用embedding 供應商,比如:
- 另外一方面,可以自己微調embedding模型,現在業界有很多還不錯的embedding模型,比如BAAI的BGE模型
- 微調的方法,可以通過領域數據和下游任務需要去微調
檢索流程優化
在檢索流程方面,可以有Iterative
迭代式檢索,也可以Adaptive自適應檢索
Hybrid (RAG+Fine-tuning) 融合RAG和FT
既可以檢索FT,也可以生成FT,還可以進行檢索,生成聯合FT
相關研究總結
RAG 評估
- 評測方法層面,可以檢索和生成獨立評測,也可以端到端進行評測
- RAG 的評估辦法很豐富,主要包括三個質量分數:上下文相關度、答案忠實度、答案相關度
- 評估涉及四項核心能力:魯棒性、拒識能力、信息整合能力和反事實解釋
- 評估框架方面,有 RGB、RECALL 等基準指標,以及 RAGAS、ARES、TruLens 等自動化評估工具,可以較全面地衡量 RAG 模型的性能。
下面補充一些信息:
具體來說,評估方法主要圍繞其兩個關鍵組件:檢索(Retrieval)和生成(Generation)。評估這些組件的性能涉及到多個質量分數和能力,這些分數和能力共同反映了 RAG 模型在信息檢索和生成過程中的效率。
檢索質量評估指標:
- Hit Rate (HR):命中率,衡量檢索結果中相關文檔的比例。高命中率意味着檢索系統能夠更準確地找到用戶查詢相關的信息。
- Mean Reciprocal Rank (MRR):平均倒數排名,衡量檢索結果中相關文檔的平均排名的倒數。MRR 越高,表示檢索系統的性能越好。
- Normalized Discounted Cumulative Gain (NDCG):歸一化折扣累積增益,用於衡量檢索結果列表中相關文檔的排名質量。NDCG 考慮了文檔的相關性和排名位置。
- Precision:精確率,衡量檢索結果中被正確識別爲相關的文檔的比例。
- Recall:召回率,衡量檢索系統找到的相關文檔佔所有相關文檔的比例。
- R-Rate (Reappearance Rate):再次出現率,衡量檢索結果中信息在後續生成文本中的出現頻率。
生成質量評估指標:
- Context Relevance:上下文相關性,評估生成的文本與檢索到的上下文之間的相關性。
- Answer Faithfulness:答案忠實度,確保生成的答案忠實於檢索到的上下文,保持一致性。
- Answer Relevance:答案相關性,要求生成的答案直接相關於提出的問題,有效解決問題。
- Accuracy:準確性,衡量生成的信息的準確性。
RAG 技術棧與工業界實踐
當前有LangChain、LlamaIndex、AutoGen等流行的開發框架,可以方便開發RAG應用。
工業界也有很多RAG應用。
總結與展望
RAG 技術框架
RAG 的三個研究熱點
RAG 的挑戰
- 長上下文
- 與FT的協同
- 如何應用好LLM,充分挖掘利用LLM
- 提升魯棒性,比如如何處理錯誤的召回內容,如何過濾和驗證召回內容
- RAG 是否也遵循Scaling Law
- 最佳工程實踐,比如提升在大數據量下的檢索延遲,如何保障隱私的檢索內容不被LLM泄露
多模態擴展
將RAG從文本擴展到多模態
RAG 開發生態建設
擴展RAG下游任務,改善生態建設