關於檢索增強生成(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