<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是RAG,RAG學習和實踐經驗

深度學習自然語言處理 ? 來源:CS的陋室 ? 2024-04-24 09:17 ? 次閱讀

最近寫的RAG內容已經挺多了,然而內容逐漸變得零散,我今天給大家總結一下RAG的有關內容,同時給大家把有關內容串起來。當然,串起來的更多是概述和摘記,讓大家對RAG的基礎有更整體的了解,詳情大家可以根據需要再展開了解,我也會在合適的位置加上原文鏈接。

之前的文章算下來是三萬多字,加上這篇應該能超過4萬了,也特此記錄一下自己在RAG這塊的學習和實踐經驗。

內容目錄:

概念。

從baseline到技術拓展。(basleine和高級RAG升級)

調優方案。(論文視角和實踐視角)

效果評估。

微調和RAG的權衡。

RAG是否會消亡。(本文私貨)

概念

首先還是得介紹什么是RAG(Retrieval-Augmented Generation)指的是通過將檢索模型和生成模型結合在一起,從而提高了生成內容的相關性和質量。說到概念,嚴謹的,我照舊摘錄來自一篇綜述的解釋:

In the era of Large Language Models, the specific definition of RAG refers to the model, when answering questions or generating text, first retrieving relevant information from a vast corpus of documents. Subsequently, it utilizes this retrieved information to generate responses or text, thereby enhancing the quality of predictions.

說白了就是有檢索和對檢索的使用,基本都可以說是RAG了(極端的,某種程度上,詞典匹配,也算是一種RAG)。

正因為需要包含檢索以及后續大模型的使用,所以RAG和原來常規的深度學習研究不太一樣,他不是一個深度模型,更像是一個系統,系統里面可以有多個組件,一般的結構可用下面這張圖來表示。

8f16de06-f198-11ee-a297-92fbcf53809c.png

但概念解釋我不想止步于此,在這里我想進一步挖掘,RAG這個概念的起源。早在2020年就已經有人提及RAG的概念(Retrieval-augmented generation for knowledge-intensive nlp tasks,他的首版發布在arxiv于2020年5月,如果有更早的歡迎大家再提出)(這篇論文后面有時間,我也想拿出來詳細講講),當年還是seq2seq的時代,但實驗就已經發現,通過檢索,能快速從海量知識中找到和原本問題相關的知識,借助知識帶來的信息能讓最終的生成效果能夠得以提升。

從baseline到技術拓展

baseline

最基礎的RAG,就是上圖左邊的Naive RAG,基本只包含兩個部分,即檢索和生成,為了讓大家更好地理解RAG整體結構,我自己寫了一版基礎RAG項目,這里最大程度還原最基礎RAG的結構,同時也給了一定的調優空間,github地址:https://github.com/ZBayes/basic_rag,講解我分成了兩篇文章:

心法利器[104] | 基礎RAG-向量檢索模塊(含代碼)

心法利器[105] 基礎RAG-大模型和中控模塊代碼(含代碼)

里面有幾個比較關鍵的點,著重拿出來講一下。

這個項目是奔著大型RAG項目去寫的。所以里面會劃分服務而不是一個流程全部寫完,注意看服務和代碼文件的拆分,還有具體服務是怎么串起來的。

服務是用tornado寫的簡單版,當然換成別的服務組件也可以,例如flask、fastapi等。

里面有幾個部分:離線的灌數據模塊,一般就是腳本;檢索模塊是在線的檢索,目前使用的是最簡單的向量召回;大模型模塊用的是一個chatglm,直接封裝服務就好了。

很多位置我都為后續的迭代留了空間,例如向量檢索這里,我切分了很多層,searcher、vec_searcher、vec_index,就是給了很多空間,一個searcher可以有很多不同的索引和索引類型,vec_searcher是向量檢索,下面可以有多個vec_index,對應不同的向量模型。

技術拓展

有關RAG的拓展,往往會在naive基礎上分為兩個階段,高級RAG和模塊化RAG。

高級的RAG能很大程度優化原始RAG的問題,在索引、檢索和生成上都有更多精細的優化,主要的優化點會集中在索引、向量模型優化、檢索后處理等模塊進行優化,模塊化RAG是對高級RAG的一種升級,這里面集成了大量優化策略,并將這些策略進行重組,形成完整的模塊獨立完成特定功能,很多內容和前面的高級RAG提及的內容很接近,只是更加模塊化,如搜索模塊、記憶模塊、額外生成模塊、任務適配模塊、對齊模塊、驗證模塊等,因為RAG本身是一個高度組織性的項目,因此在迭代過程中,是允許且需要對這些模塊進行優化和調整的,可以增減、調整各個模塊。

