已經(jīng)嘮了三章的RAG,是時(shí)候回頭反思一下,當(dāng)前的RAG是解決幻覺(jué)的終點(diǎn)么?我給不出直接的答案,不過(guò)感覺(jué)當(dāng)前把RAG當(dāng)作傳統(tǒng)搜索框架在大模型時(shí)代下的改良,這個(gè)思路的天花板高度有限~
反思來(lái)源于對(duì)RAG下模型回答的直觀感受,最初我們被ChatGPT的能力所震驚,并不是它能背誦知識(shí),而是模型在知識(shí)壓縮后表現(xiàn)出的“涌現(xiàn)能力”,更具體到RAG所屬的問(wèn)答領(lǐng)域,是模型能夠精準(zhǔn)的基于上文從壓縮的參數(shù)中召回并整合相應(yīng)的知識(shí),甚至進(jìn)行知識(shí)外推的能力。通俗點(diǎn)說(shuō)它有可能生成我在任何地方都檢索不到的答案!
但RAG當(dāng)前的多數(shù)使用方法,采用只讓模型基于檢索到的內(nèi)容進(jìn)行回答的方案,其實(shí)限制了模型自身對(duì)知識(shí)壓縮形成的智能,大模型似乎變成了文本抽取和總結(jié)潤(rùn)色的工具。體驗(yàn)上大模型直接回答的效果就像是學(xué)霸答題文采四溢,而RAG有時(shí)倒像是學(xué)渣開(kāi)卷考試,答得小心翼翼一有不慎還會(huì)抄錯(cuò)答案......
既要保證事實(shí)性,又要保留模型智能,則需要最大化的使用模型已經(jīng)內(nèi)化壓縮到參數(shù)中的信息,只在需要使用外部知識(shí)增強(qiáng)的時(shí)候再進(jìn)行工具調(diào)用??吹竭^(guò)以下幾種方案
- Detection:通過(guò)前置判斷,決策模型何時(shí)需要使用外掛,在模型可以自行回答的時(shí)候,使用模型回答,當(dāng)模型不能回答的時(shí)候走RAG檢索生成
- Realtime Data:需要獲取動(dòng)態(tài)世界的信息,部分場(chǎng)景可以通過(guò)意圖進(jìn)行決策,相對(duì)好解決
- Incorrect or Incomplete:模型不知道,或者模型推理幻覺(jué),如何知道模型可能不知道是更難解決的問(wèn)題
- Calibration:通過(guò)后置處理,讓模型先生成,再使用召回內(nèi)容對(duì)模型回答進(jìn)行修正校準(zhǔn)和事實(shí)性檢查
- 兩種方案勾兌一下:高置信度判斷模型可以自行完成直接回答,中置信度先生成再校驗(yàn),低置信度直接走RAG檢索生成,或者通過(guò)意圖和場(chǎng)景進(jìn)行決策
如何勾兌就不在這里說(shuō)了,這里我們聊聊基礎(chǔ)的前置判斷和后置處理分別有哪些方案~
前置判斷-Detection
檢測(cè)模型回答存在幻覺(jué)可以通過(guò)檢索外部知識(shí)進(jìn)行校驗(yàn),不過(guò)考慮生成式模型覆蓋問(wèn)題的廣泛性,Self-Contradictory論文中評(píng)估chatgpt生成的回答中38.5%的內(nèi)容無(wú)法通過(guò)Wiki等外部知識(shí)進(jìn)行校驗(yàn)。
因此這里我們先介紹一種完全基于模型自身,不依賴(lài)外部知識(shí)的幻覺(jué)判斷方案自我矛盾。后介紹一種模型直接拒絕回答的方案,和RLHF里面的事實(shí)性原則類(lèi)似,這里是基于SFT的模型自我拒絕方案,不過(guò)個(gè)人對(duì)拒識(shí)類(lèi)的方案持一定的保留意見(jiàn),但不妨礙學(xué)習(xí)新思路哈哈~~
自我矛盾
第一種發(fā)現(xiàn)模型幻覺(jué)的方案是基于模型多次回答的不一致性來(lái)判斷模型是否在胡說(shuō)八道。相似的概念在解密Prompt系列9. 模型復(fù)雜推理-思維鏈基礎(chǔ)和進(jìn)階玩法里面聊Self-Consistency COT時(shí)就提到過(guò),該論文是使用多路COT推理來(lái)投票出一個(gè)最合理的推理路徑,從而提高思考的準(zhǔn)確率。這里只不過(guò)改變了使用的形式,通過(guò)模型多次回答的不一致來(lái)判斷模型是否出現(xiàn)了幻覺(jué)。有以下幾種生成模型多次回答,并度量一致性的方案
單模型推理
- SELFCHECKGPT: Zero-Resource Black-Box Hallucination Detection for Generative Large Language Models
- SELF-CONTRADICTORY HALLUCINATIONS OF LLMS: EVALUATION, DETECTION AND MITIGATION
對(duì)于如何度量模型隨機(jī)生成的多個(gè)回答之間的不一致性,Self-Check嘗試了包括Bert相似度計(jì)算在內(nèi)的5種方法,其中效果最好的兩種分別是傳統(tǒng)NLI和基于大模型prompt的NLI,從推理性?xún)r(jià)比上傳統(tǒng)NLI有優(yōu)勢(shì),效果上LLM更好,以下是使用不同相似度計(jì)算方案來(lái)衡量模型多次隨機(jī)解碼的不一致性,并用該指標(biāo)來(lái)計(jì)算模型回答是否符合事實(shí)性的AUC效果
傳統(tǒng)NLI推理任務(wù),是給定前提(premise)判斷假設(shè)(hypothesis)是否成立或者矛盾。這里論文就是使用MNLI數(shù)據(jù)訓(xùn)練的Debarta-v3-Large來(lái)判斷模型生成的回答r(hypothesis),是否和其他N個(gè)采樣生成的回答(premise)相矛盾。論文分別嘗試了句子級(jí)的判斷和整個(gè)回答粒度的判斷,句子級(jí)別的效果顯著更好。
而基于大模型prompt,同樣是NLI任務(wù)的思路,只不過(guò)改成了自然語(yǔ)言指令,以下context等同于以上的 \(S^n\), sentence就是 \(r_i\), 大模型推理返回的Yes/NO會(huì)被轉(zhuǎn)化成0/1,并計(jì)算均值。
SELF-Contradictory的思路很相似,方法更加復(fù)雜些,感興趣的朋友自己去看論文吧~
多模型問(wèn)答
- DeepMind LM vs LM: Detecting Factual Errors via Cross Examination
- Improving Factuality and Reasoning in Language Models through Multiagent Debate
同樣是自我矛盾的思路,還可以通過(guò)多模型對(duì)話(huà)的方式來(lái)進(jìn)行。LM VS LM采用了模型B多次反復(fù)提問(wèn)模型A的方式來(lái)生成多個(gè)回答。類(lèi)似的方式也用于問(wèn)卷中問(wèn)題的設(shè)計(jì),出題人會(huì)用不同的方式把一個(gè)問(wèn)題問(wèn)好幾遍,如果每次回答都不一樣,說(shuō)明做題人對(duì)類(lèi)似問(wèn)題的回答是不確定的。如下圖
第一步模型A先生成回答(claim)。第二步模型B會(huì)針對(duì)cliam,從多個(gè)角度生成提問(wèn)并讓模型A再次進(jìn)行回答。第三步模型B會(huì)基于A的原始回答,和對(duì)多個(gè)問(wèn)題的回答來(lái)判斷原始回答的正確性。以上B提問(wèn)A回答的步驟,如果B判斷需要進(jìn)行補(bǔ)充提問(wèn)的話(huà),可能會(huì)重復(fù)多次。
這里涉及到的三個(gè)任務(wù)都是通過(guò)大模型指令來(lái)進(jìn)行的,三個(gè)任務(wù)分別是:模型B基于A的cliam進(jìn)行提問(wèn),模型B判斷是否繼續(xù)提問(wèn),模型B基于A的所有回答判斷claim是否正確。對(duì)應(yīng)的具體prompt如下
相比上面SELF-CHECK隨機(jī)解碼生成多個(gè)答案的方案,從多角度進(jìn)行提問(wèn),個(gè)人感覺(jué)更有針對(duì)性,但兩種方法都會(huì)有遺漏和誤傷。推理成本上SELF-CHECK更低,LM vs LM更高。
自我拒絕
- R-Tuning: Teaching Large Language Models to Refuse Unknown Questions
除了通過(guò)不一致性判斷模型出現(xiàn)幻覺(jué),另一種更干脆直接的方案,是讓模型在碰到自己不確定的問(wèn)題時(shí),直接選擇拒絕回答,和RLHF中的事實(shí)性原則的是一個(gè)思路。但我對(duì)這類(lèi)方案最大的疑惑是拒識(shí)能力的泛化性。究竟模型是學(xué)到了對(duì)于自身parametric knowledge置信度較低,混淆度較高的問(wèn)題進(jìn)行拒絕回答,還是模型背下來(lái)了對(duì)某些知識(shí)和上文語(yǔ)義空間進(jìn)行拒絕回答。這個(gè)我也還沒(méi)想明白哈哈哈~
所以這里我們繞過(guò)這個(gè)問(wèn)題,聊一種中間策略,畢竟西醫(yī)好多疾病也沒(méi)研究明白,但病還得治不是。R-Tunning提出指令微調(diào)可能放大了模型的回答幻覺(jué)。因?yàn)橹噶钗⒄{(diào)的數(shù)據(jù)集中所有問(wèn)題都有答案,微調(diào)任務(wù)就是負(fù)責(zé)教會(huì)模型各種任務(wù)范式,以及在不同的任務(wù)中如何召回預(yù)訓(xùn)練中學(xué)習(xí)的知識(shí)并回答問(wèn)題。但我們忽略了SFT中很多任務(wù)涉及到的知識(shí)在模型預(yù)訓(xùn)練中可能是沒(méi)接觸過(guò)的,但我們依舊選擇讓模型去進(jìn)行回答。這種預(yù)訓(xùn)練和指令微調(diào)間的不一致性,可能會(huì)進(jìn)一步放大模型幻覺(jué)。
R-Tunning給出的解決方案是在構(gòu)建指令微調(diào)數(shù)據(jù)集時(shí),加入模型是否對(duì)改答案表示肯定的描述,這樣允許模型拒絕自己不確定的問(wèn)題。分成2個(gè)步驟
- 找到模型不確定的問(wèn)題,論文嘗試了兩種方案
- R-Tuning:模型回答和標(biāo)注答案不一致,適用于有標(biāo)準(zhǔn)答案的QA問(wèn)題
- R-Tuning-U:模型回答自我矛盾,這里論文計(jì)算模型回答包含的所有答案的熵值
- 構(gòu)建允許模型拒絕的指令數(shù)據(jù)集,論文也嘗試了以下兩種prompt指令模板
- R-Tuning:"Q:{Question},A:{Answer}.{Propmt}.",其中prompt是Are you sure you accurately answered the question based on your internal knowledge:對(duì)于上面模型確定的問(wèn)題加上I am sure,不確定的問(wèn)題加上I am not sure
- R-Tuning-R: 對(duì)于確定給的問(wèn)題使用"Q:{Question},A:{Answer}",對(duì)于不確定的問(wèn)題用I am not sure 的各種相似表達(dá)來(lái)直接替換Answer
然后使用以上加入模型不確定性表達(dá)的數(shù)據(jù)集進(jìn)行指令微調(diào)即可。在我們的使用場(chǎng)景中R-Tunning-R這種直接拒絕的方案更加合適,畢竟我傾向于指令微調(diào)的核心并不是知識(shí)注入,而是任務(wù)對(duì)齊,所以模型只要學(xué)習(xí)到對(duì)于自己不確定的問(wèn)題選擇拒絕回答即可。在論文驗(yàn)證的MMLU等數(shù)據(jù)集上這種拒絕微調(diào)方案有一定的領(lǐng)域外的泛化效果,不過(guò)這些數(shù)據(jù)集和我們的使用場(chǎng)景相差很大,具體效果要等測(cè)試后才知道了。
后處理:Calibration Method
和Detection相反,Calibration把重心放在模型回答的后處理上。也就是先不做判斷直接使用模型生成回答,再調(diào)用工具對(duì)回答進(jìn)行校驗(yàn)和修改。這里我們介紹谷歌和微軟提出的幾種方案。不同方案對(duì)于如何后處理,和調(diào)用哪些工具進(jìn)行后處理存在差異,不過(guò)整體流程都和下圖相似:模型生成 -> 召回相關(guān)知識(shí) -> 對(duì)生成結(jié)果進(jìn)行校驗(yàn)和修復(fù)
指令方案
- RARR: Researching and Revising What Language Models Say, Using Language Models
- CRITIC: LARGE LANGUAGE MODELS CAN SELFCORRECT WITH TOOL-INTERACTIVE CRITIQUING
基礎(chǔ)方案是RARR提出的Research-then-revise框架,整個(gè)流程分為以下幾個(gè)步驟
Generation Stage,先讓LLM直接生成問(wèn)題回答X
Research Stage,用于收集可以校驗(yàn)回答的事實(shí)性證據(jù)。針對(duì)X使用Few-shot-prompt, 生成用來(lái)校驗(yàn)X的多個(gè)搜索問(wèn)題,每個(gè)問(wèn)題分別進(jìn)行谷歌搜索并召回Top5內(nèi)容。這里論文沒(méi)有使用搜索自帶的snippet,而是對(duì)網(wǎng)頁(yè)內(nèi)容進(jìn)行分塊(每4個(gè)句子一塊),并使用T5-Encoder計(jì)算每個(gè)chunk和query的相似度保留top-J個(gè)內(nèi)容塊。這里會(huì)得到一個(gè)(Q1,chunk1)(Q1,chunk2),(Q2,chunk1),.....的(問(wèn)題,事實(shí))列表
**Revise Stage,獲取所有檢索到的事實(shí)之后,進(jìn)入校驗(yàn)階段。**論文會(huì)遍歷以上列表,針對(duì)每一個(gè)問(wèn)題,分別先使用few-shot-cot判斷每個(gè)事實(shí)和模型回答X之間是否是一致的(agreement model如下)。如果一致則遍歷下一個(gè),如果不一致則使用few-shot-prompt讓大模型基于事實(shí)+問(wèn)題對(duì)模型回答進(jìn)行修改(revision model如下)。論文在修改回答時(shí),會(huì)先定位原始回答X中哪個(gè)span和事實(shí)不符再進(jìn)行修改,從而避免大幅修改原始回答
評(píng)估部分,后處理方案需要兼顧對(duì)模型原始回答的保留和事實(shí)性,這里RARR提出了兩個(gè)指標(biāo):
- Attribution Score計(jì)算歸因得分,既給定所有事實(shí),修改后回答Y中每個(gè)句子和所有事實(shí)的最大NLI打分的平均值,既整體回答能獲得事實(shí)性支撐的平均概率
- Preservation score計(jì)算保留率,由回答原始意圖的保留概率 * 前后答案的未改變率(編輯距離度量)得到
RARR最大的問(wèn)題在于效率,一部分是大模型的推理效率,一方面是最后的Revise部分采用了串行修改,這部分在后面的微調(diào)方案中會(huì)有改良
另一篇論文CRITIC提出的verify-then-correct和RARR非常相似,只不過(guò)在不同的任務(wù)上嘗試使用了不同的外部工具進(jìn)行校驗(yàn)。在開(kāi)放問(wèn)答上使用搜索,在代碼問(wèn)題就用代碼解釋器,并未涉及動(dòng)態(tài)的工具選擇,只是在不同數(shù)據(jù)集上固定選用不同的工具,這里就不展開(kāi)說(shuō)啦,感興趣的盆友自己去看論文吧~
微調(diào)方案
- PURR: Efficiently Editing Language Model Hallucinations by Denoising Language Model Corruptions
- Check Your Facts and Try Again: Improving Large Language Models with External Knowledge and Automated Feedback
- Fusion-in-decoder: Leveraging Passage Retrieval with Generative Models for Open Domain Question Answering
PURR針對(duì)RARR的效率問(wèn)題進(jìn)行了優(yōu)化,使用的是大模型能力通過(guò)數(shù)據(jù)蒸餾到小模型的方案,也就是把上面最耗時(shí)的Revise部分使用T5-large模型來(lái)實(shí)現(xiàn),query生成的部分也用T5-large來(lái)實(shí)現(xiàn),并且把串行修改的方案優(yōu)化為了所有事實(shí)進(jìn)行一次性融合修改。
論文的核心就在于如何使用大模型來(lái)構(gòu)建用于事實(shí)性修改的T5模型。論文使用了corrput的方案,也就是把正確的回答,人為進(jìn)行破壞構(gòu)造幻覺(jué),再訓(xùn)練模型進(jìn)行還原,具體包含以下幾個(gè)步驟
- 生成正確的回答:整理了來(lái)自各個(gè)領(lǐng)域和話(huà)題的6000個(gè)種子問(wèn)題,每個(gè)問(wèn)題調(diào)用搜索引擎獲取TopN網(wǎng)頁(yè),并進(jìn)行chunking分段,使用和上面RARR相同的T5-Encoder計(jì)算每個(gè)段落和Q的相似度,閾值以上的為positive evidence(\(E^+\))這里限制最多4條,其余閾值以下的為negative evidence(\(E^-\))。然后使用zero-shot-prompt來(lái)讓大模型基于\(E^+\)生成多文檔總結(jié),作為正確的回答Y。
- 對(duì)回答添加噪聲:同樣使用大模型基于2shot-cot-prompt,來(lái)對(duì)以上獲得的正確答案進(jìn)行破壞,指令要求大模型先生成修改方案,再對(duì)回答進(jìn)行魔改。魔改包括但不限于魔改實(shí)體,魔改語(yǔ)義關(guān)系,魔改語(yǔ)法等等,這里論文使用了text-davinci-003,指令和效果如下圖
- 訓(xùn)練T5:微調(diào)使用\(E^+\)的事實(shí)和添加噪聲的回答作為輸入,模型目標(biāo)是把噪聲回答修復(fù)成正確答案。這里如果\(E^+\)不足4條的會(huì)隨機(jī)采樣\(E^-\)這樣可以提高模型對(duì)噪聲事實(shí)的識(shí)別能力。值得說(shuō)一下的是這里多個(gè)事實(shí)并非采用拼接的形式進(jìn)行融合,而是使用Fusion-in-decoder的形式在encoder層編碼后進(jìn)行拼接,再進(jìn)入Decoder。
效果上PURR對(duì)比RARR,對(duì)模型原始回答有更高的保有率(Pres),以及更高的平均歸因率(Attr)。
但整體上后處理相關(guān)的論文,和實(shí)際應(yīng)用中模型回答的錯(cuò)誤的五花八門(mén)相比,還是簡(jiǎn)化了太多。在實(shí)際應(yīng)用中使用這類(lèi)后處理的修復(fù)邏輯,感覺(jué)還有很多需要踩的坑。Anyway都是明年要解決的問(wèn)題啦哈哈哈哈哈!新年快樂(lè)呀盆友們~文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-769973.html
想看更全的大模型相關(guān)論文梳理·微調(diào)及預(yù)訓(xùn)練數(shù)據(jù)和框架·AIGC應(yīng)用,移步Github >> DecryPrompt文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-769973.html
到了這里,關(guān)于解密Prompt系列22. LLM Agent之RAG的反思:放棄了壓縮還是智能么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!