<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è)中那些趣事系列5:BERT實(shí)戰(zhàn)多標(biāo)簽標(biāo)注模型(附github源碼)

          共 4881字,需瀏覽 10分鐘

           ·

          2021-09-30 02:15

          摘要:之前廣告行業(yè)中那些趣事系列2BERT實(shí)戰(zhàn)NLP文本分類任務(wù)(github源碼),我們通過BERT構(gòu)建了二分類器。這里根據(jù)實(shí)際項(xiàng)目需要使用BERT構(gòu)建多標(biāo)簽標(biāo)注模型,可通過一個(gè)模型識(shí)別多類標(biāo)簽,極大提升建模效率。實(shí)際項(xiàng)目中會(huì)根據(jù)業(yè)務(wù)需要同時(shí)使用二分類器和多標(biāo)簽標(biāo)注模型完成文本識(shí)別任務(wù)。

           

          通過本篇學(xué)習(xí),小伙伴們可以使用BERT模型來解決多標(biāo)簽標(biāo)注任務(wù)。對數(shù)據(jù)挖掘、數(shù)據(jù)分析和自然語言處理感興趣的小伙伴可以多多關(guān)注。


           

           

          目錄


          01 多標(biāo)簽標(biāo)注任務(wù)背景介紹

          02 多標(biāo)簽標(biāo)注任務(wù)VS二分類任務(wù)

          03 BERT構(gòu)建多標(biāo)簽標(biāo)注模型實(shí)戰(zhàn)


           

          01 多標(biāo)簽標(biāo)注任務(wù)背景介紹


          之前講過BERT構(gòu)建二分類器的項(xiàng)目實(shí)戰(zhàn),我們需要識(shí)別用戶的搜索是否對傳奇游戲感興趣。實(shí)際項(xiàng)目中我們的興趣類目體系非常復(fù)雜,并且有嚴(yán)格的層級結(jié)構(gòu)。假如我們現(xiàn)在有個(gè)類目體系如下:

          • 游戲

            • 傳奇游戲

            • 消除游戲

            • 魔幻游戲

          • 汽車

          • 明星

          • 理財(cái)


          通常情況下用戶的搜索不僅僅對一個(gè)標(biāo)簽有興趣,可能同時(shí)對多個(gè)標(biāo)簽感興趣,或者都沒有興趣,僅僅是無效的搜索。這種情況下如果僅僅使用二分類器工作量異常繁多。如果我們有上百甚至上千個(gè)標(biāo)簽,我們是不是就需要上百甚至上千個(gè)二分類器?這顯然不合理。


          有些小伙伴說,那我們可以使用多分類器。對,使用多分類器可以很好的緩解這個(gè)問題。但是多分類器下一條數(shù)據(jù)只會(huì)劃分到一類,各類之間是互斥的,還是無法解決用戶的一條搜索可能對應(yīng)多個(gè)標(biāo)簽的情況。我們需要的是多標(biāo)簽標(biāo)注模型。

           

          小結(jié)下,在復(fù)雜的興趣類目體系中,用戶的搜索可能同時(shí)對應(yīng)多個(gè)興趣標(biāo)簽,所以我們需要構(gòu)建多標(biāo)簽標(biāo)注模型。

           

          02 多標(biāo)簽標(biāo)注任務(wù)VS多分類任務(wù)


          這里通過一張圖來很好的說明多分類任務(wù)和多標(biāo)簽標(biāo)注任務(wù)的區(qū)別和聯(lián)系。注意二分類任務(wù)僅僅是多分類任務(wù)的一個(gè)特例。

           

          圖1 多分類任務(wù)和多標(biāo)簽標(biāo)注任務(wù)

           

          多分類任務(wù)的特點(diǎn)是一條用戶query只能屬于一個(gè)標(biāo)簽。二分類是多分類任務(wù)的特例,如果我們現(xiàn)在用來識(shí)別用戶query是不是屬于傳奇標(biāo)簽,這就是一個(gè)最簡單的二分類任務(wù)。屬于和不屬于可以分別代表label1label2。

           

          多標(biāo)簽標(biāo)注模型的特點(diǎn)則是一條用戶query可能同時(shí)屬于多個(gè)標(biāo)簽,也可能一個(gè)都不屬于。舉個(gè)例子來說“成龍大哥代言的一刀傳奇好玩么”,可能既屬于上面興趣類目體系中的傳奇游戲標(biāo)簽,還屬于明星標(biāo)簽。

           

          最通俗的理解二分類器、多分類器和多標(biāo)簽標(biāo)注任務(wù)的方法可能是咱們小時(shí)候經(jīng)??荚嚨脑囶}了。二分類器可以對應(yīng)咱們做的判斷對錯(cuò)題,多分類器則對應(yīng)單項(xiàng)選擇題(候選項(xiàng)多于兩個(gè)),而多標(biāo)簽標(biāo)注模型則對應(yīng)多項(xiàng)選擇題,只是這里稍有區(qū)別是多標(biāo)簽標(biāo)注模型可以都不選。小伙伴可以通過這個(gè)例子明白其中的區(qū)別和聯(lián)系。


          使用多標(biāo)簽標(biāo)注模型的好處在于我們可以構(gòu)建一個(gè)模型識(shí)別多個(gè)標(biāo)簽,不僅可以充分的利用數(shù)據(jù)源,而且可以提升建模效率。缺點(diǎn)在于多標(biāo)簽標(biāo)注模型的各項(xiàng)評價(jià)指標(biāo)可能不如二分類器那么好。這個(gè)其實(shí)非常好理解,讓你去做判斷對錯(cuò)題和多項(xiàng)選擇題,一般人都是判斷題做的更好點(diǎn)吧。

           

          實(shí)際項(xiàng)目中一般是同時(shí)使用二分類器和多標(biāo)簽標(biāo)注模型。對于原始的用戶query可能通過一個(gè)三俗二分類器進(jìn)行過濾。將數(shù)據(jù)中的三俗數(shù)據(jù)過濾之后能很好的提升標(biāo)注數(shù)據(jù)質(zhì)量。三俗數(shù)據(jù)對于興趣建模本身沒有什么意義。如果不進(jìn)行過濾,會(huì)降低標(biāo)注數(shù)據(jù)的效率。舉例來說,現(xiàn)在需要標(biāo)注10W的用戶query數(shù)據(jù)。通常情況下10W數(shù)據(jù)里會(huì)摻雜20%以上的三俗數(shù)據(jù)。通過三俗二分類器我們可以提前將這2W多的數(shù)據(jù)過濾,然后只需要提交剩下的8W數(shù)據(jù)給標(biāo)注團(tuán)隊(duì),提升了20%以上的標(biāo)注效率。

           

          經(jīng)過三俗分類器之后會(huì)構(gòu)建一個(gè)基于一級類目的多標(biāo)簽標(biāo)注模型,將用戶query數(shù)據(jù)分類到各個(gè)一級類目中,最后就是根據(jù)不同的業(yè)務(wù)需求來進(jìn)行文本識(shí)別了。這里一個(gè)小訣竅是對于一些多標(biāo)簽標(biāo)注模型中某些效果不理想的標(biāo)簽,可以通過二分類器來重點(diǎn)識(shí)別,這樣既可以享受到多標(biāo)簽標(biāo)注模型的高效,還能享受到二分類器的高準(zhǔn)確率。具體項(xiàng)目使用策略如下圖所示:

          圖2 多標(biāo)簽標(biāo)注模型和二分類器結(jié)合使用


          03 BERT構(gòu)建多標(biāo)簽標(biāo)注模型實(shí)戰(zhàn)


          通過BERT模型構(gòu)建多標(biāo)簽標(biāo)注模型。下面是項(xiàng)目github鏈接:

          https://github.com/wilsonlsm006/NLP_BERT_multi_label。也歡迎小伙伴們多多fork,多多關(guān)注我。

           

          項(xiàng)目目錄結(jié)構(gòu)如下:

           

           

          和二分類模型類似,多標(biāo)簽標(biāo)注項(xiàng)目主要分成四個(gè)部分:


          1. bert預(yù)訓(xùn)練模型


          廣告系列的第二篇已經(jīng)講過BERT是預(yù)訓(xùn)練+fine-tuning的二階段模型。這里簡單的提一句,預(yù)訓(xùn)練過程就相當(dāng)于我們使用大量的文本訓(xùn)練語料,使得BERT模型學(xué)會(huì)很多語言學(xué)知識(shí)。而這部分就是學(xué)習(xí)語言學(xué)知識(shí)得到的相關(guān)參數(shù)。

           

          之前二分類器的模型使用的是基于google的TensorFlow框架的keras_bert完成的二分類器。后面因?yàn)閷?shí)際項(xiàng)目中慢慢往pytorch框架遷移,所以這個(gè)多標(biāo)簽標(biāo)注模型是基于pytorch框架的fast_ai開發(fā)完成的。fast_ai類似keras_bert,采用非常簡單的代碼結(jié)構(gòu)即可將BERT模型用于我們的NLP任務(wù)中。

           

          Pytorch將BERT模型進(jìn)行改造,各個(gè)版本的路徑及下載地址如下:

          • bert-base-uncased
            https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-uncased.tar.gz
          • bert-large-uncased

            https://s3.amazonaws.com/models.huggingface.co/bert/bert-large-uncased.tar.gz

          • bert-base-cased

            https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-cased.tar.gz

          • bert-base-multilingual

            https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-multilingual.tar.gz

          • bert-base-chinese

            https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-chinese.tar.gz

           


          因?yàn)閷?shí)際項(xiàng)目中我們主要識(shí)別中文,所以選擇最后一個(gè)“bert-base-chinese”作為我們的BERT預(yù)訓(xùn)練模型。下載完成解壓之后會(huì)得到bert_config.jsonpytorch_model.bin兩個(gè)文件,然后加上之前的詞表vocab.txt一起復(fù)制到我們的bert_model目錄下。該過程即可完成。


          2. 訓(xùn)練數(shù)據(jù)集

           

          之前說過二分類器模型的數(shù)據(jù)輸入格式是ocr,label樣式的。ocr是用戶query,也是我們需要識(shí)別的目標(biāo)。Label則代表這句query是不是對某個(gè)標(biāo)簽感興趣,取值為0或者1,1代表感興趣,0代表沒有興趣。

           

          多標(biāo)簽標(biāo)注任務(wù)中,數(shù)據(jù)輸入格式分成兩部分,第一部分也是ocr,是我們需要識(shí)別的用戶query。第二部分由多個(gè)字段組成,需要識(shí)別幾個(gè)標(biāo)簽,就有幾個(gè)字段。舉例來說,我們現(xiàn)在需要識(shí)別用戶的query是不是屬于五個(gè)標(biāo)簽。那么現(xiàn)在我們訓(xùn)練集的格式就是ocr,lable1,label2,label3,label4,label5。實(shí)際數(shù)據(jù)舉例如下:


          “成龍大哥代言的一刀傳奇好玩么?”,1,0,0,1,1。這條數(shù)據(jù)代表用戶這條query同時(shí)屬于標(biāo)簽1、標(biāo)簽4和標(biāo)簽5。

           

          訓(xùn)練數(shù)據(jù)集分成訓(xùn)練集和測試集。模型訓(xùn)練中我們會(huì)用訓(xùn)練集去完成模型訓(xùn)練。然后用這個(gè)訓(xùn)練好的模型去測試集上檢查模型的識(shí)別能力。這里訓(xùn)練集和測試集是完全互斥的,所以通過查看測試集的效果能一定程度上反映這個(gè)模型上線之后的識(shí)別能力。因?yàn)榫€上的數(shù)據(jù)和測試集的數(shù)據(jù)分布可能不同,所以測試集的效果可能和線上效果存在差異。

           

          3. 模型代碼及腳本


          之前二分類器項(xiàng)目中只有代碼。很多小伙伴私信反應(yīng)說在訓(xùn)練、驗(yàn)證和測試過程中可能還要修改相關(guān)參數(shù),比較麻煩。這里在多標(biāo)簽?zāi)P椭型ㄟ^shell腳本調(diào)用python代碼能很好的解決這個(gè)問題。只要數(shù)據(jù)輸入格式和上面講的相同。針對不同的任務(wù)只需要修改shell腳本即可完成模型。

           

          模型代碼主要分成三部分:

          multi_label_train.py:模型訓(xùn)練代碼。

          這里通過具體使用模型訓(xùn)練任務(wù)的腳本來詳細(xì)說明模型訓(xùn)練代碼的輸入和輸出。對應(yīng)train_multi_tag.sh腳本:


          輸入:模型訓(xùn)練需要使用BERT預(yù)訓(xùn)練模型和訓(xùn)練集,所以需要配置的參數(shù)有訓(xùn)練數(shù)據(jù)的路徑TRAIN_DATABERT預(yù)訓(xùn)練任務(wù)的路徑BERT_MODEL_NAME


          輸出:模型訓(xùn)練完成之后會(huì)得到一個(gè)xxxx.pth文件,所以需要配置的參數(shù)有MODEL_SAVE_PATH。因?yàn)樵谀P陀?xùn)練階段,可能多進(jìn)行多次訓(xùn)練,所以需要存儲(chǔ)不同的模型,這個(gè)通過配置LAB_FLAG來識(shí)別實(shí)驗(yàn)。

           

          具體模型訓(xùn)練只需要在服務(wù)器下直接通過sh train_multi_tag.sh開始訓(xùn)練任務(wù)。


          multi_label_validate.py:模型驗(yàn)證代碼。

          模型驗(yàn)證部分主要是為了驗(yàn)證模型的各項(xiàng)效果指標(biāo),我們主要使用準(zhǔn)確率、精度、召回率、f1得分等來評估模型。


          輸入:模型驗(yàn)證需要上一個(gè)訓(xùn)練過程得到的模型和測試集。對應(yīng)腳本中需要配置的參數(shù)有TEST_DATAMODEL_LOAD_PATH


          輸出:模型輸出為測試集上的預(yù)測數(shù)據(jù)以及模型的各項(xiàng)指標(biāo)數(shù)據(jù),對應(yīng)腳本中的TEST_PREDICT_DATAMODEL_EVALUATE_DATA。


          multi_label_predict.py:模型預(yù)測代碼。

          當(dāng)整個(gè)模型開發(fā)完成之后,會(huì)使用訓(xùn)練集和測試集同時(shí)作為新的訓(xùn)練集去訓(xùn)練模型,得到一個(gè)最終的模型。這個(gè)模型也是要拿到線上去跑的。


          輸入:這里需要最終得到的模型和線上需要真正預(yù)測的數(shù)據(jù),對應(yīng)腳本中的TEST_DATAMODEL_LOAD_PATH。


          輸出:預(yù)測輸出的部分就是線上真正預(yù)測的結(jié)果數(shù)據(jù),對應(yīng)腳本中TEST_PREDICT_DATA參數(shù)。


          4. 訓(xùn)練完成得到的模型


          這一部分就是上面訓(xùn)練過程的結(jié)果。我們需要使用這個(gè)訓(xùn)練好的模型去部署上線進(jìn)行線上數(shù)據(jù)的預(yù)測。這里和之前二分類器有所不同,二分類器得到的是一個(gè)XX.hdf5文件,而多標(biāo)簽標(biāo)注模型得到的是一個(gè)XX.pth文件。其他和之前講過的二分類器類似,這里不再贅述。

           

          總結(jié)下,我們通過項(xiàng)目實(shí)戰(zhàn)完成一個(gè)多標(biāo)簽標(biāo)注模型,從模型訓(xùn)練到模型驗(yàn)證,再到最后上線預(yù)測流程。模型通用性較強(qiáng),我們只需要更改腳本代碼即可迅速完成線上任務(wù)。

           

          總結(jié)和預(yù)告


          本篇從實(shí)際項(xiàng)目出發(fā)完成了一個(gè)多標(biāo)簽標(biāo)注模型。實(shí)際文本分類任務(wù)中,我們會(huì)根據(jù)具體業(yè)務(wù)需要同時(shí)使用多標(biāo)簽標(biāo)注模型和二分類器。由于NLP任務(wù)和傳統(tǒng)的機(jī)器學(xué)習(xí)任務(wù)有所不同,我們不需要做過多的特征工程,但是對于文本語料的預(yù)處理非常重要。除此之外,樣本的選擇也很有技巧性。這里需要不斷積累經(jīng)驗(yàn),才能根據(jù)實(shí)際的業(yè)務(wù)需要調(diào)整模型。

           


           

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


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

          手機(jī)掃一掃分享

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

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <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>
                  免费黄色小视频 | 国产精品在线看 | 天天操BB | 91视频免费网站 | 人气精品一区二区 |