RAG知識庫之針對長文檔的Raptor索引
在現有的樸素RAG應用中其只是簡單的對文檔進行分塊后存儲的向量庫中,然后在使用是根據 提問問題 從查詢向量庫中查詢相識度較高的文檔快作為問題上下文提交到LLM讓其根據上下文去回答用戶所提問的問題。對于小文本可以直接將整個文檔作為上下文或使用上篇文章所提到的多表示索引(Multi-representation indexing)進行Context上下文的優化處理。
樸素RAG分塊大小、文本疊加值設置都對向量檢索質量有著重要的影響,如文檔太多可能會丟失長尾知識,缺乏對整個文檔上下文的理解從而影響到RAG的質量;如針對某篇長小說文檔提問主角出生經歷對其結尾的結局產生了什么影響?通常小說前面幾張描述的是主角出生與經歷結尾描述的是其結局,文檔過長不可能將整個文檔作為問題上下文,異無法理解整篇文檔,而只是使用 從向量庫中檢索到相識度最高的top K文本塊最為問題上下文;
Raptor使用樹形結構來捕獲文本的高層級和低層級細節,其對文本塊進行遞歸聚類、生成聚類的文本摘要總結自下而上生成一棵樹,所生成的 Raptor能夠作為問題上下文代表了不同級別的問題,可以回答不同層級的問題。

圖為Raptor所生成的樹結構,從下往上遞歸生成,此樹為三個層級從文本塊上一層級算起。文本1、文本2、文本3、文本4為葉子結點使用長文檔分割而成,先對文本塊進行文本詞嵌入,然后使用UMAP對嵌入向量進行降維接著使用高斯混合模型(GMM) 對降維后的向量進行聚類,嵌入詞向量通常維度較高直接使用GMM可能會表現不佳所以須先 UMAP(Uniform Manifold Approximation and Projection)降維。聚類時使用軟聚類,因為每個文本塊通常包含多個主題信息所以一個文本塊屬于多個聚類主題更加合理,保證總結摘要包含多個主題信息。
1、對文檔初始分割后的文本塊嵌入向量后進行降維后使用GMM聚類
2、合并同一個聚類中的文本塊使用LLM對該聚類文本塊進行總結摘要
3、如生成的聚類數大于1與層級小于指定層級則重復1、2、3、操作遞歸對上層級 生成的總結摘要進行:嵌入、聚類、生成摘要;

此圖為Raptor算法總體流程與層級1內部數據結構圖具體流程如下:
1、先將長文檔分割為文本塊。
2、對文本塊進行此嵌入,UMAP降維后使用GMM生成聚類。
3、合并同聚類文本塊,使用LLM對每個聚類文本塊進行總結摘要。
4、根據條件判斷是否遞歸重復1、2、3流程。
5、Raptor樹折疊展平獲取總結摘要列表寫入向量存儲。
6、原始文本塊寫入向量存儲。
而本篇文章所描述的RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)正能夠避免出現這種情況,可以說其是為了大文本而生的。Raptor通過遞歸的對長文本塊進行嵌入、聚類總結從而構造了一棵具有對該文檔具有不同層級總結的樹結構從而能夠更全面的理解與整合該長文檔信息。
浙公網安備 33010602011771號