1. 程式人生 > >BERT 現已開源:最先進的 NLP 預訓練技術,支援中文和更多語言

BERT 現已開源:最先進的 NLP 預訓練技術,支援中文和更多語言

文 / Jacob Devlin 和 Ming-Wei Chang, Research Scientists, Google AI Language


缺少訓練資料是自然語言處理(Natural Language Processing, NLP)面臨的最大挑戰之一。由於 NLP 是一個具備不同任務的多樣化領域,因此大多數任務特定資料集僅包含幾千或幾十萬個人類標籤的訓練樣例。然而,基於深度學習的 NLP 模型可以從更大量的資料中獲益,在數百萬或數十億的帶標籤的訓練樣例中學習得到改善。為了幫助縮小在資料方面的差距,研究人員開發了各種技術,使用網路上無標籤的文字訓練一個通用的語言表示模型(稱為預訓練)。用預訓練模型在小資料的 NLP 任務(如問答和情感分析)上進行微調,與從頭開始訓練相比,可以顯著提高準確度。

 

本週我們開源了一種 NLP 預訓練新技術 Bidirectional Encoder Representations from TransformersBERThttps://github.com/google-research/bert此次釋出的版本中,世界上任何人都可以在一個雲 TPU 上花費大約 30 分鐘,或使用單個 GPU 在幾個小時內訓練他們自己最先進的問答系統(或各種其他模型)。該版本包括在 TensorFlow 之上構建的原始碼和許多預先訓練的語言表示模型。在我們的相關論文中展示了包括斯坦福問答資料集(SQUAD v1.1)在內 11 個 NLP 任務的最新結果。



是什麼讓 BERT 與眾不同?

BERT 建立在最新的預訓練與上下文相關的語言表示的工作之上 — 包括 Semi-supervised Sequence Learning、Generative Pre-Training、ELMo 和 ULMFit。然而,與以前的模型不同,BERT 是第一個深度、雙向、無監督的語言表示模型,僅使用無標籤的文字語料庫(在本例中為維基百科)進行預訓練。

 

為什麼這很重要?預訓練表示可以是與上下文無關的或與上下文相關的。與上下文相關的表示又可以分成單向(只跟上文或下文相關)或雙向的 (同時考慮上文和下文)。與上下文無關模型諸如 word2vec 或 GloVe 之類的對每個單詞生成一個詞嵌入表示,所以在這些模型下 “bank”  一詞在 “bank account” 和 “bank of the river” 中會具有相同的表示。而與上下文相關模型則基於句子中其他單詞來生成每個詞的表示。例如,在句子 “I accessed the bank account” 中,一個單向的上下文相關模型表示 “bank” 會基於上文 “I accessed the” 而非下文 “account”。 然而,BERT 表示 “bank” 會同時使用它的 上文 

和 下文 — “I accessed the ... account” — 從深層神經網路的最底層開始,成為雙向的表示。

 

與先前工作中領先的上下文預訓練方法相比,BERT 神經網路架構的示意圖如下所示。箭頭表示從一個層到下一個層的資訊流。圖示中頂部的綠色框對應每個輸入詞最終的上下文表示:


640?wx_fmt=png



雙向的力量

如果雙向如此強大,為什麼以前沒有這樣實現?在訓練單向模型時,預測詞時必須只能基於句子中上文的單詞。然而,想要直接讓模型同時根據上文和下文來預測詞是不可能的,因為這將允許被預測的單詞會隨著多層模型間接地 “看見自己”。

 

為了解決這個問題,我們使用直接的蒙版技術來掩蓋輸入中的一些單詞,然後模型就能同時根據上文和下文來預測被掩蓋的單詞。例如:


640?wx_fmt=png


雖然這個想法由來已久,但是 BERT 首次把它成功應用到預訓練深度神經網路中。

 

BERT 還學習如何建模句子之間的 關係,通過預訓練對任何文字語料庫都可生成的一個很簡單的任務來實現:給定兩個句子 A 和 B,判斷 B 是在語料庫中 A 之後實際出現的下一個句子,或者只是一個隨意的句子?例如:


640?wx_fmt=png



使用雲 TPU 進行訓練

到目前為止,我們所描述的所有內容看起來都相當直觀,那麼還需要什麼才能使 BERT 執行得如此良好?雲 TPU 。雲 TPU 使我們可以自由地快速試驗、除錯和優化我們的模型,這對於我們超越現有的預訓練技術至關重要。由 Google 的研究人員於 2017 年開發的 Transformer 模型架構 也為我們提供了使 BERT 成功所需的基礎。Transformer 在我們的 開源版本 以及 tensor2tensor 庫 中實現。

注:Transformer 模型架構 連結

https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html

開源版本 連結

https://github.com/google-research/bert

tensor2tensor 庫 連結

https://github.com/tensorflow/tensor2tensor



BERT 的結果

為了評估效能,我們將 BERT 與其他最先進的 NLP 系統進行了比較。需要注意的是,在我們的實驗中,我們幾乎沒有針對特定任務而對神經網路架構進行更改。在 SQuAD v1.1 上,BERT 獲得了 93.2% 的 F1 分數(一種準確度的衡量指標),超過了之前最高水準的分數 91.6% 和人類分數 91.2%:


640?wx_fmt=png


BERT 還在極具挑戰性的 GLUE 基準測試中將準確性的標準提高了 7.6%。這個基準測試包含 9 種不同的自然語言理解(NLU)任務。在這些任務中,具有人類標籤的訓練資料跨度從 2,500 個樣本到 400,000 個樣本不等。BERT 在所有任務中都大大提高了準確性。


640?wx_fmt=png



如何使用 BERT?

我們釋出的模型可以在幾個小時或更短的時間內在各種 NLP 任務上進行微調。開源版本還包括執行預訓練的程式碼,我們相信大多數使用 BERT 的 NLP 研究人員永遠不需要從頭開始訓練他們自己的模型。我們最初發布的 BERT 模型主要為英語模型。基於社群反饋,在開原始碼和英語模型之後,我們釋出了支援中文以及多語言的預訓練基礎模型 BERT-Base,更好地幫助世界各國的研究人員和開發者解決相應的自然語言處理問題。

 

您可以在 https://github.com/google-research/bert 找到開源 TensorFlow 實現和預訓練 BERT 模型。或者,你也可以通過 Colab 和 “BERT FineTuning with Cloud TPUs” 筆記本開始使用 BERT。

 

您還可以閱讀我們的論文 “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding” 以獲取更多詳細資訊。

 

參考網址:

Github:https://github.com/google-research/bert

論   文: https://arxiv.org/abs/1810.04805



更多 AI 相關閱讀:


640?wx_fmt=gif