在RAG中文檔處理質量參差不齊的情況下——提升召回精度的企業級解決方案 原創
“ RAG做起來很簡單,但想把RAG做好就需要想盡辦法去提升數據的召回質量。”
在RAG中文檔處理可以說是一個重難點,特別是復雜文檔的處理更是一言難盡;因此,面對這種現實問題,總不能直接擺爛,因此怎么在文檔質量處理參差不齊的情況下,提升RAG的召回精度就是一個需要解決的問題。
文檔處理的質量直接影響到RAG的召回效率,但目前文檔處理是一個難點;因此怎么基于現有條件,提升RAG的召回精度?既然文檔處理質量控制不了,那么就只能想別的辦法,盡量彌補文檔質量的不足。
提升RAG召回精度
關于RAG中的文檔處理,目前主流的方式還是以人工介入為主,比如說對文檔格式進行轉換(word,pdf,ppt等轉換成markdown),對文檔進行人工分段;設置文檔拆分長度等等。
雖然說人工已經盡可能的考慮文檔完整性的情況下,其處理效果還是差強人意;因此,面對這種問題其實最好的解決方式讓大模型自己去給文檔做拆分,注意這里說的是大模型,而不是小模型。

為什么這么說?
原因在于隨著大模型技術的發展,大模型的能力也變得越來越強,因此在某些情況下人工做的并一定比模型做的好,特別是這種對文檔進行處理的場景,模型根據語義對文檔進行拆分或處理,或許比人工做的要更好。
人工在對文檔處理的情況下,一般是按照標題,段落或長度對文檔進行拆分;而如果把文檔直接丟給模型,讓模型根據自己的理解對文檔進行拆分,或許能更好地保證文檔的語義完整性;而這種情況下,大模型的表現肯定會比小模型要好,這也是為什么在前面強調說是大模型,而不是小模型的原因。

當然,畢竟模型的上下文窗口有限,而且大模型對長文本處理存的效果并不是特別好;因此,面對較長的文檔,還是需要人工進行初步的處理,才能交給模型去拆分。
OK,前面說了文檔的一種處理方式,那么下面我們進入正題,怎么在文檔質量參差不齊的情況下,來提升召回精度?
其實這個問題說簡單也簡單,說復雜也復雜;說簡單是因為我們的目的很明確,那就是提升模型的召回精度;復雜是怎么提升這個召回精度?
下面我們就來介紹幾種提升召回精度的方式:
1. 同時使用稠密向量和稀疏向量
2. 對分段的文檔進行關鍵字提取
3. 對分段文檔進行總結提煉
4. 同時使用標量檢索和向量檢索
同時使用稠密向量和稀疏向量
這種方式是基于向量數據庫本身的一種特性,部分向量數據庫比如說milvus支持稠密向量和稀疏向量,簡單來說就是對分段內容進行兩次向量化,一次是稠密向量,一次是稀疏向量。
在milvus向量數據庫的官方文檔中介紹,密集向量是捕捉語義關系的絕佳方法,而稀疏向量則是精確匹配關鍵詞的高效方法。

因此,同時使用稠密向量和稀疏向量,能夠從更多的維度對數據進行召回,當然也能夠提升文檔的召回質量。
對分段的文檔進行關鍵字或主要內容提取
既然文檔處理的質量參差不齊,并且用戶問題可能比較簡短的情況下,這時很難進行語義檢索,甚至很多時候根據檢索不到數據。
因此,在文檔入庫之前,我們可以使用模型先對已分段文檔進行關鍵字提取,這樣把提取的關鍵字作為標簽,因此就可以在檢索時就可以進行關鍵字匹配,當然也可以把標簽向量化,進行標簽語義匹配;這樣在用戶提問時,也對用戶問題進行同樣的操作,這樣就可以使用更準確的關鍵字進行數據召回,提升召回質量。
對分段文檔進行總結提煉
既然文檔處理質量不齊,而且即使文檔處理質量還行,但由于用戶的問題較簡短;那么我們就對文檔內容進行總結提煉,然后再對總結之后的內容進行向量化,之后進行語義檢索;這樣也可以提升數據的召回質量。

同時使用標量檢索和向量檢索
在向量數據庫中,一般情況下把文檔內容進行向量化,但同時文檔也存在一些元數據,這個元數據可以是文檔本身的(文檔名稱,簡要說明等),也可以是我們人為提取的(關鍵字標簽)。
這時我們在檢索時,就可以先根據這些元數據進行初步篩選,然后再進行語義篩選;這時通過多種召回方式的配合,就能更好地對數據進行召回。
當然,上面介紹的都是文檔的召回策略問題;而且上面的幾種召回策略并不是非此即彼的,很多時候可以多種聯合使用;因此,通過以上召回策略召回數據之后,我們需要對召回的數據進行統一的處理,比如說去重,排序,重排序等多種操作,最后才是我們需要的數據。
本文轉載自??AI探索時代?? 作者:DFires

















