一篇學(xué)會(huì)本地知識(shí)庫(kù)對(duì)LLM的性能優(yōu)化
昨天一個(gè)跑了220個(gè)小時(shí)的微調(diào)訓(xùn)練完成了,主要任務(wù)是想在CHATGLM-6B上微調(diào)出一個(gè)能夠較為精確的診斷數(shù)據(jù)庫(kù)錯(cuò)誤信息的對(duì)話模型來(lái)。
不過(guò)這個(gè)等了將近十天的訓(xùn)練最后的結(jié)果令人失望,比起我之前做的一個(gè)樣本覆蓋更小的訓(xùn)練來(lái),差的還是挺大的。
這樣的結(jié)果還是有點(diǎn)令人失望的,這個(gè)模型基本上是沒(méi)有實(shí)用價(jià)值的??礃幼有枰匦抡{(diào)整參數(shù)與訓(xùn)練集,再做一次訓(xùn)練。大語(yǔ)言模型的訓(xùn)練是一場(chǎng)軍備競(jìng)賽,沒(méi)有好的裝備是玩不起來(lái)的??礃幼游覀円脖仨氁?jí)一下實(shí)驗(yàn)室的裝備了,否則沒(méi)有幾個(gè)十天可以浪費(fèi)。
從最近的幾次失敗的微調(diào)訓(xùn)練來(lái)看,微調(diào)訓(xùn)練這條路也并不容易完成。不同的任務(wù)目標(biāo)混雜在一起跑訓(xùn)練,可能不同的任務(wù)目標(biāo)需要的訓(xùn)練參數(shù)不同,使最終的訓(xùn)練集無(wú)法滿足某些任務(wù)的需求。因此PTUNING只適合某個(gè)十分確定的任務(wù),不一定適合混合任務(wù),以混合任務(wù)為目的的模型,可能需要用FINETUNE。這和前幾天我在和一個(gè)朋友交流時(shí)大家的觀點(diǎn)類似。
實(shí)際上因?yàn)橛?xùn)練模型難度比較大,一些人已經(jīng)放棄了自己訓(xùn)練模型,而采用將本地知識(shí)庫(kù)矢量化后進(jìn)行較為精準(zhǔn)的檢索,然后通過(guò)AUTOPROMPT將檢索后的結(jié)果生成自動(dòng)提示,去問(wèn)打語(yǔ)音模型。利用langchain很容易實(shí)現(xiàn)這個(gè)目標(biāo)。
這個(gè)工作的原理是將本地文檔通過(guò)加載器加載為文本,然后對(duì)文本進(jìn)行切分行程文本片段,經(jīng)過(guò)編碼后寫入向量存儲(chǔ)中功查詢使用。查詢結(jié)果出來(lái)后,通過(guò)Prompt Template自動(dòng)形成提問(wèn)用的提示,去詢問(wèn)LLM,LLM生成最后的回答。
這項(xiàng)工作里有另個(gè)要點(diǎn),一個(gè)是較為精準(zhǔn)的搜索到本地知識(shí)庫(kù)中的知識(shí),這個(gè)通過(guò)向量存儲(chǔ)于搜索來(lái)實(shí)現(xiàn),目前針對(duì)中英文的本地知識(shí)庫(kù)的向量化與搜索的解決方案很多,可以選擇某個(gè)對(duì)你的知識(shí)庫(kù)比較友好的方案來(lái)使用。
上面是一個(gè)在vicuna-13b上通過(guò)關(guān)于OB的知識(shí)庫(kù)進(jìn)行的問(wèn)答,上面的是沒(méi)有使用本地知識(shí)庫(kù),直接使用LLM的能力的回答,下面是加載了本地知識(shí)庫(kù)后的回答。可以看出性能提升還是挺明顯的。
我們?cè)賮?lái)看看剛才那個(gè)ORA錯(cuò)誤的問(wèn)題,在沒(méi)有使用本地知識(shí)庫(kù)之前,LLM基本上是胡說(shuō)八道的,而加載了本地知識(shí)庫(kù)之后,這個(gè)回答還是中規(guī)中矩的,文中的錯(cuò)別字也是我們知識(shí)庫(kù)中的錯(cuò)誤。實(shí)際上PTUNING使用的訓(xùn)練集也是通過(guò)這個(gè)本地知識(shí)庫(kù)生成出來(lái)的。
從最近我們踩過(guò)的坑可以收獲一些經(jīng)驗(yàn)。首先ptuning的難度比我們想象得要高得多,雖然說(shuō)ptuning比f(wàn)inetune需要的裝備低一點(diǎn),不過(guò)訓(xùn)練難度一點(diǎn)都不低。其次是通過(guò)Langchain和autoprompt利用本地知識(shí)庫(kù)來(lái)改善LLM能力效果不錯(cuò),對(duì)于大多數(shù)企業(yè)應(yīng)用來(lái)說(shuō),只要把本地知識(shí)庫(kù)梳理好,選擇合適的矢量化方案,應(yīng)該都能獲得不比PTUNING/FINETUNE差的效果。第三,還是上回說(shuō)的那個(gè)問(wèn)題,LLM的能力至關(guān)重要。必須選擇一個(gè)能力較強(qiáng)的LLM作為基礎(chǔ)模型來(lái)使用。任何嵌入式模型都只能局部改善能力,不能起決定性的作用。第四,對(duì)于數(shù)據(jù)庫(kù)相關(guān)的知識(shí),vicuna-13b的能力確實(shí)不錯(cuò)。
今天一大早還要去客戶那邊做個(gè)交流,早上時(shí)間有限,就簡(jiǎn)單寫幾句吧。大家對(duì)此有何心得,歡迎留言討論(討論僅你我可見),我也是在這條路上孤獨(dú)行走,希望有同路人指點(diǎn)一二。