標(biāo)題/作者BERT:Pre-trainingof Deep Bidirectional Transformers for Language Understanding
摘要BERT這個(gè)名字是從 Bidirectional Encoder Representations from Transformers得來(lái)的,猜測(cè)是為了湊出Bert這個(gè)詞,,因?yàn)榍懊娴闹ぷ鱁LMo就是美國(guó)家喻戶曉的動(dòng)畫(huà)片芝麻街中的主角之一,。在BERT出來(lái)之后,后面的研究者就開(kāi)始想方設(shè)法地把芝麻街中的重要人物都用了個(gè)遍,。 主要對(duì)比對(duì)象是ELMo和GPT,。最大的作用就是我們可以只是使用預(yù)訓(xùn)練好的BERT模型,,添加一個(gè)任務(wù)相關(guān)的輸出層,就可以在下游任務(wù)上達(dá)到SOTA水平,,極大地降低了NLP任務(wù)的門(mén)檻,。而前面的ELMo則需要對(duì)模型進(jìn)行修改。 最后講了BERT的效果非常好,,即列出了在benchmark上的絕對(duì)精度,,還列出了相對(duì)精度,在11個(gè)NLP任務(wù)上都達(dá)到了SOTA,。
Intro
從intro部分我們可以知道,,language model pre-training其實(shí)之前多年前就有了。 使用預(yù)訓(xùn)練模型來(lái)幫助下游任務(wù)的時(shí)候,,現(xiàn)有的做法有兩種:
前面的ELMo和GPT的方法,,都是使用單向的語(yǔ)言模型來(lái)學(xué)習(xí)通用的語(yǔ)言表示。例如在GPT中,,作者設(shè)計(jì)了一種從左到右的架構(gòu),,在Transformer的self-attention中每個(gè)token只能attend到前面的token。在更早的ELMo中,,由于使用的是RNN的架構(gòu),,更加是單向的語(yǔ)言模型。這一點(diǎn)嚴(yán)重限制了作為預(yù)訓(xùn)練使用的語(yǔ)言表示能力,。比如在做NER的時(shí)候,,我們都是可以看到上下文的,。 BERT主要就是為了解決這種單向的限制,設(shè)計(jì)了一種'mask language modeling'(MLM)的方式,,來(lái)進(jìn)行雙向的語(yǔ)言模型預(yù)訓(xùn)練,。這一點(diǎn)是借鑒了完形填空(cloze)任務(wù)。另外,,作者還設(shè)計(jì)了一個(gè)叫'next sentence prediction'(NSP)的任務(wù)來(lái)預(yù)訓(xùn)練,,即判斷兩個(gè)句子是否是相鄰的,還是隨機(jī)的,,這樣可以學(xué)習(xí)句子層面的信息,。 下圖展示了BERT跟前面工作的結(jié)構(gòu)上的對(duì)比(在最新版的論文中,這個(gè)圖是在附錄部分,,在最初的版本中這則是文章第一個(gè)圖): 貢獻(xiàn):
結(jié)論使用非監(jiān)督的預(yù)訓(xùn)練是非常好的,對(duì)于低資源場(chǎng)景的任務(wù)尤其有益,。主要貢獻(xiàn)來(lái)自于使用了雙向的語(yǔ)言模型,。 相關(guān)工作
BERT模型設(shè)計(jì)兩個(gè)步驟:pre-training 和 fine-tuning在pre-training階段使用無(wú)標(biāo)簽的數(shù)據(jù),在fine-tuning階段,,BERT模型使用前面預(yù)訓(xùn)練的權(quán)重來(lái)初始化,,然后使用下游任務(wù)有標(biāo)簽的數(shù)據(jù)進(jìn)行微調(diào)。 模型結(jié)構(gòu)和參數(shù)模型結(jié)構(gòu)是直接使用原始的Transformer,。使用了兩種不同架構(gòu):(L=12, H=768, A=12,,總參數(shù)量110M)和(L=24, H=1024, A=16,總參數(shù)量340M),,其中L是Transformer的層數(shù)/block數(shù),,H是hidden size,A是頭數(shù),。 后面沐神也講解了參數(shù)量是咋算的(這部分真是太棒了): 參數(shù)的來(lái)源主要是Transformer中的embedding層,、multi-head attention的投影矩陣、MLP層:
因此,,總體參數(shù)量=. 這么算下來(lái),差不多參數(shù)量是108M,,是330M,。(跟原文說(shuō)的接近的,但相差的部分在哪兒呢,?) 輸入的表示為了適應(yīng)不同的下游任務(wù),,BERT的輸入既可以是單個(gè)句子,也可以是一個(gè)句子對(duì)(例如<Question, Answer>),。 在輸入token方面,,使用WordPiece的embedding方式,,也是sub-word tokenization的方式的一種,,我們看到的那些前前面帶有'##'的詞就代表這是被wordpiese給切開(kāi)的子詞。這樣可以減少詞匯量,,最終詞匯量是30000,。 每個(gè)序列的開(kāi)頭的token,都是一個(gè)特殊的分類(lèi)token——[CLS],,這個(gè)token對(duì)應(yīng)的最后一次的hidden state會(huì)被用來(lái)作為分類(lèi)任務(wù)中的整個(gè)序列的表示,。對(duì)于非分類(lèi)任務(wù),這個(gè)向量是被忽略的,。 處理句子對(duì)時(shí),,對(duì)模型來(lái)說(shuō)還是一個(gè)序列,,只不過(guò)兩個(gè)句子中間用一個(gè)特殊的[SEP] token進(jìn)行了連接。兩個(gè)句子分別還配有可學(xué)習(xí)的segment embedding,;而對(duì)于僅有一個(gè)句子的輸入,,我們就只使用一個(gè)segment embedding. BERT的預(yù)訓(xùn)練Masked LM隨機(jī)地把原文中的15%的token給遮蓋住,即用一個(gè) [MASK] token來(lái)替換原來(lái)的詞,。然后把mask之后的文本輸入到模型中,,讓模型去預(yù)測(cè)這些被mask掉的詞。這樣就實(shí)現(xiàn)了雙向的語(yǔ)言模型,。 但這樣做會(huì)導(dǎo)致預(yù)訓(xùn)練和微調(diào)階段的不一致性:預(yù)訓(xùn)練的時(shí)候輸入都是帶有 [MASK] token的,,而這個(gè)token在微調(diào)階段是看不到的,這樣自然會(huì)影響微調(diào)時(shí)的效果,。為了緩解這個(gè)問(wèn)題,,作者使用了如下的操作:
這種做法,,說(shuō)實(shí)話還是挺費(fèi)解的,,讓人感覺(jué)也不一定有多大效果,但作者說(shuō)這樣可以緩解一點(diǎn)就緩解一點(diǎn)吧,。(實(shí)際上現(xiàn)在也有很多研究在解決這個(gè)問(wèn)題,,這部分后面補(bǔ)充...) 另外一個(gè)問(wèn)題在于MLM在這里只使用了15%的mask比例,這會(huì)讓模型需要訓(xùn)練更久才能收斂,。但好在最終的效果非常好,,所以也值了。(不知道如果使用更大的比例會(huì)怎么樣,?) Next Sentence Prediction很多的下游任務(wù),,比如QA(問(wèn)答)和NLI(自然語(yǔ)言推理)任務(wù),都需要模型能夠理解句子之間的關(guān)系,,而這種關(guān)系難以被MLM所學(xué)習(xí)到,。因此作者設(shè)計(jì)了一個(gè)輸入句子對(duì)的二分類(lèi)的NSP任務(wù):
雖然這個(gè)任務(wù)看起來(lái)非常簡(jiǎn)單,而且作者說(shuō)在預(yù)訓(xùn)練時(shí)這個(gè)任務(wù)可以達(dá)到97%以上的準(zhǔn)確率,,但后面的實(shí)驗(yàn)證明確實(shí)對(duì)QA和NLI任務(wù)有很大的幫助,。 注意到pre-training的那個(gè)圖,,在NSP任務(wù)中,我們使用的是[CLS] token對(duì)應(yīng)的hidden state來(lái)訓(xùn)練的,,即我們使用這個(gè)[CLS]來(lái)代表我整個(gè)句子對(duì)的表示,,用它來(lái)進(jìn)行二分類(lèi)任務(wù)。 BERT的微調(diào)對(duì)于sequence-level的任務(wù),,我們可以直接使用CLS的向量作為sequence的表示,,然后后面加一個(gè)簡(jiǎn)單的softmax層來(lái)進(jìn)行訓(xùn)練;對(duì)于span-level或者token-level的任務(wù),,也只用稍微修改一下跟任務(wù)相關(guān)的輸出層即可,。 另外,微調(diào)跟預(yù)訓(xùn)練時(shí)的差別還在BERT模型訓(xùn)練的一些超參數(shù)上,,比如learning rate,,batch size等等。例如在pre-training階段batch size=256,,而在fine-tuning階段作者推薦使用16或者32. 具體如何針對(duì)下游任務(wù)進(jìn)行微調(diào)GLUEGLUE數(shù)據(jù)集一般都是sequence-level的任務(wù),,主要都是分類(lèi),既有單句子的,,也有句子對(duì)的任務(wù),。這種就是直接用CLS配合一個(gè)softmax來(lái)跑即可。 SQuAD (問(wèn)答)給定一個(gè)問(wèn)題,,從一段話中找出答案所在的片段,。所以問(wèn)題轉(zhuǎn)化為對(duì)每個(gè)token判斷是否是答案的開(kāi)頭或結(jié)尾。具體細(xì)節(jié)由于我不做問(wèn)答,,所以詳情見(jiàn)論文吧,。 SWAG這是另外一個(gè)句子對(duì)推理任務(wù),其實(shí)跟NSP任務(wù)比較像,,所以這里也不多介紹了,。 以上的任務(wù),作者也花了幾個(gè)示意圖告訴我們?nèi)绾巫鋈蝿?wù)相關(guān)的模型調(diào)整: 對(duì)于分類(lèi)任務(wù): 對(duì)于token標(biāo)注: 所以總體上看,,我們只需要做微小的調(diào)整,,就可以應(yīng)對(duì)各種下游任務(wù)。 消融實(shí)驗(yàn)作者繼續(xù)做了一些消融實(shí)驗(yàn),,來(lái)看看NSP,、雙向語(yǔ)言模型等的作用,。 從上圖可看到,,對(duì)于各種任務(wù)來(lái)說(shuō),NSP預(yù)訓(xùn)練還是有幫助的,,把NSP去掉的話,,在很多任務(wù)上效果都會(huì)降低(但好像也沒(méi)有那么明顯哈),;然后如果只使用Left-to-right(LTR)的語(yǔ)言模型的話,效果會(huì)進(jìn)一步降低,,這個(gè)降低就比較明顯了,。 總之,這個(gè)實(shí)驗(yàn)論證了BERT的幾個(gè)關(guān)鍵點(diǎn)都是重要的,。 預(yù)訓(xùn)練模型的大小BERT這個(gè)論文,,證明了使用一個(gè)很大的預(yù)訓(xùn)練模型,可以極大地提高下游任務(wù)的表現(xiàn),。 從現(xiàn)在的眼光看,,BERT也不算大了,例如GPT3的大小就是BERT的1000倍(千億),,現(xiàn)在甚至萬(wàn)億級(jí)別的模型都在不斷出現(xiàn),。 只使用BERT作為特征抽取器的效果作者還探究了一下用feature-based的方式來(lái)利用BERT預(yù)訓(xùn)練的表示的效果,下表是在一個(gè)NER任務(wù)上的結(jié)果: 總體結(jié)論是,,如果使用BERT的話,,還是盡量用fine-tuning的方式效果會(huì)更好。但是從圖中看,,將最后幾層的hidden states拼接起來(lái)作為特征,,效果在NER上也不錯(cuò)。 總結(jié)作者對(duì)這個(gè)工作最大的貢獻(xiàn)總結(jié)為BERT的雙向性,,然而雙向語(yǔ)言模型和單向模型,,其實(shí)只是不同的策略,使用雙向的方式進(jìn)行預(yù)訓(xùn)練,,那自然在某些任務(wù)上會(huì)有些損失,,比如在機(jī)器翻譯、摘要生成等任務(wù),,可能BERT就沒(méi)有GPT那么優(yōu)秀,。這其實(shí)就是有得必有失。
最后,,沐神提出了一個(gè)靈魂拷問(wèn):其實(shí)BERT從整個(gè)流程上,跟GPT的工作是很類(lèi)似,,都是先預(yù)訓(xùn)練,,在進(jìn)行下游任務(wù)微調(diào)。為什么BERT更晚,卻更出圈,,現(xiàn)在名氣和影響力是遠(yuǎn)遠(yuǎn)大于GPT的,? 這個(gè)問(wèn)題,在B站評(píng)論區(qū)大家也在討論,,大家的一個(gè)觀點(diǎn)是:因?yàn)锽ERT做了更好的開(kāi)源,,把代碼、預(yù)訓(xùn)練模型都直接公開(kāi)出來(lái)了,。這讓廣大的研究者可以直接拿來(lái)使用,,體驗(yàn)預(yù)訓(xùn)練的威力,因此很快就可以傳播開(kāi),。 這一點(diǎn)告訴我們,,開(kāi)源、可復(fù)現(xiàn),、方便后續(xù)研究者使用,,對(duì)一個(gè)研究工作有很大的推動(dòng)作用。現(xiàn)在很多的論文,,發(fā)表在頂會(huì)頂刊上,,卻不公開(kāi)代碼,或者代碼公開(kāi)了卻寫(xiě)的稀爛,,沒(méi)有任何的文檔來(lái)幫助人們復(fù)現(xiàn),,這必然極大影響論文最終的影響力,甚至影響作者的聲譽(yù),。 “做真正有影響力,、有價(jià)值的研究,而不是為了水水文章,、增加自己的publications,。”這句最簡(jiǎn)單,、最樸素的科研工作者都應(yīng)該有的價(jià)值觀,,在當(dāng)下的環(huán)境下,尤其是國(guó)內(nèi)這種長(zhǎng)期以來(lái)的追求論文數(shù)量的價(jià)值觀,、高校不合理的考核機(jī)制,、各大技術(shù)廠商的極端內(nèi)卷等影響下,顯得無(wú)比珍貴,。 其他原創(chuàng)好文
SimpleAI 追求用簡(jiǎn)單、有趣的方式來(lái)分享AI知識(shí),。 78篇原創(chuàng)內(nèi)容 公眾號(hào) |
|