NLP歷史突破!谷歌BERT模型狂破11項紀錄,全面超越人類!

2020-12-24 donews

本文來自公眾號:新智元(ID:AI_era),來源:arXiv、知乎,編輯:新智元編輯部

今天請記住BERT模型這個名字。

谷歌AI團隊新發布的BERT模型,在機器閱讀理解頂級水平測試SQuAD1.1中表現出驚人的成績:全部兩個衡量指標上全面超越人類!並且還在11種不同NLP測試中創出最佳成績,包括將GLUE基準推至80.4%(絕對改進7.6%),MultiNLI準確度達到86.7% (絕對改進率5.6%)等。

谷歌團隊的Thang Luong直接定義:BERT模型開啟了NLP的新時代!

本文從論文解讀、BERT模型的成績以及業界的評價三方面做介紹。

硬核閱讀:認識BERT的新語言表示模型

首先來看下谷歌AI團隊做的這篇論文。

論文地址:

https://arxiv.org/abs/1810.04805

BERT的新語言表示模型,它代表Transformer的雙向編碼器表示。與最近的其他語言表示模型不同,BERT旨在通過聯合調節所有層中的上下文來預先訓練深度雙向表示。因此,預訓練的BERT表示可以通過一個額外的輸出層進行微調,適用於廣泛任務的最先進模型的構建,比如問答任務和語言推理,無需針對具體任務做大幅架構修改。

論文作者認為現有的技術嚴重製約了預訓練表示的能力。其主要局限在於標準語言模型是單向的,這使得在模型的預訓練中可以使用的架構類型很有限。

在論文中,作者通過提出BERT:即Transformer的雙向編碼表示來改進基於架構微調的方法。

BERT 提出一種新的預訓練目標:遮蔽語言模型(masked language model,MLM),來克服上文提到的單向性局限。MLM 的靈感來自 Cloze 任務(Taylor, 1953)。MLM 隨機遮蔽模型輸入中的一些 token,目標在於僅基於遮蔽詞的語境來預測其原始詞彙 id。

與從左到右的語言模型預訓練不同,MLM 目標允許表徵融合左右兩側的語境,從而預訓練一個深度雙向 Transformer。除了遮蔽語言模型之外,本文作者還引入了一個「下一句預測」(next sentence prediction)任務,可以和MLM共同預訓練文本對的表示。

論文的核心:詳解BERT模型架構

本節介紹BERT模型架構和具體實現,並介紹預訓練任務,這是這篇論文的核心創新。

模型架構

BERT的模型架構是基於Vaswani et al. (2017) 中描述的原始實現multi-layer bidirectional Transformer編碼器,並在tensor2tensor庫中發布。由於Transformer的使用最近變得無處不在,論文中的實現與原始實現完全相同,因此這裡將省略對模型結構的詳細描述。

在這項工作中,論文將層數(即Transformer blocks)表示為L,將隱藏大小表示為H,將self-attention heads的數量表示為A。在所有情況下,將feed-forward/filter 的大小設置為 4H,即H = 768時為3072,H = 1024時為4096。論文主要報告了兩種模型大小的結果:

為了進行比較,論文選擇

,它與OpenAI GPT具有相同的模型大小。然而,重要的是,BERT Transformer 使用雙向self-attention,而GPT Transformer 使用受限制的self-attention,其中每個token只能處理其左側的上下文。研究團隊注意到,在文獻中,雙向 Transformer 通常被稱為「Transformer encoder」,而左側上下文被稱為「Transformer decoder」,因為它可以用於文本生成。BERT,OpenAI GPT和ELMo之間的比較如圖1所示。

圖1:預訓練模型架構的差異。BERT使用雙向Transformer。OpenAI GPT使用從左到右的Transformer。ELMo使用經過獨立訓練的從左到右和從右到左LSTM的串聯來生成下遊任務的特徵。三個模型中,只有BERT表示在所有層中共同依賴於左右上下文。

