阿里妹導(dǎo)讀 一、RAG的背景介紹 隨著ChatGPT的興起,大語言模型再次走進(jìn)人們的視野,其在NLP領(lǐng)域表現(xiàn)出的語言識別、理解以及推理能力令人驚嘆。越來越多的行業(yè)開始探索大語言模型的應(yīng)用,比如政務(wù)、醫(yī)療、交通、導(dǎo)購等行業(yè)。 通義系列、GPT系列、LLama系列等模型,在語言交互場景下表現(xiàn)十分搶眼。以Gemini為代表這類大模型甚至發(fā)展出了視覺和聽覺,朝著智能體的方向演化。他們在多個(gè)指標(biāo)上展現(xiàn)的能力甚至已經(jīng)超過了人類。 然而,大型語言模型也存在諸多不足:
為了解決純參數(shù)化模型的局限,語言模型可以采取半?yún)?shù)化方法,將非參數(shù)化的語料庫數(shù)據(jù)庫與參數(shù)化模型相結(jié)合。這種方法被稱為RAG(Retrieval-Augmented Generation)。 二、RAG的挑戰(zhàn) RAG通過檢索現(xiàn)有的大量知識,結(jié)合強(qiáng)大的生成模型,為復(fù)雜的問答、文本摘要和生成任務(wù)帶來了全新的解決方案。然而,盡管RAG有其獨(dú)特的優(yōu)勢,但在實(shí)踐過程中也遭遇了多個(gè)挑戰(zhàn)。 2.1 數(shù)據(jù)質(zhì)量差導(dǎo)致檢索效果差 在RAG模型中,檢索階段的輸出直接影響到生成階段的輸入和最終的輸出質(zhì)量。如果RAG數(shù)據(jù)庫中存在大量的錯誤信息并被檢索,這可能引導(dǎo)模型走向錯誤的方向,即使優(yōu)化檢索階段做大量的工作,可能對結(jié)果的影響也微乎其微。 2.2 數(shù)據(jù)向量化的信息損失 為了實(shí)現(xiàn)高效的文檔檢索,通常需要將原始的文本數(shù)據(jù)轉(zhuǎn)化為數(shù)值向量,這一過程又稱為數(shù)據(jù)向量化。數(shù)據(jù)向量化的目的是將文本數(shù)據(jù)映射到一個(gè)低維的向量空間中,使得語義相似的文本在向量空間中的距離較近,而語義不相似的文本在向量空間中的距離較遠(yuǎn)。然而,數(shù)據(jù)向量化也會導(dǎo)致一定程度的信息損失,因?yàn)槲谋緮?shù)據(jù)的復(fù)雜性和多樣性很難用有限的向量來完全表達(dá)。因此,數(shù)據(jù)向量化可能會忽略一些文本數(shù)據(jù)的細(xì)節(jié)和特征,從而影響文檔檢索的準(zhǔn)確性。 2.3 語義搜索的不準(zhǔn)確 在RAG中,語義搜索是指根據(jù)用戶的問題,從文檔集合中檢索出與問題語義最相關(guān)的文檔,這一過程又稱為數(shù)據(jù)召回。語義搜索的難點(diǎn)在于如何理解用戶的問題和文檔的語義,以及如何衡量問題和文檔之間的語義相似度。目前,語義搜索的主流方法是基于數(shù)據(jù)向量化的結(jié)果,利用向量空間中的距離或相似度來度量語義相似度。然而,這種方法也存在一些局限性,例如向量空間中的距離或相似度并不一定能反映真實(shí)的語義相似度,而且向量空間中的噪聲和異常值也會干擾語義搜索的結(jié)果。因此,語義搜索的準(zhǔn)確率也無法有100%的保證。 三、RAG通用范式 3.1 Naive RAG 原始RAG是最早的研究范式,主要包括以下幾個(gè)步驟: 建立索引:這一過程通常在離線狀態(tài)下進(jìn)行,數(shù)據(jù)清洗并分塊,將分塊后的知識通過embedding模型產(chǎn)出語義向量,并創(chuàng)建索引。 檢索:用戶的query問題,使用相同的embedding模型,計(jì)算問題嵌入和文檔塊嵌入之間的相似度,選擇相似度最高的前K個(gè)文檔塊作為當(dāng)前問題的增強(qiáng)上下文信息。 生成:將給定的問題和相關(guān)文檔合并為新的提示,然后由大型語言模型基于提供的信息回答問題。如果有歷史對話信息,也可以合并到提示中,用于多輪對話。 ?? 初級RAG主要在三個(gè)方面面臨挑戰(zhàn):檢索質(zhì)量低、生成質(zhì)量差和增強(qiáng)過程難。
要解決上面的問題,需要在檢索前和檢索后做一些優(yōu)化,這就衍生出了高級RAG的解決方案。 3.2 Advanced RAG 高級RAG相比于初級RAG,基于初級RAG范式,圍繞著知識檢索做優(yōu)化,新增了檢索前、檢索中以及檢索后的優(yōu)化策略,用于解決索引、檢索和生成的問題。 檢索前優(yōu)化 檢索前優(yōu)化集中在知識切分、索引方式和query改寫的優(yōu)化上。 知識切分主要把較長的文本按照語義內(nèi)聚性的分析切成小塊,解決核心知識湮沒以及語義截?cái)嗟膯栴}。 索引方式優(yōu)化技術(shù)通過優(yōu)化數(shù)據(jù)索引組織方式提升檢索效果。比如去除無效數(shù)據(jù)或插入某些數(shù)據(jù)來提高索引覆蓋程度,從而達(dá)到與用戶問題的高匹配度問題。 query改寫主要需要理解用戶想表達(dá)的意圖,把用戶原始的問題轉(zhuǎn)換成適合知識庫檢索的問題,從而提高檢索的精準(zhǔn)程度。 檢索優(yōu)化 檢索階段的目標(biāo)是召回知識庫中最相關(guān)知識。 通常,檢索基于向量搜索,它計(jì)算查詢與索引數(shù)據(jù)之間的語義相似性。因此,大多數(shù)檢索優(yōu)化技術(shù)都圍繞嵌入模型展開: 微調(diào)嵌入模型,將嵌入模型定制為特定領(lǐng)域的上下文,特別是對于術(shù)語不斷演化或罕見的領(lǐng)域。例如,BAAI/bge是一個(gè)高性能的嵌入模型,可以進(jìn)行微調(diào)。 動態(tài)嵌入根據(jù)單詞的上下文進(jìn)行調(diào)整,而靜態(tài)嵌入則為每個(gè)單詞使用單一向量。例如,OpenAI的embeddings-ada-02是一個(gè)復(fù)雜的動態(tài)嵌入模型,可以捕獲上下文理解。 除了向量搜索之外,還有其他檢索技術(shù),例如混合搜索,通常是指將向量搜索與基于關(guān)鍵字的搜索相結(jié)合的概念。如果您的檢索需要精確的關(guān)鍵字匹配,則此檢索技術(shù)非常有益。 檢索后優(yōu)化 對檢索到的上下文進(jìn)行額外處理可以幫助解決一些問題,例如超出上下文窗口限制或引入噪聲,從而阻礙對關(guān)鍵信息的關(guān)注。在RAG調(diào)查中總結(jié)的檢索后優(yōu)化技術(shù)包括: 提示壓縮:通過刪除無關(guān)內(nèi)容并突出重要上下文,減少整體提示長度。 重新排序:使用機(jī)器學(xué)習(xí)模型重新計(jì)算檢索到的上下文的相關(guān)性得分。 3.3 Modular RAG 隨著 RAG 技術(shù)的進(jìn)一步發(fā)展和演變,新的技術(shù)突破了傳統(tǒng)的檢索 - 生成框架,基于此催生了模塊化RAG 的概念。在結(jié)構(gòu)上它更加自由的和靈活,引入了更多的具體功能模塊,例如查詢搜索引擎、融合多個(gè)回答。技術(shù)上將檢索與微調(diào)、強(qiáng)化學(xué)習(xí)等技術(shù)融合。流程上也對 RAG 模塊之間進(jìn)行設(shè)計(jì)和編排,出現(xiàn)了多種的 RAG 模式。 然而,模塊化RAG并不是突然出現(xiàn)的,三個(gè)范式之間是繼承與發(fā)展的關(guān)系。Advanced RAG是Modular RAG的一種特例形式,而Naive RAG則是Advanced RAG的一種特例。?? 3.3.1 新增模塊
3.3.2 新增模式基于上面六大模塊,可快速組合出屬于自己業(yè)務(wù)的RAG,每個(gè)模塊高度可擴(kuò)展,靈活性極大。 比如: 還可以實(shí)現(xiàn)基于檢索結(jié)果和用戶評價(jià)的獎懲機(jī)制,用戶強(qiáng)化和糾正檢索器的行為。 四、RAG通用范式的工程實(shí)踐 4.1 技術(shù)架構(gòu) ?? 我們實(shí)踐的RAG技術(shù)架構(gòu)主要可分為一底座三中心,分別是數(shù)據(jù)管理底座、模型中心、多引擎中心、召回策略中心。 在工程架構(gòu)上,每個(gè)子系統(tǒng)按照能力劃分子Modular,在上層配置調(diào)度策略并統(tǒng)一調(diào)度,符合Modular RAG的技術(shù)規(guī)范; 在檢索技術(shù)上,圍繞著檢索做了大量的索引降噪、多路召回、知識去重、重排等操作,符合Advanced RAG的技術(shù)規(guī)范。 4.1.1 知識庫基礎(chǔ)數(shù)據(jù)底座基礎(chǔ)數(shù)據(jù)底座中包含數(shù)據(jù)生產(chǎn)和數(shù)據(jù)加工的能力。 數(shù)據(jù)生產(chǎn)中有數(shù)據(jù)版本、血緣管理、引擎同步等能力, 知識加工主要包含數(shù)據(jù)切片、索引優(yōu)化等能力 4.1.2 模型中心模型中心主要包含生成式大模型和理解式小模型。 生成式大模型主要提供:
理解式小模型主要提供:
4.1.3 多引擎中心多引擎中心包含向量、分詞以及圖譜引擎,在引擎中心提供多種檢索方式,以提高知識的命中率。 4.1.4 召回策略中心召回策略中心在整個(gè)RAG建設(shè)中起到調(diào)度的作用,在這里去執(zhí)行query改寫、多路召回、檢索后置處理以及大模型引用式生成答案。 基于上面的一底座兩中心架構(gòu),每個(gè)子能力模塊化,并在上層配置調(diào)度策略,符合Modular RAG的技術(shù)規(guī)范。 4.2 RAG建設(shè)路徑 ? RAG整體業(yè)務(wù)鏈路主要分為5大步驟:知識生產(chǎn)與加工、query改寫、數(shù)據(jù)召回、后置處理以及大模型生產(chǎn)。 4.2.1 第一階段-可運(yùn)行第一階段保證系統(tǒng)可用。 知識生產(chǎn)與加工 先按照固定字符切分,預(yù)留冗余字符來保證語義不被截?cái)唷?/span> query改寫 結(jié)合上下文,先使用大模型的理解能力,突出用戶意圖,以便更好的回答用戶問題。 數(shù)據(jù)召回 第一步可以先實(shí)現(xiàn)向量召回,多路召回中,向量召回的比重是最大的,也是最關(guān)鍵的一種召回方式,需要找一個(gè)和自己業(yè)務(wù)比較契合的embedding模型和向量數(shù)據(jù)庫。 數(shù)據(jù)后置處理 因?yàn)閿?shù)據(jù)召回只有向量召回,這一步可以只使用向量近似得分做排序,設(shè)置符合業(yè)務(wù)預(yù)期的閾值篩選數(shù)據(jù)。并把篩選后的知識數(shù)據(jù)提供給大模型,生成答案。 4.2.2 第二階段-提效果第二階段的主要目標(biāo)是提升RAG的檢索效果。 知識生產(chǎn)與加工
query改寫
數(shù)據(jù)召回
數(shù)據(jù)后置處理
4.2.3 第三階段-高擴(kuò)展第三階段的主要目標(biāo)是在工程上提升可擴(kuò)展性,各個(gè)業(yè)務(wù)功能做模塊化設(shè)計(jì),通過召回策略配置中心,配置出業(yè)務(wù)所需要的RAG流程。 五、RAG范式的優(yōu)化實(shí)現(xiàn)策略 5.1 知識加工生成的實(shí)現(xiàn)策略 5.1.1 知識切片優(yōu)化文檔片段過長會給知識檢索造成很大影響,主要有兩部分的問題: 2)token過長導(dǎo)致語義會被截?cái)啵褐R數(shù)據(jù)在embedding時(shí),可能會因?yàn)閠oken超長導(dǎo)致語義截?cái)啵恢R檢索結(jié)束后,知識片段越長,輸入給大模型的信息條數(shù)就越少,導(dǎo)致大模型也無法獲取足夠的有價(jià)值的輸入,從而影響生成答案的質(zhì)量。 5.1.1.1 按固定字符切分按固定字符拆分知識,通過設(shè)置冗余字符來降低句子截?cái)嗟膯栴},使一個(gè)完整的句子要么在上文,要么在下文,這種方式能盡量避免在句子中間斷開的問題。 這種實(shí)現(xiàn)方式成本最低,在業(yè)務(wù)起步階段,可以先使用這種方式。 ?? 5.1.1.2 按句子語義切分按固定字符切,有時(shí)候會遇到句子含義聯(lián)系比較緊密的片段被切分成了兩條數(shù)據(jù),導(dǎo)致數(shù)據(jù)質(zhì)量比較差。可以通過語義理解小模型進(jìn)行句子拆分,使拆分出來的知識片段語義更加完整。 5.1.2 索引優(yōu)化5.1.2.1 HyDE原始的文檔和用戶問題一對一匹配,會存在匹配容錯率低的問題,一旦知識一次沒匹配上,那就無法被召回。 優(yōu)化方案 處理后的知識數(shù)據(jù),為了提高知識的覆蓋范圍,可針對知識數(shù)據(jù)預(yù)先用大模型生成一些有關(guān)聯(lián)的假設(shè)性問題,當(dāng)命中這些假設(shè)性問題時(shí),也可搜索到相應(yīng)的知識數(shù)據(jù)。 ?? 5.1.2.2 索引降噪索引降噪主要根據(jù)業(yè)務(wù)特點(diǎn),去除索引數(shù)據(jù)中的無效成分,突出其核心知識,降低噪音的干擾。針對QA-pair對和文章片段的知識,處理起來的方法也類似。 QA-pair對類型知識 這種數(shù)據(jù)一般會以Q作為索引列,與用戶的問題組成QQ搜索模式,這樣數(shù)據(jù)召回時(shí)匹配難度會低。如果使用原始的Q做索引,又會存在無效此干擾的問題,比如:
句子中,無效的相似成分超過60%,這就會對索引匹配造成很大的干擾。 優(yōu)化方案 通過大模型泛化向量索引中的Q,突出核心關(guān)鍵詞,并且把對應(yīng)的Answer的主題利用大模型抽取,Q和A都突出關(guān)鍵詞。 How can I register an account on Alibaba.com? --> register an account. + Answer主題。 突出核心主題,降低無效數(shù)據(jù)的干擾。? 文章片段類知識 文章片段類知識,由于篇幅長,且在語義上與問題可能差異較大,導(dǎo)致無法很好的匹配。 優(yōu)化方案 會通過HyDE生成假設(shè)性問題,然后組成QA-pair對的形式,然后再利用大模型抽取核心關(guān)鍵詞,用來降噪。 5.1.2.3 多級索引近似檢索和傳統(tǒng)數(shù)據(jù)庫檢索不同,近似檢索通過聚類或HNSW建立索引后,在檢索時(shí),會有一定的近似誤差,如果在大量的知識庫中檢索,會產(chǎn)生檢索準(zhǔn)確度和性能的問題,在大型數(shù)據(jù)庫的情況下,一種有效的方法是創(chuàng)建兩個(gè)索引——一個(gè)由摘要組成,另一個(gè)由文檔塊組成,并分兩步搜索,首先通過摘要過濾掉相關(guān)文檔,然后只在這個(gè)相關(guān)組內(nèi)搜索。 ?? 5.2 query改寫的實(shí)現(xiàn)策略 直接使用原始query進(jìn)行檢索,會存在以下幾個(gè)問題: 2)涉及細(xì)節(jié)比較多的問題時(shí),大模型往往無法進(jìn)行高質(zhì)量的回答。 業(yè)務(wù)提出了RAG-Fusion和Step-Back Prompting的兩種優(yōu)化方案。 5.2.1 RAG-FusionRAG-Fusion可以認(rèn)為是MultiQueryRetriever的進(jìn)化版,RAG-Fusion首先根據(jù)原始question從不同角度生成多個(gè)版本的新question,用以提升question的質(zhì)量;然后針對每個(gè)question進(jìn)行向量檢索,到此步為止都是MultiQueryRetriever的功能;與之不同的是,RAG-Fusion在喂給LLM生成答案之前增加了一個(gè)排序的步驟。 RAG-Fusion主要流程如下圖所示: 查詢生成/改寫:使用 LLM 模型對用戶的初始查詢,進(jìn)行改寫生成多個(gè)查詢。 向量搜索:對每個(gè)生成的查詢進(jìn)行基于向量的搜索,形成多路搜索召回。 倒數(shù)排序融合:應(yīng)用倒數(shù)排名融合算法,根據(jù)文檔在多個(gè)查詢中的相關(guān)性重新排列文檔。 重排: 使用一些重排算法對結(jié)果進(jìn)行重排。 輸出生成:然后可以參考重新排列后的topK搜索結(jié)果,生成最終輸出。 ?? 排序包含兩個(gè)動作,一是獨(dú)立對每個(gè)question檢索返回的內(nèi)容根據(jù)相似度排序,確定每個(gè)返回chunk在各自候選集中的位置,相似度越高排名越靠前。二是對所有question返回的內(nèi)容利用RRF(Reciprocal Rank Fusion)綜合排序。 ?? 5.2.2 Step-Back Prompting通過引入一個(gè)后退一步的問題,這個(gè)問題通常更容易回答,并且圍繞一個(gè)更廣泛的概念或原則,大型語言模型可以更有效地構(gòu)建它們的推理。 Step-Back Prompting 過程典型的Step-Back Prompting過程主要包括兩個(gè)步驟: 1)抽象:這是指大型語言模型(LLM)不會立即嘗試回答原始問題。相反,它會提出一個(gè)關(guān)于更大的概念或規(guī)則的更一般性問題。這有助于它思考和查找事實(shí)。 2)推理:在得到一般問題的答案后,大型語言模型(LLM)使用這些信息來思考并回答原始問題。這被稱為“抽象基礎(chǔ)推理”。它利用來自更大觀點(diǎn)的信息來對原始的、更難的問題給出一個(gè)好的答案。 示例 比如問:如果一輛汽車以100公里/小時(shí)的速度行駛,行駛200公里,需要多長時(shí)間? 此時(shí)大模型對數(shù)學(xué)計(jì)算可能會比較迷茫。 后退提示:給定速度和距離,計(jì)算時(shí)間的基本公式是什么? 輸入:為了計(jì)算時(shí)間,我們使用以下公式:時(shí)間=距離/速度 使用公式,時(shí)間=200公里/100公里/小時(shí)=2小時(shí)。 5.2.3 用戶query降噪當(dāng)用戶問一個(gè)問題時(shí),有些停用詞是不起作用的,比如:How to register an account on Alibaba.com,在這個(gè)語境中,核心訴求是 register an account,至于How to在表達(dá)核心訴求時(shí),意義沒那么大,其次,當(dāng)下沉Alibaba的外貿(mào)業(yè)務(wù)時(shí),on Alibaba.com也變得沒那么重要,因?yàn)锳libaba的外貿(mào)業(yè)務(wù)系統(tǒng)就是運(yùn)行在Alibaba.com上,知識庫中的知識自然也是Alibaba.com相關(guān)的。 可以針對用戶問題,去除停用詞,比如ES中維護(hù)了一份停用詞庫,可直接使用。如果解決方案中沒有ES,也可自己維護(hù)停用詞庫,在nltk、stopwords-iso、Rank NL、Common Stop Words in Various Languages等開源庫中維護(hù)了大量的停用詞庫,可根據(jù)需要取用。 5.3 數(shù)據(jù)召回的實(shí)現(xiàn)策略 5.3.1 向量召回在NLP領(lǐng)域,向量召回一直處于無可替代的地位,把自然語言轉(zhuǎn)換成低緯度向量,基于向量的相似度來評判語義的相似程度,這也是業(yè)界比較流行的做法。再結(jié)合上面提到的向量索引的降噪、假設(shè)性性問題以及對用戶query的優(yōu)化,一般都能取得比較不錯的成績。 ?? 但單純的語義向量召回時(shí),當(dāng)文本向量化模型訓(xùn)練不夠優(yōu)時(shí),向量召回的準(zhǔn)確率會比較低,此時(shí)需要利用其他召回方式作為補(bǔ)充。 除了向量召回,常見的召回方式還有分詞召回以及圖譜召回。 5.3.2 分詞召回傳統(tǒng)的倒排索引檢索,基于BM25打分排序機(jī)制,從而找到從分詞上比較相似的知識數(shù)據(jù)。結(jié)合上面提到的去除停用詞策略,以達(dá)到比較精準(zhǔn)的程度。 ?? 5.3.3 圖譜召回知識圖譜在知識生產(chǎn)和關(guān)系提取上有著獨(dú)特的優(yōu)勢,他能基于現(xiàn)有的數(shù)據(jù),根據(jù)其關(guān)系的抽象,產(chǎn)生新的知識。 比如現(xiàn)在有兩條知識: 2)阿里巴巴與物流公司B達(dá)成合作,為客戶提供更加優(yōu)質(zhì)、便捷的物流服務(wù)。 上面兩條知識經(jīng)過 NL2Cypher抽?。?/span> alibaba-logisticsServices-B 基于這兩條知識,可產(chǎn)生一條新知識:alibaba-logisticsServices-A & B 當(dāng)用戶問阿里巴巴平臺支持哪些物流服務(wù)時(shí),可直接找到 A & B。 5.3.4 多路召回在NLP領(lǐng)域,單純的語義向量召回時(shí),當(dāng)文本向量化模型訓(xùn)練不夠優(yōu)時(shí),向量召回的準(zhǔn)確率會比較低,此時(shí)需要利用其他召回作為補(bǔ)充。一般業(yè)務(wù)會采用多路召回的方式,來達(dá)到比較好的召回效果,多路召回的結(jié)果經(jīng)過模型精排,最終篩選出優(yōu)質(zhì)結(jié)果。至于使用幾種召回策略,根據(jù)業(yè)務(wù)而定。 ?? 5.4 后置處理的實(shí)現(xiàn)策略 5.4.1 文檔合并去重首先多路召回可能都會召回同一個(gè)結(jié)果,針對這部分?jǐn)?shù)據(jù)要去重,否則對大模型輸入的token數(shù)是一種浪費(fèi)。 其次,去重后的文檔可以根據(jù)數(shù)據(jù)切分的血緣關(guān)系,做文檔的合并。 比如檢索到的D1、D2、D3都來自同一個(gè)父知識片段D,則使用D替換D1、D2、D3,以保證有比較好的知識語義完整性。 ?? 5.4.2 Rerank精排每種召回策略的排序打分模型有差異,在最終統(tǒng)一的數(shù)據(jù)篩選層面,要有統(tǒng)一的評判標(biāo)準(zhǔn)。 目前,可用的重新排序模型并不多。一種選擇是Cohere提供的在線模型,可以通過API訪問。此外,還有一些開源模型,如bge-reranker-base和bge-reranker-large等,根據(jù)業(yè)務(wù)需要擇優(yōu)選擇。 六、優(yōu)化經(jīng)驗(yàn)總結(jié) RAG想做出來比較容易,但想做好還是比較難的,每個(gè)步驟都有可能對最終效果產(chǎn)生影響。 我們在RAG中也做了大量的探索,比如: 在后置處理優(yōu)化上,做了知識的去重以及rerank的探索等。 RAG的發(fā)展會越來越迅速,只要知識依賴和知識更新的問題沒有得到解決,RAG就有其存在的價(jià)值和一席之地。 |
|