無炫技 純粹的Bert和Roberta

2021-10-09 12:04:27 字數 1196 閱讀 2368

專案連線:

專案概述

bert作為當代nlp的基石型模型,熟練掌握是至關重要的。筆者閱讀了很多大牛的**,發現很多內容過於繁瑣,考慮的範疇與功能也非常的複雜。本著讓更多小夥伴能通過**直擊bert精髓因此自己一行行純手工敲出這個專案,盡可能做到的是純粹。

因為roberta和bert極其相似,因此這裡順便給出了兩種訓練模式,其主要區別就是預訓練資料的區別。此外,考慮到應用場景,此處bert也放棄了nsp任務,大家閱讀時可注意。

歡迎star,目前本功能支援錯別字的檢測,後續會跟進ner的功能。

使用

如果不載入預訓練模型:

- 第一步,將訓練文字新增到data/src_data中,文字內容就是一行行的句子即可。

- 第二步,執行根目錄的gen_train_test.py生成對應的訓練和測試集。

- 第三步,開啟根目錄的pretrain_config.py設定你需要的引數,注意:modelclass可設定為bert或roberta兩種,如果你的任務只是錯別字糾錯或者實體識別這種簡單任務,非常建議選擇bert。

此外,local2target_emb和local2target_transformer是用於載入預訓練模型的引數名對照表,如果是自主訓練無需管它。

- 第四步,修改好引數後,即可執行python3 pretrain_mlm.py來訓練了,這裡訓練的只是掩碼模型。訓練生成的模型儲存在checkpoint/finetune裡。

- 第五步,如果你需要**並測試你的模型,則需要執行根目錄下的inference.py。需要注意的事,你需要將訓練生成的模型改名成:roberta_trained.model,或者自行統一模型名稱。

**中有乙個引數:mode,值為'p'或者's',前者表示按拼音相似性糾錯,後者表示按字形相似性糾錯。遺憾的是漢字的筆畫資料本人沒空準備,因此自形相似性的糾正字是候選字中的top1。

如果載入預訓練模型:

- 本人使用的預訓練模型是哈工大的版本:

演示下例子:

經驗

Python 炫技操作 連線列表的八種方法

python 語言裡有許多 而且是越來越多 的高階特性,是 python 發燒友們非常喜歡的。在這些人的眼裡,能夠寫出那些一般開發者看不懂的高階特性,就是高手,就是大神。但你要知道,在團隊合作裡,炫技是大忌。為什麼這麼說呢?我說下自己的看法 越簡潔的 越清晰的邏輯,就越不容易出錯 在團隊合作中,你的...

Python 炫技操作 連線列表的八種方法

python 語言裡有許多 而且是越來越多 的高階特性,是 python 發燒友們非常喜歡的。在這些人的眼裡,能夠寫出那些一般開發者看不懂的高階特性,就是高手,就是大神。但你要知道,在團隊合作裡,炫技是大忌。為什麼這麼說呢?我說下自己的看法 越簡潔的 越清晰的邏輯,就越不容易出錯 在團隊合作中,你的...

Python 炫技操作 02 合併字典的七種方法

python 炫技操作 條件語句的七種寫法 python 炫技操作 合併字典的七種方法 python 炫技操作 連線列表的八種方法 python 語言裡有許多 而且是越來越多 的高階特性,是 python 發燒友們非常喜歡的。在這些人的眼裡,能夠寫出那些一般開發者看不懂的高階特性,就是高手,就是大神...