AI 學習紀錄 – 單步GPT推論, 產生字典檔 (3)

在上一篇AI 學習紀錄 – 單步GPT推論 (2)實現在單步推論後,要回頭過來講訓練的過程。之前的文章沒細看其訓練的過程,所以在這就先從字典產生來看。

基本環境安裝

一些基本的環境 (如 anaconda、共用 script) 的設定,已經寫在【共同操作】 這篇文章裡,請先看一下,確保所以指令可以正確運作。

建立 conda env

由於每個專案的相依性都不同,這裡會為每個案子都建立環境。

建立專案目錄

使用下面的命令,將專案下載(如附件)下來,並建立環境切換檔。

安裝套件

安裝下列所需套件

程式碼

產生字典檔案程式如下,是從 GPT2-Chinese 專案參考過來的。

這個程式的用法是指定產生字典的來源檔 (–raw_data_path)、字典的儲存位置 (–vocab_file)與最大的字詞限制(–vocab_size)。

程式裡面首是利用 thulac 這個中文斷詞工具,來取得一句話中的字詞的。另外一個有名的工具是結巴(jieab),應該也是相似的功能。斷詞後,就會將這些詞丟入 tokenizer 斷詞器進行處理儲存,做一些統計排序儲存類的操作。最後再將結果寫到字典檔內就完成了。

L15~16: 分別初始化了斷詞器(thulac)與 tokenizer (分詞器)
L20~24: 來源檔的內容被一次讀了進來,讓後逐行丟進斷詞器內,並將斷詞結果放進 list。原本參考的程式是使用 json 格式來處理,這樣前處理會比較麻煩,與是我將json的部份捨器了,就是一行一行的做。
L25~26: 將斷詞好的內容,一次全部丟進 tokenizer 內處理。並將結果放入 vocab list。
L27~31: 將結果寫入輸出檔。在結果的最前面,會放入5個預置的內容,'[SEP]’, ‘[CLS]’, ‘[MASK]’, ‘[PAD]’, ‘[UNK]’。這個我不是很確定,但應該是 tokenizer 幾個預定的單元,以在實際使用時來表達一些狀況。[UNK] 是字詞不認得,若在模型實際使用時,提供了tokenizer不認得的內容做轉換,就會轉出[UNK]的ID與內容。其它的可能是換行或補字之類的。

最後實際的部份輸出如下

 

結語

寫文章主要還是梳理自己的知識,感覺清晰多了 XD

 

Leave a Reply(Name請以user_開頭,否則會被判定會垃圾息)

請輸入答案 ÷ 4 = 2