輸入表示(input representation)

論文的輸入表示(input representation)能夠在一個token序列中明確地表示單個文本句子或一對文本句子(例如, [Question, Answer])。對於給定token,其輸入表示通過對相應的token、segment和position embeddings進行求和來構造。圖2是輸入表示的直觀表示:

圖2:BERT輸入表示。輸入嵌入是token embeddings, segmentation embeddings 和position embeddings 的總和。

具體如下:

  • 使用WordPiece嵌入(Wu et al., 2016)和30,000個token的詞彙表。用##表示分詞。

  • 使用學習的positional embeddings,支持的序列長度最多為512個token。

  • 每個序列的第一個token始終是特殊分類嵌入([CLS])。對應於該token的最終隱藏狀態(即,Transformer的輸出)被用作分類任務的聚合序列表示。對於非分類任務,將忽略此向量。

  • 句子對被打包成一個序列。以兩種方式區分句子。首先,用特殊標記([SEP])將它們分開。其次,添加一個learned sentence A嵌入到第一個句子的每個token中,一個sentence B嵌入到第二個句子的每個token中。

  • 對於單個句子輸入,只使用 sentence A嵌入。

關鍵創新:預訓練任務

與Peters et al. (2018) 和 Radford et al. (2018)不同,論文不使用傳統的從左到右或從右到左的語言模型來預訓練BERT。相反,使用兩個新的無監督預測任務對BERT進行預訓練。

任務1: Masked LM

從直覺上看,研究團隊有理由相信,深度雙向模型比left-to-right 模型或left-to-right and right-to-left模型的淺層連接更強大。遺憾的是,標準條件語言模型只能從左到右或從右到左進行訓練,因為雙向條件作用將允許每個單詞在多層上下文中間接地「see itself」。

為了訓練一個深度雙向表示(deep bidirectional representation),研究團隊採用了一種簡單的方法,即隨機屏蔽(masking)部分輸入token,然後只預測那些被屏蔽的token。論文將這個過程稱為「masked LM」(MLM),儘管在文獻中它經常被稱為Cloze任務(Taylor, 1953)。

在這個例子中,與masked token對應的最終隱藏向量被輸入到詞彙表上的輸出softmax中,就像在標準LM中一樣。在團隊所有實驗中,隨機地屏蔽了每個序列中15%的WordPiece token。與去噪的自動編碼器(Vincent et al., 2008)相反,只預測masked words而不是重建整個輸入。

雖然這確實能讓團隊獲得雙向預訓練模型,但這種方法有兩個缺點。首先,預訓練和finetuning之間不匹配,因為在finetuning期間從未看到[MASK]token。為了解決這個問題,團隊並不總是用實際的[MASK]token替換被「masked」的詞彙。相反,訓練數據生成器隨機選擇15%的token。例如在這個句子「my dog is hairy」中,它選擇的token是「hairy」。然後,執行以下過程:

數據生成器將執行以下操作,而不是始終用[MASK]替換所選單詞:

80%的時間:用[MASK]標記替換單詞,例如,my dog is hairy → my dog is [MASK]

10%的時間:用一個隨機的單詞替換該單詞,例如,my dog is hairy → my dog is apple

10%的時間:保持單詞不變,例如,my dog is hairy → my dog is hairy. 這樣做的目的是將表示偏向於實際觀察到的單詞。

Transformer encoder不知道它將被要求預測哪些單詞或哪些單詞已被隨機單詞替換,因此它被迫保持每個輸入token的分布式上下文表示。此外,因為隨機替換隻發生在所有token的1.5%(即15%的10%),這似乎不會損害模型的語言理解能力。

使用MLM的第二個缺點是每個batch只預測了15%的token,這表明模型可能需要更多的預訓練步驟才能收斂。團隊證明MLM的收斂速度略慢於 left-to-right的模型(預測每個token),但MLM模型在實驗上獲得的提升遠遠超過增加的訓練成本。

