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領域全面的瞭解有所幫助。框架

 

1、 整體介紹函數

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

2、 模型框架學習

BERT模型複用OpenAI發佈的《Improving Language Understanding with Unsupervised Learning》裏的框架,BERT總體模型結構與參數設置都儘可能作到OpenAI GPT同樣,只在預訓練方法作了改造。而GPT讓編碼器只學習每個token(單詞)與以前的相關內容。測試

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

總體分爲兩個過程: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

3、實驗效果

1.分類數據集上的表現

2.問答數據集上的表現

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

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

4.常識推理上的表現

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.基於特徵的方法對結果的影響

 

5、重要參考論文

如何你想了解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》提出雙向語言模型。

6、我的觀點

我的以爲若是你大概瞭解近兩年NLP的發展的話,BERT模型的突破在情理之中,大多思想是借用前人的突破,好比雙向編碼器想法是藉助這篇論文《Semi-supervised sequence tagging with bidirectional language models》。而且,他提出的一些新的思想,是咱們天然而然就會想到的。(十一在家的時候,在作問答模型的時候,我就在想,爲何不能把前一個句子和後一個句子做爲標註數據,組成一個二分類模型來訓練呢。)

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

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

相關文章
相關標籤/搜索