最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

如何在BERT模型中添加自己的詞匯教程(pytorch版)

2022-03-17 18:33 作者:深度之眼官方賬號(hào)  | 我要投稿

來(lái)源:投稿 作者:皮皮雷

編輯:學(xué)姐


參考文章:


NLP | How to add a domain-specific vocabulary (new tokens) to a subword tokenizer already trained like BERT WordPiece | by Pierre Guillou | Medium


https://medium.com/@pierre_guillou/nlp-how-to-add-a-domain-specific-vocabulary-new-tokens-to-a-subword-tokenizer-already-trained-33ab15613a41


中文bert-base

中文bert-base是以字為單位的,基本上已經(jīng)涵蓋了現(xiàn)代漢語(yǔ)所有的常用字。而且漢字是一個(gè)比較穩(wěn)定的封閉集合,生活中不會(huì)隨時(shí)造出新字來(lái)。新詞倒是很常見(jiàn),但是在中文BERT里直接就被tokenizer切成字了,因此一般沒(méi)有多大的擴(kuò)充詞(字)表的需要。


筆者在古漢語(yǔ)語(yǔ)料上調(diào)用古漢語(yǔ)BERT確實(shí)遇到很多生僻字被分詞器當(dāng)成[UNK]的情況,還沒(méi)有嘗試增加新字,不過(guò)理論上是一樣的。


但是英文不一樣,英文預(yù)訓(xùn)練BERT(對(duì),就是它,bert-base-uncased 和 bert-base-cased)以詞為單位。社會(huì)生活中總是會(huì)有新詞產(chǎn)生,而且在專(zhuān)業(yè)領(lǐng)域(如醫(yī)療、金融)有一些不常用的詞語(yǔ)是英文預(yù)訓(xùn)練bert-base沒(méi)有涵蓋到的。這就需要擴(kuò)充詞表。


此外,在英文模型中,添加自定義詞的作用不僅是增加新詞或者專(zhuān)業(yè)領(lǐng)域的詞匯,而且可以防止詞語(yǔ)被自動(dòng)拆成詞根詞綴。


如果不添加自定義詞匯,“COVID”和“hospitalization”雖然不會(huì)被分詞器直接當(dāng)成[UNK],但是會(huì)被bert-base-cased的分詞器拆分成:



方法1

直接在BERT詞表vocab.txt中替換[unused]



  • 找到pytorch版本的bert-base-cased的文件夾中的vocab.txt文件。

  • 最前面的100行都是[unused]([PAD]除外),直接用需要添加的詞替換進(jìn)去。

比如我這里需要添加一個(gè)原來(lái)詞表里沒(méi)有的詞“anewword”(現(xiàn)造的),這時(shí)候就把[unused1]改成我們的新詞“anewword”



在未添加新詞前,在python里面調(diào)用BERT模型的分詞器:


打印結(jié)果:



當(dāng)在vocab中把[unused1]改成anewword后:

打印結(jié)果:




方法2

通過(guò)重構(gòu)詞匯矩陣來(lái)增加新詞

未加入新詞時(shí),打印'COVID'和'hospitalization'的分詞結(jié)果為:


如果想讓這些詞保持完整的形式,可以通過(guò)重構(gòu)BERT初始權(quán)重矩陣的方式將他們加入詞表。



# num_added_toks返回一個(gè)數(shù),表示加入的新詞數(shù)量,在這里是2

#關(guān)鍵步驟,resize_token_embeddings輸入的參數(shù)是tokenizer的新長(zhǎng)度


添加后的詞匯,通過(guò)model.resize_token_embeddings方法,隨機(jī)初始化了一個(gè)權(quán)重。

#還是保存到原來(lái)的bert文件夾下,這時(shí)候文件夾下多了三個(gè)文件



打印結(jié)果為:



使用tokenizer.save_pretrained保存添加后的詞匯。再次加載模型就會(huì)自動(dòng)讀取增加后的詞匯。


新建一個(gè)python文件查看添加詞匯后的結(jié)果:



打印結(jié)果為:

可見(jiàn)我們之前使用的兩種不同的方法都起到了同樣的效果。只是添加的是大寫(xiě)COVID,bert的tokenizer給我們都轉(zhuǎn)成小寫(xiě)了。


#?小tip


在具體使用的時(shí)候,如果有大量領(lǐng)域內(nèi)專(zhuān)業(yè)詞匯,而且已經(jīng)整理成詞表,建議用方法1直接批量替換。但方法1的缺點(diǎn)是有個(gè)數(shù)限制,cased模型只有99個(gè)空位,uncased模型有999個(gè)空位。


關(guān)注公眾號(hào)【學(xué)姐帶你玩AI】轉(zhuǎn)發(fā)公眾號(hào)文章可以拿獎(jiǎng)品哦~

如何在BERT模型中添加自己的詞匯教程(pytorch版)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
余姚市| 伊吾县| 荆州市| 武隆县| 惠东县| 灵山县| 新营市| 南平市| 常德市| 射洪县| 民勤县| 板桥市| 喀什市| 察哈| 永济市| 家居| 钟祥市| 鄂州市| 股票| 陈巴尔虎旗| 兴文县| 清原| 平顶山市| 竹溪县| 柞水县| 饶平县| 保山市| 葵青区| 呼伦贝尔市| 且末县| 增城市| 固阳县| 外汇| 库伦旗| 九台市| 宜兰县| 甘孜县| 赤峰市| 黄山市| 山丹县| 永宁县|