
今天我們想到 NLP 就會想到 BERT,在 NLP 領域中 BERT 到處屠榜。BERT 主要應用于自然語言處理中的預訓練。這里想說一件有趣的事,就是當下比較火的自然語言處理模型如 ElMo 和 BERT 都是動畫片芝麻街中角色。
感謝李宏毅分享

BERT(Bidirectional Encoder Representations from Transformers)

那么什么是 BERT 呢? 我們先從字面上解釋一下什么是 BERT。
- Bidirectional : 是雙向神經(jīng)網(wǎng)絡,這個在學習 RNN 時候我們就了解到如何使用雙向 RNN 讓每一個詞視野更加廣闊,不但可以看到其前面詞還能看到后面的詞
- Encoder : 說明 BERT 是編碼器
- Representations : BERT 是完成詞的表現(xiàn)的任務的模型
- Transformer: 表示 BERT 結(jié)構(gòu)沒有采用 LSTM 這樣 RNN 結(jié)構(gòu),而是采用了 Transformer 這樣結(jié)構(gòu)來實現(xiàn)雙向循環(huán)神經(jīng)網(wǎng),Transformer 對象 LSTM 的優(yōu)勢是并行計算
想了解 Transformer 可以參照
2020機器學習 Transform 模型(1)
2020機器學習 Transform 模型(2)
2020機器學習 Transform 模型(3)
我們先用一句話來概括一下 BERT ,BERT 做的事情就是接受一個句子,會輸出一個詞的表示,這就是 BERT所做的事情。

BERT = 就是 Transformer 的編碼器(Encoder)部分。
BERT 只是 Transformer 一部分,他優(yōu)勢在于無需收集帶有標簽的數(shù)據(jù)集我們就可以訓練一個 BERT。
BERT 和 ELMo 關系
其實我們應該先介紹一下 ELMo ,因為我們只要將 ELMo 中的 LSTM 替換為 Transformer 就是 BERT。說以我們應該先介紹一下 ELMo。


上面圖是 BERT 輸入,BERT 輸入分為 3 個部分
- Token Embedding: 在輸入中有一些特殊字符[CLS]表示做分類任務,[SEP]表示句子之間間隔。這些大家不了解沒有關系隨后會詳細介紹。為什么會有 [SEP] 呢,這是因為在訓練 BERT 時候我們通常會輸入 2 個句子,這兩個句子間用 [SEP] 來進行分隔。
- Segment EmBeddings: 這里
和
表示詞(token)來自哪個句子 A 或是 B。這個應該不難理解
- Position Embeddings
表示詞(token)在輸入的位置
訓練 BERT 方法有兩種方式,也就是兩種任務來進行 BERT 的訓練
MLM(Masked Language Model)
類似完形填空,我們在輸入句子的 15% 詞用 [MASK] 來替換掉,然后 BERT 如何填補,通過對比填補內(nèi)容是否正確作為目標。在 15% 詞替換又分為以下 3 種情況
- 80% 可能性會替換為[MASK]
- 10% 可能性替換相似其他詞
- 10% 可能性會保持原樣不動

在值得注意時候在計算損失時候我們只針對[MASK]進行計算。
把[MASK]輸入到一個線性多分類器(Linear Multi-class classifier) 能力很弱,如果成功預測出詞匯,就說明 BERT 抽取很好詞表示的向量。
NSP(Next Sentence Prediction)
在這個任務只要是判斷前后兩個句子是否有關聯(lián)性。

給 BERT 輸入兩個句子,讓 BERT 判斷這兩個句子是否有前后關聯(lián)關系。這里需要引入[SEP] 詞表示兩個句子的分界線,[CLS] 通常放在輸入序列第一個位置,[CLS]的輸出給二分類的分類器(Linear Binary Classifier),這個線性分類器會給出分數(shù)。,大家可能認為 [CLS] 應該放在句尾,這里解釋一下為什么放置序列首位,而不是其他位置。這是因為 BERT 內(nèi)部使用 Transformer ,Transformer 中每一個位置都是均等的,給輸入順序無關,所以 [CLS] 可以放在任意位置。無論[CLS]放在句子開頭還是放在結(jié)尾都是沒有差別。
我們知道 BERT ,接下來看一看 BERT 應用。最簡單應用就是根據(jù)我們?nèi)蝿兆?BERT 作為提取特征工具提供一些詞向量來作為使用。但是 paper 中還給出不止這些 BERT 應用。還有讓 BERT 和你的模型一起訓練