天天看點

【預訓練語言模型】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)

  前記: 【預訓練語言模型】系列文章是對近幾年經典的預訓練語言模型論文進行整理概述,幫助大家對預訓練模型進行全局的了解。本系列文章将不斷更新,敬請關注部落客。本文将講解如今最為火爆的預訓練模型——BERT,其于2018年底被提出,雖然已經時隔兩年但依然被諸多NLP領域任務上使用,且是接下來許多預訓練模型改進的出發點和baseline,在當時已經成功地在11個NLP任務上達到SOTA。

  簡稱 :Bidirectional Encoder Representation from Transformers

  會議:2018NAACL

  開源:http://www.goo.gl/language/bert

一、摘要:

  BERT被設計用于預訓練語言模型,在每一層上通過結合由左向右和由右向左兩個方向的深度編碼。預訓練的BERT表征則可以僅通過一個額外的輸出層來實作微調便可以在大多數的任務上達到SOTA效果。例如在問答、語言推理等任務。

二、動機:

  現階段有兩種政策來使用預訓練的語言模型并應用到下遊任務中:

  • feature-based:例如ELMo,使用任務具體的架構包含預訓練的表征作為額外特征;
  • fine-tunging:例如GPT(Generative Pre-trained Transformer),在下遊任務上根據具體任務的目标來調整語言模型的參數;

  先前的這兩種政策的所有語言模型都是基于單向的,且共享相同的目标函數。

主要的缺陷在于先前的語言模型是單向的(unidirectional),其限制模型的微調的性能。例如GPT,在做self-attention時隻能關注前面的token,使得在具體的任務上不是全局最優的,這對于NLP的任務是毀滅性的(devastating),是以需要雙向化。

Bert依然是依賴Transformer模型結構,我們知道GPT采用的是Transformer中的Decoder部分的模型結構,目前位置隻能attend到之前的位置。而Bert中則沒有這樣的限制,是以它是用的Transformer的Encoder部分。

  是以本文提出BERT模型解決雙向化的表征預訓練。預訓練的目标有兩個:

(1)masked language model(MLM)(類似完形填空一樣對一個句子挖掉一個token,然後去預測該token):

The masked language model randomly masks some of the tokens from the input, and the objective is to predict the original vocabulary id of the masked word based only on its context.

(2)next sentence prediction(NSP):後續句子預測,類似于語義推理工作,根據上文推測下文(或判斷下文是否與上文有語義和邏輯先後關系)

  重點:BERT的雙向性展現在:其不同于單向的GPT是根據上文預測下一個詞,而是使用Transformer将所有詞不受長距離依賴地進行了表征,來預測句子中某些被mask的詞,是以其雙向性展現在預知全文來預測詞

三、BERT模型:

  BERT模型的Encoder部分完全使用Transformer的encoder結構,作者提出兩種規模的BERT模型:

  • BERT(BASE):12層Transformer block,隐狀态次元768,multi-head attention頭數為12,參數總量為110M;(參數總量與GPT一緻以公平比對)
  • BERT(LARGE):24層Transformer block,隐狀态次元1024,multi-head attention頭數為16,參數總量為340M;

  模型架構(與GPT和ELMo的對比)如下所示:

【預訓練語言模型】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)

3.1 Input Representation

  BERT的輸入sequence可以是一個單獨的句子sentence(例如在序列标注、文本分類等任務),也可以是一個句子對(a pair of sentences)(例如QA任務),輸入的特征包括:

  • WordPiece embedding:詞典大小為30000;對每個token進行切分,例如playing切分為play和##ing(參考資料:https://www.cnblogs.com/huangyc/p/10223075.html)
  • position embedding:序列長度最大為512;
  • 首個字元定義為[CLS],對整個序列的隐狀态表征進行聚集并表示到[CLS]token上,可用于分類任務;
  • 多個sentence作為一個sequence時,通過兩個途徑加以區分,一個是在不同的句子之間加入一個特殊字元[SEP],另外添加一個embedding對不同的sentence進行表示,例如句子A的每個token則用A對應的embedding,句子B的每個token則用B對應的embedding;

  輸入的樣例如圖所示:

【預訓練語言模型】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)

3.2 Task

(1)masked LM

  我們随機對一個輸入sequence中一定數量的token進行mask,具體地,我們對一個sequence的15%的token進行mask;

兩個缺點:

  • 在微調時,[mask]标記并沒有出現過,是以在mask時并不總是替換為mask,而是80%的機率被替換為mask,10%的機率随機選擇一個詞替換,10%的機率保持不變;最終所有語料1.5%的token是被替換為錯誤的單詞,但并不影響模型的了解能力;

【1】這麼做的原因是如果句子中的某個Token100%都會被mask掉,那麼在fine-tuning的時候模型就會有一些沒有見過的單詞。加入随機Token的原因是因為Transformer要保持對每個輸入token的分布式表征,否則模型就會記住這個[mask]是token ’hairy‘。至于單詞帶來的負面影響,因為一個單詞被随機替換掉的機率隻有15%*10% =1.5%,這個負面影響其實是可以忽略不計的。

【2】

【預訓練語言模型】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)
  • 每個batch中15%的token需要預測,是以不得不需要模型多次訓練來達到收斂,雖然兼顧雙向表征增加訓練時間,但效果卻超過現有方法

(2)Next Sentence Prediction

  輸入一個句子配對(A,B),任務目标是判斷句子B是否是A的下文,語料中50%是正樣本(label=IsNext),随機挑選B句子組成50%是負樣本(label=NotNext)

例如:

【預訓練語言模型】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)

四、預訓練步驟:

  語料:BooksCorpus(800M words)和English Wikipedia(2500M words);采樣兩個sentence,長度總和不超過512,對于句子B有50%機率是A的後文,有50%機率則不是;在wordpiece embedding上對15%的token進行mask;

【預訓練語言模型】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding(BERT)

微調:

  如上圖,針對不同的下遊任務使用不同的輸出部分。

  重點:與GPT的差別:

  • BERT在更大的語料上預訓練;
  • BERT在預訓練階段便使用CLS和SEP的token,而GPT隻在微調階段使用;
  • BERT每個batch訓練的token數量更大;

五、實驗資料:

(1)GLUE(通用自然語言了解資料集):

  MNLI(自然語言推理資料集)、QQP(問題比對)、QNLI(問題推理)、SST-2(情感分析)、CoLA(文本分類)、STS-B(情感文本比對)、MRPC(文本相似比對)、RTE(文本推理)、WNLI(自然語言推理)

(2)SquAD機器閱讀了解:

  任務定義:給定一個問題和段落,在段落中預測答案的區間。BERT微調過程中,将問句視為A,段落視為B,在B的輸出,對每個token計算其為start和end的機率。

(3)實體識别

  在每個token上加一個分類器,并不使用自回歸和CRF模型

(4)SWAG(Situations With Adersarial Generations)場景推理,給定一個上文和4個候選下文,預測最合适的下文。

注:參考:Bert: 雙向預訓練+微調

  對于本文如若有疑難,錯誤或建議可至評論區或視窗私聊,【預訓練語言模型】 系列文章将不斷更新中,幫助大家梳理現階段預訓練模型及其重點。

繼續閱讀