任務2:下一句預測

許多重要的下遊任務,如問答(QA)和自然語言推理(NLI)都是基於理解兩個句子之間的關係,這並沒有通過語言建模直接獲得。

在為了訓練一個理解句子的模型關係,預先訓練一個二進位化的下一句測任務,這一任務可以從任何單語語料庫中生成。具體地說,當選擇句子A和B作為預訓練樣本時,B有50%的可能是A的下一個句子,也有50%的可能是來自語料庫的隨機句子。例如:

Input = [CLS] the man went to [MASK] store [SEP]

he bought a gallon [MASK] milk [SEP]

Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP]

penguin [MASK] are flight ##less birds [SEP]

Label = NotNext

團隊完全隨機地選擇了NotNext語句,最終的預訓練模型在此任務上實現了97%-98%的準確率。

實驗結果

如前文所述,BERT在11項NLP任務中刷新了性能表現記錄!在這一節中,團隊直觀呈現BERT在這些任務的實驗結果,具體的實驗設置和比較請閱讀原論文。

圖3:我們的面向特定任務的模型是將BERT與一個額外的輸出層結合而形成的,因此需要從頭開始學習最小數量的參數。在這些任務中,(a)和(b)是序列級任務,而(c)和(d)是token級任務。在圖中,E表示輸入嵌入,Ti表示tokeni的上下文表示,[CLS]是用於分類輸出的特殊符號,[SEP]是用於分隔非連續token序列的特殊符號。

圖4:GLUE測試結果,由GLUE評估伺服器給出。每個任務下方的數字表示訓練樣例的數量。「平均」一欄中的數據與GLUE官方評分稍有不同,因為我們排除了有問題的WNLI集。BERT 和OpenAI GPT的結果是單模型、單任務下的數據。所有結果來自https://gluebenchmark.com/leaderboard和https://blog.openai.com/language-unsupervised/

圖5:SQuAD 結果。BERT 集成是使用不同預訓練檢查點和微調種子(fine-tuning seed)的 7x 系統。

圖6:CoNLL-2003 命名實體識別結果。超參數由開發集選擇,得出的開發和測試分數是使用這些超參數進行五次隨機重啟的平均值。

超過人類表現, BERT刷新了11項NLP任務的性能記錄

論文的主要貢獻在於:

  • 證明了雙向預訓練對語言表示的重要性。與之前使用的單向語言模型進行預訓練不同,BERT使用遮蔽語言模型來實現預訓練的深度雙向表示。

  • 論文表明,預先訓練的表示免去了許多工程任務需要針對特定任務修改體系架構的需求。 BERT是第一個基於微調的表示模型,它在大量的句子級和token級任務上實現了最先進的性能,強於許多面向特定任務體系架構的系統。

  • BERT刷新了11項NLP任務的性能記錄。本文還報告了 BERT 的模型簡化研究(ablation study),表明模型的雙向性是一項重要的新成果。相關代碼和預先訓練的模型將會公布在goo.gl/language/bert上。

BERT目前已經刷新的11項自然語言處理任務的最新記錄包括:將GLUE基準推至80.4%(絕對改進7.6%),MultiNLI準確度達到86.7% (絕對改進率5.6%),將SQuAD v1.1問答測試F1得分紀錄刷新為93.2分(絕對提升1.5分),超過人類表現2.0分。

BERT模型重要意義:宣告NLP範式的改變

北京航空航天大學計算機專業博士吳俁在知乎上寫道:BERT模型的地位類似於ResNet在圖像,這是裡程碑式的工作,宣告著NLP範式的改變。以後研究工作估計很多都要使用他初始化,就像之前大家使用word2vec一樣自然。

BERT一出,那幾個他論文裡做實驗的數據集全被轟平了,大家洗洗睡了。心疼swag一秒鐘,出現3月,第一篇做這個數據集的算法,在超了baseline 20多點的同時也超過人了。

通過BERT模型,吳俁有三個認識:

1、Jacob在細節上是一等一的高手

這個模型的雙向和Elmo不一樣,大部分人對論文作者之一Jacob的雙向在novelty上的contribution 的大小有誤解,我覺得這個細節可能是他比Elmo顯著提升的原因。Elmo是拼一個左到右和一個右到左,他這個是訓練中直接開一個窗口,用了個有順序的cbow。

2、Reddit對跑一次BERT的價格討論

For TPU pods:

4 TPUs * ~$2/h (preemptible) * 24 h/day * 4 days = $768 (base model)

16 TPUs = ~$3k (large model)

For TPU:

16 tpus * $8/hr * 24 h/day * 4 days = 12k

64 tpus * $8/hr * 24 h/day * 4 days = 50k

For GPU:

"BERT-Large is 24-layer, 1024-hidden and was trained for 40 epochs over a 3.3 billion word corpus. So maybe 1 year to train on 8 P100s? "

3、不幸的是,基本無法復現,所以模型和數據誰更有用也不好說。

BERT的成功也說明,好的深度學習研究工作的三大條件: 數據,計算資源,工程技能點很高的研究員(Jacob在微軟時候,就以單槍匹馬搭大系統,而中外聞名)。

特別聲明:本文為合作媒體授權DoNews專欄轉載,文章版權歸原作者及原出處所有。文章系作者個人觀點,不代表DoNews專欄的立場,轉載請聯繫原作者及原出處獲取授權。

