1. 簡介
大名鼎鼎的BERT,基于目前流行的transformer結(jié)構(gòu),一經(jīng)推出就刷新了11個NLP任務(wù)的SOTA。并且模型可以直接接入到下游任務(wù),從而受到廣大機器學(xué)習(xí)從業(yè)者的追捧涩金。那么bert到底是什么呢谱醇?
bert的作者聲稱,預(yù)訓(xùn)練的下游任務(wù)有兩種:
A. 整句級別的步做,關(guān)注句子之間關(guān)系的自然語言推斷和句子釋義副渴。
B. 單詞級別的,比如命名實體識別和問答全度。
預(yù)訓(xùn)練模型如何使用也有兩種流派:基于特征和基于精調(diào)煮剧。其中:
A. 基于特征的就是以elmo為代表,把預(yù)訓(xùn)練結(jié)果的單詞表示當做下游任務(wù)的一個額外特征将鸵。
B. 基于精調(diào)就類似GPT勉盅,直接把GPT作為底層模型,外加一個softmax或者其他什么直接做分類任務(wù)顶掉,讓整個模型重新訓(xùn)練草娜。
作者比較看好基于精調(diào)的模型,并且他們聲稱痒筒,當時的精調(diào)流派大都采用單向語言模型宰闰,這在單詞級別的下游任務(wù)中非常不利。因此作者以transformer的結(jié)構(gòu)為基礎(chǔ)簿透,利用mask技術(shù)[1]來達到雙向語言模型的效果移袍。并且在目標函數(shù)中整合單詞級別的預(yù)測和整句級別的上下文承接的損失函數(shù),同時兼顧兩種下游任務(wù)老充。作者將該模型命名為bert(Bidirectional Encoder Representations from Transformers)葡盗。該項目已經(jīng)開源,鏈接在這里.
下面就來看一下啡浊,作者是如何設(shè)計模型結(jié)構(gòu)的吧觅够。
2. 背景研究介紹
bert模型綜合了三個基準點:雙向語言模型、預(yù)訓(xùn)練模型+精調(diào)方法用于下游任務(wù)虫啥、單詞級別與整句級別的下游任務(wù)蔚约。這些idea都不是bert首創(chuàng)的,回顧這幾個方向的研究涂籽,有助于我們更好的理解bert模型。
2.1 無監(jiān)督+基于特征
很久以來砸抛,大家都在研究评雌,如何才能讓模型學(xué)習(xí)到一種非常的表示。大家嘗試過非神經(jīng)網(wǎng)絡(luò)的模型[2]直焙,神經(jīng)網(wǎng)絡(luò)模型[3]【岸現(xiàn)代NLP方法中,從不需要標記的文本中進行無監(jiān)督的預(yù)訓(xùn)練奔誓,得到單詞的嵌入表示斤吐,這是一種常見的方法了搔涝。這種方法極大的提升了各種NLP任務(wù)的表現(xiàn)。為了得到進行無監(jiān)督訓(xùn)練和措,常用來構(gòu)造損失函數(shù)的手法就是應(yīng)用從左到右的單向語言模型庄呈。
嵌入表示的方法不僅用于單詞,還應(yīng)用到了更粗力度的句子甚至段落上派阱。為了得到表示句子的嵌入向量诬留,之前用到過的目標函數(shù)有:pair-wise的句子排序的方法、給出左邊的句子向量贫母,生成右邊的句子文兑、降噪自編碼偏導(dǎo)[4](這個是啥完全看不懂)。
ELMO則開創(chuàng)了雙向語言模型腺劣,把兩個方向的向量concate起來绿贞,并且把每一層的隱變量拿出來做線性變換得到下游任務(wù)中的單詞表示。這種方法適用于上下文敏感的單詞表示場景橘原,不管是單詞級別的下游任務(wù)還是整句級別的下游任務(wù)籍铁。
還有研究表明,完形填空這種任務(wù)可以有效的提高文本生成模型的魯棒性[5]靠柑。
2.2 無監(jiān)督+精調(diào)
用無標簽的文本數(shù)據(jù)來構(gòu)造訓(xùn)練集進行無監(jiān)督的預(yù)訓(xùn)練寨辩,并且把預(yù)訓(xùn)練的結(jié)果套一層有監(jiān)督訓(xùn)練進行精調(diào)。這種上游模型用于下游的任務(wù)的方法也很流行歼冰,該方法的優(yōu)勢在于只有很少的參數(shù)需要學(xué)習(xí)靡狞。正是由于這個原因,GPT可以在整句級別的下游任務(wù)中取得新的SOTA隔嫡。這些模型的預(yù)訓(xùn)練部分大都采用從左到右的單向語言模型+自編碼的方式來構(gòu)造目標函數(shù)甸怕。
2.3 遷移學(xué)習(xí)
這種預(yù)訓(xùn)練模型用于下游任務(wù)+精調(diào)的方法也叫做遷移學(xué)習(xí)。這種做法不應(yīng)用在NLP領(lǐng)域腮恩,在CV領(lǐng)域也有應(yīng)用梢杭,比如Image-Net[6]。
3. BERT模型
bert模型分兩步:預(yù)訓(xùn)練和精調(diào)秸滴。本節(jié)的fine tuning 使用的是問答任務(wù)武契。bert模型的重要特點就是它的預(yù)訓(xùn)練是多任務(wù)的,這就使得bert可以廣泛用于不同的下游任務(wù)荡含。
3.1 bert模型結(jié)構(gòu)圖
bert所用的transformer結(jié)構(gòu)就是經(jīng)典transformer咒唆,這個結(jié)構(gòu)的論文可以看[7],代碼可以直接用tensorflow中的實現(xiàn)释液。
L表示使用了多少個transformer全释,H表示隱層大小, A表示多頭自注意力的個數(shù)误债,前饋層大小統(tǒng)一為4H浸船。
作者做了兩個規(guī)模的模型:BERTBASE (L=12, H=768, A=12, Total Parameters=110M) 和BERTLARGE (L=24, H=1024,A=16, Total Parameters=340M)妄迁。
3.2 輸入/輸出的表示
因為要用兩個句子作為輸入,所以序列可以指代一句李命,也可以指代兩個句子登淘。用了wordpiece,所以可以不是完整的單詞项戴。用兩種方式來標記一個序列中的兩個句子形帮,一是用分隔符< Sep > ,二是每個wordpiece都有標記它到底屬于A還是B周叮。E代表輸入向量辩撑,C代表最后一層的句子開始符<cls>,第i個token記為Ti仿耽。
最終的輸入是token合冀、segment和position embedding的加和,如圖2所示:
3.3 預(yù)訓(xùn)練
預(yù)訓(xùn)練有兩個目標:語言模型目標和下文預(yù)測目標
語言模型目標
雙向語言模型在預(yù)測當前詞的時候项贺,會用到其上下文信息(類似 word2vec 里的 CBOW 模式)君躺,而 transformer 自帶了全局的 self-attention,會將上下文的詞編碼到當前模型里开缎,所以在預(yù)測其他詞的時候棕叫,該詞的信息已經(jīng)包含在了前一層的網(wǎng)絡(luò)參數(shù)里,導(dǎo)致間接地『自己預(yù)測自己』
不嚴謹?shù)亟忉屜拢海ㄗ髨D)在預(yù)測 T1 的時候奕删,transformer 模塊(紅框所示)已經(jīng)將 T2 的信息編碼進去了俺泣,所以(右圖)在預(yù)測 T2 的時候,transformer 模塊里完残,已經(jīng)包含了 T2 的信息伏钠,也就是 Jacob 說的 『see themselves』。
為了解決雙向語言模型中可以間接看到自己的問題谨设,干脆把目標詞永遠替換成mask符號熟掂,然后反過來預(yù)測這些mask原來的詞。作者將這個稱之為mask lm(這不就是完形填空嗎)扎拣。正常的auto-encoder的損失函數(shù)為所有單詞自預(yù)測的損失赴肚,而我們的目標函數(shù)僅包含預(yù)測mask的損失。mask的比例為15%二蓝。
不過這樣做有個壞處尊蚁,就是會導(dǎo)致訓(xùn)練和預(yù)測時樣本結(jié)構(gòu)不一致(訓(xùn)練時如果一句話中恰好有兩個詞被替換了,那該樣本的輸入可能會有mask符號侣夷,而預(yù)測時則永遠不會有mask)。因此作者又做了一下妥協(xié)仑乌,把已經(jīng)選中要替換為mask的單詞(也就是會進入目標函數(shù)的部分)有10%的概率替換成其他單詞百拓,又有10%的概率保持不變琴锭。
不嚴謹?shù)恼f,在一段長度為200的語料中衙传,作者會選30個單詞作為自編碼的目標函數(shù)决帖,而這30個單詞中,3個單詞是保持原樣不變的(也就是可能會出現(xiàn)自己看到自己的問題蓖捶,如果某個句子中恰好包含了這3個單詞中的2個地回,其中一個是目標,另一個會作為輸入的一部分俊鱼,那就see-themselves了刻像,但是當做輸入或目標的話就沒問題),3個單詞是替換成其他單詞的(也就是說如果某個句子的輸入恰好包含了這3個單詞中的1個并闲,那其實就是拿異常的樣本去訓(xùn)練模型了细睡,但是如果當做輸出的話就沒什么影響)。剩下的24個全都換成mask符號(一旦被當做輸入帝火,就會出現(xiàn)前面說的跟預(yù)測時不一致的問題)溜徙。這樣可以稍微緩解一下訓(xùn)練樣本中出現(xiàn)mask的問題。
下一句子預(yù)測(next sentence prediction犀填,NSP)
許多NLP任務(wù)是需要判斷兩個句子的關(guān)系的蠢壹,比如問答和自然語言推斷。但是語言模型并不能很好的捕捉這樣的信息九巡。所以從語料中抽取樣本時图贸,作者抽取50%的樣本的兩個句子是連在一起,50%的概率是不連著的比庄。然后把C(最后一層的句子開始符)作為輸出層的輸入求妹。本文中nsp目標函數(shù)的構(gòu)建跟[8][9]是一樣的。區(qū)別是之前的研究下游任務(wù)僅僅利用句子的向量佳窑,bert模型需要把整個模型結(jié)構(gòu)和參數(shù)都接入到下游任務(wù)中(因為要fine-tune嘛)制恍。
預(yù)訓(xùn)練數(shù)據(jù)
BooksCorpus、English Wikipedia
3.4 fine-tune
作者說bert的fine-tune是非常簡單的神凑,只需要end to end的跑數(shù)據(jù)净神,調(diào)參就行了。(也許這也解釋了它為什么被大家追捧)溉委。根據(jù)下游任務(wù)的不同鹃唯,輸入為:
(1) sentence pairs in paraphrasing
(2) hypothesis-premise pairs in entailment
(3)question-passage pairs in question answering
(4) a degenerate text-? pair in text classification or sequence tagging
如果是序列標注或者問答任務(wù),就拿token級別的輸出再套一層輸出層瓣喊。
如果是上下文承接判斷或者情感分析坡慌,就把[CLS]的token拿出來放到輸出層。
在TPU上藻三,1小時就可以完成精調(diào)洪橘,用GPU也只需數(shù)小時跪者。
4. 數(shù)據(jù)實驗
4.1 GLUE數(shù)據(jù)集(General Language Understanding Evaluation benchmark)
作者用了3個epoch就能完成訓(xùn)練∠ㄇ螅可以看到渣玲,bertbase和bertlarge都明顯好于SOTA,分別取得了4.5%和7%的提升弟晚。注意bertbase并不會比GPT的模型更復(fù)雜忘衍,這充分說明了bert模型結(jié)構(gòu)中attention mask的合理性。對于MNLI卿城,bert取得了4.6%的絕對提升枚钓。而bertlarge模型在所有任務(wù)中表現(xiàn)都比bertbase更好,5.2中探究了bert模型復(fù)雜程度的影響藻雪。
4.2 squad
對于問答任務(wù)秘噪,作者把問題和段落的序列作為A和B輸入到模型中,使用開始符S和結(jié)束符E作為下游任務(wù)的輸入勉耀。對段落中每個單詞Ti都乘以S指煎,然后套一個softmax,就是該單詞為答案span的start的概率便斥,end同理(這種用start和end來標記段落中答案的方法非常常見)至壤。公式如下所示:
作者經(jīng)過5個epoch就能完成精調(diào)。
可以看到枢纠,bert在問答任務(wù)中也可以取得新的SOTA像街。
4.3 SWAG(Situations With Adversarial Generations)
給出一個陳述句子和4個備選句子, 判斷前者與后者中的哪一個最有邏輯的連續(xù)性, 相當于上下文承接問題。
作者構(gòu)建的樣本是4個序列晋渺,每個序列包含一個陳述句和一個備選句镰绎,然后最終每個序列的<cls>的token最終和一個向量進行相乘得到一個分數(shù),再過一個softmax得到最終的概率木西。
同樣經(jīng)過3個epoch畴栖,作者就得到了新的SOTA。如下所示:
5. 銷蝕分析
5.1 模型結(jié)構(gòu)分析
作者以bertbase為原型八千,逐漸去掉作者加入的設(shè)計:NSP吗讶、雙向語言模型、transformer結(jié)構(gòu)(換成雙向lstm)恋捆≌战裕可以看到,模型的表現(xiàn)逐漸下降沸停。
結(jié)果表明:沒有上下句子判斷的設(shè)計膜毁,會損害模型在MNLI(Multi-Genre Natural Language Inference)和QNLI(Question Natural Language Inference)上的表現(xiàn)。而去掉雙向語言模型換成單向,則會進一步損害在所有任務(wù)上的表現(xiàn)爽茴,尤其是token級別的任務(wù)葬凳。換成雙向LSTM的話模型跟單向語言模型相差不大。
這些結(jié)果充分表明了作者設(shè)計的合理性室奏。
5.2 模型大小分析
從結(jié)果可以看到,隨著模型參數(shù)量的增加劲装,模型效果逐漸提升胧沫。對大數(shù)據(jù)集來說,這個規(guī)律在之前的研究中已經(jīng)證明了占业。本研究表明绒怨,只要有充分的預(yù)訓(xùn)練,增加模型的參數(shù)量谦疾,對于小數(shù)據(jù)集也能持續(xù)的帶來效果提升南蹂。
5.3 基于特征的手法用于下游任務(wù)
雖然bert推薦使用fine-tune,但是實際上也可以跟elmo一樣當做feature用念恍。作者把單詞的第一個sub-token當做標注問題分類器的輸入(不是用CRF當輸出層來做標注問題)六剥。為了保證不進行任何精調(diào),作者把bert的隱層固定住峰伙,然后跟elmo的論文一樣疗疟,探討了應(yīng)用不同層級的hidden state做特征,后面接一個雙層768維的雙向LSTM瞳氓,再后面接一個分類器(論文沒說是什么分類器)策彤。
下圖是CoNLL-2003數(shù)據(jù)集上的實體識別任務(wù),bert基于特征的用法帶來的效果:
可以看到匣摘,bert作為feature也可以用店诗,只是效果略遜于fine-tune。
6. 結(jié)論
作者非常謙虛的說音榜,預(yù)訓(xùn)練來加強模型效果已經(jīng)是非常流行庞瘸,非常常見的手段了。作者:很慚愧囊咏,就做了一點微小的工作恕洲。
參考文獻
[1] Wilson L Taylor. 1953. Cloze procedure: A new tool for measuring readability. Journalism Bulletin, 30(4):415–433.
[2] Peter F Brown, Peter V Desouza, Robert L Mercer, Vincent J Della Pietra, and Jenifer C Lai. 1992. Class-based n-gram models of natural language. Computational linguistics, 8(4):467–479.
[3] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg S Corrado, and Jeff Dean. 2013. Distributed representations of words and phrases and their compositionality. In Advances in Neural Information Processing Systems 26, pages 3111–3119. Curran Associates, Inc.
[4] Felix Hill, Kyunghyun Cho, and Anna Korhonen. 2016. Learning distributed representations of sentences from unlabelled data. In Proceedings of the 2016 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies. Association for Computational Linguistics.
[5] William Fedus, Ian Goodfellow, and Andrew M Dai. 2018. Maskgan: Better text generation via filling in the . arXiv preprint arXiv:1801.07736
[6] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. FeiFei. 2009. ImageNet: A Large-Scale Hierarchical Image Database. In CVPR09.
[7] Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, and Illia Polosukhin. 2017. Attention is all you need. In Advances in Neural Information Processing Systems, pages 6000–6010