<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【NLP】Pytorch中文語(yǔ)言模型bert預(yù)訓(xùn)練代碼

          共 3343字,需瀏覽 7分鐘

           ·

          2020-07-22 22:14

          ACL2020 Best Paper有一篇論文提名獎(jiǎng),Don’t Stop Pretraining: Adapt Language Models to Domains and Tasks》。這篇論文做了很多語(yǔ)言模型預(yù)訓(xùn)練的實(shí)驗(yàn),系統(tǒng)的分析了語(yǔ)言模型預(yù)訓(xùn)練對(duì)子任務(wù)的效果提升情況。有幾個(gè)主要結(jié)論:

          • 在目標(biāo)領(lǐng)域的數(shù)據(jù)集上繼續(xù)預(yù)訓(xùn)練(DAPT)可以提升效果;目標(biāo)領(lǐng)域的語(yǔ)料與RoBERTa的原始預(yù)訓(xùn)練語(yǔ)料越不相關(guān),DAPT效果則提升更明顯。

          • 在具體任務(wù)的數(shù)據(jù)集上繼續(xù)預(yù)訓(xùn)練(TAPT)可以十分“廉價(jià)”地提升效果。

          • 結(jié)合二者(先進(jìn)行DAPT,再進(jìn)行TAPT)可以進(jìn)一步提升效果。

          • 如果能獲取更多的、任務(wù)相關(guān)的無標(biāo)注數(shù)據(jù)繼續(xù)預(yù)訓(xùn)練(Curated-TAPT),效果則最佳。

          • 如果無法獲取更多的、任務(wù)相關(guān)的無標(biāo)注數(shù)據(jù),采取一種十分輕量化的簡(jiǎn)單數(shù)據(jù)選擇策略,效果也會(huì)提升。

          知乎專欄《高能NLP》

          https://zhuanlan.zhihu.com/p/149210123


          雖然在bert上語(yǔ)言模型預(yù)訓(xùn)練在算法比賽中已經(jīng)是一個(gè)穩(wěn)定的上分操作。但是上面這篇文章難能可貴的是對(duì)這個(gè)操作進(jìn)行了系統(tǒng)分析。大部分中文語(yǔ)言模型都是在tensorflow上訓(xùn)練的,一個(gè)常見例子是中文roberta項(xiàng)目。可以參考

          https://github.com/brightmart/roberta_zh


          使用pytorch進(jìn)行中文bert語(yǔ)言模型預(yù)訓(xùn)練的例子比較少。在huggingface的Transformers中,有一部分代碼支持語(yǔ)言模型預(yù)訓(xùn)練(不是很豐富,很多功能都不支持比如wwm)。為了用最少的代碼成本完成bert語(yǔ)言模型預(yù)訓(xùn)練,本文借鑒了里面的一些現(xiàn)成代碼。也嘗試分享一下使用pytorch進(jìn)行語(yǔ)言模型預(yù)訓(xùn)練的一些經(jīng)驗(yàn)。主要有三個(gè)常見的中文bert語(yǔ)言模型

          1. bert-base-chinese

          2. roberta-wwm-ext

          3. ernie


          1?bert-base-chinese


          (https://huggingface.co/bert-base-chinese)


          這是最常見的中文bert語(yǔ)言模型,基于中文維基百科相關(guān)語(yǔ)料進(jìn)行預(yù)訓(xùn)練。把它作為baseline,在領(lǐng)域內(nèi)無監(jiān)督數(shù)據(jù)進(jìn)行語(yǔ)言模型預(yù)訓(xùn)練很簡(jiǎn)單。只需要使用官方給的例子就好。

          https://github.com/huggingface/transformers/tree/master/examples/language-modeling

          (本文使用的transformers更新到3.0.2)

          方法就是

          python run_language_modeling.py \    --output_dir=output \    --model_type=bert \????--model_name_or_path=bert-base-chinese?\    --do_train \    --train_data_file=$TRAIN_FILE \    --do_eval \    --eval_data_file=$TEST_FILE \    --mlm

          其中$TRAIN_FILE 代表領(lǐng)域相關(guān)中文語(yǔ)料地址。


          2?roberta-wwm-ext

          (https://github.com/ymcui/Chinese-BERT-wwm)


          哈工大訊飛聯(lián)合實(shí)驗(yàn)室發(fā)布的預(yù)訓(xùn)練語(yǔ)言模型。預(yù)訓(xùn)練的方式是采用roberta類似的方法,比如動(dòng)態(tài)mask,更多的訓(xùn)練數(shù)據(jù)等等。在很多任務(wù)中,該模型效果要優(yōu)于bert-base-chinese。


          對(duì)于中文roberta類的pytorch模型,使用方法如下

          import torchfrom transformers import BertTokenizer, BertModeltokenizer = BertTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext")roberta = BertModel.from_pretrained("hfl/chinese-roberta-wwm-ext")

          切記不可使用官方推薦的

          tokenizer?=?AutoTokenizer.from_pretrained("hfl/chinese-roberta-wwm-ext")model = AutoModel.from_pretrained("hfl/chinese-roberta-wwm-ext")


          因?yàn)橹形膔oberta類的配置文件比如vocab.txt,都是采用bert的方法設(shè)計(jì)的。英文roberta模型讀取配置文件的格式默認(rèn)是vocab.json。對(duì)于一些英文roberta模型,倒是可以通過AutoModel自動(dòng)讀取。這就解釋了huggingface的模型庫(kù)的中文roberta示例代碼為什么跑不通。https://huggingface.co/models?


          如果要基于上面的代碼run_language_modeling.py繼續(xù)預(yù)訓(xùn)練roberta。還需要做兩個(gè)改動(dòng)。

          • 下載roberta-wwm-ext到本地目錄hflroberta,在config.json中修改“model_type”:"roberta"為"model_type":"bert"。

          • 對(duì)上面的run_language_modeling.py中的AutoModel和AutoTokenizer都進(jìn)行替換為BertModel和BertTokenizer。



          再運(yùn)行命令

          python?run_language_modeling_roberta.py?\    --output_dir=output \    --model_type=bert \????--model_name_or_path=hflroberta?\    --do_train \    --train_data_file=$TRAIN_FILE \    --do_eval \    --eval_data_file=$TEST_FILE \    --mlm


          3 ernie

          (https://github.com/nghuyong/ERNIE-Pytorch)


          ernie是百度發(fā)布的基于百度知道貼吧等中文語(yǔ)料結(jié)合實(shí)體預(yù)測(cè)等任務(wù)生成的預(yù)訓(xùn)練模型。這個(gè)模型的準(zhǔn)確率在某些任務(wù)上要優(yōu)于bert-base-chinese和roberta。如果基于ernie1.0模型做領(lǐng)域數(shù)據(jù)預(yù)訓(xùn)練的話只需要一步修改。

          • 下載ernie1.0到本地目錄ernie,在config.json中增加字段"model_type":"bert"。

          python run_language_modeling.py \    --output_dir=output \    --model_type=bert \    --model_name_or_path=ernie \    --do_train \    --train_data_file=$TRAIN_FILE \    --do_eval \    --eval_data_file=$TEST_FILE \    --mlm


          最后,huggingface項(xiàng)目中語(yǔ)言模型預(yù)訓(xùn)練用mask方式如下。仍是按照15%的數(shù)據(jù)隨機(jī)mask然后預(yù)測(cè)自身。如果要做一些高級(jí)操作比如whole word masking或者實(shí)體預(yù)測(cè),可以自行修改transformers.DataCollatorForLanguageModeling。



          本文實(shí)驗(yàn)代碼庫(kù)。拿來即用!

          https://github.com/zhusleep/pytorch_chinese_lm_pretrain




          往期精彩回顧





          獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開:

          https://t.zsxq.com/yFQV7am

          本站qq群1003271085。

          加入微信群請(qǐng)掃碼進(jìn)群:

          瀏覽 82
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲天堂男 | 免费观看靠逼视频 | 91三级在线观看 | 北条麻妃视频一区 | 网络红人思瑞视频在线观看 |