RAG知識庫之針對長文件的Raptor索引

AiFly發表於2024-08-05

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

image.png

圖為Raptor所生成的樹結構,從下往上遞迴生成,此樹為三個層級從文字塊上一層級算起。文字1、文字2、文字3、文字4為葉子結點使用長文件分割而成,先對文字塊進行文字詞嵌入,然後使用UMAP對嵌入向量進行降維接著使用高斯混合模型(GMM) 對降維後的向量進行聚類,嵌入詞向量通常維度較高直接使用GMM可能會表現不佳所以須先 UMAP(Uniform Manifold Approximation and Projection)降維。聚類時使用軟聚類,因為每個文字塊通常包含多個主題資訊所以一個文字塊屬於多個聚類主題更加合理,保證總結摘要包含多個主題資訊。

1、對文件初始分割後的文字塊嵌入向量後進行降維後使用GMM聚類
2、合併同一個聚類中的文字塊使用LLM對該聚類文字塊進行總結摘要
3、如生成的聚類數大於1與層級小於指定層級則重複1、2、3、操作遞迴對上層級 生成的總結摘要進行:嵌入、聚類、生成摘要;

image.png

此圖為Raptor演算法總體流程與層級1內部資料結構圖具體流程如下:

1、先將長文件分割為文字塊。
2、對文字塊進行此嵌入,UMAP降維後使用GMM生成聚類。
3、合併同聚類文字塊,使用LLM對每個聚類文字塊進行總結摘要。
4、根據條件判斷是否遞迴重複1、2、3流程。
5、Raptor樹摺疊展平獲取總結摘要列表寫入向量儲存。
6、原始文字塊寫入向量儲存。

而本篇文章所描述的RAPTOR(Recursive Abstractive Processing for Tree-Organized Retrieval)正能夠避免出現這種情況,可以說其是為了大文字而生的。Raptor透過遞迴的對長文字塊進行嵌入、聚類總結從而構造了一棵具有對該文件具有不同層級總結的樹結構從而能夠更全面的理解與整合該長文件資訊。

相關文章