相關焦點

  • 百度大腦技術突破!NLP中文預訓練ERNIE模型全面超越谷歌BERT
    NLP(自然語言處理)被譽為人工智慧「皇冠上的明珠」,其發展備受學術和產業界關注,而今NLP領域再次迎來重大突破!ERNIE模型在中文NLP任務上表現非凡,百度在多個公開的中文數據集上進行了效果驗證,在語言推斷、語義相似度、命名實體識別、情感分析、問答匹配等自然語言處理各類任務上,超越了谷歌的語義表示模型BERT的效果。近年來,基於海量無監督文本的深度神經網絡預訓練模型大幅提升了各個NLP 基準任務的效果。
  • 最強NLP預訓練模型!谷歌BERT橫掃11項NLP任務記錄
    與最近的語言表徵模型不同,BERT 旨在基於所有層的左、右語境來預訓練深度雙向表徵。BERT 是首個在大批句子層面和 token 層面任務中取得當前最優性能的基於微調的表徵模型,其性能超越許多使用任務特定架構的系統,刷新了 11 項 NLP 任務的當前最優性能記錄。
  • 谷歌開源 BERT 模型原始碼
    BERT 模型以來,BERT 模型以其雙向、深層等特點,成功在 11 項 NLP 任務中取得 state of the art 的結果,贏得自然語言處理學界的一片讚譽之聲。驚鴻一瞥後,人們都在期待谷歌何時會放出 BERT 模型原始碼。直至今日,谷歌終於一鼓作氣發布了包括 BERT 模型 TensorFlow 代碼、BERT-Base 與 BERT-Large 模型的預訓練檢查點、微調實驗結果的自動化復現 TensorFlow 代碼、預訓練數據生成和數據訓練的代碼在內的「BERT 模型大禮包」。
  • 一文看盡2019年NLP前沿突破
    比BERT模型參數小18倍,性能還超越了它,在SQuAD和RACE測試上創造了新的SOTA。前不久,谷歌還對此進行了升級,發布了ALBERT 2和中文版本。在這個版本中,「no dropout」、「additional training data」、「long training time」策略將應用到所有的模型。
  • 谷歌更強 NLP 模型 XLNet 開源:20 項任務全面碾壓 BERT!
    去年 11 月份,谷歌研究團隊在 GitHub 上發布了萬眾期待的 BERT,它不僅在 11 項 NLP 測試中刷新了最高成績,甚至還表現出全面超越人類的驚人結果。但 BERT 帶來的震撼還未平息,今日又一個令眾多 NLPer 興奮的消息發布: CMU 與谷歌大腦提出的全新 XLNet 在 20 個任務上超過了 BERT 的表現,並在 18 個任務上取得了當前最佳效果!而更令人激動的是,目前 XLNet 已經開放了訓練代碼和大型預訓練模型。雷鋒網 AI 科技評論將其具體內容整理如下。
  • 3分鐘看懂史上最強NLP模型BERT
    它基於谷歌2017年發布的Transformer架構,通常的Transformer使用一組編碼器和解碼器網絡,而BERT只需要一個額外的輸出層,對預訓練進行fine-tune,就可以滿足各種任務,根本沒有必要針對特定任務對模型進行修改。BERT將多個Transformer編碼器堆疊在一起。
  • 閱讀理解得分超越人類:谷歌推出最強預訓練語言理解模型BERT
    近日,谷歌提出了一個新的預訓練語言模型 BERT,該模型橫掃 11 項不同的自然語言處理任務,並在 SQuAD v1.1 的閱讀理解任務上超越人類兩個百分點。該模型究竟有哪些創新?有為什麼會有如此突出的效果呢?這一切需要從語言模型講起。
  • 谷歌開源NLP模型可視化工具LIT,模型訓練不再「黑箱」
    比較模型:通過在全局設置控制項中加載多個模型,LIT 可以對它們進行比較。然後複製顯示每個模型信息的子模塊,以便於在兩個模型之間進行比較。其他模塊(如嵌入模塊和度量模塊)同時得到更新,以顯示所有模型的最新信息。比較數據點:切換到選擇工具欄中的「Compare datapoints」按鈕,使 LIT 進入數據點比較模式。
  • 圖解當前最強語言模型BERT:NLP是如何攻克遷移學習的?
    Transformer 的大規模預訓練語言模型 BERT,該預訓練模型能高效抽取文本信息並應用於各種 NLP 任務,該研究憑藉預訓練模型刷新了 11 項 NLP 任務的當前最優性能記錄。BERT 這種模型打破了多項模型處理基於語言的任務的紀錄。在描述該模型的論文發布之後不久,其研究團隊還開源了該模型的代碼,並發布了可供下載的模型版本——已經在大規模數據集上經過預訓練。這是一個重大的進展,因為它讓任何人都可以構建涉及語言處理的機器學習模型,並將這種強大工具用作其中的組件——這能節省從頭開始訓練語言處理模型所需的時間、精力、知識和資源。
  • 谷歌搜索:幾乎所有的英文搜索都用上BERT了
    BERT 是谷歌開源的一款自然語言處理預訓練模型,一經推出就刷新了 11 項 NLP 任務的 SOTA 記錄,登頂 GLUE 基準排行榜。具體到搜尋引擎來說,BERT 可以幫助搜尋引擎更好地理解 web 頁面上的內容,從而提高搜索結果的相關性。BERT 模型中創新性的 架構是一大亮點。
  • NLP之文本分類:「Tf-Idf、Word2Vec和BERT」三種模型比較
    在Python中,可以像這樣從genism-data中加載一個預訓練好的詞嵌入模型:nlp = gensim_api.load("word2vec-google-news-300")我將不使用預先訓練好的模型,而是用gensim
  • 微軟創CoQA挑戰新紀錄,最接近人類水平的NLP系統誕生
    >新智元報導 來源:Arxiv/CoQA編輯:大明,文強【新智元導讀】微軟語音與對話研究團隊開發的SDNet,在面向公共數據集CoQA的問答對話系統模型性能挑戰賽中刷新最佳性能紀錄微軟研究人員將自注意力模型和外部注意力相結合,並且用新的方法整合了谷歌BERT語境模型,構建了一個基於注意力的會話式問答深度神經網絡SDNet,更有效地理解文本和對話歷史。
  • BERT詳解:開創性自然語言處理框架的全面指南
    然後幾天後,新一代前沿框架的出現,導致現有模型已經落後了。這不是一個假設。這就是自然語言處理領域工作者所面對的現實(和挑戰)!過去兩年取得的突破令人驚嘆,接連出現出現各種新框架,可能比目前掌握的框架還要好。谷歌BERT就是這樣一個自然語言處理框架。這可能是近幾年最有影響力的一次革新。
  • 谷歌發布萬億參數語言模型,語言模型何時超越人類語言能力?
    這一切都表明,語言模型領域正處於「快速升溫」的階段,未來如何,我們拭目以待。在短短幾年時間裡,深度學習算法經過了飛速的進化,已經具有了可以打敗世界最頂尖棋手的水平,並能以不低於人類識別的準確度來精確地識別人臉。 但事實證明,掌握獨特而複雜的人類語言,是人工智慧面臨的最艱巨挑戰之一。 這種現狀會被改變嗎?
  • 性能媲美BERT,參數量僅為1/300,谷歌最新的NLP模型
    機器之心編輯部在最新的博客文章中,谷歌公布了一個新的 NLP 模型,在文本分類任務上可以達到 BERT 級別的性能,但參數量僅為 BERT 的 1/300。論文連結:https://www.aclweb.org/anthology/D19-1506.pdf在最新的博客文章中,谷歌的研究者宣布它們改進了 PRADO,並將改進後的模型稱為 pQRNN。新模型以最小的模型尺寸達到了 NLP 任務的新 SOTA。
  • 谷歌搜索的靈魂!BERT模型的崛起與榮耀
    在搜尋引擎「猜」透人心背後,是谷歌的BERT模型逐漸開始理解人類語言。今年10月,谷歌在「Search On」活動中介紹了數千項AI領域的新應用,其中就包括BERT模型的新進展:已應用於谷歌上近乎所有的英文查詢,適用範圍也拓展至70多種語言,而去年這個時候,BERT在英文查詢中的使用比例不超過10%。
  • 谷歌搜索的靈魂:BERT模型的崛起與榮耀
    在搜尋引擎「猜」透人心背後,是谷歌的BERT模型逐漸開始理解人類語言。今年10月,谷歌在「Search On」活動中介紹了數千項AI領域的新應用,其中就包括BERT模型的新進展:已應用於谷歌上近乎所有的英文查詢,適用範圍也拓展至70多種語言,而去年這個時候,BERT在英文查詢中的使用比例不超過10%。
  • 自然語言理解新突破:微軟谷歌AI模型在這張榜單上超過人類
    近日,科技公司谷歌和微軟相繼在一份權威自然語言理解榜單中表現超越人類,微軟宣稱這「標誌著邁向通用人工智慧的重要裡程碑。」自然語言理解(Natural Language Understanding,簡稱NLU)任務在人工智慧領域歷史悠久,被譽為「人工智慧皇冠上的明珠」。
  • [預訓練語言模型專題] BERT,開啟NLP新時代的王者
    BERT了,由Google AI在2018年底推出,剛出現就刷新了一大批榜單,甚至在一些任務上超過了人類的表現,令人驚豔。feature-based策略的代表模型為ELMo,它把預訓練得到的「向量表示」作為訓練下遊任務的額外特徵。訓練下遊任務時使用新的任務相關模型,並基於得到的特徵來進行進一步的訓練。fine-tuning策略的代表模型為GPT,它則是在訓練語言模型後,只改變極少的任務相關的層與參數,直接對下遊任務訓練整個原來的語言模型。
  • NLP領域最優秀的8個預訓練模型(附開源地址)
    這一突破,使得每個人都能夠輕鬆地完成任務,尤其是那些沒有時間、也沒有資源從頭開始構建自然語言處理模型的人們。對於想要學習或過渡到自然語言處理的初學者來講,它也堪稱完美。為什麼要使用預訓練模型?作者已盡其所能設計了基準模型。