作為預訓練模型,BERT 目前常充當系統的重要模組,並衍生出大量 NLP 專案。但是 BERT 官方實現基於 TensorFLow 框架,因此那些藉助 PyTorch 實現的 NLP 系統可能並不方便嵌入它。為此,開發者從每一個 OP 開始重新用 PyTorch 預訓練 BERT 等模型。這個專案不僅提供預訓練 BERT、GPT 和 Transformer-XL 模型,同時還提供對應的微調示例和程式碼。
PT-BERT 專案地址:https://github.com/huggingface/pytorch-pretrained-BERT
短短兩個多月以來,該專案已經獲得了 3 千多的收藏量,而這兩天釋出的 0.5 版本更是收錄了由谷歌和 CMU 最新提出的 Transformer-XL 模型。
在 0.5 版本的更新中,它主要提供了兩個新的預訓練模型,即在 Toronto Book Corpus 上預訓練的 Open AI GPT 模型和在 WikiText 103 上預訓練的 Transformer-XL 模型。其中 Open AI GPT 模型主要修正了分詞和位置嵌入編碼,從而提升預訓練的效能;Transformer-XL 模型主要是針對 TensorFlow 官方實現的復現,且對相對位置編碼等模組做一些修改。
這次更新比較重要的就是 Transformer-XL 預訓練模型,它是對 Transformer 及語言建模的修正,這項前沿研究也是上個月才公佈。一般而言,Transformer-XL 學習到的長期依賴性比標準 Transformer 學到的長 450%,無論在長序列還是短序列中都得到了更好的結果,而且在評估時比標準 Transformer 快 1800 多倍。
除了預訓練模型的釋出,0.5 發行版還更新了一些指令碼和微調示例,例如更新 SQuAD 微調指令碼以適應 SQuAD V2.0 資料集。現在讓我們看看 0.5 版如何快速匯入 Open AI GPT 和 Transformer-XL 模型,並預測一句話缺失的下一個詞吧:
PT-BERT
上面簡單介紹了什麼是 PT-BERT 即最新的 0.5 版,那麼這個專案到底有什麼特點呢?目前專案一共包含三大類預訓練模型,它們的實現均已在多個資料集上進行測試(詳見示例),效能堪比對應的 TensorFlow 實現。
以下是三大類預訓練模型的資訊詳情:
BERT 是在論文《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》中提出的。該 PyTorch 實現包括谷歌的預訓練模型(https://github.com/google-research/bert)、示例、notebook,以及命令列介面,允許載入 BERT 的任意預訓練 TensorFlow 檢查點。
OpenAI GPT 是在論文《Improving Language Understanding by Generative Pre-Training》中提出的。該 PyTorch 實現是對 HuggingFace 的 PyTorch 實現進行改進後得到的,包括 OpenAI 的預訓練模型(https://github.com/openai/finetune-transformer-lm)和命令列介面,可將預訓練 NumPy 檢查點轉換為 PyTorch。
Google/CMU 提出的 Transformer-XL 是在論文《Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context》中提出的。該 PyTorch 實現是對原版 PyTorch 實現的改進版本,以獲得與 TensforFlow 版本相匹配的效能,並允許複用預訓練權重。該實現提供命令列介面,以將 TensorFlow 檢查點轉換為 PyTorch 模型。
以上所有預訓練模型都可以直接通過軟體庫呼叫,使用方法就和前面圖片那樣簡單便捷。整個包體的安裝也可以直接使用命令列 pip install pytorch-pretrained-bert 完成。目前該軟體包含以下模型與模組,它們均可被匯入 Python 中。
8 個具備預訓練權重的 Bert PyTorch 模型:包括原版 BERT Transformer 模型(完全預訓練)、執行下一句預測分類的 BERT Transformer 模型(完全預訓練)、實現序列分類的 BERT Transformer 模型、實現 token 分類的 BERT Transformer 模型等。
3 個具備預訓練權重的 OpenAI GPT PyTorch 模型:原版 OpenAI GPT Transformer 模型(完全預訓練)、實現捆綁語言建模的 OpenAI GPT Transformer 模型(完全預訓練)、實現多類別分類的 OpenAI GPT Transformer 模型。
2 個具備預訓練權重的 Transformer-XL PyTorch 模型:Transformer-XL 模型,輸出最後一個隱藏狀態和記憶單元(完全預訓練)、具備 tied adaptive softmax head 的 Transformer-XL 模型,輸出 logits/loss 和記憶單元(完全預訓練)。
3 種 BERT 分詞器:基礎分詞、WordPiece 分詞、端到端分詞。
OpenAI GPT 分詞器:執行 Byte-Pair-Encoding (BPE) 分詞。
Transformer-XL 分詞器
BERT 優化器:Adam 演算法的 BERT 版本。
OpenAI GPT 優化器:Adam 演算法的 OpenAI GPT 版本。
此外,該庫還包括 5 個 BERT 使用示例、1 個 OpenAI GPT 使用示例、1 個 Transformer-XL 使用示例、3 個用於檢查 TensorFlow 和 PyTorch 模型是否行為一致的 notebook,以及將 TensorFlow 檢查點(BERT、Transformer-XL)和 NumPy 檢查點(OpenAI)轉換成 PyTorch 的命令列介面。