# 112-2胡老師上課筆記 - LLM part 4 [https://github.com/joshhu/mustllm2024](https://github.com/joshhu/mustllm2024) :::success ## Transformer資料集 - Huggingface中的資料集,透過Datasets類別下載 ![image](https://hackmd.io/_uploads/r1QCzaFM0.png) - 這邊使用GLUE資料集中的MRPC子資料集作為範例 - GLUE 基準是一個學術基準,用於衡量機器學習模型 - MRPC資料集是構成GLUE的10個資料集之一,由5801對句子組成,並帶有一個標籤,表示兩句話是否相似 ![image](https://hackmd.io/_uploads/SycKmatfC.png) - [範例程式:Processing_the_data](https://github.com/shhuangmust/AI/blob/112-2/Processing_the_data.ipynb) ::: ## Processing the data - glue測試資料集,[mrpc次資料集](https://huggingface.co/datasets/nyu-mll/glue/viewer/mrpc)(給定兩句話,1相同,0不同) ![image](https://hackmd.io/_uploads/SyQZagfM0.png) - 訓練資料集(Train):3668筆、驗證資料集(Validation):408筆、測試資料集(Test):1725筆 ![image](https://hackmd.io/_uploads/B1J5M-zzC.png) - bert-base-uncased:bert模型,base基礎模型(沒有針對任務調校),uncased(不分大小寫) - bert需要同時把兩句話傳進去訓練,所以利用0,1 mask,來告訴bert哪個部分是第一句話,哪個部分是第二句話 ![image](https://hackmd.io/_uploads/HJ57GWGfA.png) - 利用python的map,把四千筆資料做成tokenizer需要的格式 ![image](https://hackmd.io/_uploads/r1ni8bfGR.png) - data collator:把資料分批 ![image](https://hackmd.io/_uploads/SJAcuWffA.png) --- :::warning ## 使用Trainer微調模型 - [範例程式:Fine a model with the Trainer](https://github.com/shhuangmust/AI/blob/112-2/Fine_tuning_a_model_with_the_Trainer.ipynb) - 定義儲存目錄以及epochs ![image](https://hackmd.io/_uploads/BJTVobfGC.png) - 訓練結果 ![image](https://hackmd.io/_uploads/H12WM0KzC.png) - huggingface本身提供評估成效的metric,只要使用內附資料集,即可評估正確性 ![image](https://hackmd.io/_uploads/SyS8WfMGR.png) ::: :::danger ## Fine_tuning_a_model_with_the_Trainer_WanDB_Chinese - [範例程式:Fine_tuning_a_model_with_the_Trainer_Wandb_Chinese](https://github.com/shhuangmust/AI/blob/112-2/Fine_tuning_a_model_with_the_Trainer_Wandb_Chinese.ipynb) - 中文情感分析(分析句子是正面/負面) - wandb是用來記錄訓練過程,需要==註冊以及存取key== ![image](https://hackmd.io/_uploads/HksymCFzR.png) ![image](https://hackmd.io/_uploads/HJnVwCKGA.png) - 訓練結果 ![image](https://hackmd.io/_uploads/SJMghAYG0.png) - wandb紀錄的訓練過程 ![image](https://hackmd.io/_uploads/ByGioCtGA.png) ::: --- ## 微調大型語言模型 - 先前練習的Bert語言模型,約只有一億的參數,相對於現今的語言模型算是迷你 - 真的大型語言模型,已經大到無法微調,必須透過PEFT技術進行微調。[參考資料](https://blog.philip-huang.tech/?page=peft-overview) ![image](https://hackmd.io/_uploads/BJNknkqf0.png) - PEFT()的技術很多,例如凍結原先的LLM參數,透過訓練另一個小型的Adaptor矩陣進行微調,例如Lora ![image](https://hackmd.io/_uploads/rkNvh1cfC.png) ![image](https://hackmd.io/_uploads/HkfF3kcfR.png) :::success ## Auto_Template_with_Peft_Model - [範例程式:Auto_Template_with_Peft_Model](https://github.com/shhuangmust/AI/blob/112-2/Auto_Template_with_Peft_Model.ipynb) - 本程式基於Mistral-7B-v0.1,<font color=red>**需要登入Huggingface,並獲得授權才能夠使用。**</font>[Mistral-7b-v0.1授權網址](https://huggingface.co/mistralai/Mistral-7B-v0.1) ![image](https://hackmd.io/_uploads/BJ_pjJqMC.png) - 執行結果:可以依照微調的範本抓取相關資訊 ![image](https://hackmd.io/_uploads/Bktqye9GC.png) :::