具體有什么調優方案,我在下一個章節展開說。

調優方案

說到調優,無論是學術界還是工業界,可謂是八仙過海各顯神通,但是科研和工業界各自會呈現不同的傾向性,所以這里我分兩個大塊來講,分別是學術界和工業界的思路。

學術界

學術界自然離不開綜述,1月份我對綜述(Retrieval-Augmented Generation for Large Language Models: A Survey)進行了詳細的講解,字數有7千多(前沿重器[41] | 綜述-面向大模型的檢索增強生成(RAG)),文章里對RAG的升級路徑進行了詳細解釋,其中重點從檢索模塊、生成模塊、整體等角度對RAG目前的關鍵技術進行了講解,為RAG的調優提供了大量思路。簡單摘錄一下:

檢索模塊重在關注向量模型的合理表征(領域微調和下游任務微調)、query和文檔語義空間的匹配(query改寫、實體mask等策略)、大模型和檢索模塊協同的優化。

生成模塊關注檢索的后處理(重點信息提取、檢索結果重排)、生成結果的處理等角度。

整體調優從調優階段(入手點)、數據來源和調優思路三個角度來分析具體的調優方法。

里面的內容過多,不好展開,詳情大家可以看我的講解(前沿重器[41] | 綜述-面向大模型的檢索增強生成(RAG))或者是綜述原文(Retrieval-Augmented Generation for Large Language Models: A Survey)。

另外值得提起的是兩篇RAG比較有代表性的文章,這里給出我的解讀以及思考,分別是self-RAG(前沿重器[42] | self-RAG-大模型決策的典型案例探究)和CRAG(前沿重器[43] | 谷歌中科院新文:CRAG-可矯正的檢索增強生成),具體他們是怎么做的以及我是怎么分析和看待的,都在這里了。

工業界

