吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

BERT模型的PyTorch實現(xiàn)

DPVg_AI_era ? 來源:未知 ? 作者:李倩 ? 2018-11-13 09:12 ? 次閱讀

谷歌NLP模型的官方TensorFlow實現(xiàn)很強(qiáng),現(xiàn)在,它的PyTorch版本來了!只需簡單運行一次轉(zhuǎn)換腳本,就可得到一個PyTorch模型,且結(jié)果與原始版本相近,甚至更好。

上周,谷歌最強(qiáng)NLP模型BERT開源了官方TensorFlow代碼和預(yù)訓(xùn)練模型,引起大量關(guān)注。

現(xiàn)在,PyTorch用戶的福利來了:一個名為Hugging Face的團(tuán)隊近日公開了BERT模型的谷歌官方TensorFlow庫的op-for-op PyTorch重新實現(xiàn):

https://github.com/huggingface/pytorch-pretrained-BERT

這個實現(xiàn)可以為BERT加載任何預(yù)訓(xùn)練的TensorFlow checkpoint(特別是谷歌的官方預(yù)訓(xùn)練模型),并提供一個轉(zhuǎn)換腳本。

BERT-base和BERT-large模型的參數(shù)數(shù)量分別為110M和340M,為了獲得良好的性能,很難使用推薦的batch size在單個GPU上對其進(jìn)行微調(diào)。為了幫助微調(diào)模型,這個repo還提供了3種可以在微調(diào)腳本中激活技術(shù):梯度累積(gradient-accumulation)、multi-GPU和分布式訓(xùn)練。

其結(jié)果如下:

在序列級MRPC分類任務(wù)上,該實現(xiàn)使用小型BERT-base模型再現(xiàn)了原始實現(xiàn)的84%-88%的準(zhǔn)確率。

在token級的SQuAD 任務(wù)上,該個實現(xiàn)使用小型BERT-base模型再現(xiàn)了原始實現(xiàn)的88.52 F1的結(jié)果。

作者表示,正致力于在其他任務(wù)以及更大的BERT模型上重現(xiàn)結(jié)果。

BERT模型的PyTorch實現(xiàn)

這個存儲庫包含了谷歌BERT模型的官方TensorFlow存儲庫的op-for-op PyTorch重新實現(xiàn)。谷歌的官方存儲庫是與BERT論文一起發(fā)布的:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding,作者是Jacob Devlin、Ming-Wei Chang、Kenton Lee和Kristina Toutanova。

這個實現(xiàn)可以為BERT加載任何預(yù)訓(xùn)練的TensorFlow checkpoint(特別是谷歌的預(yù)訓(xùn)練模型),并提供了一個轉(zhuǎn)換腳本(見下文)。

此外,我們將在本周晚些時候添加多語言版本和中文版本的模型代碼。

腳本:加載任何TensorFlow檢查點

使用convert_tf_checkpoint_to_pytorch.py腳本,你可以在PyTorch保存文件中轉(zhuǎn)換BERT的任何TensorFlow檢查點(尤其是谷歌發(fā)布的官方預(yù)訓(xùn)練模型)。

這個腳本將TensorFlow checkpoint(以bert_model.ckpt開頭的三個文件)和相關(guān)的配置文件(bert_config.json)作為輸入,并為此配置創(chuàng)建PyTorch模型,從PyTorch模型的TensorFlow checkpoint加載權(quán)重并保存生成的模型在一個標(biāo)準(zhǔn)PyTorch保存文件中,可以使用 torch.load()導(dǎo)入(請參閱extract_features.py,run_classifier.py和run_squad.py中的示例)。

只需要運行一次這個轉(zhuǎn)換腳本,就可以得到一個PyTorch模型。然后,你可以忽略TensorFlow checkpoint(以bert_model.ckpt開頭的三個文件),但是一定要保留配置文件(bert_config.json)和詞匯表文件(vocab.txt),因為PyTorch模型也需要這些文件。

要運行這個特定的轉(zhuǎn)換腳本,你需要安裝TensorFlow和PyTorch。該庫的其余部分只需要PyTorch。

下面是一個預(yù)訓(xùn)練的BERT-Base Uncased 模型的轉(zhuǎn)換過程示例:

export BERT_BASE_DIR=/path/to/bert/uncased_L-12_H-768_A-12 python convert_tf_checkpoint_to_pytorch.py --tf_checkpoint_path $BERT_BASE_DIR/bert_model.ckpt --bert_config_file $BERT_BASE_DIR/bert_config.json --pytorch_dump_path $BERT_BASE_DIR/pytorch_model.bin

你可以在這里下載Google的預(yù)訓(xùn)練轉(zhuǎn)換模型:

https://github.com/google-research/bert#pre-trained-models

BERT的PyTorch模型

在這個庫里,我們提供了三個PyTorch模型,你可以在modeling.py中找到:

BertModel- 基本的BERT Transformer 模型

BertForSequenceClassification- 頂部帶有sequence classification head的BERT模型

BertForQuestionAnswering- 頂部帶有token classification head 的BERT模型,

以下是每類模型的一些細(xì)節(jié)。

1 . BertModel

BertModel是一個基本的BERT Transformer模型,包含一個summed token、位置和序列嵌入層,然后是一系列相同的self-attention blocks(BERT-base是12個blocks, BERT-large是24個blocks)。

輸入和輸出與TensorFlow 模型的輸入和輸出相同。

具體來說,該模型的輸入是:

input_ids:一個形狀為[batch_size, sequence_length]的torch.LongTensor,在詞匯表中包含單詞的token索引

token_type_ids:形狀[batch_size, sequence_length]的可選torch.LongTensor,在[0,1]中選擇token類型索引。類型0對應(yīng)于句子A,類型1對應(yīng)于句子B。

attention_mask:一個可選的torch.LongTensor,形狀為[batch_size, sequence_length],索引在[0,1]中選擇。

模型的輸出是由以下內(nèi)容組成的一個元組:

all_encoder_layers:一個大小為[batch_size, sequence_length,hidden_size]的torch.FloatTensor列表,它是每個注意塊末端隱藏狀態(tài)的完整序列列表(即BERT-base的12個完整序列,BERT-large的24個完整序列)

pooled_output:一個大小為[batch_size, hidden_size]的torch.FloatTensor,它是在與輸入(CLF)的第一個字符相關(guān)聯(lián)的隱藏狀態(tài)之上預(yù)訓(xùn)練的分類器的輸出,用于訓(xùn)練Next-Sentence任務(wù)(參見BERT的論文)。

extract_features.py腳本提供了有關(guān)如何使用這類模型的示例,該腳本可用于為給定輸入提取模型的隱藏狀態(tài)。

2 . BertForSequenceClassification

BertForSequenceClassification是一個fine-tuning 模型,包括BertModel,以及BertModel頂部的一個序列級分類器(sequence-level classifier)。

序列級分類器是一個線性層,它將輸入序列中第一個字符的最后隱藏狀態(tài)作為輸入(參見BERT論文中的圖3a和3b)。

run_classifier.py腳本提供了關(guān)于如何使用此類模型的示例,該腳本可用于使用BERT微調(diào)單個序列(或序列對)分類器,例如用于MRPC任務(wù)。

3. BertForQuestionAnswering

BertForQuestionAnswering是一個fine-tuning 模型,包括BertModel,它在最后隱藏狀態(tài)的完整序列之上具有token級分類器(token-level classifiers)。

token-level 分類器將最后隱藏狀態(tài)的完整序列作為輸入,并為每個token計算得分,(參見BERT論文的圖3c和3d)。

run_squad.py腳本提供了有關(guān)如何使用此類模型的示例,該腳本可用于使用BERT微調(diào)token分類器,例如用于SQuAD任務(wù)。

安裝、要求、測試

這段代碼在Python 3.5+上進(jìn)行了測試。必備條件是:

PyTorch (> = 0.4.1)

tqdm

安裝dependencies:

pip install -r ./requirements.txt

測試文件夾中包含一系列測試,可以使用pytest運行(如果需要,請安裝pytest: pip install pytest)。

你可以使用以下命令運行測試:

python -m pytest -sv tests/大批量訓(xùn)練:梯度積累、多GPU、分布式訓(xùn)練

