1. 程式人生 > >BERT模型介紹

BERT模型介紹

seed 分類 size Language 上下文 fff idt rtl mage

  前不久,谷歌AI團隊新發布的BERT模型,在NLP業內引起巨大反響,認為是NLP領域裏程碑式的進步。BERT模型在機器閱讀理解頂級水平測試SQuAD1.1中表現出驚人的成績:全部兩個衡量指標上全面超越人類,並且還在11種不同NLP測試中創出最佳成績,包括將GLUE基準推至80.4%(絕對改進7.6%),MultiNLI準確度達到86.7%(絕對改進率5.6%)等。BERT模型是以Transformer編碼器來表示,本文在詳細介紹BERT模型,Transformer編碼器的原理可以參考()。

論文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

  摘要

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

  模型架構

  論文使用了兩種模型:

  • BERTBASE: L=12, H=768, A=12, 總參數=110M

  • BERTLARGE: L=24, H=1024, A=16, 總參數=340M

  其中層數(即 Transformer 塊個數)表示為 L,將隱藏尺寸表示為 H、自註意力頭數表示為 A。在所有實驗中,將前饋/濾波器尺寸設置為 4H,即 H=768 時為 3072,H=1024 時為 4096。

  為了進行比較,論文中選擇,BERTBASE 的模型尺寸與OpenAI GPT具有相同的模型大小。然而,重要的是,BERT Transformer 使用雙向self-attention,而GPT Transformer 使用受限制的self-attention,其中每個token只能關註到其左側的上下文。註意需要的是,在文獻中,雙向 Transformer 在文獻中通常稱為「Transformer 編碼器」,而只關註左側語境的版本則因能用於文本生成而被稱為「Transformer 解碼器」。BERT,OpenAI GPT和ELMo之間的比較如下圖一所示。

技術分享圖片

        圖1:預訓練模型架構的差異。BERT使用雙向Transformer。OpenAI GPT使用從左到右的Transformer。ELMo使用經過獨立訓練的從左到右

          和從右到左LSTM的串聯來生成下遊任務的特征。三個模型中,只有BERT表示在所有層中共同依賴於左右上下文。

  輸入的表示

  針對不同的任務,模型能夠在一個token序列中明確地表示單個文本句子或一對文本句子(比如[問題,答案])。對於每一個token, 其輸入表示通過其對應的token embedding, 段表征(segment embedding)和位置表征(position embedding)相加產生。圖2是輸入表示的直觀表示:

技術分享圖片圖2:BERT輸入表示。輸入嵌入是token embeddings, segmentation embeddings 和position embeddings 之和。

  具體實現細節如下:

    • 論文使用了WordPiece embeddings含有30000個token,並且使用“##”來拆分詞片段
    • 使用了positional embeddings, 長達512位,即句子的最大長度
    • 每句話的第一個token總是[CLS]。對應它的最終的hidden state(即Transformer的輸出)用來表征整個句子,可以用於下遊的分類任務。
    • 模型能夠處理句子對。為區別兩個句子,用一個特殊token [SEP]隔開它們,另外針對不同的句子,把學習到的Segment embeddings 加到每個token的embedding上(如圖)
    • 對於單個句子僅使用一個Segment embedding

  預訓練任務

  與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”。 為了訓練深度雙向表征,我們采取了一個直接的方法,隨機遮蔽輸入 token 的某些部分,然後預測被遮住的 token。我們將這一步驟稱為「masked LM」(MLM),不過它在文獻中通常被稱為 Cloze 任務 (Taylor, 1953)。在這種情況下,對應遮蔽 token 的最終隱藏向量會輸入到 softmax 函數中,並如標準 LM 中那樣預測所有詞匯的概率。在所做的所有實驗中,我們隨機遮住了每個序列中 15% 的 WordPiece token。與去噪自編碼器 (Vincent et al., 2008) 相反,我們僅預測遮蔽單詞而非重建整個輸入。

  雖然這確實能讓研究團隊獲得雙向預訓練模型,但這種方法有兩個缺點。第一個是,如果常常把一些詞mask起來,未來的fine tuning過程中模型有可能沒見過這些詞,這個量積累下來還是很大的。因為作者在他的實現中隨機選擇了句子中15%的WordPiece tokens作為要mask的詞。為了解決這個問題,作者在設計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

  為什麽要以一定的概率保持不變呢? 如果100%的概率都用[MASK]來取代被選中的詞,那麽在fine tuning的時候模型可能會有一些沒見過的詞。那麽為什麽要以一定的概率使用隨機詞呢?這是因為Transformer要保持對每個輸入token分布式的表征,否則Transformer很可能會記住這個[MASK]就是"hairy"。至於使用隨機詞帶來的負面影響,文章中說了,所有其他的token(即非"hairy"的token)共享15%*10% = 1.5%的概率,其影響是可以忽略不計的。
  使用MLM的第二個缺點是每個batch只預測了15%的token,這表明模型可能需要更多的預訓練步驟才能收斂。團隊證明MLM的收斂速度略慢於 left-to-right的模型(預測每個token),但MLM模型在實驗上獲得的提升遠遠超過增加的訓練成本。

  任務 #2:下一句預測

  很多重要的下遊任務(如問答(QA)和自然語言推斷(NLI))基於對兩個文本句子之間關系的理解,這種關系並非通過語言建模直接獲得。為了訓練一個理解句子關系的模型,我們預訓練了一個二值化下一句預測任務,該任務可以從任意單語語料庫中輕松生成。具體來說,選擇句子 A 和 B 作為預訓練樣本:B 有 50% 的可能是 A 的下一句,也有 50% 的可能是來自語料庫的隨機句子。

  實驗結果

  如前文所述,BERT在11項NLP任務中刷新了性能表現記錄, BERT模型通過上面介紹的預訓練後,在11個NLP任務上的微調結果。

技術分享圖片

  圖 3:我們的任務特定模型是由向 BERT 添加了一個額外的輸出層而形成的,因此一小部分參數需要從頭開始學習。在眾多任務中,(a) 和 (b) 任務是序列級任務,(c) 和 (d) 是 token 級任務,圖中 E 表示輸入嵌入,T_i 表示 token i 的語境表征,[CLS] 是分類輸出的特殊符號,[SEP] 是分割非連續 token 序列的特殊符號。

技術分享圖片

  圖4:GLUE測試結果,由GLUE評估服務器給出。每個任務下方的數字表示訓練樣例的數量。“平均”一欄中的數據與GLUE官方評分稍有不同,因為我們排除了有問題的WNLI集。BERT 和OpenAI GPT的結果是單模型、單任務下的數據。

技術分享圖片

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

技術分享圖片

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

BERT模型介紹