自然語(yǔ)言處理—BERT

BERT(Bidirectional Encoder Representations from Transformers)

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

那么什么是 BERT 呢? 我們先從字面上解釋一下什么是 BERT,我們將詞分開來(lái)一個(gè)一個(gè)地看來(lái)解讀什么是 BERT。

  • Bidirectional : 是雙向神經(jīng)網(wǎng)絡(luò),這個(gè)在學(xué)習(xí) RNN 時(shí)候我們就了解到如何使用雙向 RNN 讓每一個(gè)詞視野更加廣闊,不但可以看到其前面詞還能看到其后面的詞
  • Encoder : 說(shuō)明 BERT 是編碼器
  • Representations : BERT 是完成詞的表征的任務(wù)的模型,之前我們已經(jīng)學(xué)過(guò)了了 word2vec
  • Transformer: 其實(shí) BERT 就是 transform 解碼器部分,表示 BERT 結(jié)構(gòu)沒(méi)有采用 LSTM 這樣 RNN 結(jié)構(gòu),而是采用了 Transformer 這樣結(jié)構(gòu)來(lái)實(shí)現(xiàn)雙向循環(huán)神經(jīng)網(wǎng),Transformer 對(duì)象 LSTM 的優(yōu)勢(shì)是并行計(jì)算

那么 BERT 用途是啥呢

human_labeling.jpeg

我們先說(shuō) BERT 的優(yōu)點(diǎn),就是在訓(xùn)練 BERT 時(shí)候我們不需要人工數(shù)據(jù)集,隨便那些文本資料就可以用于訓(xùn)練 BERT,這些文本可以小說(shuō)、技術(shù)書刊、雜志或者是網(wǎng)頁(yè)等等來(lái)做預(yù)訓(xùn)練。

computing_power.png

但是 BERT 也不是完美無(wú)缺,BERT 需要大量算力才能進(jìn)行 BERT 的訓(xùn)練

recieve_message.jpg
  • 簡(jiǎn)單介紹一下 BERT 中的兩個(gè)任務(wù)
  • 以及兩個(gè)任務(wù)的作用
  • 如何將兩個(gè)任務(wù)設(shè)計(jì)到一個(gè)網(wǎng)絡(luò)結(jié)構(gòu)中

雙向變換器編碼表征(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 |

  • 如果要用亞馬遜的服務(wù)可能要花費(fèi) 1 萬(wàn)美元才能訓(xùn)練出小規(guī)模的 BERT

  • I went to the bank to deposit some money

  • I went to the back to sit down

預(yù)訓(xùn)練

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

  • 隨機(jī)遮擋一個(gè)單詞,讓編碼器(encoder)根據(jù)上下文來(lái)預(yù)測(cè)被遮擋的單詞

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

任務(wù)1—預(yù)測(cè)被遮擋的單詞

BERT_002.png
  • 輸入是文本序列,經(jīng)過(guò)預(yù)處理,有關(guān)如何對(duì)文本進(jìn)行預(yù)處理之前已經(jīng)給大家介紹過(guò),將文本切分為單詞
  • 經(jīng)過(guò) Embedding Layer 將每一個(gè)單詞映射為詞向量
  • 經(jīng)過(guò) Transformer 的編碼器(Encoder) 后得到
BERT_005.png
  • 從一句話中對(duì)所有 token 進(jìn)行隨機(jī)選取,每一個(gè) token 選取可能性都是 15%
    • 80% 用 <mask> 替換掉這個(gè)詞
    • 10% 用一個(gè) <random token> 來(lái)替換掉這個(gè)詞
    • 10% 用 cat 這個(gè)詞
  • transformer 中有注意力機(jī)制,所以 u_M 和輸入 x 并不是一對(duì)一映射,而是多對(duì)一映射。
BERT_006.png

從上圖不難看出 u_M 包含所有輸入序列的單詞信息,所以可以用 u_M 來(lái)預(yù)測(cè)遮擋位子的單詞

BERT_007.png

將特征向量 u_M 輸入到一個(gè) Softmax 分類器,經(jīng)過(guò) Softmax 分類器得到一個(gè) p 向量,p 也是概率分布,我們希望 p 向量接近 cat 的 one-hot 向量

Loss = crossEntropy(e,p)

任務(wù)2—預(yù)測(cè)下一個(gè)句子

  • 50% 將下一句隨機(jī)替換為
  • 將 Transformer 輸出,輸入到一個(gè)全聯(lián)接層來(lái)預(yù)測(cè)序列對(duì)
  • 給定句子 calculus is a branch of math
  • 在原文中下一個(gè)句子是 it was developed by newton and leibniz
  • panda is native to south central china

接下來(lái)是如何制作數(shù)據(jù)集,就是將兩句話拼接起來(lái),在最第一句話前面添加 [CLS] 在兩句話之間添加 [SEP] 表示分隔兩句話

BERT_011.png

其實(shí)之前有關(guān) mask 掉一個(gè)詞來(lái)通過(guò)預(yù)測(cè) masked 的詞來(lái)訓(xùn)練詞向量,大家還能理解,但是對(duì)于為什么通過(guò)預(yù)測(cè)兩個(gè)句子,大家可能就會(huì)有點(diǎn)摸不著頭腦了,為什么這樣做有易于詞向量的訓(xùn)練呢?

  • 在 Transformer Encoder 有 self-attention 層,self-attention 就是要找相關(guān)性,這種任務(wù)便于找到相關(guān)性
BERT_020.jpg

組合任務(wù)

BERT_012.png
BERT_015.png
小例子 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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容