關于打造高質(zhì)量RAG系統(tǒng)的問題記錄 原創(chuàng)
“ RAG的核心是怎么快速準確地召回數(shù)據(jù),但RAG的難點還有文檔處理等問題?!?/strong>
RAG技術是目前大模型應用的主要技術方向之一,常被應用于數(shù)據(jù)檢索,智能客服等應用場景;而最近在做一個問答系統(tǒng)的場景,使用到了RAG技術,因此今天再來記錄一下關于RAG在實際場景中所遇到的問題。
關于RAG的問題
關于RAG的整體流程這里就不多做介紹了,總而言之RAG的核心點有兩個,其一是檢索,其二是生成;生成這里就不多說了,生成的質(zhì)量一靠大模型的能力,二靠提示詞的質(zhì)量,三靠檢索回來的語料質(zhì)量。
所以,我們今天主要討論的就是關于檢索的問題;RAG系統(tǒng)和訓練大模型一樣,都需要高質(zhì)量的數(shù)據(jù)集;所以RAG在檢索方面的核心問題就是怎么打造一個高質(zhì)量的檢索系統(tǒng),其中包括各種文檔的加載,切分和嵌入(embedding),以及上下文的語義關系。
所以,RAG檢索模塊需要兩個核心工具,嵌入模型和向量數(shù)據(jù)庫。
嵌入模型的作用是把人類使用的文檔轉(zhuǎn)換成向量的一種工具,并盡可能保證文檔的上下文關系和語義關系;
而向量數(shù)據(jù)庫就是用來存儲嵌入模型處理之后的向量數(shù)據(jù),其主要作用是用來進行語義檢索。
由于需要進行語義檢索,因此向量數(shù)據(jù)庫是其中必不可少的工具,當然在某些場景下可以使用精確檢索的方式,這時也可以不使用向量數(shù)據(jù)庫。
OK上面是關于RAG兩個主要工具的介紹,但我們今天討論的主要問題不在這兩個工具上;而是其前置處理和怎么提高檢索效果。
文檔處理
文檔處理技術目前來說不僅僅是RAG技術要面臨的問題,任何需要數(shù)據(jù)的領域都無法避免這個問題。
之所以文檔處理很困難,原因就在于文檔的多樣化和復雜化;文檔多樣我想很多人應該都深有體會,我們常見的office三件套,PPT,WORD和EXCEL,這還僅僅只是最常見的三種格式。
其它還有csv,txt,markdown以及不同操作系統(tǒng)下特有的文件格式;這里就是文檔的多樣化。
而至于文檔的復雜化就更難處理了,比如說企業(yè)需要統(tǒng)計一下員工的個人信息,列好的表格,都能被填的亂七八糟;再加上文檔本身就像一張紙一樣,你可以在上面寫字,也可以畫圖,還能畫一些表結(jié)構。
雖然這些不同形式的數(shù)據(jù)對人來說很容易判斷和識別,但對文檔處理來說其難度卻不是簡單的1+1等于2的問題。
以word來說,文檔中同時存在文字描述,圖片描述和結(jié)構化內(nèi)容——表格,圖表等數(shù)據(jù),我們在進行embedding之前需要對文檔進行拆分(由于embedding能力限制 長文本處理效果不理想 因此常見的解決方案是對文檔進行拆分)。而同時面臨著這幾種類型的數(shù)據(jù),應該怎么拆分?
文字,圖片,圖表混合出現(xiàn),以什么為標準進行拆分,圖片數(shù)據(jù)怎么拆分?而且怎么識別文檔中那些部分是文字,那些是圖片,那些又是圖表?
目前面臨這種問題,我們主要采用的方式就是使用OCR技術,也就是光學識別,把里面的內(nèi)容全部讀成文字,然后再進行嵌入;但說實話效果并不怎么樣。
關于文檔處理,不同的場景,不同的要求會有不同的處理方式;而在具體的實施過程中,每家公司和技術可能采用的方式都不盡相同。
數(shù)據(jù)檢索
如果說文檔處理和拆分只是RAG的第一步,那么怎么把數(shù)據(jù)高效和精確的檢索出來更是我們需要思考的問題。
以目前互聯(lián)網(wǎng)技術的發(fā)展來看,數(shù)據(jù)的增長每天都呈指數(shù)增加,而且非結(jié)構化格式的數(shù)據(jù)占比越來越多。
而面臨著如此龐大的數(shù)據(jù),怎么快速和高效的處理是所有技術人員都困惑的問題。
如果說數(shù)據(jù)庫(傳統(tǒng)數(shù)據(jù)庫和向量數(shù)據(jù)庫)的作用是來格式化存儲數(shù)據(jù),那么檢索就是怎么快速地從不同的數(shù)據(jù)庫中高效檢索出相匹配的數(shù)據(jù)。
在傳統(tǒng)的檢索系統(tǒng)中,主要采用的是關系型數(shù)據(jù)庫的精確字符匹配或者采用簡單的分詞技術進行檢索。
但在人工智能時代,人們對檢索數(shù)據(jù)的質(zhì)量有了更高的要求;那就是不僅僅只進行簡單的字符匹配,還需要進行語義檢索。
簡單來說就是,你不但要聽到我說的是什么,而且你還要懂得我說的是什么意思。
而目前關于高效檢索的方式,基本上有以下幾種方案;同時使用精確匹配和語義匹配的方式,比如說可以先根據(jù)種類,組織結(jié)構等篩選出相關的數(shù)據(jù),然后再使用語義檢索出相似的數(shù)據(jù)。
以買東西為例,我要買一雙鞋,這時就可以使用精確匹配的方式先把所有關于鞋的數(shù)據(jù)都找出來,比如說男鞋,夏季等;而根據(jù)這個條件對數(shù)據(jù)篩選一遍之后,再使用語義檢索,比如說一雙好看的夏天穿的男鞋;這個“好看”怎么進行精確匹配?所以只能進行語義匹配?
而好看的語義有哪些?
帥,漂亮,可愛等等一系列與之相關的數(shù)據(jù)。
因此,這種采用根據(jù)語義延伸出來的多種相似語義檢索;還有其它如多路召回的方式,通過多種不同的召回策略,使用不同的條件,從多個不同的維度來檢索數(shù)據(jù)的方式就叫做多路召回。
比如說,你去市場上買東西,你讓小王去看幾家主要看成色怎么樣;讓小李再去看幾家主要看價格怎么樣等等;這樣最后匯總之后,對比成色,質(zhì)量,價格等多個方面,然后選擇最優(yōu)的一個方案;而最后匯總和選擇的過程就叫做重排序。
當然,面臨著復雜的數(shù)據(jù)和業(yè)務場景,以上方式你也可以多做幾次,以此來提升召回質(zhì)量。
總之,RAG技術是一門入門五分鐘,做好可能五年時間都不夠的技術,其中涉及到各種復雜的技術,并且要面對各種各樣的問題。
本文轉(zhuǎn)載自公眾號AI探索時代 作者:DFires
原文鏈接:??https://mp.weixin.qq.com/s/Mcp_1e0jenzQniKUbVVnLQ??
