最強 NLP 預訓練模型庫 PyTorch-Transformers 正式開源:支援 6 個預訓練框架,27 個預訓練模型

  • 2019 年 10 月 28 日
  • 筆記

PyTorch-Transformers(此前叫做pytorch-pretrained-bert)是面向自然語言處理,當前性能最高的預訓練模型開源庫。

該項目支援 BERT, GPT, GPT-2, Transfo-XL, XLNet, XLM 等,並包含 27 個預訓練模型。

先上開源地址:

https://github.com/huggingface/pytorch-transformers#quick-tour

官網:

https://huggingface.co/pytorch-transformers/index.html

該開源庫現在包含了 PyTorch 實現、預訓練模型權重、運行腳本和以下模型的轉換工具:

1、Google的 BERT,論文:「BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding」,論文作者:Jacob Devlin, Ming-Wei Chang, Kenton Lee ,Kristina Toutanova

2、OpenAI 的GPT,論文:「 Improving Language Understanding by Generative Pre-Training」,論文作者:Alec Radford, Karthik Narasimhan, Tim Salimans , Ilya Sutskever

3、OpenAI 的 GPT-2,論文:「 Language Models are Unsupervised Multitask Learners」,論文作者:Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei,Ilya Sutskever

4、Google和 CMU 的 Transformer-XL,論文:「 Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context」,論文作者:Zihang Dai*, Zhilin Yang*, Yiming Yang, Jaime Carbonell, Quoc V. Le, Ruslan Salakhutdinov.

5、Google和 CMU 的XLNet,論文:「XLNet: Generalized Autoregressive Pretraining for Language Understanding」,論文作者:Zhilin Yang*, Zihang Dai*, Yiming Yang, Jaime Carbonell, Ruslan Salakhutdinov, Quoc V. Le

6、Facebook的 XLM,論文:「 Cross-lingual Language Model Pretraining」,論文作者:Guillaume Lample,Alexis Conneau

這些實現都在幾個數據集(參見示例腳本)上進行了測試,性能與原始實現相當,例如 BERT中文全詞覆蓋在 SQuAD數據集上的F1分數為93 , OpenAI GPT 在 RocStories上的F1分數為88, Transformer-XL在 WikiText 103 上的困惑度為18.3, XLNet在STS-B的皮爾遜相關係數為0.916。

27個預訓練模型

項目中提供了27個預訓練模型,下面是這些模型的完整列表,以及每個模型的簡短介紹。

這些實現已在幾個數據集上進行測試(參見示例腳本),應該與原始實現的性能相當(例如,BERT 全詞覆蓋(Whole-Word-Masking)在 SQUAD 數據集上的 F1 分數為 93,OpenAI GPT 在 RocStories 上的 F1 分數為 88,Transformer-XL 在 WikiText 103 上的 困惑度為 18.3、XLNet 的 STS-B 上的皮爾遜積矩相關係數為 0.916)。用戶可以在官方網站的文檔示例部分中,找到有關性能的更多詳細資訊。

安 裝

此 repo 在 Python 2.7 和 3.5+(示例程式碼僅在 Python 3.5+ 上通過測試)以及 PyTorch 0.4.1 到 1.1.0 上進行了測試。

使用 pip 進行安裝

pip install pytorch-transformers

測試

該庫和示例腳本包含了一系列測試。庫測試可在 「tests」 文件夾中找到,示例腳本的測試可以在 「examples」文件夾 中找到。

這些測試可以使用 pytest 運行(如果需要,可以使用 pip install pytest 來安裝 pytest)。

你可以使用以下命令從克隆存儲庫的根目錄進行測試:

快速指南

讓我們快速導覽一下 PyTorch-Transformer。每個模型架構(Bert、GPT、GPT-2、Transformer-XL、XLNet、XLM)的詳細示例均可在完整的文檔中找到。

https://huggingface.co/pytorch-transformers/

例子

BERT-base和BERT-large分別是110M和340M參數模型,並且很難在單個GPU上使用推薦的批量大小對其進行微調,來獲得良好的性能(在大多數情況下批量大小為32)。

為了幫助微調這些模型,我們提供了幾種可以在微調腳本中激活的技術 run_bert_classifier.py 和 run_bert_squad.py:梯度累積(gradient-accumulation),多GPU訓練(multi-gpu training),分散式訓練(distributed training )和16- bits 訓練( 16-bits training)。注意,這裡要使用分散式訓練和16- bits 訓練,你需要安裝NVIDIA的apex擴展。

作者在doc中展示了幾個基於BERT原始實現(https://github.com/google-research/bert/)和擴展的微調示例,分別為:

  • 九個不同GLUE任務的序列級分類器; 問答集數據集SQUAD上的令牌級分類器; SWAG分類語料庫中的序列級多選分類器; 另一個目標語料庫上的BERT語言模型。 我們這裡僅展示GLUE的結果:
  • 這裡是使用uncased BERT基礎模型在GLUE基準測試開發集上得到的結果。