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 用途是啥呢

我們先說(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)練。

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

- 簡(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è)被遮擋的單詞

- 輸入是文本序列,經(jīng)過(guò)預(yù)處理,有關(guān)如何對(duì)文本進(jìn)行預(yù)處理之前已經(jīng)給大家介紹過(guò),將文本切分為單詞
- 經(jīng)過(guò) Embedding Layer 將每一個(gè)單詞映射為詞向量
- 經(jīng)過(guò) Transformer 的編碼器(Encoder) 后得到

- 從一句話中對(duì)所有 token 進(jìn)行隨機(jī)選取,每一個(gè) token 選取可能性都是 15%
- 80% 用 <mask> 替換掉這個(gè)詞
- 10% 用一個(gè) <random token> 來(lái)替換掉這個(gè)詞
- 10% 用 cat 這個(gè)詞
- transformer 中有注意力機(jī)制,所以
和輸入
并不是一對(duì)一映射,而是多對(duì)一映射。

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

將特征向量 輸入到一個(gè) Softmax 分類器,經(jīng)過(guò) Softmax 分類器得到一個(gè) p 向量,p 也是概率分布,我們希望 p 向量接近 cat 的 one-hot 向量
任務(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] 表示分隔兩句話

其實(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)性

組合任務(wù)


小例子 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