读论文:BERT Pre-training of Deep Bidirectional Transformers for Language Understanding
文章目錄
- 0.Abstract
- 1.Introduction
- 2.Related Work
- 3.Bert模型
- 3.1 預訓練Bert
- 3.2 微調Bert
Bert之前預訓練大多用于cv,Bert的出現讓預訓練在nlp領域大顯身手,淺談一下讀這篇論文的理解
0.Abstract
首先來看標題,Pre-training預訓練,深度雙向的transformer,針對一般的語言理解任務來做預訓練。
1.Introduction
預訓練的語言模型可以提升許多自然語言任務的效果,這些自然語言任務包括兩類:
1.句子層次的任務
2.詞語層面的任務,比如命名實體的識別
所以預訓練這個想法已經存在很長時間了,bert之前是存在預訓練的,只不過之前更多的用于cv領域,bert引領之后的nlp任務使用預訓練的方法。
bert采用了這兩個任務進行預訓練,以便適應目前大多數的nlp任務。
2.Related Work
作者簡單地回顧了一下會在本文中使用的預訓練的工作
1.基于特征的無監督方法
2.基于微調的無監督方法
3.在有標記的數據上做遷移學習
總之就是簡單總結了一下之前的一些預訓練的方法,還有將預訓練的學習結果遷移到下游的任務中。
3.Bert模型
Bert有兩個步驟:Pre-train(預訓練)和Fine-tune(微調)。
Pre-train(預訓練):
預訓練也就是訓練bert,引用一下李宏毅老師的話,就是制造胚胎干細胞的過程,這時候讓bert學兩個任務:
1.masked language model(Masked LM):輸入一個句子并蓋住一個單詞,讓模型預測出這個單詞
2.Next sentence prediction(NSP):輸入兩個句子,讓model學習這兩個句子是否是連續的,但其實這個步驟并不能學到很多東西。
Fine-tune(微調):
胚胎干細胞分化的過程,學完之后可以去做下游任務(downstream tasks),bert分化成各種任務這件事情叫做fine-tune(微調) ,采用有標號的數據訓練,同樣使用bert模型,只不過參數不是隨機初始化的,而是采用預訓練過程得到的參數進行初始化。
總之,先用無標號的數據,采用上述的MLM和NSP任務預訓練一個bert模型,對所有的下游任務,創建一個同樣的bert模型,參數來自于預訓練得到的參數,然后采用有標號的數據對下游任務的模型繼續訓練。
然后是模型的架構:
bert模型由多層trasformer的encoder組成,而且是雙向的,直接基于原始的transformer論文的代碼。
作者調了3個參數:L(transformer block的個數),H(隱藏層大小),A(self-attention中multi-head的head個數),這里有兩個模型:
BERT(BASE) (L=12, H=768, A=12, Total Parameters=110M)
BERT(LARGE) (L=24, H=1024,A=16, Total Parameters=340M).
然后是模型的輸入輸出:
為了滿足下游任務的需求,輸入需要可以是一個句子或者是兩個句子,bert只有一個編碼器,只能輸入一個句子,那就把多個句子拼成一個句子去輸入(和transformer不太相同,那里的encoder和decoder分別輸入一個句子)
接著具體看一下句子(下面稱為序列吧)是怎么拼出來的:
分詞采用WordPiece的方法,如果按照空格分詞,一個詞是一個token,由于文本數量太大,token就會太多。WordPiece是如果一個詞的詞頻不大,那就給它切開成多個子序列,保留詞頻大的子序列,這樣可以用一個比較小的詞典來表示文本。
序列的第一個詞只能是[CLS],表示整個序列的信息。當學習兩個句子的時候,中間加一個[SEP],表示分隔兩個句子,或者學習一層embedding,代表token屬于哪個句子。
然后就進入一堆encoder再輸出結果。
對于每個token,它進入Bert時的向量表示由三部分組成:token本身的embedding,token在哪個句子的embedding,token在句中位置的embbeding。
看完架構,再看看bert是如何訓練的
3.1 預訓練Bert
MLM:對于WordPiece生成的token,有15%的概率會被替換成[MASK],這些token中,80%的概率確實替換為[MASK],10%的概率替換成隨機的token,還有10%概率什么也不做。
NSP:對于輸入訓練的序列對,50%的樣本是兩個句子相連,50%的樣本兩句話不相連。
預訓練的數據:作者用了BooksCorpus (800M words) 和English Wikipedia (2,500M words)兩個數據集
3.2 微調Bert
根據下游任務,設計任務的輸入輸出,比如要做分類問題,只要第一個句子就行了,輸出的話總之就是拿到bert輸出的token,比如拿到[CLS]的輸出做分類,不管怎樣就是加一個輸出層,用softmax得到結果。
后面就是作者的實驗,影響和總結啦,這里就不多寫了。
總結
以上是生活随笔為你收集整理的读论文:BERT Pre-training of Deep Bidirectional Transformers for Language Understanding的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 6、Ordinary keyboard
- 下一篇: 推荐几个测试能接受邮件的临时邮箱