Google發(fā)布的論文《Pre-training of Deep Bidirectional Transformers for Language Understanding》郎汪,提到的BERT模型刷新了自然語言處理的11項記錄。最近在做NLP中問答相關的內容闯狱,抽空寫了篇論文詳細解讀煞赢。我發(fā)現(xiàn)大部分關注人工智能領域的朋友看不懂里面的主要結論,為了讓你快速了解論文精髓哄孤,這里特地為初學者和剛接觸深度學習的朋友們奉上技能點突破roadmap照筑。如果別人寫的論文解讀你看不懂,代表你需要補充基礎知識啦录豺。另外給了主要論文參考朦肘,在第五部分饭弓,希望對你在NLP領域全面的了解有所幫助双饥。
一、 總體介紹
? ? ? ? BERT模型實際上是一個語言編碼器弟断,把輸入的句子或者段落轉化成特征向量(embedding)咏花。論文中有兩大亮點:1.雙向編碼器。作者沿用了《attention is all you need》里提到的語言編碼器阀趴,并提出雙向的概念昏翰,利用masked語言模型實現(xiàn)雙向。2.作者提出了兩種預訓練的方法Masked語言模型和下一個句子的預測方法刘急。作者認為現(xiàn)在很多語言模型低估了預訓練的力量棚菊。Masked語言模型比起預測下一個句子的語言模型,多了雙向的概念叔汁。
二统求、 模型框架
? ? ? BERT模型復用OpenAI發(fā)布的《Improving Language Understanding with Unsupervised Learning》里的框架检碗,BERT整體模型結構與參數(shù)設置都盡量做到OpenAI GPT一樣,只在預訓練方法做了改造码邻。而GPT讓編碼器只學習每一個token(單詞)與之前的相關內容折剃。
? ? ? ? 上圖是根據(jù)OpenAI GPT的架構圖做的改動,以便讀者更清楚的了解整個過程像屋。
? ? ? ? 整體分為兩個過程:1.預訓練過程(左邊圖)預訓練過程是一個multi-task learning怕犁,遷移學習的任務,目的是學習輸入句子的向量己莺。2微調過程(右邊圖)可基于少量監(jiān)督學習樣本奏甫,加入Feedword神經網絡,實現(xiàn)目標凌受。因為微調階段學習目標由簡單的feedward神經網絡構成扶檐,且用少量標注樣本,所以訓練時間短胁艰。
1.輸入表示
? ? ? 對比其他語言模型輸入是一個句子或者文檔款筑,Bert模型對輸入做了更寬泛的定義,輸入表示即可以是一個句子也可以一對句子(比如問答和答案組成的問答對)腾么。
? ? ? ? 輸入表示為每個詞對應的詞向量奈梳,segment向量,位置向量相加而成解虱。(位置向量參考《attention is all you need》)
2.預訓練過程-Masked語言模型
? ? ? ? Masked語言模型是為了訓練深度雙向語言表示向量攘须,作者用了一個非常直接的方式,遮住句子里某些單詞殴泰,讓編碼器預測這個單詞是什么于宙。
訓練方法為:作者隨機遮住15%的單詞作為訓練樣本。
(1)其中80%用masked token來代替悍汛。
(2)10%用隨機的一個詞來替換捞魁。
(3)10%保持這個詞不變。
? ? ? 作者在論文中提到這樣做的好處是离咐,編碼器不知道哪些詞需要預測的谱俭,哪些詞是錯誤的,因此被迫需要學習每一個token的表示向量宵蛀。另外作者表示昆著,每個batchsize只有15%的詞被遮蓋的原因,是性能開銷术陶。雙向編碼器比單項編碼器訓練要慢凑懂。
3.預測下一個句子。
? ? ? ? 預訓練一個二分類的模型梧宫,來學習句子之間的關系接谨。預測下一個句子的方法對學習句子之間關系很有幫助杭攻。
訓練方法:正樣本和負樣本比例是1:1,50%的句子是正樣本疤坝,隨機選擇50%的句子作為負樣本兆解。
[CLS]為句子起始符,[MASK]為遮蔽碼跑揉,[SEP]為分隔符和截止符
4.預訓練階段參數(shù)
(1)256個句子作為一個batch,每個句子最多512個token锅睛。
(2)迭代100萬步。
(3)總共訓練樣本超過33億历谍。
(4)迭代40個epochs现拒。
(5)用adam學習率, 1 = 0.9,? 2 = 0.999望侈。
(6)學習率頭一萬步保持固定值印蔬,之后線性衰減。
(7)L2衰減脱衙,衰減參數(shù)為0.01侥猬。
(8)drop out設置為0.1。
(9)激活函數(shù)用GELU代替RELU捐韩。
(10)Bert base版本用了16個TPU退唠,Bert large版本用了64個TPU,訓練時間4天完成荤胁。
(論文定義了兩個版本瞧预,一個是base版本,一個是large版本仅政。Large版本(L=24, H=1024, A=16, Total Parameters=340M)垢油。base版本( L=12, H=768, A=12, Total Pa- rameters=110M)。L代表網絡層數(shù)圆丹,H代表隱藏層數(shù)滩愁,A代表self attention head的數(shù)量。)
5.微調階段
? ? ? 微調階段根據(jù)不同任務使用不同網絡模型运褪。在微調階段惊楼,大部分模型的超參數(shù)跟預訓練時差不多玖瘸,除了batchsize秸讹,學習率,epochs雅倒。
訓練參數(shù):
Batch size: 16, 32
Learning rate (Adam): 5e-5, 3e-5, 2e-5
Number of epochs: 3, 4
三璃诀、實驗效果
1.分類數(shù)據(jù)集上的表現(xiàn)
2.問答數(shù)據(jù)集上的表現(xiàn)
? ? ? 在問答數(shù)據(jù)集SQuAD v1.1上的表現(xiàn),TriviaQA是一個問答數(shù)據(jù)集蔑匣。EM的基本算法是比較兩個字符串的重合率劣欢。F1是綜合衡量準確率和召回率的一個指標棕诵。
3.命名實體識別上的表現(xiàn)
4.常識推理上的表現(xiàn)
四、模型簡化測試
? ? ? Blation study就是為了研究模型中所提出的一些結構是否有效而設計的實驗凿将。對該模型推廣和工程化部署有極大作用校套。
1.預訓練效果測試
NO NSP: 用masked語言模型,沒用下一個句子預測方法(next sentence prediction)
LTR&NO NSP: 用從左到右(LTR)語言模型牧抵,沒有masked語言模型笛匙,沒用下一個句子預測方法
+BiLSTM: 加入雙向LSTM模型做預訓練。
2.模型結構的復雜度對結果的影響
L代表網絡層數(shù)犀变,H代表隱藏層數(shù)妹孙,A代表self attention head的數(shù)量。
3.預訓練中training step對結果的影響
4.基于特征的方法對結果的影響
五获枝、重要參考論文
? ? ? 如何你想了解2017年到2018年NLP領域重要發(fā)展趨勢蠢正,你可以參考以下幾篇論文。google直接就可以下載省店。
《Attention is all you need》2017年NLP領域最重要突破性論文之一嚣崭。
《Convolutional Sequence to Sequence Learning》2017年NLP領域最重要突破性論文之一。
《Deep contextualized word representations》2018年NAACL最佳論文懦傍,大名鼎鼎的ELMO有鹿。
《Improving Language Understanding by Generative PreTraining》,OpenAI GPT谎脯,Bert模型主要借鑒和比較對象葱跋。
《An efficient framework for learning sentence representations》句子向量表示方法。
《Semi-supervised sequence tagging with bidirectional language models》提出雙向語言模型源梭。
六娱俺、個人觀點
? ? ? 個人覺得如果你大概了解近兩年NLP的發(fā)展的話,BERT模型的突破在情理之中废麻,大多思想是借用前人的突破荠卷,比如雙向編碼器想法是借助這篇論文《Semi-supervised sequence tagging with bidirectional language models》。并且烛愧,他提出的一些新的思想油宜,是我們自然而然就會想到的。(十一在家的時候怜姿,在做問答模型的時候慎冤,我就在想,為什么不能把前一個句子和后一個句子作為標注數(shù)據(jù)沧卢,組成一個二分類模型來訓練呢蚁堤。)
? ? ? 整片論文最有價值的部分,我認為是預訓練的兩種方法但狭,不需要大量標注數(shù)據(jù)披诗,在工程實踐和一些NLP基礎訓練中具有很大借鑒意義撬即。
? ? ? 自然語言處理領域2017年和2018年的兩個大趨勢:一方面,模型從復雜回歸到簡單呈队。另一方面剥槐,遷移學習和半監(jiān)督學習大熱。這兩個趨勢是NLP從學術界向產業(yè)界過渡的苗頭宪摧,因為現(xiàn)實情況往往是才沧,拿不到大量高質量標注數(shù)據(jù),資源設備昂貴解決不了效率問題绍刮。