一文帶你了解RAG(檢索增強生成) | 概念理論介紹+ 代碼實操
共 16581字,需瀏覽 34分鐘
·
2024-08-07 06:00
大模型 RAG 實戰(zhàn)教程 之 RAG潘多拉寶盒 https://github.com/km1994/AwesomeRAG
一、LLMs 已經具備了較強能力了,為什么還需要 RAG(檢索增強生成)?
-
幻覺問題:LLM 采用基于統(tǒng)計的概率方法逐詞生成文本,這一機制內在地導致其可能出現看似邏輯嚴謹實則缺乏事實依據的輸出,即所謂的“鄭重其事的虛構陳述”; -
時效性問題:隨著 LLM 規(guī)模擴大,訓練成本與周期相應增加。鑒于此,包含最新信息的數據難以融入模型訓練過程,導致 LLM 在應對諸如“請推薦當前熱門影片”等時間敏感性問題時力有未逮; -
數據安全問題:通用的 LLM 沒有企業(yè)內部數據和用戶數據,那么企業(yè)想要在保證安全的前提下使用 LLM,最好的方式就是把數據全部放在本地,企業(yè)數據的業(yè)務計算全部在本地完成。而在線的大模型僅僅完成一個歸納的功能;
二、介紹一下 RAG?
RAG 技術架構圖
三、RAG 主要包含哪些模塊?
-
模塊一:版面分析 -
本地知識文件讀?。╬df、txt、html、doc、excel、png、jpg、語音等) -
知識文件復原 -
模塊二:知識庫構建 -
知識文本分割,并構建Doc文本 -
Doc文本 embedding -
Doc文本 構建索引 -
模塊三:大模型微調 -
模塊四:基于RAG的知識問答 -
用戶query embedding -
query 召回 -
query 排序 -
將 Top K 個相關的 Doc 進行拼接,構建 context -
基于 query 和 context 構建 Prompt -
將 prompt 喂給大模型生成答案
四、RAG 相較于直接使用 LLMs進行問答 有哪些優(yōu)點?
-
可擴展性:減小模型規(guī)模及訓練開銷,同時簡化知識庫的擴容更新過程。 -
準確性:通過引用信息源,用戶能夠核查答案的可信度,進而增強對模型輸出結果的信任感。 -
可控性:支持知識內容的靈活更新與個性化配置。 -
可解釋性:展示模型預測所依賴的檢索條目,增進理解與透明度。 -
多功能性:RAG 能夠適應多種應用場景的微調與定制,涵蓋問答、文本摘要、對話系統(tǒng)等領域。 -
時效性:運用檢索技術捕捉最新信息動態(tài),確保回答既即時又準確,相比僅依賴固有訓練數據的語言模型具有明顯優(yōu)勢。 -
領域定制性:通過對接特定行業(yè)或領域的文本數據集,RAG 能夠提供針對性的專業(yè)知識支持。 -
安全性:通過在數據庫層面實施角色劃分與安全管控,RAG 有效強化了對數據使用的管理,相較于微調模型在數據權限管理上的潛在模糊性,展現出更高的安全性。
五、對比一下 RAG 和 SFT,說一下兩者有哪些區(qū)別?
模塊一:版面分析
為什么 需要 版面分析?
盡管RAG(檢索增強生成)技術的核心價值在于其結合檢索與生成手段以提升文本內容的精確度與連貫性,然而在一些具體應用領域,如文檔解析、智能化寫作及對話系統(tǒng)構建中,特別是在面對結構化或半結構化信息的處理需求時,其功能邊界可能拓展至版面分析。
這是由于此類信息往往嵌于特定的布局結構中,需要對頁面元素及其相互關系進行深入理解。
step 1:本地知識文件獲取
q1:如何進行 本地知識文件獲取?
本地知識文件獲取涉及從多種數據源(如.txt、.pdf、.html、.doc、.xlsx、.png、.jpg、音頻文件等)提取信息的過程。針對不同類型的文件,需要采取特定的訪問與解析策略來有效獲取其中蘊含的知識。下面我們將介紹對于不同數據源數據的獲取方式和難點。
q2:如何獲取 富文本txt 中內容?
-
介紹:富文本 主要存儲于 txt 文件中,因為排版比較整潔,所以獲取方式比較簡單 -
實戰(zhàn)技巧: -
【版面分析——富文本txt讀取】
q3:如何獲取 PDF文檔 中內容?
-
介紹:PDF文檔中數據比較復雜,包含文本、圖片、表格等不同樣式的數據,所以解析過程中會比較復雜 -
實戰(zhàn)技巧: -
【版面分析——PDF 解析神器 pdfplumber】 -
【版面分析——PDF 解析神器 PyMuPDF】
q4:如何獲取 HTML文檔 中內容?
-
介紹:PDF文檔中數據比較復雜,包含文本、圖片、表格等不同樣式的數據,所以解析過程中會比較復雜 -
實戰(zhàn)技巧: -
【版面分析——網頁HTML解析 BeautifulSoup】
q5:如何獲取 Doc文檔 中內容?
-
介紹:Doc文檔中數據比較復雜,包含文本、圖片、表格等不同樣式的數據,所以解析過程中會比較復雜 -
實戰(zhàn)技巧: -
【版面分析——Docx 解析神器 python-docx】
q6:如何使用 OCR 獲取圖片內容?
-
介紹:光學字符識別(Optical Character Recognition, OCR)是指對文本資料的圖像文件進行分析識別處理,獲取文字及版面信息的過程。亦即將圖像中的文字進行識別,并以文本的形式返回。 -
思路: -
文字識別:對定位好的文字區(qū)域進行識別,主要解決的問題是每個文字是什么,將圖像中的文字區(qū)域進轉化為字符信息。 -
文字檢測:解決的問題是哪里有文字,文字的范圍有多少; -
目前開源的OCR項目 -
Tesseract -
PaddleOCR -
EasyOCR -
chineseocr -
chineseocr_lite -
TrWebOCR -
cnocr -
hn_ocr -
理論學習: -
【版面分析——圖片解析神器 OCR】 -
實戰(zhàn)技巧: -
【版面分析——OCR神器 tesseract】 -
【版面分析——OCR神器 PaddleOCR】 -
【版面分析——OCR神器 hn_ocr】
q7:如何使用 ASR 獲取語音內容?
-
別稱:自動語音識別AutomaTlc Speech RecogniTlon,(ASR) -
介紹:將一段語音信號轉換成相對應的文本信息,好比"機器的聽覺系統(tǒng)”,它讓機器通過識別和理解,把語音信號轉變?yōu)橄鄳奈谋净蛎睢? -
目標:將人類的語音中的詞匯內容轉換為計算機可讀的輸入(eg:按鍵、二進制編碼或者字符序列) -
思路: -
聲學信號預處理:為了更有效地提取特征往往還需要對所采集到的聲音信號進行濾波、分幀等預處理工作,把要分析的信號從原始信號中提取出來; -
特征提?。簩⒙曇粜盘枏臅r域轉換到頻域,為聲學模型提供合適的特征向量; -
聲學模型:根據聲學特性計算每一個特征向量在聲學特征上的得分; -
語言模型:根據語言學相關的理論,計算該聲音信號對應可能詞組序列的概率; -
字典與解碼:根據已有的字典,對詞組序列進行解碼,得到最后可能的文本表示 -
理論教程: -
【版面分析 之 語音識別】 -
實戰(zhàn)技巧: -
【版面分析 之 Speech-to-Text】 -
【版面分析 之 WeTextProcessing】 -
【版面分析——ASR神器 Wenet】 -
【版面分析 之 ASR神器訓練】
step 2:知識文件復原
q1:為什么需要進行 知識文件復原?
q2:如何對 知識文件進行復原?
-
方法一:基于規(guī)則的知識文件復原 -
方法二:基于 Bert NSP 進行上下句拼接
step 3:版面分析———優(yōu)化策略篇
-
理論學習: -
【版面分析———優(yōu)化策略篇】
step 4:Homework
-
任務描述:使用上述方法對 【SMP 2023 ChatGLM金融大模型挑戰(zhàn)賽】的 【ChatGLM評估挑戰(zhàn)賽-金融賽道數據集】進行版面分析 -
任務效果:分析各種方法效果和性能
模塊二:知識庫構建
為什么 需要 知識庫構建?
-
擴展模型能力:大規(guī)模語言模型如GPT系列雖然具有強大的語言生成和理解能力,但受限于訓練數據集的覆蓋范圍,它們可能無法準確回答一些基于特定事實或詳細背景信息的問題。通過構建知識庫,RAG可以補充模型自身的知識局限性,允許模型檢索到最新、最準確的信息來生成答案。 -
實時更新信息:知識庫可以實時更新和擴充,確保模型能夠獲取最新的知識內容,這對于處理時效性強的信息尤為關鍵,比如新聞事件、科技進展等。 -
提高準確性:RAG結合了檢索與生成兩個過程,在生成回答前先檢索相關文檔,從而提高了回答問題時的準確性。這樣,模型生成的答案不僅基于其內部參數化的知識,還基于外部可靠來源的知識庫。 -
減少過擬合與hallucination(幻覺生成):大模型有時會因為過度依賴內在模式而出現hallucination現象,即生成看似合理實則無依據的答案。通過引用知識庫中的確切證據,RAG可以降低此類錯誤產生的可能性。 -
增強可解釋性:RAG不僅能提供答案,還能指出答案的來源,增強了模型生成結果的透明度和可信度。 -
支持個性化及私有化需求:對于企業(yè)或個人用戶,可以通過構建專屬知識庫滿足特定領域或私人定制的需求,使得大模型能更好地服務于特定場景和業(yè)務。
step 1:知識文本分塊
-
為什么需要對文本分塊? -
信息丟失的風險:試圖一次性提取整個文檔的嵌入向量,雖然可以捕捉到整體的上下文,但也可能會忽略掉許多針對特定主題的重要信息,這可能會導致生成的信息不夠精確或者有所缺失。 -
分塊大小的限制:在使用如OpenAI這樣的模型時,分塊大小是一個關鍵的限制因素。例如,GPT-4模型有一個32K的窗口大小限制。盡管這個限制在大多數情況下不是問題,但從一開始就考慮到分塊大小是很重要的。 -
主要考慮兩個因素: -
embedding模型的Tokens限制情況; -
語義完整性對整體的檢索效果的影響; -
實戰(zhàn)技巧: -
【知識庫構建——知識文本分塊】 -
【知識庫構建——文檔切分優(yōu)化策略篇】
step 2:Docs 向量化(embdeeing)
q1:什么是Docs 向量化(embdeeing)?
例如,如果兩個文本相似,則它們的向量表示也應該相似,這一組向量空間內的數組表示描述了文本之間的細微特征差異。
q2:Embedding 是如何工作的?
-
“The cat chases the mouse” “貓追逐老鼠” -
“The kitten hunts rodents” 小貓捕獵老鼠。 -
“I like ham sandwiches” 我喜歡火腿三明治。
q3:Embedding 的語義檢索方式對比關鍵詞檢索的優(yōu)勢?
-
語義理解:基于 Embedding 的檢索方法通過詞向量來表示文本,這使得模型能夠捕捉到詞匯之間的語義聯(lián)關系,相比之下,基于關鍵詞的檢索往往關注字面匹配,可能忽略了詞語之間的語義聯(lián)系。 -
容錯性:由于基于 Embedding 的方法能夠理解詞匯之間的關系,所以在處理拼寫錯誤、同義詞、近義詞等情況時更具優(yōu)勢。而基于關鍵詞的檢索方法對這些情況的處理相對較弱。 -
多語言支持:許多 Embedding 方法可以支持多種語言,有助于實現跨語言的文本檢索。比如你可以用中文輸入來查詢英文文本內容,而基于關鍵詞的檢索方法很難做到這一點。 -
語境理解:基于 Embedding 的方法在處理一詞多義的情況時更具優(yōu)勢,因為它能夠根據上下文為詞語賦予不同的向量表示。而基于關鍵詞的檢索方法可能無法很好地區(qū)分同一個詞在不同語境下的含義。
q4:Embedding檢索存在哪些限制?
-
輸入詞數限制:即便借助Embedding技術選取與查詢最為匹配的文本片段供大型模型參考,詞匯數量的約束依然存在。當檢索覆蓋的文本范圍廣泛時,為了控制注入模型的上下文詞匯量,通常會對檢索結果設定TopK的閾值K,但這不可避免地引發(fā)了信息遺漏的問題。 -
僅支持文本數據:現階段的GPT-3.5及諸多大型語言模型尚不具備圖像識別功能,然而,在知識檢索過程中,許多關鍵信息往往依賴于圖文結合來充分理解。例如,學術論文中的示意圖、財務報告中的數據圖表,僅憑文本難以精準把握其內涵。 -
大模型的胡編亂造:當檢索到的相關文獻資料不足以支撐大型模型準確回答問題時,為盡力完成響應,模型可能會出現一定程度的“即興創(chuàng)作”,即在有限信息基礎上進行推測與補充。
-
理論學習: -
【知識庫構建—Doc 向量化】 -
實戰(zhàn)技巧: -
【Docs向量化——騰訊詞向量】 -
【Docs向量化——sbert】 -
【Docs向量化——SimCSE】 -
【Docs向量化——text2vec】 -
【Docs向量化——SGPT】 -
【Docs向量化——BGE —— 智源開源最強語義向量模型】 -
【Docs向量化——M3E:一種大規(guī)模混合embedding】
step 3:Docs 構建索引
-
介紹 -
實戰(zhàn)技巧: -
【Docs構建索引——Faiss】 -
【Docs構建索引——milvus】 -
【Docs構建索引—— Elasticsearch】
模塊三:大模型微調
為什么 需要 大模型微調?
-
第一個原因是,因為大模型的參數量非常大,訓練成本非常高,每家公司都去從頭訓練一個自己的大模型,這個事情的性價比非常低; -
第二個原因是,Prompt Engineering的方式是一種相對來說容易上手的使用大模型的方式,但是它的缺點也非常明顯。因為通常大模型的實現原理,都會對輸入序列的長度有限制,Prompt Engineering 的方式會把Prompt搞得很長。
-
第三個原因是,Prompt Engineering的效果達不到要求,企業(yè)又有比較好的自有數據,能夠通過自有數據,更好的提升大模型在特定領域的能力。這時候微調就非常適用。 -
第四個原因是,要在個性化的服務中使用大模型的能力,這時候針對每個用戶的數據,訓練一個輕量級的微調模型,就是一個不錯的方案。 -
第五個原因是,數據安全的問題。如果數據是不能傳遞給第三方大模型服務的,那么搭建自己的大模型就非常必要。通常這些開源的大模型都是需要用自有數據進行微調,才能夠滿足業(yè)務的需求,這時候也需要對大模型進行微調。
如何對大模型進行微調?
q1:大模型的微調技術路線問題
-
技術路線一:對全量的參數,進行全量的訓練,這條路徑叫全量微調FFT(Full Fine Tuning)。 -
技術路線二:只對部分的參數進行訓練,這條路徑叫PEFT(Parameter-Efficient Fine Tuning)。
q2:大模型的全量微調FFT 技術存在哪些問題
-
問題一:訓練的成本會比較高,因為微調的參數量跟預訓練的是一樣的多的; -
問題二:災難性遺忘(Catastrophic Forgetting),用特定訓練數據去微調可能會把這個領域的表現變好,但也可能會把原來表現好的別的領域的能力變差。
q3:大模型的 PEFT(Parameter-Efficient Fine Tuning) 解決哪些問題
-
技術路線一:監(jiān)督式微調SFT(Supervised Fine Tuning),這個方案主要是用人工標注的數據,用傳統(tǒng)機器學習中監(jiān)督學習的方法,對大模型進行微調; -
技術路線二:基于人類反饋的強化學習微調RLHF(Reinforcement Learning with Human Feedback),這個方案的主要特點是把人類的反饋,通過強化學習的方式,引入到對大模型的微調中去,讓大模型生成的結果,更加符合人類的一些期望; -
技術路線三:基于AI反饋的強化學習微調RLAIF(Reinforcement Learning with AI Feedback),這個原理大致跟RLHF類似,但是反饋的來源是AI。這里是想解決反饋系統(tǒng)的效率問題,因為收集人類反饋,相對來說成本會比較高、效率比較低。
大模型LLM進行SFT操作的時候在學習什么?
-
預訓練->在大量無監(jiān)督數據上進行預訓練,得到基礎模型-->將預訓練模型作為SFT和RLHF的起點。 -
SFT-->在有監(jiān)督的數據集上進行SFT訓練,利用上下文信息等監(jiān)督信號進一步優(yōu)化模型-->將SFT訓練后的模型作為RLHF的起點。 -
RLHF-->利用人類反饋進行強化學習,優(yōu)化模型以更好地適應人類意圖和偏好-->將RLHF訓練后的模型進行評估和驗證,并進行必要的調整。
step 1:大模型微調訓練數據構建
-
介紹:如何構建 訓練數據? -
實戰(zhàn)技巧: -
【大模型(LLMs)LLM生成SFT數據方法篇】
step 2:大模型指令微調篇
-
介紹:如何構建 訓練數據? -
實戰(zhàn)技巧: -
【大模型(LLMs)繼續(xù)預訓練篇】 -
【大模型(LLMs)指令微調篇】 -
【大模型(LLMs)獎勵模型訓練篇】 -
【大模型(LLMs)強化學習——PPO訓練篇】 -
【大模型(LLMs)強化學習——DPO訓練篇】
模塊四:文檔檢索
為什么 需要 文檔檢索?
step 1:文檔檢索負樣本樣本挖掘
-
介紹:在各類檢索任務中,為訓練好一個高質量的檢索模型,往往需要從大量的候選樣本集合中采樣高質量的負例,配合正例一起進行訓練。 -
實戰(zhàn)技巧: -
【文檔檢索——負樣本樣本挖掘篇】
step 2:文檔檢索優(yōu)化策略
-
介紹:文檔檢索優(yōu)化策略 -
實戰(zhàn)技巧: -
【文檔檢索——文檔檢索優(yōu)化策略篇】
模塊五:Reranker
為什么 需要 Reranker?
-
Embedding 模型:用于將外部文檔和用戶查詢轉換成 Embedding 向量 -
向量數據庫:用于存儲 Embedding 向量和執(zhí)行向量相似性檢索(檢索出最相關的 Top-K 個信息) -
提示詞工程(Prompt engineering):用于將用戶的問題和檢索到的上下文組合成大模型的輸入 -
大語言模型(LLM):用于生成回答
什么是 Reranker?
step 1:Reranker 篇
-
理論學習: -
【RAG文檔檢索——Reranker 篇】 -
實戰(zhàn)技巧: -
【Reranker——bge-reranker篇】
模塊六:RAG 評測面
為什么需要 對 RAG 進行評測?
step 1:RAG 評測 篇
-
理論學習: -
【RAG評測篇】
模塊七:RAG 開源項目推薦學習
為什么 需要 RAG 開源項目推薦學習?
RAG 開源項目推薦 —— RAGFlow 篇
-
介紹:RAGFlow 是一款基于深度文檔理解構建的開源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以為各種規(guī)模的企業(yè)及個人提供一套精簡的 RAG 工作流程,結合大語言模型(LLM)針對用戶各類不同的復雜格式數據提供可靠的問答以及有理有據的引用。 -
項目學習: -
【RAG 項目推薦——RagFlow 篇(一)——RagFlow docker 部署】 -
【RAG 項目推薦——RagFlow 篇(二)——RagFlow 知識庫構建】 -
【RAG 項目推薦——RagFlow 篇(三)——RagFlow 模型供應商選擇】 -
【RAG 項目推薦——RagFlow 篇(四)——RagFlow 對話】 -
【RAG 項目推薦——RagFlow 篇(五)——RAGFlow Api 接入(以 ollama 為例)】 -
【RAG 項目推薦——RagFlow 篇(六)——RAGFlow 源碼學習】
RAG 開源項目推薦 —— QAnything 篇
-
介紹:QAnything(Question and Answer based on Anything)是一個本地知識庫問答系統(tǒng),旨在支持多種文件格式和數據庫,允許離線安裝和使用。使用QAnything,您可以簡單地刪除本地存儲的任何格式的文件,并獲得準確、快速和可靠的答案。QAnything目前支持的知識庫文件格式包括:PDF(pdf) , Word(docx) , PPT(pptx) , XLS(xlsx) , Markdown(md) , Email(eml) , TXT(txt) , Image(jpg,jpeg,png) , CSV (csv)、網頁鏈接(html)等。 -
項目學習: -
【RAG 開源項目推薦 —— QAnything 篇】
RAG 開源項目推薦 —— ElasticSearch-Langchain 篇
-
介紹:受langchain-ChatGLM項目啟發(fā),由于Elasticsearch可實現文本和向量兩種方式混合查詢,且在業(yè)務場景中使用更廣泛,因此本項目用Elasticsearch代替Faiss作為知識存儲庫,利用Langchain+Chatglm2實現基于自有知識庫的智能問答。 -
項目學習: -
【【LLMs 入門實戰(zhàn)】基于 本地知識庫 的高效 ??ElasticSearch-Langchain-Chatglm2】
RAG 開源項目推薦 —— Langchain-Chatchat 篇
-
介紹:Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 與 ChatGLM 等語言模型的本地知識庫問答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain -
項目學習: -
【【LLMs 入門實戰(zhàn)】基于 本地知識庫 的高效 ??Langchain-Chatchat】
評論
圖片
表情
