這篇文章介紹Bert,但是暫時還沒研究完,所以只能分兩部分寫。
這篇文章主要介紹bert的思想和創(chuàng)新點,下一篇文章主要介紹bert的結構。
一定要看論文原文:BERT中文翻譯PDF版
BERT的新語言表示模型,它代表Transformer的雙向編碼器表示。與最近的其他語言表示模型不同,BERT旨在通過聯合調節(jié)所有層中的上下文來預先訓練深度雙向表示。因此,預訓練的BERT表示可以通過一個額外的輸出層進行微調,適用于廣泛任務的最先進模型的構建,比如問答任務和語言推理,無需針對具體任務做大幅架構修改。谷歌團隊認為現有的技術嚴重制約了預訓練表示的能力。其主要局限在于標準語言模型是單向的,這使得在模型的預訓練中可以使用的架構類型很有限。
通過提出BERT:即Transformer的雙向編碼表示來改進基于架構微調的方法。BERT 提出一種新的預訓練目標:遮蔽語言模型(masked language model,MLM),來克服上文提到的單向性局限。MLM 隨機遮蔽模型輸入中的一些 token,目標在于僅基于遮蔽詞的語境來預測其原始詞匯 id。與從左到右的語言模型預訓練不同,MLM 目標允許表征融合左右兩側的語境,從而預訓練一個深度雙向 Transformer。除了遮蔽語言模型之外,還引入了一個“下一句預測”(next sentence prediction)任務,可以和MLM共同預訓練文本對的表示。
BERT模型具有以下兩個特點:
- 是這個模型非常的深,12層,并不寬(wide),中間層只有1024,而之前的Transformer模型中間層有2048。這似乎又印證了計算機圖像處理的一個觀點——深而窄 比 淺而寬 的模型更好。
- MLM(Masked Language Model),同時利用左側和右側的詞語,這個在ELMo上已經出現了,絕對不是原創(chuàng)。
輸入表示
bert的輸入表示(input representation)能夠在一個token序列中明確地表示單個文本句子或一對文本句子(例如, [Question, Answer])。對于給定token,其輸入表示通過對相應的token、segment和position embeddings進行求和來構造。下圖是輸入表示的直觀表示:

具體如下:
- 使用WordPiece嵌入(Wu et al., 2016)和30,000個token的詞匯表。用##表示分詞。
- 使用學習的positional embeddings,支持的序列長度最多為512個token。每個序列的第一個token始終是特殊分類嵌入([CLS])。對應于該token的最終隱藏狀態(tài)(即,Transformer的輸出)被用作分類任務的聚合序列表示。對于非分類任務,將忽略此向量。
- 句子對被打包成一個序列。以兩種方式區(qū)分句子。首先,用特殊標記([SEP])將它們分開。其次,添加一個learned sentence A嵌入到第一個句子的每個token中,一個sentence B嵌入到第二個句子的每個token中。
- 對于單個句子輸入,只使用 sentence A嵌入。
Masked LM
從直覺上看,深度雙向模型比left-to-right 模型或left-to-right and right-to-left模型的淺層連接更強大。遺憾的是,標準條件語言模型只能從左到右或從右到左進行訓練,因為雙向條件作用將允許每個單詞在多層上下文中間接地“see itself”。
為了訓練一個深度雙向表示(deep bidirectional representation),谷歌采用了一種簡單的方法,即隨機屏蔽(masking)部分輸入token,然后只預測那些被屏蔽的token。他們將這個過程稱為“masked LM”(MLM),盡管在文獻中它經常被稱為Cloze任務(Taylor, 1953)。
在這個例子中,與masked token對應的最終隱藏向量被輸入到詞匯表上的輸出softmax中,就像在標準LM中一樣。在谷歌所有實驗中,隨機地屏蔽了每個序列中15%的WordPiece token。與去噪的自動編碼器(Vincent et al., 2008)相反,只預測masked words而不是重建整個輸入。
雖然這確實能獲得雙向預訓練模型,但這種方法有兩個缺點。
首先,預訓練和finetuning之間不匹配,因為在finetuning期間從未看到[MASK]token。為了解決這個問題,并不總是用實際的[MASK]token替換被“masked”的詞匯。相反,訓練數據生成器隨機選擇15%的token。例如在這個句子“my dog is hairy”中,它選擇的token是“hairy”。
然后,執(zhí)行以下過程:數據生成器將執(zhí)行以下操作,而不是始終用[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.
這樣做的目的是將表示偏向于實際觀察到的單詞。Transformer encoder不知道它將被要求預測哪些單詞或哪些單詞已被隨機單詞替換,因此它被迫保持每個輸入token的分布式上下文表示。此外,因為隨機替換只發(fā)生在所有token的1.5%(即15%的10%),這似乎不會損害模型的語言理解能力。使用MLM的第二個缺點是每個batch只預測了15%的token,這表明模型可能需要更多的預訓練步驟才能收斂。谷歌證明MLM的收斂速度略慢于 left-to-right的模型(預測每個token),但MLM模型在實驗上獲得的提升遠遠超過增加的訓練成本。
下一句預測
許多重要的下游任務,如問答(QA)和自然語言推理(NLI)都是基于理解兩個句子之間的關系,這并沒有通過語言建模直接獲得。
在為了訓練一個理解句子的模型關系,預先訓練一個二進制化的下一句測任務,這一任務可以從任何單語語料庫中生成。
具體地說,當選擇句子A和B作為預訓練樣本時,B有50%的可能是A的下一個句子,也有50%的可能是來自語料庫的隨機句子。例如:
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
這里完全隨機地選擇了NotNext語句,最終的預訓練模型在此任務上實現了97%-98%的準確率。
可以說MLM和下一句預測是bert最大的創(chuàng)新方法,但是,bert之所以能大規(guī)模屠榜,和其超大訓練集是分不開的,而這種大規(guī)模訓練方法,一般公司和團體也玩不起。所以,有錢才是爸爸。
下篇我們繼續(xù)磕BERT。