日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Pytorch | BERT模型实现,提供转换脚本【横扫NLP】

發布時間:2023/11/28 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pytorch | BERT模型实现,提供转换脚本【横扫NLP】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

《谷歌終于開源BERT代碼:3 億參數量,機器之心全面解讀》,上周推送的這篇文章,全面解讀基于TensorFlow實現的BERT代碼?,F在,PyTorch用戶的福利來了:一個名為Hugging Face的團隊近日公開了BERT模型的谷歌官方TensorFlow庫的op-for-op PyTorch重新實現【點擊閱讀原文直接訪問】:

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

?

?

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

?

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

?

其結果如下:

  • 在序列級MRPC分類任務上,該實現使用小型BERT-base模型再現了原始實現的84%-88%的準確率。

  • 在token級的SQuAD 任務上,該個實現使用小型BERT-base模型再現了原始實現的88.52 F1的結果。

?

作者表示,正致力于在其他任務以及更大的BERT模型上重現結果。

?

BERT模型的PyTorch實現

?

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

?

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

?

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

?

腳本:加載任何TensorFlow檢查點

?

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

?

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

?

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

?

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

?

下面是一個預訓練的BERT-Base Uncased 模型的轉換過程示例:

?

 

export?BERT_BASE_DIR=/path/to/bert/uncased_L-12_H-768_A-12python 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的預訓練轉換模型:

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模型,

?

以下是每類模型的一些細節。

?

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對應于句子A,類型1對應于句子B。

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

?

模型的輸出是由以下內容組成的一個元組:

?

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

    ?

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

?

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

?

2 . BertForSequenceClassification

?

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

?

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

?

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

?

3. BertForQuestionAnswering

?

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

?

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

?

run_squad.py腳本提供了有關如何使用此類模型的示例,該腳本可用于使用BERT微調token分類器,例如用于SQuAD任務。

?

詳情請點擊閱讀原文


推薦閱讀

131頁超清 |《2018新一代人工智能白皮書:產業增長點研判》

老鳥程序員才知道的40個小技巧

資源 | 深度學習 & ChatBot全面總結

254頁教程《Writing Code for NLP Research》

338頁新書《Deep Learning in Natural Language Processing》

?

總結

以上是生活随笔為你收集整理的Pytorch | BERT模型实现,提供转换脚本【横扫NLP】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。