工業界也有一篇綜述,不過里面體提到的方案和思路更加偏向應用,所以我想把這篇放在工業界(https://pub.towardsai.net/advanced-rag-techniques-an-illustrated-overview-04d193d8fec6),我也寫了解讀文章(前沿重器[40] | 高級RAG技術——博客閱讀)。

和前面的綜述類似,這里也提到了基礎RAG、高級RAG和區別,然后就展開解釋各個模塊的優化了:

離線文檔處理。

文檔內容增強。

索引構建和選擇。

檢索策略多樣性和合并。

查詢后處理。

多輪和聊天引擎。

查詢路由和智能體。

響應合成。

模型微調。

這些結構里,能看到很多現實應用才會遇到的特定問題,例如檢索策略多樣性和合并,工業界和學術界的視角差異還是很大的,工業界更傾向于拆分分別處理,既能更方便特異化處理提升上限,也方便進行分工推進工作,而學術界其實并沒有那么擅長尤其是這種橫向的拆分,確實是不夠學術優雅。

而且,我自己也根據自己的經驗提供了很多優化思路,專門有寫文章(心法利器[106] 基礎RAG-調優方案),盡管現在來看還有很多可以聊的部分(后面有機會我再寫?。?,但這篇也很實用了,希望對大家有多幫助,里面提了很多實踐和分析數據才會發現的優化點。我是分為檢索調優、prompt、后處理、微調這幾個方面去談的。

除此之外,知識的處理也是一個非常重要的一環,尤其現在大模型出來后,文檔處理能力提升還挺明顯的,我正好寫了一篇文章,主要是串講知識的處理和使用流程,同時介紹了里面的常用方案,大家可以在有個大框架的基礎上進一步深入學習(心法利器[110] | 知識文檔處理和使用流程)。

有一篇比較取巧地query拓展的文章(前沿重器[38] | 微軟新文query2doc:用大模型做query檢索拓展),屬于對搜索有用,現在視角看對RAG領域也有很大的優化收益,所以在這里也重提,非常推薦大家在早期項目上使用這個方案,雖然多了一次大模型調用的代價,但是效果提升還挺明顯,值得推薦。趁此機會也補充說明一下,在之前已經有一篇類似的論文,HyDE(Precise Zero-Shot Dense Retrieval without Relevance Labels),這篇我沒出解讀,感覺重復不少,我就不重寫了,但仍很推薦大家也讀讀看。

效果評估

效果評估是算法的重要一環,我也對這塊內容進行了詳細調研和經驗總結(心法利器[109] | RAG效果評估經驗)。類似的,我也是從學術界和實際場景應用兩個角度分別闡述兩者的評估方案,并從快速驗證、穩定評估和問題定位三個角度,給出實踐場景下的建議。

方案選擇和權衡

RAG只是大模型的一種使用方法,檢索技術能快速從海量知識中找到和原本問題相關的知識,借助知識帶來的信息能讓最終的生成效果能夠得以提升,因此RAG本質上并非大模型的專屬,從而可以發現大模型不是非RAG不可,RAG也不是非大模型不可,RAG只是大模型的一種打開方式,他所解決的,是對知識的依賴,這可以是知識的可見性(能懂大模型之前沒見過或者沒學好的東西)、及時性(新知識)、存在性(不會的能拒絕)等問題。

而它的使用時機,以及和微調之間的權衡,詳細地討論可以參考這篇文章(心法利器[108] | 微調與RAG的優缺點分析),在這里我有通過論文、社區等角度匯總了多方觀點,并通過案例分析的方式給出了我的答案。

RAG(檢索增強生成)會不會消亡呢

另外,我想在這里駁斥一個社區經常談及的問題:“RAG(檢索增強生成)會不會消亡呢?”(https://www.zhihu.com/question/637421964),這個問題的背景是目前的大模型Context Length變大,RAG就可能會消失。這個問題我本想專門寫文章,但又感覺不夠長,寫一半成了廢案,于是就放在這里吧,還挺合適的。

第一,這個問題能問出來,說明對RAG背后所希望解決的問題理解不足吧,RAG所要解決的是知識依賴的問題,知識依賴這個事和大模型Context Length的關系并不緊密。

第二,知識依賴這不只是大模型的問題,而是整個領域都要面對的問題。在很早之前(都是21年那會的文章了),我就寫過一篇文章(心法利器[45] | 模型需要的信息提供夠了嗎),從一個更高角度來聊信息傳遞給模型的重要性,模型要是不知道,那讓他干的事就很可能會辦不好,而向模型傳遞信息,一般有兩個方法,一個是訓練,一個是特征,對應到現在大模型的場景,那就是微調和prompt,前者通過大量相似相關的數據案例告訴模型讓模型照著預測,后者則是把規則描述講給模型聽或者把關鍵信息直接傳給模型,降低他的推理壓力,只要關鍵信息沒有提供給模型,那效果就好不了,過去的bert是這樣,現在的大模型也是這樣。

第三,同樣是模型的問題。無論是大模型,還是之前的小模型,對信息反饋的及時性,仍舊不足。大家或多或少都會發現,一些去年前期發布的開源模型,或多或少都對新的知識并不了解,其根本問題就是,沒有學習到新知識,要學習新知識,不得不經過嚴格的訓練和評估才能上線,且還要面對遺忘的問題,要做實時的難度非常大,這里就是第二點提出的微調方向。要解決這種,不得不依賴外部信息的支持,然后通過第二點提到的prompt的方式輸入到模型中,而這些知識,無法繞開檢索來進行。舉個例子,某些商店的上架商品信息,天氣日期、新聞等的一些實時性要求高的知識,就只能通過數據庫來存儲,數據庫的更新可以非常敏捷,查詢后配合prompt交給大模型來解決了。

綜上,只要上面的知識依賴、知識更新問題沒有解決,那RAG就仍有一席之地。至于RAG內部說到的搜索,可以說是從來沒大火過但是又一直在喝湯的領域了。

審核編輯;黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 大模型
    +關注

    關注

    2

    文章

    1516

    瀏覽量

    1099

原文標題:近期RAG技術總結和串講(4w字RAG文章紀念)

文章出處:【微信號:zenRRan,微信公眾號:深度學習自然語言處理】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    有誰能多介紹些AD的實踐經驗嗎?

    有誰能多介紹些AD的實踐經驗嗎?
    發表于 04-03 09:20

    實踐經驗還是理論學習

    2014考研已結束,2015考研又開始準備了,作為一個動手能力平平理論水平也不高的電子一族是走考研理論學習之路還是走工作實踐經驗之路?大家有什么樣的看法???......
    發表于 03-10 17:24

    請問有關于STM32普通IO口模擬操作SMBus通信的相關實踐經驗嗎?

    求助啊,哪位有關于STM32普通IO口模擬操作SMBus通信的相關實踐經驗?分享下,多謝。普通IO口模擬操作I2C的例子很多,也比較容易,SMBus與I2C有很多類似的地方,應該可以通用,但是很少看到有這方的相關詳細介紹。
    發表于 10-22 08:43

    工業吸塵吸水機谷歌優化推廣,12年實踐經驗

    `工業吸塵器的外貿怎么推廣,網站優化更有效果工業吸塵吸水機谷歌優化推廣,12年實踐經驗掃地機關鍵詞如何SEO優化到GOOGLE首頁 曾經我以為GOOGLE SEO優化更適合機械制造商,A但現在我
    發表于 10-28 15:53

    編譯器原理及實踐

    具體介紹編譯軟件的原理及相關的實踐經驗,是編程學習的相關的資料。
    發表于 01-12 11:35 ?0次下載

    不同行業客戶如何利用物聯網平臺的實踐經驗案例分析

    物聯網是IT和OT結合的產物,任何以IT為中心的定義都無法描述OT的重要性,反之亦然。在本文中我將不同行業客戶如何利用物聯網平臺的實踐經驗分享給大家。
    的頭像 發表于 12-01 16:46 ?5161次閱讀

    在汽車行業多年來戰略與設計上的理論與實踐經驗

    istd汽車咨詢團隊,以及旗下戰略管理咨詢團隊思略特與數字化體驗中心,結合在汽車行業多年來戰略與設計上的理論與實踐經驗,嘗試為車企解惑產品體驗迷思、甄別創新方向、定位關鍵戰局并把握先機,找到真正實現差異化競爭的核心要素。
    的頭像 發表于 11-17 14:59 ?3341次閱讀

    OpenHarmony Tech Day技術日 創新教育教學實踐經驗分享

      張澤華就基于OpenHarmony的創新教育教學實踐經驗分享進行演講
    的頭像 發表于 04-25 14:44 ?553次閱讀
    OpenHarmony Tech Day技術日 創新教育教學<b class='flag-5'>實踐經驗</b>分享

    Modbus協議通訊學習仿真器虛擬串口完整套裝實踐經驗總結

    Modbus通訊學習完整套裝,實踐經驗總結親測好用助力新手快速掌握MOSBUS協議的讀寫操作,非常好用。工具套裝包括MODBUS仿真器、虛擬串口對、MODBUS調試助手、串口調試助手。提供操作教程。
    的頭像 發表于 11-22 14:49 ?671次閱讀
    Modbus協議通訊<b class='flag-5'>學習</b>仿真器虛擬串口完整套裝<b class='flag-5'>實踐經驗</b>總結

    使用Koordinator支持異構資源管理和任務調度場景的實踐經驗

    Koordinator 是阿里云基于過去我們建設的統一調度系統中積累的技術和實踐經驗,對外開源了新一代的調度系統。
    的頭像 發表于 08-15 10:09 ?452次閱讀
    使用Koordinator支持異構資源管理和任務調度場景的<b class='flag-5'>實踐經驗</b>

    如何在不微調的情況下提高RAG的準確性?

    數據科學家、AI 工程師、MLOps 工程師和 IT 基礎設施專業人員在設計和部署檢索增強生成(RAG)工作流時,必須考慮各項因素,比如大語言模型(LLM) 核心組件以及評估方法等等。
    的頭像 發表于 01-05 10:26 ?413次閱讀
    如何在不微調的情況下提高<b class='flag-5'>RAG</b>的準確性?

    搜索出生的百川智能大模型RAG爬坑之路總結

    今天對百川的RAG方法進行解讀,百川智能具有深厚的搜索背景,來看看他們是怎么爬RAG的坑的吧~
    的頭像 發表于 01-05 15:02 ?841次閱讀
    搜索出生的百川智能大模型<b class='flag-5'>RAG</b>爬坑之路總結

    訊維集中電源控制器:案例研究與實踐經驗分享

    集中電源控制器在實踐中的應用非常廣泛,以下是一些案例研究與實踐經驗分享: 數據中心應用案例:在數據中心中,集中電源控制器可以實現對服務器、網絡設備和存儲設備等關鍵基礎設施的電源集中管理和監控。通過
    的頭像 發表于 01-30 14:59 ?179次閱讀
    訊維集中電源控制器:案例研究與<b class='flag-5'>實踐經驗</b>分享

    OpenVINO?協同Semantic Kernel:優化大模型應用性能新路徑

    作為主要面向 RAG 任務方向的框架,Semantic Kernel 可以簡化大模型應用開發過程,而在 RAG 任務中最常用的深度學習模型就是 Embedding 和 Text completion,分別實現文本的語義向量化和文
    的頭像 發表于 03-08 10:41 ?204次閱讀
    OpenVINO?協同Semantic Kernel:優化大模型應用性能新路徑

    檢索增強生成(RAG)如何助力企業為各種企業用例創建高質量的內容?

    在生成式 AI 時代,機器不僅要從數據中學習,還要生成類似人類一樣的文本、圖像、視頻等。檢索增強生成(RAG)則是可以實現的一種突破性方法。
    的頭像 發表于 03-29 15:09 ?235次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>