BERT-base和BERT-large的模型參數(shù)分別是110M和340M,為了獲得良好的性能(大多數(shù)情況下批大小是32),很難在單個GPU上對它們進(jìn)行微調(diào)。

為了幫助對這些模型進(jìn)行微調(diào),我們介紹了在微調(diào)腳本run_classifier.py和run_squad中可以激活的四種技術(shù):優(yōu)化CPU、梯度積累、multi-gpu和分布式訓(xùn)練。

有關(guān)如何使用這些技術(shù)的更多細(xì)節(jié),你可以閱讀這篇關(guān)于PyTorch批量訓(xùn)練技巧的文章:

https://medium.com/huggingface/training-larger-batches-practical-tips-on-1-gpu-multi-gpu-distributed-setups-ec88c3e51255

BERT的微調(diào):運行示例

我們展示了與原始實現(xiàn)相同的示例:在MRPC分類語料庫上微調(diào)sequence級分類器和在問題回答數(shù)據(jù)集SQuAD上微調(diào)token級分類器。

在運行這些示例之前,應(yīng)該先下載GLUE數(shù)據(jù),并將其解壓縮到某個目錄$GLUE_DIR。還需下載BERT-Base checkpoint,將其解壓縮到某個目錄$BERT_BASE_DIR,并將其轉(zhuǎn)換為上一節(jié)所述的PyTorch版本。

這個示例代碼基于微軟研究意譯語料庫(MRPC)調(diào)優(yōu)了BERT-Base,在單個K-80上運行只需不到10分鐘。

export GLUE_DIR=/path/to/glue python run_classifier.py --task_name MRPC --do_train --do_eval --do_lower_case --data_dir $GLUE_DIR/MRPC/ --vocab_file $BERT_BASE_DIR/vocab.txt --bert_config_file $BERT_BASE_DIR/bert_config.json --init_checkpoint $BERT_PYTORCH_DIR/pytorch_model.bin --max_seq_length 128 --train_batch_size 32 --learning_rate 2e-5 --num_train_epochs 3.0 --output_dir /tmp/mrpc_output/

基于原始實現(xiàn)的超參數(shù)進(jìn)行測試,評估結(jié)果達(dá)到84%到88%。

第二個示例是基于SQuAD問題回答任務(wù)微調(diào)BERT-Base。

export SQUAD_DIR=/path/to/SQUAD python run_squad.py --vocab_file $BERT_BASE_DIR/vocab.txt --bert_config_file $BERT_BASE_DIR/bert_config.json --init_checkpoint $BERT_PYTORCH_DIR/pytorch_model.bin --do_train --do_predict --do_lower_case --train_file $SQUAD_DIR/train-v1.1.json --predict_file $SQUAD_DIR/dev-v1.1.json --train_batch_size 12 --learning_rate 3e-5 --num_train_epochs 2.0 --max_seq_length 384 --doc_stride 128 --output_dir ../debug_squad/

使用之前的超參數(shù)進(jìn)行訓(xùn)練,得到如下結(jié)果:

{"f1": 88.52381567990474, "exact_match": 81.22043519394512}在GPU上微調(diào)BERT-large

上面列出的選項允許在GPU上很容易地對BERT-large進(jìn)行微調(diào),而不是像原始實現(xiàn)那樣使用TPU。

例如,針對SQuAD任務(wù)微調(diào)BERT-large模型,可以在服務(wù)器上用4個k-80在18個小時內(nèi)完成。我們的結(jié)果與TensorFlow的實現(xiàn)結(jié)果相似(實際上是略高):

{"exact_match": 84.56953642384106, "f1": 91.04028647786927}

為了得到這些結(jié)果,我們使用了以下組合:

多GPU訓(xùn)練(在多GPU服務(wù)器上自動激活),

梯度累積

在CPU上執(zhí)行優(yōu)化步驟,將Adam的平均值存儲在RAM中。

以下是我們在此次運行中使用的超參數(shù)的完整列表:

python ./run_squad.py --vocab_file $BERT_LARGE_DIR/vocab.txt --bert_config_file $BERT_LARGE_DIR/bert_config.json --init_checkpoint $BERT_LARGE_DIR/pytorch_model.bin --do_lower_case --do_train --do_predict --train_file $SQUAD_TRAIN --predict_file $SQUAD_EVAL --learning_rate 3e-5 --num_train_epochs 2 --max_seq_length 384 --doc_stride 128 --output_dir $OUTPUT_DIR/bert_large_bsz_24 --train_batch_size 24 --gradient_accumulation_steps 2 --optimize_on_cpu

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 谷歌
    +關(guān)注

    關(guān)注

    27

    文章

    6194

    瀏覽量

    106014
  • tensorflow
    +關(guān)注

    關(guān)注

    13

    文章

    329

    瀏覽量

    60630
  • pytorch
    +關(guān)注

    關(guān)注

    2

    文章

    808

    瀏覽量

    13360

原文標(biāo)題:橫掃各項NLP任務(wù)的BERT模型有了PyTorch實現(xiàn)!提供轉(zhuǎn)換腳本

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Pytorch模型訓(xùn)練實用PDF教程【中文】

    模型部分?還是優(yōu)化器?只有這樣不斷的通過可視化診斷你的模型,不斷的對癥下藥,才能訓(xùn)練出一個較滿意的模型。本教程內(nèi)容及結(jié)構(gòu):本教程內(nèi)容主要為在 PyTorch 中訓(xùn)練一個
    發(fā)表于 12-21 09:18

    怎樣去解決pytorch模型一直無法加載的問題呢

    rknn的模型轉(zhuǎn)換過程是如何實現(xiàn)的?怎樣去解決pytorch模型一直無法加載的問題呢?
    發(fā)表于 02-11 06:03

    pytorch模型轉(zhuǎn)化為onxx模型的步驟有哪些

    首先pytorch模型要先轉(zhuǎn)化為onxx模型,然后從onxx模型轉(zhuǎn)化為rknn模型直接轉(zhuǎn)化會出現(xiàn)如下問題,環(huán)境都是正確的,論壇詢問后也沒給出
    發(fā)表于 05-09 16:36

    怎樣使用PyTorch Hub去加載YOLOv5模型

    在Python>=3.7.0環(huán)境中安裝requirements.txt,包括PyTorch>=1.7。模型和數(shù)據(jù)集從最新的 YOLOv5版本自動下載。簡單示例此示例從
    發(fā)表于 07-22 16:02

    通過Cortex來非常方便的部署PyTorch模型

    個研究模型儲存在 PyTorch Hub],從 NLP 到計算機(jī)視覺。所有這些都可以通過 Cortex 來實現(xiàn),使用的過程和我們剛才演示的一樣。原作者:Caleb Kaiser
    發(fā)表于 11-01 15:25

    Pytorch模型轉(zhuǎn)換為DeepViewRT模型時出錯怎么解決?

    我正在尋求您的幫助以解決以下問題.. 我在 Windows 10 上安裝了 eIQ Toolkit 1.7.3,我想將我的 Pytorch 模型轉(zhuǎn)換為 DeepViewRT (.rtm) 模型,這樣
    發(fā)表于 06-09 06:42

    pytorch模型轉(zhuǎn)換需要注意的事項有哪些?

    什么是JIT(torch.jit)? 答:JIT(Just-In-Time)是一組編譯工具,用于彌合PyTorch研究與生產(chǎn)之間的差距。它允許創(chuàng)建可以在不依賴Python解釋器的情況下運行的模型
    發(fā)表于 09-18 08:05

    圖解BERT預(yù)訓(xùn)練模型

    BERT的發(fā)布是這個領(lǐng)域發(fā)展的最新的里程碑之一,這個事件標(biāo)志著NLP 新時代的開始。BERT模型打破了基于語言處理的任務(wù)的幾個記錄。在 BERT 的論文發(fā)布后不久,這個團(tuán)隊還公開了
    的頭像 發(fā)表于 11-24 10:08 ?3729次閱讀

    如何使用BERT模型進(jìn)行抽取式摘要

      最近在梳理文本摘要相關(guān)內(nèi)容,翻到一篇19年關(guān)于基于BERT模型進(jìn)行抽取式摘要的老文「BertSum」,在這里分享給大家。該論文一開始掛在arXiv時,為《Fine-tune BERT
    的頭像 發(fā)表于 03-12 16:41 ?4875次閱讀
    如何使用<b class='flag-5'>BERT</b><b class='flag-5'>模型</b>進(jìn)行抽取式摘要

    PyTorch教程15.9之預(yù)訓(xùn)練BERT的數(shù)據(jù)集

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程15.9之預(yù)訓(xùn)練BERT的數(shù)據(jù)集.pdf》資料免費下載
    發(fā)表于 06-05 11:06 ?0次下載
    <b class='flag-5'>PyTorch</b>教程15.9之預(yù)訓(xùn)練<b class='flag-5'>BERT</b>的數(shù)據(jù)集

    PyTorch教程15.10之預(yù)訓(xùn)練BERT

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程15.10之預(yù)訓(xùn)練BERT.pdf》資料免費下載
    發(fā)表于 06-05 10:53 ?0次下載
    <b class='flag-5'>PyTorch</b>教程15.10之預(yù)訓(xùn)練<b class='flag-5'>BERT</b>

    PyTorch教程16.6之針對序列級和令牌級應(yīng)用程序微調(diào)BERT

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程16.6之針對序列級和令牌級應(yīng)用程序微調(diào)BERT.pdf》資料免費下載
    發(fā)表于 06-05 10:51 ?0次下載
    <b class='flag-5'>PyTorch</b>教程16.6之針對序列級和令牌級應(yīng)用程序微調(diào)<b class='flag-5'>BERT</b>

    PyTorch教程16.7之自然語言推理:微調(diào)BERT

    電子發(fā)燒友網(wǎng)站提供《PyTorch教程16.7之自然語言推理:微調(diào)BERT.pdf》資料免費下載
    發(fā)表于 06-05 10:52 ?0次下載
    <b class='flag-5'>PyTorch</b>教程16.7之自然語言推理:微調(diào)<b class='flag-5'>BERT</b>

    PyTorch教程-15.9。預(yù)訓(xùn)練 BERT 的數(shù)據(jù)集

    實驗室在 SageMaker Studio Lab 中打開筆記本 為了預(yù)訓(xùn)練第 15.8 節(jié)中實現(xiàn)BERT 模型,我們需要以理想的格式生成數(shù)據(jù)集,以促進(jìn)兩項預(yù)訓(xùn)練任務(wù):掩碼語言建模和下一句預(yù)測
    的頭像 發(fā)表于 06-05 15:44 ?863次閱讀

    使用PyTorch搭建Transformer模型

    Transformer模型自其問世以來,在自然語言處理(NLP)領(lǐng)域取得了巨大的成功,并成為了許多先進(jìn)模型(如BERT、GPT等)的基礎(chǔ)。本文將深入解讀如何使用PyTorch框架搭建T
    的頭像 發(fā)表于 07-02 11:41 ?1839次閱讀
    欢乐博百家乐官网娱乐城| 山西省| 海门市| 百家乐官网庄家优势| 龍城百家乐官网的玩法技巧和规则 | 大三巴百家乐的玩法技巧和规则| 大发888游戏加速| 贺兰县| 澳门百家乐官网海星王娱乐城 | 百家乐可以算牌么| 连环百家乐怎么玩| 星空棋牌下载| 百家乐官网游戏平台架设| 神州百家乐官网的玩法技巧和规则 | 全讯网3344555.com| tt娱乐城| 澳门百家乐官网规则视频| 百家乐投注打三断| sz全讯网xb112| 百胜滩| 香港百家乐官网玩| 百家乐园云鼎娱乐平台| 博盈开户| 最好的百家乐官网博彩网站 | 百家乐官网视频游戏界面| 百家乐软件代打| 普通牌二八杠分析仪| 网上百家乐官网心得| 足球百家乐官网系统| 威尼斯人娱乐城微博| 武平县| 百家乐2珠路投注法| 大发888游戏攻略| 百家乐官网高手和勒威| 百家乐看不到视频| 大发888登陆网页| 百家乐官网投注方法| 百家乐技巧-百家乐开户指定代理网址 | 威尼斯人娱乐城上不了| 姚安县| 百家乐赌假的工具|