用深度學習作命名實體識別(六)-BERT介紹

什麼是BERT?

BERT,全稱是Bidirectional Encoder Representations from Transformers。能夠理解爲一種以Transformers爲主要框架的雙向編碼表徵模型。因此要想理解BERT的原理,還須要先理解什麼是Transformers。
Transformers簡單來講是一個將一組序列轉換成另外一組序列的黑盒子,這個黑盒子內部由編碼器和解碼器組成,編碼器負責編碼輸入序列,而後解碼器負責將編碼器的輸出轉換爲另外一組序列。具體能夠參考這篇文章《想研究BERT模型?先看看這篇文章吧!html

這裏須要注意的是,BERT使用的Transformers中在表示位置信息時,沒有使用Positional Encoding,而是使用了Positional Embedding,因此位置信息是訓練出來的,而且爲了讓模型能同時考慮到單詞左邊和右邊的上下文信息,BERT使用了雙向Transformers的架構。而因爲位置信息是採用的embedding的方式,因此對序列的最大長度就有所限制了,受限於訓練時最大序列的長度,這裏BERT預訓練模型的最大序列長度是512.也就是說若是訓練樣本超過了長度,就須要採用截斷或者其餘方式以保證序列的長度在512之內。網絡

BERT能作什麼?

  • 文本推理
    給定一對句子,預測第二個句子和第一個句子的關係:蘊含、矛盾、中性。
  • 問答
    給定問題和短文,從短文預測出對應span做爲答案。
  • 文本分類
    好比對電影評論作情感預測。
  • 文本類似度匹配
    輸入兩個句子,計算語義類似度。
  • 命名實體識別
    給定一個句子,輸出句子中特定的實體,好比人名、地址、時間等。

怎麼使用BERT?

BERT有2種用法:架構

  • feature-based
    直接使用BERT預訓練模型提取出文本序列的特徵向量。好比文本類似度匹配。app

  • fine-tuning
    在預訓練模型層上添加新的網絡;凍結預訓練模型的全部層,訓練完成後,放開預訓練模型的全部層,聯合訓練解凍的部分和添加的部分。好比文本分類、命名實體識別等。框架

爲何BERT能作到這些?

BERT在訓練的時候採用了無監督的方式,其主要採用2種策略來獲得對序列的表徵。less

MLM

爲了訓練一個深度雙向表徵,做者簡單的隨機mask一些百分比的輸入tokens,而後預測那些被mask掉的tokens。這一步稱爲「masked LM」(MLM),在一些文獻中,被稱爲完型填空任務(Cloze task)。mask掉的tokens對應的最後的隱藏層向量餵給一個輸出softmax,像在標準的LM中同樣。在實驗中,做者爲每一個序列隨機mask掉了15%的 tokens。儘管這容許做者得到雙向預訓練模型,其帶來的負面影響是在預訓練和微調模型之間創造了不匹配,由於[MASK]符號不會出如今微調階段。因此要想辦法讓那些被mask掉的詞的本來的表徵也被模型學習到,因此這裏做者採用了一些策略:
假設原句子是「my dog is hairy」,做者在3.1節 Task1中提到,會隨機選擇句子中15%的tokens位置進行mask,假設這裏隨機選到了第四個token位置要被mask掉,也就是對hairy進行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 。 (這樣作的目的是使表徵偏向於實際觀察到的單詞。)

上面的過程,須要結合訓練過程的epochs來理解,每一個epoch表示學完了一遍全部的樣本,因此每一個樣本在多個epochs過程當中是會重複輸入到模型中的,知道了這個概念,上面的80%,10%,10%就好理解了,也就是說在某個樣本每次餵給模型的時候,用[MASK]替換目標單詞的機率是80%;用隨機的單詞替換目標單詞的機率是10%;不改變目標單詞的機率是10%。ui

有的介紹BERT的文章中,講解MLM過程的時候,將這裏的80%,10%,10%解釋成替換原句子被隨機選中的15%的tokens中的80%用[MASK]替換目標單詞,10%用隨機的單詞替換目標單詞,10%不改變目標單詞。這個理解是不對的。編碼

而後,做者在論文中談到了採起上面的mask策略的好處。大體是說採用上面的策略後,Transformer encoder就不知道會讓其預測哪一個單詞,或者說不知道哪一個單詞會被隨機單詞給替換掉,那麼它就不得不保持每一個輸入token的一個上下文的表徵分佈(a distributional contextual representation)。也就是說若是模型學習到了要預測的單詞是什麼,那麼就會丟失對上下文信息的學習,而若是模型訓練過程當中沒法學習到哪一個單詞會被預測,那麼就必須經過學習上下文的信息來判斷出須要預測的單詞,這樣的模型才具備對句子的特徵表示能力。另外,因爲隨機替換相對句子中全部tokens的發生機率只有1.5%(即15%的10%),因此並不會影響到模型的語言理解能力。spa

NSP

許多下游任務,好比問答,天然語言推理等,須要基於對兩個句子之間的關係的理解,而這種關係不能直接經過語言建模來獲取到。爲了訓練一個能夠理解句子間關係的模型,做者爲一個二分類的下一個句子預測任務進行了預訓練,這些句子對能夠從任何單語言的語料中獲取到。特別是,當爲每一個預測樣例選擇一個句子對A和B,50%的時間B是A後面的下一個句子(標記爲IsNext), 50%的時間B是語料庫中的一個隨機句子(標記爲NotNext)。圖1中,C用來輸出下一個句子的標籤(NSP)。

」下個句子預測「的任務的例子:

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

還有哪些模型能夠作到這些,它們和BERT的區別是什麼?

論文中做者提到了另外的兩個模型,分別是OpenAI GPT和ELMo。
圖3展現了這3個模型架構的對比:

  • BERT使用了雙向的Transformer架構,預訓練階段使用了MLM和NSP。
  • OpenAI GPT使用了left-to-right的Transformer。
  • ELMo分別使用了left-to-right和right-to-left進行獨立訓練,而後將輸出拼接起來,爲下游任務提供序列特徵。

上面的三個模型架構中,只有BERT模型的表徵在每一層都聯合考慮到了左邊和右邊的上下文信息。另外,除了架構不一樣,還要說明的一點是:BERT和OpenAI GPT是基於fine-tuning的方法,而ELMo是基於feature-based的方法。

更多細節

請閱讀原論文,或者參考筆者的這篇文章《BERT論文解讀》。

ok,本篇就這麼多內容啦~,感謝閱讀O(∩_∩)O。

相關文章
相關標籤/搜索