最近“如來”話術非常之火啊,看一次笑一次,不懂這個梗的朋友們可以回顧一下:?
【如來原版】
【資料圖】
那么,我們能讓 GPT也學會 如來話術嗎?思路其實很簡單,只要我們把那些經(jīng)典語錄讓 GPT 學習學習。筆者自己做了些實驗,還確實訓練處理一個馬馬虎虎的 「如來GPT」,雖然泛化性能并不好。不過整個實驗過程還是挺有意思,這里分享出來,在結尾我還提出了一些值得探索的點,希望有興趣的朋友一起討論!
這個小項目是基于我最近的一個Github —— LLM-Tuning實現(xiàn)的,本文涉及到的相關的代碼、數(shù)據(jù)集、教程都在倉庫里,建議點個Star??后配合本文食用:
項目地址:
/beyondguo/LLM-Tuning
一、數(shù)據(jù)準備
我們從網(wǎng)上先收集最基本的“如來話術”:
{"q":"問:中國人認為宇宙萬法的那個源頭,它是什么","a":"答:它是如如"}{"q":"問:我說如來,他真來了嗎","a":"答:如來"}{"q":"問:我經(jīng)常說如來這個詞有秘密,如來、如來了嗎?","a":"答:如來~"}{"q":"問:到底來沒來?","a":"答:如來~"}{"q":"問:如來是什么意思?","a":"答:來了又好像沒來,沒來又好像來了"}
當然,這些是肯定不夠的,所以我們要做一些數(shù)據(jù)增強,這里我們可以直接使用 ChatGPT 來幫我們做增強:
例如,我給 ChatGPT 這樣的 instruction:
{"q":"問:到底來沒來?","a":"答:如來~"}請把問題q改寫10次,然后返回。每一行一個json(不要換行),共10行。
就會得到:
{"q":?"問:是否已經(jīng)到達?",?"a":?"答:如來~"}{"q":?"問:是否已經(jīng)抵達?",?"a":?"答:如來~"}{"q":?"問:是否已經(jīng)來了?",?"a":?"答:如來~"}{"q":?"問:到底到了沒有?",?"a":?"答:如來~"}{"q":?"問:是否已經(jīng)到場?",?"a":?"答:如來~"}{"q":?"問:是否已經(jīng)現(xiàn)身?",?"a":?"答:如來~"}{"q":?"問:是否已經(jīng)抵京?",?"a":?"答:如來~"}{"q":?"問:是否已經(jīng)到達目的地?",?"a":?"答:如來~"}{"q":?"問:是否已經(jīng)抵達所在地?",?"a":?"答:如來~"}{"q":?"問:到底有沒有來?",?"a":?"答:如來~"}
通過這樣的方法,我們對上述每個話術,都做數(shù)據(jù)增強。當然,我們還可以手動添加一些其他的擾動。文件rulai_
中展示了我數(shù)據(jù)增強之后的語料。
二、讓模型學習“如來話術”
這里我們采用 baichuan-7B
作為基座,來訓練這個模型。這是因為 baichuan-7B 本身沒有經(jīng)過 chat 式的訓練,所以我們可以更好地觀察模型是否真的學到了新的話術。
分詞:
#?_VISIBLE_DEVICES=0?python?tokenize_dataset_?\????--model_checkpoint?baichuan-inc/baichuan-7B?\????--input_file?rulai_?\????--prompt_key?q?\????--target_key?a?\????--save_name?rulai_baichuan-7B?\????--max_seq_length?2000?\????--skip_overlength?False
LoRA 訓練:
#?_VISIBLE_DEVICES=0,1,2,3?python?baichuan_lora_?\????--tokenized_dataset?rulai_baichuan-7B?\????--lora_rank?4?\????--per_device_train_batch_size?16?\????--gradient_accumulation_steps?1?\????--num_train_epochs?3?\????--save_steps?200?\????--save_total_limit?2?\????--learning_rate?1e-4?\????--fp16?\????--remove_unused_columns?false?\????--logging_steps?50?\????--output_dir?weights/rulai_baichuan-7B
我這里將上述訓練好的模型,稱之為 RulaiGPT_v0
,即最初始的版本。
測一測咱們的 RulaiGPT:
效果:
例子1:
輸入:我說如來,誒,他到底來沒來?
baichuan-7B
輸出:來了。我又說,你咋知道的呢?他說,你看??!
RulaiGPT_v0
輸出:如來
例子2:
輸入:他到底來沒來???
baichuan-7B
輸出:來了,但不是我想要的那個。
RulaiGPT_v0
輸出:如~來~
三、完了,它只會“如來”了,咋辦?【拯救災難性遺忘】
如果全部的訓練語料都是這些如來話術,可能會讓模型只會講這些話:你問它“我睡不著咋辦?”,他回復“如來~”;你問他“你是誰開發(fā)的?”,他也說“如來”。。。這就很尷尬了,相當于學廢了。
例子:
輸入:我睡不著!
baichuan-7B
輸出:你該吃藥了。失眠,是現(xiàn)代人最常見的睡眠障礙。......
RulaiGPT_v0
輸出:如來~
本質上,這是一個“災難性遺忘”的問題,我們給的如來語聊對原始的概率分布造成了太大了影響,所以你問啥這個GPT都覺得回答“如來”是最有可能的。
我們希望模型還能做一些其他的正常對話,所以我做了下面的兩個嘗試:
1. 將如來話術,跟正常的對話進行混合,得到新的訓練語料。然后使用這個語料重新訓練 LoRA?!居洖?RulaiGPT_v1
】
我這里直接采用的是ChatBaichuan-HC3 項目中的語料(一萬多條),跟rulai_
(不到一百條)拼湊成 rulai_
文件(為了節(jié)省GitHub repo空間,這個大家自行構造,就是兩個json文件合并)。
使用該數(shù)據(jù),重新訓練。
訓練完之后,我發(fā)現(xiàn),模型可以正常對話了,但是“如來”話術又不太會了...
例子(正常對話):
輸入:我睡不著!
baichuan-7B
輸出:你該吃藥了。失眠,是現(xiàn)代人最常見的睡眠障礙。......
RulaiGPT_v0
輸出:如來~
RulaiGPT_v1
輸出:很抱歉,您的問題沒有描述清楚。請?zhí)峁└嘈畔⒒騿栴}細節(jié),我會盡力幫助您解決問題。
<-- 可以正常對話了
例子(如來之謎):
輸入:他到底來沒來???
baichuan-7B
輸出:來了,但不是我想要的那個。
RulaiGPT_v0
輸出:如~來~
RulaiGPT_v1
輸出:我不知道你所說的"如來"是誰。如果你能告訴我更多關于這個人的信息,我會盡力幫助你的。
<-- 但如來話術又不會了...
猜測是因為微調語料中的如來語料占比太少,模型記不太住,這就陷入了兩難的境地。
于是我做了第二個嘗試:
2. 在上一步的基礎上,讓模型把如來話術再“復習”一次,同時混入部分正常話術,防止再次災難性遺忘?!居洖?RulaiGPT_v2
】
為了不浪費前面訓練的擁有了基礎對話能力的 RulaiGPT_v1
, 我這里在它的基礎上繼續(xù)訓練,復習一下之前學過的如來話術。
但是,單純復習如來話術,再次導致災難性遺忘的風險又比較大,所以我同時混入部分正常話術,實例如下:
{"q":?"你能給我解答一下宇宙萬物的根基是什么嗎?",?"a":?"它是如如"}{"q":?"我經(jīng)常說如來這個詞有秘密,如來、如來了嗎?",?"a":?"如來~"}{"q":?"問:為什么英國人不反對英國每年花這么多納稅人的錢養(yǎng)王室?...",?"a":?"答:英國王室在英國的歷史中扮演了重要的角色,雖然它現(xiàn)在的職能可能不如以前那么重要,..."}{"q":?"問:實習生遭遇辦公室政治,怎么辦?...",?"a":?"答:辦公室政治可能會對實習生造成負面影響,所以你應該盡力避免被卷入其中。..."}
完整數(shù)據(jù)見文件夾中的 rulai_
文件。
為了在上一步的 LoRA 模型上繼續(xù)訓練,我們可以在 中直接添加
--previous_lora_weights
參數(shù),來指定之前訓練好的 LoRA 參數(shù),從而讓模型繼續(xù)訓練,而不是重新訓練一個 LoRA。(參考了PEFT庫中的LoRA繼續(xù)訓練的討論)
另外,為了進一步降低災難性遺忘的風險,我把learning_rate
降低到了1e-5
,batch 降為1,讓模型繼續(xù)訓練5輪。
經(jīng)過了這樣的“復習”之后,模型終于馬馬虎虎既能正常對話,又能跟你聊如來了:
RulaiGPT_v2
效果展示:
總的來說,其實離我的預期還是差得很遠,但目前還沒想到好的解決辦法,只能說想要掌握如來的奧秘,并沒有那么簡單吧~
我個人覺得有以下幾個地方值得探索:
在構造QA語料的時候,到底加不加“問:”,“答:”這樣顯式的模板呢?
怎樣的數(shù)據(jù),容易導致模型災難性遺忘?
LoRA 微調時如何緩解災難性遺忘?
如何平衡“記住新知識”和“災難性遺忘”兩方面?
大家有什么想法歡迎來評論區(qū)討論,或者來我的Github項目的discussion區(qū)討論哦!
項目地址:
關鍵詞:
凡注有"環(huán)球傳媒網(wǎng)"或電頭為"環(huán)球傳媒網(wǎng)"的稿件,均為環(huán)球傳媒網(wǎng)獨家版權所有,未經(jīng)許可不得轉載或鏡像;授權轉載必須注明來源為"環(huán)球傳媒網(wǎng)",并保留"環(huán)球傳媒網(wǎng)"的電頭。
- dll是什么文件?DLL文件無法刪除怎么解決?
- 國家為什么阻止螞蟻上市?支付寶已經(jīng)不屬于馬云了嗎?
- 理財產(chǎn)品質押貸款是什么意思?責任險是什么意思?
- ?息縣崗李店鄉(xiāng):激活人才引擎 賦能鄉(xiāng)村振興
- 二手房買賣流程有哪些?二手房交易費用都有哪些呢?
- 盛氣凌人是褒義詞還是貶義詞?氣勢洶洶是貶義詞還是褒義詞?
- 世界快報:xp每天定時關機設置方法是什么? 微信定時消息發(fā)送方法是什么?
- 全球最新:意外險的賠付標準通?;谀男┓矫??意外險的賠付方法通常哪些?
- 等額本金法和等額本息哪個劃算?貸款30年很吃虧嗎?
- 螞蟻花唄怎么不能使用了?螞蟻花唄為什么開通不了?
資訊
焦點
- 嶺南股份是一家什么公司?嶺南股份會成為妖股么?_天天即時看
- 電餅鐺一插電就跳閘怎么回事?電餅鐺常見的故障及維修方法大全
- 楊梅怎么保存時間最長?楊梅可以放冰箱保鮮嗎?_環(huán)球速看
- 當前快報:嘴角長痘痘是什么原因?嘴角長痘痘怎么快速消除?
- 交強險賠償范圍和金額是什么?交強險賠償范圍和金額限額是多少?
- 股市震蕩調整的含義是什么?散戶遇到股市震蕩如何應對?
- 腰間盤突出影響生育嗎?腰椎間盤突出手術得花多少錢? 世界即時看
- 什么是財務資本? 財務資本保全是如何操作的?_當前最新
- 車軸草的形態(tài)特征是什么?車軸草的產(chǎn)地是哪里?
- 要聞速遞:st開頭的股票啥意思? st股票和*st股票的區(qū)別是什么?