<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          廣告行業(yè)中那些趣事系列6:BERT線上化ALBERT優(yōu)化原理及項目實(shí)踐(附github)

          共 5212字,需瀏覽 11分鐘

           ·

          2021-09-30 02:16


          摘要:BERT因?yàn)樾Ч?span style="font-size: 15px;">適用范圍廣兩大優(yōu)點(diǎn),所以在NLP領(lǐng)域具有里程碑意義。實(shí)際項目中主要使用BERT來做文本分類任務(wù),其實(shí)就是給文本打標(biāo)簽。因?yàn)樵鷳B(tài)BERT預(yù)訓(xùn)練模型動輒幾百甚至上千兆的大小,模型訓(xùn)練速度非常慢,對于BERT模型線上化非常不友好。本篇研究目前比較火的BERT最新派生產(chǎn)品ALBERT來完成BERT線上化服務(wù)。ALBERT使用參數(shù)減少技術(shù)來降低內(nèi)存消耗從而最終達(dá)到提高BERT的訓(xùn)練速度,并且在主要基準(zhǔn)測試中均名列前茅,可謂跑的快,還跑的好。希望對需要將BERT線上化感興趣的小伙伴有些許幫助。

           

           

          目錄

          01 項目背景介紹

          02 從BERT到ALBERT

          03 萬里第一步:先跑通模型

          04 多分類任務(wù)實(shí)踐

          總結(jié)

           

           

           

          01 項目背景介紹


          原生態(tài)BERT預(yù)訓(xùn)練模型動輒幾百兆甚至上千兆的大小,訓(xùn)練速度非常慢,對于模型線上化非常不友好。為了實(shí)現(xiàn)BERT模型線上化問題,其實(shí)就是如何又快有好的訓(xùn)練模型,經(jīng)調(diào)研目前超火的BERT最新派生產(chǎn)品ALBERT項目能很好的解決上述問題。

           

          ALBERT是由論文《ALBERT: A Lite BERT For Self-Supervised Learningof Language Representations》提出來的。通常情況下增加預(yù)訓(xùn)練模型大小可以提升模型在下游任務(wù)中的性能,但是因?yàn)椤?/span>GPU/TPU內(nèi)存的限制、更長的訓(xùn)練時間以及意想不到的模型退化”等問題,作者提出了ALBERT模型。


          論文下載地址:

          https://arxiv.org/pdf/1909.11942.pdf

           

          通俗的理解ALBERT就是參數(shù)數(shù)量更少的輕量級BERT模型。ALBERTBERT最新派生產(chǎn)品,雖然輕量,但是效果并沒打折,在主要基準(zhǔn)測試中均名列前茅。

           

          02 BERTALBERT

           

          1. ALBERT出現(xiàn)背景


          自從深度學(xué)習(xí)引爆計算機(jī)視覺領(lǐng)域之后,提升模型性能最簡單也最有效的一個方法就是增加網(wǎng)絡(luò)深度。下圖中拿圖片分類任務(wù)舉例,可以看出隨著網(wǎng)絡(luò)層數(shù)不斷增加,模型的效果也會有很大提升:


          1 網(wǎng)絡(luò)層數(shù)增加模型效果提升

           

          同樣的情況也出現(xiàn)在BERT上,隨著網(wǎng)絡(luò)變深變寬使得模型的效果得到提升:


          2 BERT隨著網(wǎng)絡(luò)變深變寬模型效果得到提升

           

          但是網(wǎng)絡(luò)變深變寬帶來一個顯著的問題:參數(shù)爆炸。這里看下不同規(guī)模參數(shù)的BERT模型參數(shù)量的變“胖”之路:


          3 BERT參數(shù)爆炸問題

           

          如何做到,讓BERT不那么“胖,但是效果依舊好是目前學(xué)術(shù)界的研究重點(diǎn),也是如何將BERT線上化的重點(diǎn)工作之一。這也是ALBERT要做的事情。

           

          2. BERT在哪里


          想讓BERT變瘦,先要知道“肉”長在哪里。BERT使用Transformer作為特征抽取器,這是BERT參數(shù)的來源。之前廣告行業(yè)中那些趣事系列4:詳解從配角到C位出道的Transformer很深入的剖析了Transformer,有興趣的小伙伴可以回頭看看。


          Transformer的參數(shù)來源主要有大塊:第一塊是token embedding映射模塊,參數(shù)量占比為20%,第二塊是attention層和前向反饋層FFN,參數(shù)量占比為80%。


          4 Transformer結(jié)構(gòu)圖和BERT參數(shù)來源

           

          3. ALBERT優(yōu)化策略


          策略一、對embedding參數(shù)因式分解(Factorized embedding parameterization)


          BERT將詞的one-hot向量映射到高維空間,參數(shù)量是O(VXH)ALBERT則采用因式分解的方式先將詞的one-hot向量映射到低維空間(大小為E),然后再映射回一個高維的空間(大小為H),這樣使用的參數(shù)僅僅是O(VXE+EXH),如果E<<H的時候參數(shù)量會減少很多。這里就一定程度上減少了上面說的BERT第一部分參數(shù)token embedding的部分。

           

          可以通過因式分解減少參數(shù)量的原因是token embedding是上下文獨(dú)立的,通過one-hot向量轉(zhuǎn)化成dense向量。而第二部分的attentionFFN作為隱藏層是上下文依賴的,包含更多信息。所以通過一個小于HE做中介將詞的one-hot向量先經(jīng)過一個低維的embedding矩陣,然后再映射回高維的embedding矩陣是可行的。下圖中紅色方框顯示了因式分解部分:

           

          5 因式分解降低參數(shù)量

           
          查看token embedding因式分解效果情況:總體來看降低了17%的模型參數(shù),但是模型效果僅僅降低了不到1%。

           

          6 因式分解降低參數(shù)量效果


          策略二、共享層與層之間的參數(shù)(Cross-layer parameter sharing)


          通過對Transformer各層參數(shù)可視化分析發(fā)現(xiàn)各層參數(shù)類似,都是在[CLS]token和對角線上分配更多的注意力,所以可以使用跨層的參數(shù)共享方案。

           

          通常來說,跨層的參數(shù)共享對應(yīng)Transformer編碼器中的結(jié)構(gòu)有兩種方案:一種是attention模塊的參數(shù)共享,另一種是前饋神經(jīng)網(wǎng)絡(luò)層FFN的參數(shù)共享。具體的效果如下圖所示:

          7 使用共享參數(shù)對模型參數(shù)量和效果的影響


          當(dāng)映射到低維空間E=768時,對比不共享參數(shù)和共享FFN層的參數(shù)可以看出,參數(shù)減少了近50%,這也是導(dǎo)致模型效果下降的主要原因。而共享attention層的參數(shù)則對模型效果影響較小。


          策略三、構(gòu)建自學(xué)習(xí)任務(wù)-句子連貫性預(yù)測


          通過改造NSP(Next Sentence Prediction)任務(wù),增強(qiáng)網(wǎng)絡(luò)學(xué)習(xí)句子的連續(xù)型來提高預(yù)訓(xùn)練任務(wù)。

           

          廣告行業(yè)中那些趣事系列3NLP中的巨星BERT重點(diǎn)講解了BERT模型,其中提到BERT是近幾年NLP領(lǐng)域杰出成果的集大成者,本身的創(chuàng)新主要是隨機(jī)屏蔽的語言模型Masked LM和下一句預(yù)測Next Sentence Prediction。有興趣的小伙伴可以倒回去再好好看下。

           

          NSP任務(wù)本身是一個二分類任務(wù),目的是預(yù)測兩句話是否是連續(xù)的語句。NSP實(shí)際包含兩個子任務(wù),分別是主題預(yù)測和關(guān)系一致性預(yù)測。NSP任務(wù)選擇同一文檔中連續(xù)的兩個句子作為正樣本,選擇不同文檔的句子作為負(fù)樣本。因?yàn)閬碜圆煌奈臋n,差異性可能非常大。為了提升模型預(yù)測連續(xù)型句子的能力,ALBERT提出了新的任務(wù)SOP(SenteceOrder Prediction),正樣本獲取方式和NSP相同,負(fù)樣本則將正樣本的語句順序顛倒。


          SOPNSP效果展示如下圖所示:

           

          8 SOPNSP效果展示


          從圖中可以看出NSP任務(wù)無法預(yù)測SOP類任務(wù),但是SOP可以預(yù)測NSP任務(wù)。整體來看,SOP任務(wù)的模型效果也優(yōu)于NSP任務(wù)。

           

          策略四、去掉dropout


          dropout主要是為了防止過擬合,但實(shí)際MLM一般不容易過擬合。去掉dropout還可以較少中間變量從而有效提升模型訓(xùn)練過程中內(nèi)存的利用率。

           

          9 dropout效果影響


          其他策略:網(wǎng)絡(luò)寬度和深度對模型效果的影響


          1. 網(wǎng)絡(luò)深度是否越深越好
          對比ALBERT在不同深度下的效果可以發(fā)現(xiàn):隨著層數(shù)加深,不同NLP任務(wù)的模型效果是有一定提升。但是這種情況并不是絕對的,有些任務(wù)效果反而會下降。

           

          10 網(wǎng)絡(luò)深度的影響


          2. 網(wǎng)絡(luò)寬度是否越寬越好

          對比深度為3ALBERT-large模型下不同網(wǎng)絡(luò)寬度的模型效果情況可以發(fā)現(xiàn):模型寬度的影響和深度類似,隨著網(wǎng)絡(luò)寬度增加,不同NLP任務(wù)的模型效果是有一定提升。某些任務(wù)也會存在效果下降的情況。

          11 網(wǎng)絡(luò)寬度的影響

           

          總體來看,ALBERT的實(shí)質(zhì)是使用參數(shù)減少技術(shù)來降低內(nèi)存消耗從而最終達(dá)到提高BERT的訓(xùn)練速度,主要優(yōu)化了以下幾個方面:

          • 通過因式分解和共享層與層之間的參數(shù)減少了模型參數(shù)量,提升了參數(shù)效率;

          • 通過SOP替代NSP,增強(qiáng)了網(wǎng)絡(luò)學(xué)習(xí)句子連續(xù)性的能力,提升了自監(jiān)督學(xué)習(xí)任務(wù)的能力;

          • 通過去掉dropout可以節(jié)省很多臨時變量,有效提升模型訓(xùn)練過程中內(nèi)存的利用率,提升了模型的效率,減少了訓(xùn)練數(shù)據(jù)的規(guī)模。

           

           

          03 萬里第一步:先跑通模型


          因?yàn)閷?shí)際項目中主要是識別中文,所以主要是使用ALBERT中文版本ALBERT_zh,項目的github地址:https://github.com/brightmart/albert_zh


          記得之前看過一個圖片很有意思,能很好的描述此刻我的心情:

           

          12 第一步先跑通模型

           

          對于我這種“拿來主義者”來說,再牛逼的模型第一步永遠(yuǎn)都是先跑通它,至于優(yōu)化的先放一放。跑通它不僅能提升自信心,最實(shí)際的作用就是能快速實(shí)現(xiàn)項目上線。因?yàn)槲倚枰瓿晌谋痉诸惾蝿?wù),所以通過上面的github地址下載項目后,在集群上跳轉(zhuǎn)到albert_zh目錄下,執(zhí)行sh run_classifier_lcqmc.sh命令即可跑起來。因?yàn)轫椖繘]有句子分類任務(wù),只有個類似的句子關(guān)系判斷任務(wù),所以先跑通這個任務(wù),后期再根據(jù)這個任務(wù)的代碼來改就行了。

           

          run_classifier_lcqmc.sh腳本中總體分成兩大塊,第一塊是模型運(yùn)行的準(zhǔn)備工作,第二塊就是模型運(yùn)行。下面是模型的第一塊,其中涉及獲取數(shù)據(jù)、預(yù)訓(xùn)練模型、設(shè)備以及模型相關(guān)的參數(shù)等等。

          13 模型運(yùn)行準(zhǔn)備工作

           

          第二塊就是負(fù)責(zé)模型運(yùn)行,主要就是python運(yùn)行程序的指令以及需要的相關(guān)參數(shù)配置。

           

          14 模型運(yùn)行

           

          總結(jié)下,這里重點(diǎn)講了如何運(yùn)行成功ALBERT_zh本身提供的一個句子關(guān)系判斷任務(wù)。這個demo是和我們實(shí)際項目中文本分類任務(wù)很相似的任務(wù),下面就是通過改造這個腳本以及執(zhí)行的代碼來完成我們的實(shí)際項目文本分類。

           

          04 多分類任務(wù)實(shí)踐


          項目改造的github地址如下:

          https://github.com/wilsonlsm006/albert_zh。


          將原項目fork下來,這里我增加了兩個文件run_classifier_multiclass.shrun_classifier_multiclass.py。這是用來執(zhí)行文本分類的任務(wù)腳本以及代碼。改造的原理其實(shí)也比較簡單,這里大致講解下。

           

          項目原來提供的句子關(guān)系判斷任務(wù)的數(shù)據(jù)格式是:id,text_a,text_b,label,任務(wù)其實(shí)就是來判斷兩句話到底有沒有關(guān)系。正樣本舉例如下:

          text_a:成龍大哥代言的一刀傳奇好玩么?

          text_b:成龍大哥還代言過其他傳奇么?

          label:1


          負(fù)樣本則可能是這樣的:

          text_a:成龍大哥代言的一刀傳奇好玩么?

          text_b:成都市內(nèi)哪個景點(diǎn)最好玩?

          label:0


          通過上面兩個正負(fù)樣本的例子大家應(yīng)該能了解什么是句子關(guān)系判斷任務(wù),其實(shí)就是有監(jiān)督學(xué)習(xí)的分類任務(wù)。我們實(shí)際項目主要通過BERT來做文本分類,識別一句話屬于哪個標(biāo)簽,對應(yīng)到上面的任務(wù)其實(shí)就是只有text_a,label。因?yàn)槿蝿?wù)類型一致,所以修改代碼的策略就是重點(diǎn)分析有text_b的代碼的部分。具體腳本和代碼修改就是上面說的兩個文件,有需要的小伙伴自取。這里需要注意的是原來的數(shù)據(jù)文件是tsv格式,我這邊是csv格式,數(shù)據(jù)輸入有點(diǎn)點(diǎn)不同,模型其他的都沒動。

           


          總結(jié)


          實(shí)際項目中需要將BERT線上化需要使模型又快又好的訓(xùn)練,所以經(jīng)過調(diào)研使用目前BERT最新的派生產(chǎn)品ALBERTALBERT通過因式分解和共享層與層之間的參數(shù)減少了模型參數(shù)量,提升了參數(shù)效率;通過SOP替代NOP,增強(qiáng)了網(wǎng)絡(luò)學(xué)習(xí)句子的連續(xù)性的能力,提升了自監(jiān)督學(xué)習(xí)任務(wù)的能力;通過去掉dropout可以節(jié)省很多臨時變量,有效提升模型訓(xùn)練過程中內(nèi)存的利用率,提升了模型的效率,減少了訓(xùn)練數(shù)據(jù)的規(guī)模。最后將項目中的句子關(guān)系判斷任務(wù)改造成我們實(shí)際項目中的文本分類任務(wù)用于實(shí)際業(yè)務(wù)需求??梢哉f是有理論,幫助小伙伴們理解ALBERT為啥訓(xùn)練快了,效果還不錯。也有實(shí)踐,如果需要使用ALBERT做文本分類任務(wù),直接用我改造好的腳本和代碼跑起來就行。

           

           

          喜歡本類型文章的小伙伴可以關(guān)注我的微信公眾號:數(shù)據(jù)拾光者。有任何干貨我會首先發(fā)布在微信公眾號,還會同步在知乎、頭條、簡書、csdn等平臺。也歡迎小伙伴多交流。如果有問題,可以在微信公眾號隨時Q我哈。


          瀏覽 33
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  好吊操在线视频 | 国产成人一区二区 | 美女黄在线看免费日本 | 正在播放学生妹一级 | 日逼a|