關於檢索增強生成(RAG)的文章已經有很多了,如果我們能建立出可訓練的檢索器,或者說整個RAG可以像微調大型語言模型(LLM)那樣定製化的話,那肯定能夠獲得更好的結果。但是當前RAG的問題在於各個子模組之間並沒有完全協調,就像一個縫合怪一樣,雖然能夠工作但各部分並不和諧,所以我們這裡介紹RAG 2.0的概念來解決這個問題。
什麼是RAG?
簡單來說,RAG可以為我們的大型語言模型(LLM)提供額外的上下文,以生成更好、更具體的回應。LLM是在公開可用的資料上訓練的,它們本身是非常智慧的系統,但它們無法回答具體問題,因為它們缺乏回答這些問題的上下文。
所以RAG可以向LLM插入新知識或能力,儘管這種知識插入並不是永久的。而另一種常用向LLM新增新知識或能力的方法是透過對我們特定資料進行微調LLM。
透過微調新增新知識相當困難,昂貴,但是卻是永久性。透過微調新增新能力甚至會影響它以前擁有的知識。在微調過程中,我們無法控制哪些權重將被改變,因此也無法得知哪些能力會增加或減少。
選擇微調、RAG還是兩者的結合,完全取決於手頭的任務。沒有一種適合所有情況的方法。
RAG的經典步驟如下:
- 將文件分成均勻的塊。
- 每個塊是一段原始文字。
- 使用編碼器為每個塊生成嵌入(例如,OpenAI嵌入,sentence_transformer等),並將其儲存在資料庫中。
- 找到最相似的編碼塊,獲取這些塊的原始文字,並將其作為上下文與提示一起提供給生成器。
RAG 2.0
當今典型的RAG系統使用現成的凍結模型進行嵌入,使用向量資料庫進行檢索,以及使用黑盒語言模型進行生成,透過提示或編排框架將它們拼接在一起。各個元件技術上可行,但整體遠非最佳。這些系統脆弱,缺乏對其部署領域的任何機器學習或專業化,需要廣泛的提示,並且容易發生級聯錯誤。結果是RAG系統很少透過生產標準。
而我們要說的RAG 2.0的概念,透過預訓練、微調並對所有元件進行對齊,作為一個整體整合系統,透過語言模型和檢索器的雙重反向傳播來最大化效能:
https://avoid.overfit.cn/post/18853fc6f10e4e23a992880c624ea1dd