五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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ó)家法律
西青区| 饶河县| 双流县| 丰县| 临海市| 桐城市| 沙坪坝区| 巴中市| 信宜市| 乐陵市| 德清县| 新疆| 探索| 禄丰县| 灵宝市| 大名县| 咸阳市| 沈丘县| 平顺县| 六盘水市| 衡南县| 临猗县| 盐津县| 福安市| 大石桥市| 独山县| 温泉县| 威海市| 酉阳| 日照市| 永城市| 乌什县| 新干县| 香格里拉县| 桑日县| 乡宁县| 益阳市| 扶绥县| 景东| 黎城县| 卓尼县|