模型也能“知其然知其所以然”——看SimRAG如何通過提問提升自己 精華
1. 引言部分
今天要給大家分享一篇很有意思的論文。這篇論文主要解決的是什么問題呢?就是如何讓大語言模型在專業(yè)領(lǐng)域,比如醫(yī)療、科學(xué)領(lǐng)域表現(xiàn)得更好。
你們有沒有想過,雖然現(xiàn)在的ChatGPT、Claude這些大模型很厲害,但在專業(yè)領(lǐng)域它們的表現(xiàn)還是不夠好,對吧?比如說,當(dāng)我們問它一個(gè)關(guān)于"支氣管擴(kuò)張"的專業(yè)問題時(shí),它可能就答不太準(zhǔn)確了。這是為什么呢?
主要原因是這樣的 - 這些專業(yè)領(lǐng)域有很多特殊的知識和術(shù)語,普通模型可能理解得不夠深入。就像我們普通人看醫(yī)學(xué)論文一樣,沒有專業(yè)背景的話,很多術(shù)語都看不懂,是不是?
那么現(xiàn)在有一個(gè)很好的技術(shù)叫RAG(檢索增強(qiáng)生成),這個(gè)技術(shù)的原理其實(shí)很像我們?nèi)祟惒橘Y料的過程。比如當(dāng)我們要回答一個(gè)問題時(shí),會先去查找相關(guān)的資料,然后再基于這些資料來回答,對不對?RAG就是讓模型也這樣做 - 先檢索相關(guān)文檔,再基于這些文檔來回答問題。
但是呢,這里又出現(xiàn)了一個(gè)新的問題。就算用了RAG技術(shù),在專業(yè)領(lǐng)域的表現(xiàn)還是不夠理想。這是為什么呢?因?yàn)槟P涂赡懿惶萌绾握_使用檢索到的專業(yè)文獻(xiàn)。就像一個(gè)醫(yī)學(xué)院新生,即使給他一堆醫(yī)學(xué)文獻(xiàn),他也不一定能準(zhǔn)確理解和應(yīng)用這些知識,對吧?那現(xiàn)在已經(jīng)有哪些解決方案呢?主要有這么幾種:
- 在專業(yè)文獻(xiàn)上繼續(xù)預(yù)訓(xùn)練,就像讓模型多讀點(diǎn)專業(yè)書籍
- 用專業(yè)領(lǐng)域的指令來微調(diào)模型
- 用GPT-4這樣的強(qiáng)大模型來生成訓(xùn)練數(shù)據(jù)
但這些方法都有什么問題呢?
- 第一個(gè)方法成本很高,就像要付很多學(xué)費(fèi)一樣
- 第二個(gè)方法需要大量標(biāo)注數(shù)據(jù),這個(gè)在專業(yè)領(lǐng)域特別難獲取
- 第三個(gè)方法不但貴,而且在一些涉及隱私的領(lǐng)域(比如醫(yī)療)可能還有安全隱患
這就是為什么我們需要一個(gè)更好的解決方案。那作者是怎么解決的呢?他們提出了一個(gè)叫SimRAG的方法。這個(gè)方法最有趣的地方是它讓模型同時(shí)學(xué)會了兩個(gè)能力:一個(gè)是回答問題,一個(gè)是提出問題。
你們覺得為什么要讓模型同時(shí)具備這兩種能力呢?這就像我們學(xué)習(xí)一樣,不僅要會答題,還要會出題,對吧。只有真正理解了知識,才能提出好的問題。這兩個(gè)能力相輔相成,可以幫助模型更好地理解專業(yè)知識。
2. 相關(guān)工作
在講具體方法之前,我們先來了解一下相關(guān)的研究工作。這就像我們做研究之前,要先知道前人都做了什么。首先是RAG技術(shù)。它是怎么工作的呢?就像我們寫論文要先查文獻(xiàn)一樣,RAG也是先去找相關(guān)的資料,然后再基于這些資料來回答問題。近期有很多研究者在改進(jìn)這個(gè)技術(shù),比如說:
- 有的在研究如何找到更相關(guān)的文檔,就像圖書館員幫我們找最合適的參考資料一樣
- 有的在研究如何過濾掉無關(guān)的內(nèi)容,就像我們寫論文時(shí)要去掉不相關(guān)的引用一樣
- 還有的在研究如何讓模型更好地理解和使用這些資料
第二個(gè)重要的技術(shù)叫自訓(xùn)練。這個(gè)概念聽起來可能有點(diǎn)陌生,但其實(shí)很好理解。它就像是“教學(xué)相長”的過程 - 模型一邊學(xué)習(xí),一邊用學(xué)到的知識來教自己。具體怎么做呢?
- 先讓模型學(xué)習(xí)一些基礎(chǔ)知識
- 然后讓它自己生成一些訓(xùn)練數(shù)據(jù)
- 再用這些數(shù)據(jù)來提升自己
但這個(gè)過程也有個(gè)問題,就像我們自學(xué)時(shí)可能會學(xué)到一些錯(cuò)誤的知識一樣,模型生成的訓(xùn)練數(shù)據(jù)也可能有錯(cuò)誤。所以研究者們想了很多辦法來解決這個(gè)問題:
- 有的會仔細(xì)篩選生成的數(shù)據(jù),只用質(zhì)量好的
- 有的會給不同的數(shù)據(jù)分配不同的重要性
第三個(gè)是領(lǐng)域特定的大語言模型?,F(xiàn)在已經(jīng)有很多專門針對特定領(lǐng)域的模型了,比如醫(yī)療領(lǐng)域的、法律領(lǐng)域的。他們是怎么訓(xùn)練這些模型的呢?主要有兩種方式:
- 一種是讓模型不斷地讀專業(yè)文獻(xiàn),就像醫(yī)學(xué)生要不斷學(xué)習(xí)專業(yè)知識一樣
- 另一種是用特定領(lǐng)域的問題來訓(xùn)練模型,就像針對性地做習(xí)題
但這些方法都有什么問題呢?
- 成本太高了,就像請個(gè)一對一家教一樣貴
- 效率不夠高,投入了很多資源可能效果卻不理想
- 有些方法還依賴GPT-4這樣的大模型來生成訓(xùn)練數(shù)據(jù),這就更貴了
現(xiàn)在大家應(yīng)該能明白為什么需要一個(gè)新的解決方案了吧。就是因?yàn)楝F(xiàn)有的這些方法都不夠完美。
3. SimRAG的具體方法
接下來要講的是本文最核心的部分了 - SimRAG具體是怎么工作的。這個(gè)方法很巧妙,分為兩個(gè)主要階段。
3.1 第一階段:基礎(chǔ)訓(xùn)練
第一階段是做什么呢?就是先教會模型一些基本功。這就像我們學(xué)習(xí)任何新東西一樣,要先掌握基礎(chǔ)知識,對吧。具體來說,要讓模型學(xué)習(xí)三類知識:
- 首先是基本的指令理解能力。這就像我們要先學(xué)會聽懂老師的話一樣。用了哪些訓(xùn)練數(shù)據(jù)呢?
OpenAssistant的數(shù)據(jù)
Dolly的數(shù)據(jù)
SODA的數(shù)據(jù)
這些數(shù)據(jù)都是幫助模型理解人類指令的。
- 然后是問答能力的訓(xùn)練。用了很多問答數(shù)據(jù)集,比如:
Squad數(shù)據(jù)集,這是關(guān)于閱讀理解的
DROP數(shù)據(jù)集,這需要一些推理能力
NQ(自然問題)數(shù)據(jù)集,這些都是真實(shí)用戶的提問
這就像給學(xué)生做各種類型的習(xí)題,幫助他們提高解題能力。
- 最后是檢索相關(guān)的訓(xùn)練。這個(gè)訓(xùn)練分兩部分:
教模型怎么從文檔中找到可能的答案
教模型怎么根據(jù)文檔和答案來提出好問題
就像教會學(xué)生不僅要會做題,還要會出題一樣。
3.2 第二階段:自我提升
這個(gè)階段是最有意思的部分。模型要用第一階段學(xué)到的能力來提升自己,具體怎么做呢?首先是答案生成。模型會讀一段專業(yè)文獻(xiàn),然后找出里面可能成為答案的內(nèi)容。比如讀到這樣一段醫(yī)學(xué)文獻(xiàn):
For its survival, the body needs to ensure a continuous delivery of energy despite highly variable supplies of nutrients from the external environment.
模型就會找出重要的概念,比如"continuous delivery of energy"這樣的關(guān)鍵信息。然后是問題生成?;谡业降拇鸢?,模型會生成相應(yīng)的問題。而且,模型會生成不同類型的問題:
- 有的是簡單的填空題
- 有的是多選題
- 有的是判斷對錯(cuò)的題
這樣做的好處是什么呢?就像我們復(fù)習(xí)時(shí)用不同類型的題目來測試自己,可以全面地掌握知識。最后還有個(gè)重要的步驟 - 質(zhì)量控制。不是所有生成的問題都會被用來訓(xùn)練,而是要經(jīng)過篩選:
- 會檢查答案是否能在相關(guān)文檔中找到
- 會看問題是否清晰合理,就像老師出題也要經(jīng)過反復(fù)推敲一樣。
4. 實(shí)驗(yàn)結(jié)果分析
好,現(xiàn)在到了最激動人心的部分了 - 我們來看看這個(gè)方法到底效果如何。
4.1 實(shí)驗(yàn)設(shè)置
首先,作者選擇了三個(gè)非常重要的領(lǐng)域來測試:
- 醫(yī)療領(lǐng)域:選了7個(gè)數(shù)據(jù)集
PubMedQA:這是關(guān)于醫(yī)學(xué)研究的問答
BioASQ:這是生物醫(yī)學(xué)領(lǐng)域的問題
MedQA:這個(gè)更專業(yè),是醫(yī)學(xué)執(zhí)照考試的題目
還有其他幾個(gè)數(shù)據(jù)集
就像是讓模型去參加不同類型的醫(yī)學(xué)考試一樣。
- 科學(xué)領(lǐng)域:用了3個(gè)數(shù)據(jù)集
ARC:這是中學(xué)級別的科學(xué)題目
SciQ:這包含了物理、化學(xué)、生物等各種科學(xué)問題
MMLU-sci:這個(gè)更全面,包含了14個(gè)科學(xué)學(xué)科
相當(dāng)于是從基礎(chǔ)到高等的科學(xué)知識都測試了一遍。
- 計(jì)算機(jī)科學(xué)領(lǐng)域:
用了最新的CS-Bench數(shù)據(jù)集
包含了編程、算法等各種計(jì)算機(jī)科學(xué)的問題
這就像是給模型來了次計(jì)算機(jī)系的期末考試。那模型用什么"教材"來學(xué)習(xí)呢?
- 醫(yī)療領(lǐng)域:用了醫(yī)學(xué)教科書、維基百科、PubMed的文章
- 科學(xué)領(lǐng)域:主要用維基百科的內(nèi)容
- 計(jì)算機(jī)領(lǐng)域:用了維基百科的CS部分和arXiv上的論文
4.2 比較對象
作者找了好幾類模型來比較,就像舉辦一場比賽一樣:
- 通用大模型選手:這些就像是全能型選手。
GPT-3.5
GPT-4
Llama3-8B
- 專業(yè)領(lǐng)域選手:這些就像是專攻某個(gè)領(lǐng)域的專家。
醫(yī)療領(lǐng)域有PMC-llama、MEDITRON
科學(xué)領(lǐng)域有SciTulu
- RAG技術(shù)選手:這些是專門做檢索增強(qiáng)的高手。
Self-RAG
ChatQA
4.3 實(shí)驗(yàn)結(jié)果
在醫(yī)療領(lǐng)域:
在科學(xué)領(lǐng)域:
在計(jì)算機(jī)科學(xué)領(lǐng)域:
雖然分?jǐn)?shù)看起來不是很高,但要知道CS-Bench的題目是很難的,這個(gè)成績已經(jīng)很不錯(cuò)了。
4.4 深入分析
作者還做了一些很有意思的分析:
- 不同問題類型的表現(xiàn):
多選題表現(xiàn)最好,因?yàn)檫x項(xiàng)可以提供線索
開放性問題稍微差一點(diǎn),這很正常,因?yàn)樾枰杂砂l(fā)揮嘛
判斷題介于兩者之間
- 生成數(shù)據(jù)的質(zhì)量分析,讓我們看個(gè)例子:
生成的問題很自然,答案也很準(zhǔn)確,不是簡單的復(fù)制粘貼。
- 一個(gè)很有趣的發(fā)現(xiàn):如果不做數(shù)據(jù)過濾,性能會下降約2%。這說明什么?說明質(zhì)量控制真的很重要,就像我們學(xué)習(xí)也要注意區(qū)分哪些是對的,哪些是錯(cuò)的信息。
5. 局限性和未來展望
當(dāng)然,這個(gè)方法也不是完美的,還有一些可以改進(jìn)的地方:
- 目前只做一輪生成:
就像我們復(fù)習(xí),多復(fù)習(xí)幾遍效果會更好
未來可以嘗試迭代式的生成方式
- 計(jì)算開銷問題:
生成和過濾數(shù)據(jù)需要不少時(shí)間
但好在這些都是訓(xùn)練時(shí)的開銷,用的時(shí)候不會變慢
- 還可以用更強(qiáng)的模型:
比如說用70B的模型可能效果會更好
但這樣就需要更多計(jì)算資源了
這種自我提升的思路其實(shí)在很多領(lǐng)域都能用。比如說,我們學(xué)習(xí)新知識的時(shí)候,也可以先掌握基礎(chǔ),然后自己出題來檢驗(yàn),這樣不是很像SimRAG的思路嗎?
原文:《SimRAG: Self-Improving Retrieval-Augmented Generation for Adapting Large Language Models to Specialized Domains》
本文轉(zhuǎn)載自張 ??芝士AI吃魚??,作者: 雷厲風(fēng)行
