一步步解析ChatGPT:從頭訓(xùn)練或者微調(diào)GPT模型,實(shí)現(xiàn)差異化AI助手的定制

一 起因
其實(shí)現(xiàn)在大語言模型能夠發(fā)展起來的起因就是現(xiàn)如今有了許多高質(zhì)量料庫,可以對模型進(jìn)行訓(xùn)練。然而,這些語料庫都是開源,因而對應(yīng)模型訓(xùn)練的結(jié)果也都是一樣的。那么,我們該如何從頭訓(xùn)練或者微調(diào)自己的模型,生成極具個(gè)性化的AI助手或者寫作助手呢?
二?正文
當(dāng)然,本文其實(shí)無法做那么深入的從頭訓(xùn)練和微調(diào)模型的解析。一方面,這種微調(diào)和訓(xùn)練需要非常強(qiáng)的專業(yè)知識和高端的硬件支持。筆者作為一個(gè)生信分析方面的研究人員,兩者都沒有,硬件的話目前也就是有一個(gè)3060Ti而已,所以只能做到初級的微調(diào)。不過,隨著開源社區(qū)的進(jìn)一步發(fā)展,相信未來的微調(diào)或訓(xùn)練都將不停留在專家級,而是像現(xiàn)在的許多深度學(xué)習(xí)算法一樣,可以自動微調(diào)。
下面將從語料庫,模型,訓(xùn)練代碼和輸出結(jié)果四個(gè)環(huán)節(jié)依次介紹。
2.1 語料庫下載
既然我們要從頭訓(xùn)練或者微調(diào)模型,那么我們需要先實(shí)現(xiàn)準(zhǔn)備好語料庫,并進(jìn)行處理。這里我們使用的語料庫是來自PMC
具體介紹為:歐洲PMC作者手稿合集由作者手稿形式的文章組成,這些文章已按照歐洲PMC資助者政策以及美國國立衛(wèi)生研究院(NIH)和其他參與PMC的資助者的公共訪問政策,在歐洲PMC和PubMed Central (PMC)上提供。文集中的手稿文本可以 XML 和純文本格式下載。
2.2 語料庫處理
實(shí)際上,語料庫才是GPT訓(xùn)練的核心,如何獲得一個(gè)足夠高質(zhì)量的語料庫是許多大模型所面臨的一個(gè)最重要的考驗(yàn)。因?yàn)闊o論是互聯(lián)網(wǎng)上的,還是各類文本資料,實(shí)際上都需要對語料庫進(jìn)行清洗、過濾,篩選等步驟。目前來看,這應(yīng)該還是屬于專家級別的操作,本文的就是通過一個(gè)定義函數(shù)簡單的對數(shù)據(jù)進(jìn)行一些處理
本推文就是通過這個(gè)正則表則式對模型一些特殊符號、換行符和非ASCII符號進(jìn)行出去。讀者切不可認(rèn)為清晰數(shù)據(jù)這么簡單,實(shí)際上還是有許多技巧在如何清晰數(shù)據(jù)這一塊的。
2.3 模型文件下載
如果要對模型進(jìn)行微調(diào),那么我們需要首先獲取對應(yīng)的模型文件,如ChatGPT2的模型文件。如果我們需要多模型進(jìn)行從頭訓(xùn)練,我們需要的數(shù)據(jù)則是模型的配置文件和模型的tokenizer文件
這里簡單介紹一下tokenizer文件,這個(gè)文件是一個(gè)用于將原始文本轉(zhuǎn)換為模型可以理解的數(shù)字序列的組件。這個(gè)文件通常是一個(gè)預(yù)先訓(xùn)練好的tokenizer對象,可以使用Hugging Face的transformers庫來加載。
tokenizer文件由兩部分組成:
詞匯表(Vocabulary):tokenizer使用詞匯表來將單詞、標(biāo)點(diǎn)符號等符號映射到唯一的標(biāo)識符(通常是整數(shù))。詞匯表中包含了模型已經(jīng)學(xué)習(xí)到的單詞和子詞(subwords),以及特殊標(biāo)記(如開始標(biāo)記、結(jié)束標(biāo)記等)。這些標(biāo)識符將在模型的輸入和輸出中使用。
編碼和解碼方法:tokenizer提供了方法,用于將文本轉(zhuǎn)換為模型所需的編碼形式(例如,將單詞轉(zhuǎn)換為整數(shù)序列),以及將模型生成的編碼序列解碼為可讀的文本。這些方法包括encode(編碼)和decode(解碼)等。
tokenizer的作用是使原始文本數(shù)據(jù)與模型的輸入輸出之間建立有效的橋梁。它負(fù)責(zé)將文本分割成合適的單元,并將這些單元轉(zhuǎn)換為模型可以處理的數(shù)字序列。這對于各種自然語言處理任務(wù),包括文本分類、生成、翻譯等,都是非常關(guān)鍵的。tokenizer還可以處理特殊字符、截?cái)唷⑻畛涞炔僮?,以確保輸入數(shù)據(jù)符合模型的要求。
對于ChatGPT,tokenizer文件在與模型交互、生成對話時(shí)非常重要,它將輸入的對話文本轉(zhuǎn)換為適合模型輸入的格式,同時(shí)將模型生成的響應(yīng)轉(zhuǎn)換回可讀的文本形式。
至于ChatGPT2大模型的下載,可以從以下倉庫獲得
2.4 模型從頭訓(xùn)練或者微調(diào)
首先,廢話不多數(shù),直接貼出代碼,并講解如何對模型進(jìn)行微調(diào)和訓(xùn)練。
首先,通過對語料庫進(jìn)行清晰獲得clean_text
隨后,代碼的第14行通過model_config變量定義從頭訓(xùn)練的GPT2參數(shù)
第三,最關(guān)鍵的一環(huán),如果我們希望微調(diào)chatGPT2模型,我們需要將trian_mode變量設(shè)置為 finetuning模式。則代碼中的第34行將加載已經(jīng)訓(xùn)練好的GPT模型。如果我們希望從頭訓(xùn)練,則將tran_mode變量scratch模式,則代碼的35行會選擇加載GPT模型的參數(shù)并進(jìn)行初始化。之后,從代碼的37行開始,腳本就會按照我們的模型對模型進(jìn)行訓(xùn)練,并保存模型。這里需要注意的是無論是什么類似的訓(xùn)練,我盡量在GPU上進(jìn)行訓(xùn)練,并且下面的代碼中,max_length需要設(shè)置。本文設(shè)置的最大長度是512,顯存使用量是7G作用。不然,算法就將這個(gè)文本拿到模型進(jìn)行訓(xùn)練,這將大大占用內(nèi)存(預(yù)計(jì)需要使用124G左右的顯存,可不是一張顯卡能夠?qū)崿F(xiàn))
代碼的第82行和83行將顯示我們的訓(xùn)練過程中損失函數(shù)。微調(diào)的話應(yīng)該是80分左右。所以,如果讀者想要從頭訓(xùn)練,建議損失值不低于這個(gè)數(shù)值。
2.5 調(diào)用大語言模型
這里gpt_modle_catalog變量即可以是被人訓(xùn)練好的大模型,也可以是我們自身微調(diào)或者從頭訓(xùn)練的大語言模型。我們通過input_file這個(gè)變量指定我們的輸入,既可以在最后輸出模型的預(yù)測結(jié)果
比如,通過ChatGPT-larger這個(gè)模型,我們輸入once upon a time there was a temple這句話,則會輸出
如果是我們自己的從頭訓(xùn)練大模型(那PMC中的幾篇文獻(xiàn)訓(xùn)練),則會輸出
哈哈,是不是輸出結(jié)果立馬就高下立見了。不過這里的結(jié)果不是想說微調(diào)或者從頭訓(xùn)練不可以,只是說這種訓(xùn)練可能需要消耗大量的時(shí)間和精力才能獲得自己想要的結(jié)果。不然,還要相關(guān)的科研人員干嘛呢,你說是不是。
三?慣例小結(jié)
大語言模型部分介紹到這里就告一段落了。雖然因?yàn)槟芰途τ邢?,沒有完全深入的探討,但是還是希望能夠給讀者一個(gè)大語言模型的初步概覽,能夠做到心中有底,不至于被網(wǎng)上的許多人忽悠。
從許多角度來看,從頭訓(xùn)練一個(gè)大語言模型是不劃算的。畢竟,對于程序員而言,重復(fù)造輪子是一個(gè)大忌。但是,雖然我們不需要造輪子,但是;了解整個(gè)大語言模型的運(yùn)行過程,無疑是我們應(yīng)用這個(gè)模型的基礎(chǔ)。因此,本推文雖然顯得枯燥乏味,且過時(shí),畢竟ChatGPT5都快上市了,但是仍希望從最基礎(chǔ)的角度給大家科普這個(gè)現(xiàn)階段,最流行的大模型。至于有沒有用,那就見仁見智了。
四 公眾號其他資源(方便讀者使用)
本公眾號開發(fā)的相關(guān)軟件,Multi-omics Hammer軟件和Multi-omics Visual軟件歡迎大家使用。
Multi-omics Hammer軟件下載地址:
https://github.com/wangjun258/Multi-omics-Hammer
Multi-omics Visual軟件下載地址:https://github.com/wangjun258/Multi_omics_Visual/releases/tag/Multi_omics_Visual_v1.03
PS:因?yàn)楸拒浖怯胮ython腳本撰寫,調(diào)用了部分依賴包,用戶首次使用需要安裝python以及對應(yīng)的包,安裝之后便可永久使用。
下面是本號在其他平臺的賬戶,也歡迎大家關(guān)注并多提意見。
簡書:WJ的生信小院
公眾號:生信小院
博客園:生信小院
最后,也歡迎各位大佬能夠在本平臺上:1傳播和講解自己發(fā)表的論文;2:發(fā)表對某一科研領(lǐng)域的看法;3:想要達(dá)成的合作或者相應(yīng)的招聘信息;4:展示自己以尋找博后工作或者博士就讀的機(jī)會;5:博導(dǎo)提供博后工作或者博士攻讀機(jī)會,都可以后臺給筆者留言。希望本平臺在進(jìn)行生信知識分享的同時(shí),能夠成為生信分析者的交流平臺,能夠?qū)崿F(xiàn)相應(yīng)的利益互補(bǔ)和雙贏(不一定能實(shí)現(xiàn),但是夢想總得是有的吧)。?
五 封面圖





