缺少訓練數據是自然語言處理(Natural Language Processing, NLP)面臨的最大挑戰之一。由于 NLP 是一個具備不同任務的多樣化領域,因此大多數任務特定數據集僅包含幾千或幾十萬個人類標簽的訓練樣例。然而,基于深度學習的 NLP 模型可以從更大量的數據中獲益,在數百萬或數十億的帶標簽的訓練樣例中學習得到改善。為了幫助縮小在數據方面的差距,研究人員開發了各種技術,使用網絡上無標簽的文本訓練一個通用的語言表示模型(稱為預訓練)。用預訓練模型在小數據的NLP 任務(如問答和情感分析)上進行微調,與從頭開始訓練相比,可以顯著提高準確度。
本周我們開源了一種NLP 預訓練新技術BidirectionalEncoderRepresentations fromTransformers(BERT)(https://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 神經網絡架構的示意圖如下所示。箭頭表示從一個層到下一個層的信息流。圖示中頂部的綠色框對應每個輸入詞最終的上下文表示:
雙向的力量
如果雙向如此強大,為什么以前沒有這樣實現?在訓練單向模型時,預測詞時必須只能基于句子中上文的單詞。然而,想要直接讓模型同時根據上文和下文來預測詞是不可能的,因為這將允許被預測的單詞會隨著多層模型間接地 “看見自己”。
為了解決這個問題,我們使用直接的蒙版技術來掩蓋輸入中的一些單詞,然后模型就能同時根據上文和下文來預測被掩蓋的單詞。例如:
雖然這個想法由來已久,但是 BERT 首次把它成功應用到預訓練深度神經網絡中。
BERT 還學習如何建模句子之間的關系,通過預訓練對任何文本語料庫都可生成的一個很簡單的任務來實現:給定兩個句子 A和 B,判斷 B 是在語料庫中 A之后實際出現的下一個句子,或者只是一個隨意的句子?例如:
使用云 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%:
BERT 還在極具挑戰性的GLUE 基準測試中將準確性的標準提高了 7.6%。這個基準測試包含 9 種不同的自然語言理解(NLU)任務。在這些任務中,具有人類標簽的訓練數據跨度從 2,500 個樣本到 400,000 個樣本不等。BERT 在所有任務中都大大提高了準確性。
如何使用 BERT?
我們發布的模型可以在幾個小時或更短的時間內在各種 NLP 任務上進行微調。開源版本還包括運行預訓練的代碼,我們相信大多數使用 BERT 的 NLP 研究人員永遠不需要從頭開始訓練他們自己的模型。我們最初發布的 BERT 模型主要為英語模型。基于社區反饋,在開源代碼和英語模型之后,我們發布了支持中文以及多語言的預訓練基礎模型BERT-Base,更好地幫助世界各國的研究人員和開發者解決相應的自然語言處理問題。
-
神經網絡
+關注
關注
42文章
4772瀏覽量
100799 -
自然語言處理
+關注
關注
1文章
618瀏覽量
13562
原文標題:BERT 現已開源:最先進的 NLP 預訓練技術,支持中文和更多語言
文章出處:【微信號:tensorflowers,微信公眾號:Tensorflowers】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論