自然語言處理—BERT

BERT(Bidirectional Encoder Representations from Transformers)

在 ACL 上,Devlin, Chang, Lee 和 Toutanova 發表於 2019 的文章— BERT:Pre-training of deep bidirectional transformers for language understanding。

那麼什麼是 BERT 呢? 我們先從字面上解釋一下什麼是 BERT,我們將詞分開來一個一個地看來解讀什麼是 BERT。

  • Bidirectional : 是雙向神經網絡,這個在學習 RNN 時候我們就瞭解到如何使用雙向 RNN 讓每一個詞視野更加廣闊,不但可以看到其前面詞還能看到其後面的詞
  • Encoder : 說明 BERT 是編碼器
  • Representations : BERT 是完成詞的表徵的任務的模型,之前我們已經學過了了 word2vec
  • Transformer: 其實 BERT 就是 transform 解碼器部分,表示 BERT 結構沒有采用 LSTM 這樣 RNN 結構,而是採用了 Transformer 這樣結構來實現雙向循環神經網,Transformer 對象 LSTM 的優勢是並行計算

那麼 BERT 用途是啥呢

我們先說 BERT 的優點,就是在訓練 BERT 時候我們不需要人工數據集,隨便那些文本資料就可以用於訓練 BERT,這些文本可以小說、技術書刊、雜誌或者是網頁等等來做預訓練。

但是 BERT 也不是完美無缺,BERT 需要大量算力才能進行 BERT 的訓練

  • 簡單介紹一下 BERT 中的兩個任務
  • 以及兩個任務的作用
  • 如何將兩個任務設計到一個網絡結構中

雙向變換器編碼表徵(Devlin at al, 2018)

  • 上下文
  • (巨大)的 transformer 編碼器

| 版本 | block |hidden units |heads | parameters |GPU | time |
|---|---|---|---|---|---|---|---|
| Small | 12 | 768 | 12 | 110M | 16TPU | 14 days|
| Large | 24 | 1024 | 16 | 340M |

  • 如果要用亞馬遜的服務可能要花費 1 萬美元才能訓練出小規模的 BERT

  • I went to the bank to deposit some money

  • I went to the back to sit down

預訓練

  • 提高模型的泛化能力的方法

  • 隨機遮擋一個單詞,讓編碼器(encoder)根據上下文來預測被遮擋的單詞

  • 將兩句話放在一起,讓編碼器(encoder)來判斷這兩句話是不是原文中相鄰的兩句話

任務1—預測被遮擋的單詞

  • 輸入是文本序列,經過預處理,有關如何對文本進行預處理之前已經給大家介紹過,將文本切分爲單詞
  • 經過 Embedding Layer 將每一個單詞映射爲詞向量
  • 經過 Transformer 的編碼器(Encoder) 後得到
  • 從一句話中對所有 token 進行隨機選取,每一個 token 選取可能性都是 15%
    • 80% 用 <mask> 替換掉這個詞
    • 10% 用一個 <random token> 來替換掉這個詞
    • 10% 用 cat 這個詞
  • transformer 中有注意力機制,所以 u_M 和輸入 x 並不是一對一映射,而是多對一映射。

從上圖不難看出 u_M 包含所有輸入序列的單詞信息,所以可以用 u_M 來預測遮擋位子的單詞

將特徵向量 u_M 輸入到一個 Softmax 分類器,經過 Softmax 分類器得到一個 p 向量,p 也是概率分佈,我們希望 p 向量接近 cat 的 one-hot 向量

Loss = crossEntropy(e,p)

任務2—預測下一個句子

  • 50% 將下一句隨機替換爲
  • 將 Transformer 輸出,輸入到一個全聯接層來預測序列對
  • 給定句子 calculus is a branch of math
  • 在原文中下一個句子是 it was developed by newton and leibniz
  • panda is native to south central china

接下來是如何製作數據集,就是將兩句話拼接起來,在最第一句話前面添加 [CLS] 在兩句話之間添加 [SEP] 表示分隔兩句話

其實之前有關 mask 掉一個詞來通過預測 masked 的詞來訓練詞向量,大家還能理解,但是對於爲什麼通過預測兩個句子,大家可能就會有點摸不着頭腦了,爲什麼這樣做有易於詞向量的訓練呢?

  • 在 Transformer Encoder 有 self-attention 層,self-attention 就是要找相關性,這種任務便於找到相關性

組合任務

小例子 1
  • input
    • calculus is a [MASK] of math
    • it [MASK] developed by newton and leibniz
  • Targets
    • true
    • branch
    • was
小例子 2
  • input
    • calculus is a branch of math
    • panda is native to [MASK] central china
  • Targets
    • flase
    • south
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章