NLP突破性成果 BERT 模型詳細解讀 bert參數微調


https://zhuanlan.zhihu.com/p/46997268

NLP突破性成果 BERT 模型詳細解讀

章魚小丸子

章魚小丸子

不懂算法的產品經理不是好的程序員

​關注她

82 人贊了該文章

Google發布的論文《Pre-training of Deep Bidirectional Transformers for Language Understanding》,提到的BERT模型刷新了自然語言處理的11項記錄。最近在做NLP中問答相關的內容,抽空寫了篇論文詳細解讀。我發現大部分關注人工智能領域的朋友看不懂里面的主要結論,為了讓你快速了解論文精髓,這里特地為初學者和剛接觸深度學習的朋友們奉上技能點突破roadmap。如果別人寫的論文解讀你看不懂,代表你需要補充基礎知識啦。另外給了主要論文參考,在第五部分,希望對你在NLP領域全面的了解有所幫助。

 

一、 總體介紹

BERT模型實際上是一個語言編碼器,把輸入的句子或者段落轉化成特征向量(embedding)。論文中有兩大亮點:1.雙向編碼器。作者沿用了《attention is all you need》里提到的語言編碼器,並提出雙向的概念,利用masked語言模型實現雙向。2.作者提出了兩種預訓練的方法Masked語言模型和下一個句子的預測方法。作者認為現在很多語言模型低估了預訓練的力量。Masked語言模型比起預測下一個句子的語言模型,多了雙向的概念。

二、 模型框架

BERT模型復用OpenAI發布的《Improving Language Understanding with Unsupervised Learning》里的框架,BERT整體模型結構與參數設置都盡量做到OpenAI GPT一樣,只在預訓練方法做了改造。而GPT讓編碼器只學習每一個token(單詞)與之前的相關內容。

上圖是根據OpenAI GPT的架構圖做的改動,以便讀者更清楚的了解整個過程。

整體分為兩個過程:1.預訓練過程(左邊圖)預訓練過程是一個multi-task learning,遷移學習的任務,目的是學習輸入句子的向量。2微調過程(右邊圖)可基於少量監督學習樣本,加入Feedword神經網絡,實現目標。因為微調階段學習目標由簡單的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.預訓練階段參數

(1)256個句子作為一個batch,每個句子最多512個token。

(2)迭代100萬步。

(3)總共訓練樣本超過33億。

(4)迭代40個epochs。

(5)用adam學習率, 1 = 0.9, 2 = 0.999。

(6)學習率頭一萬步保持固定值,之后線性衰減。

(7)L2衰減,衰減參數為0.01。

(8)drop out設置為0.1。

(9)激活函數用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代表網絡層數,H代表隱藏層數,A代表self attention head的數量。)

5.微調階段

微調階段根據不同任務使用不同網絡模型。在微調階段,大部分模型的超參數跟預訓練時差不多,除了batchsize,學習率,epochs。

訓練參數:

Batch size: 16, 32

Learning rate (Adam): 5e-5, 3e-5, 2e-5

Number of epochs: 3, 4

三、實驗效果

1.分類數據集上的表現

2.問答數據集上的表現

在問答數據集SQuAD v1.1上的表現,TriviaQA是一個問答數據集。EM的基本算法是比較兩個字符串的重合率。F1是綜合衡量准確率和召回率的一個指標。

3.命名實體識別上的表現

4.常識推理上的表現

四、模型簡化測試

Blation study就是為了研究模型中所提出的一些結構是否有效而設計的實驗。對該模型推廣和工程化部署有極大作用。

1.預訓練效果測試

NO NSP: 用masked語言模型,沒用下一個句子預測方法(next sentence prediction)

LTR&NO NSP: 用從左到右(LTR)語言模型,沒有masked語言模型,沒用下一個句子預測方法

+BiLSTM: 加入雙向LSTM模型做預訓練。

 

2.模型結構的復雜度對結果的影響

L代表網絡層數,H代表隱藏層數,A代表self attention head的數量。

3.預訓練中training step對結果的影響

4.基於特征的方法對結果的影響

 

五、重要參考論文

如何你想了解2017年到2018年NLP領域重要發展趨勢,你可以參考以下幾篇論文。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的發展的話,BERT模型的突破在情理之中,大多思想是借用前人的突破,比如雙向編碼器想法是借助這篇論文《Semi-supervised sequence tagging with bidirectional language models》。並且,他提出的一些新的思想,是我們自然而然就會想到的。(十一在家的時候,在做問答模型的時候,我就在想,為什么不能把前一個句子和后一個句子作為標注數據,組成一個二分類模型來訓練呢。)

整片論文最有價值的部分,我認為是預訓練的兩種方法,不需要大量標注數據,在工程實踐和一些NLP基礎訓練中具有很大借鑒意義。

自然語言處理領域2017年和2018年的兩個大趨勢:一方面,模型從復雜回歸到簡單。另一方面,遷移學習和半監督學習大熱。這兩個趨勢是NLP從學術界向產業界過渡的苗頭,因為現實情況往往是,拿不到大量高質量標注數據,資源設備昂貴解決不了效率問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM