1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【NLP】如何提升BERT在下游任務(wù)中的性能

        共 6003字,需瀏覽 13分鐘

         ·

        2021-03-14 11:10

        作者 | 許明     

        整理 | NewBeeNLP公眾號(hào)


        隨著Transformer 在NLP中的表現(xiàn),Bert已經(jīng)成為主流模型,然而大家在下游任務(wù)中使用時(shí),是不是也會(huì)發(fā)現(xiàn)模型的性能時(shí)好時(shí)壞,甚至相同參數(shù)切換一下隨機(jī)種子結(jié)果都不一樣,又或者自己不管如何調(diào),模型總達(dá)不到想象中的那么好,那如何才能讓Bert在下游任務(wù)中表現(xiàn)更好更穩(wěn)呢?本文以文本分類為例,介紹幾種能幫你提高下游任務(wù)性能的方法。

        Further Pre-training

        最穩(wěn)定也是最常用的提升下游任務(wù)性能的手段就是繼續(xù)進(jìn)行預(yù)訓(xùn)練了。繼續(xù)預(yù)訓(xùn)練目前有以下幾種模式。

        二階段

        首先回顧一下,Bert 是如何使用的呢?

        我們假設(shè)通用泛化語(yǔ)料為 ,下游任務(wù)相關(guān)的數(shù)據(jù)為 , Bert 即在通用語(yǔ)料 上訓(xùn)練一個(gè)通用的Language Model, 然后利用這個(gè)模型學(xué)到的通用知識(shí)來(lái)做下游任務(wù),也就是在下游任務(wù)上做fine-tune,這就是二階段模式。

        大多數(shù)情況下我們也都是這么使用的:下載一個(gè)預(yù)訓(xùn)練模型,然后在自己的數(shù)據(jù)上直接fine-tune。

        三階段

        在論文Universal Language Model Fine-tuning for Text Classification[1]中,作者提出了一個(gè)通用的范式ULMFiT:

        1. 在大量的通用語(yǔ)料上訓(xùn)練一個(gè)LM(Pretrain);
        2. 在任務(wù)相關(guān)的小數(shù)據(jù)上繼續(xù)訓(xùn)練LM(Domain transfer);
        3. 在任務(wù)相關(guān)的小數(shù)據(jù)上做具體任務(wù)(Fine-tune)。

        那我們?cè)谑褂肂ert 時(shí)能不能也按這種范式,進(jìn)行三階段的fine-tune 從而提高性能呢?答案是:能!

        比如邱錫鵬老師的論文How to Fine-Tune BERT for Text Classification?[2]和Don't Stop Pretraining: Adapt Language Models to Domains and Tasks[3]中就驗(yàn)證了,在任務(wù)數(shù)據(jù) 繼續(xù)進(jìn)行pretraining 任務(wù),可以提高模型的性能。

        那如果我們除了任務(wù)數(shù)據(jù)沒(méi)有別的數(shù)據(jù)時(shí),怎么辦呢?簡(jiǎn)單,任務(wù)數(shù)據(jù)肯定是相同領(lǐng)域的,此時(shí)直接將任務(wù)數(shù)據(jù)看作相同領(lǐng)域數(shù)據(jù)即可。所以,在進(jìn)行下游任務(wù)之前,不妨先在任務(wù)數(shù)據(jù)上繼續(xù)進(jìn)行pre-training 任務(wù)繼續(xù)訓(xùn)練LM ,之后再此基礎(chǔ)上進(jìn)行fine-tune。

        四階段

        我們?cè)趯?shí)際工作上,任務(wù)相關(guān)的label data 較難獲得,而unlabeled data 卻非常多,那如何合理利用這部分?jǐn)?shù)據(jù),是不是也能提高模型在下游的性能呢?答案是:也能!

        1. 在大量通用語(yǔ)料上訓(xùn)練一個(gè)LM(Pretrain);
        2. 在相同領(lǐng)域 上繼續(xù)訓(xùn)練LM(Domain transfer);
        3. 在任務(wù)相關(guān)的小數(shù)據(jù)上繼續(xù)訓(xùn)練LM(Task transfer);
        4. 在任務(wù)相關(guān)數(shù)據(jù)上做具體任務(wù)(Fine-tune)。

        而且上述兩篇論文中也給出了結(jié)論:先Domain transfer 再進(jìn)行Task transfer 最后Fine-tune 性能是最好的。

        如何further pre-training

        how to mask

        首先,在further pre-training時(shí),我們應(yīng)該如何進(jìn)行mask 呢?不同的mask 方案是不是能起到更好的效果呢?

        在Roberta 中提出,動(dòng)態(tài)mask 方案比固定mask 方案效果更好。此外,在做Task transfer 時(shí),由于數(shù)據(jù)通常較小,固定的mask 方案通常也容易過(guò)擬合,所以further pre-training 時(shí),動(dòng)態(tài)隨機(jī)mask 方案通常比固定mask 效果更好。

        而ERNIE 和 SpanBert 中都給出了結(jié)論,更有針對(duì)性的mask 方案可以提升下游任務(wù)的性能,那future pre-training 時(shí)是否有什么方案能更有針對(duì)性的mask 呢?

        劉知遠(yuǎn)老師的論文Train No Evil: Selective Masking for Task-Guided Pre-Training[4]就提出了一種更有針對(duì)性的mask 方案Selective Mask,進(jìn)行further pre-training 方案,該方案的整體思路是:

        1. 上訓(xùn)練一個(gè)下游任務(wù)模型 ;
        2. 利用 判斷token 是否是下游任務(wù)中的重要token,具體計(jì)算公式為:, 其中 為完整句子(序列), 為一個(gè)初始化為空的buffer,每次將句子中的token 往buffer中添加,如果加入的token 對(duì)當(dāng)前任務(wù)的表現(xiàn)與完整句子在當(dāng)前任務(wù)的表現(xiàn)差距小于閾值,則認(rèn)為該token 為重要token,并從buffer 中剔除;
        3. 利用上一步中得到的token label,訓(xùn)練一個(gè)二分類模型 ,來(lái)判斷句子中的token 是否為重要token;
        4. 利用 ,在domain 數(shù)據(jù)上進(jìn)行預(yù)測(cè),根據(jù)預(yù)測(cè)結(jié)果進(jìn)行mask ;
        5. 進(jìn)行Domain transfer pre-training;
        6. 在下游任務(wù)進(jìn)行Fine-tuning。

        上述方案驗(yàn)證了更有針對(duì)性的mask 重要的token,下游任務(wù)中能得到不錯(cuò)的提升。綜合下來(lái),Selective Mask > Dynamic Mask > Static Mask

        雖然selective mask 有提升,但是論文給出的思路太過(guò)繁瑣了,本質(zhì)上是判斷token 在下游任務(wù)上的影響,所以這里給出一個(gè)筆者自己腦洞的一個(gè)方案:「通過(guò) 在unlabeled 的Domain data 上直接預(yù)測(cè),然后通過(guò)不同token 下結(jié)果的熵的波動(dòng)來(lái)確定token 對(duì)下游任務(wù)的影響」。這個(gè)方案我沒(méi)有做過(guò)實(shí)驗(yàn),有興趣的可以試試。

        when to stop

        在further pretraining 時(shí),該何時(shí)停止呢?是否訓(xùn)練的越久下游任務(wù)就提升的越多呢?答案是否定的。在進(jìn)行Task transfer 時(shí),應(yīng)該訓(xùn)練多少步,論文How to Fine-Tune BERT for Text Classification?[5]進(jìn)行了實(shí)驗(yàn),最后得出的結(jié)論是100k步左右,下游任務(wù)上提升是最高的,這也與我自己的實(shí)驗(yàn)基本吻合,訓(xùn)練過(guò)多就會(huì)過(guò)擬合,導(dǎo)致下游任務(wù)上提升小甚至降低。

        此外,由于下游任務(wù)數(shù)據(jù)量的不同,進(jìn)行多少步結(jié)果是最優(yōu)的也許需要實(shí)驗(yàn)測(cè)試。這里給出一個(gè)更快捷穩(wěn)妥的方案:借鑒PET本質(zhì)上也是在訓(xùn)練MLM 任務(wù),我們可以先利用利用PET做fine-tuning,然后將最優(yōu)模型作為預(yù)訓(xùn)練后的模型來(lái)進(jìn)行分類任務(wù)fine-tuning,這種方案我實(shí)驗(yàn)后的結(jié)論是與直接進(jìn)行Task transfer性能提升上相差不大。不了解PET的可以查看我之前博文PET-文本分類的又一種妙解[6].

        how to fine-tuning

        不同的fine-tuning 方法也是影響下游任務(wù)性能的關(guān)鍵因素。

        optimizer

        關(guān)于優(yōu)化方案上,Bert 的論文中建議使用與bert 預(yù)訓(xùn)練時(shí)一致的方案進(jìn)行fine-tuning,即使用weighted decay修正后的Adam,并使用warmup策略 搭配線性衰減的學(xué)習(xí)率。不熟悉的同學(xué)可以查看我之前的博文optimizer of bert[7]

        learning rate

        不合適的learning rate可能會(huì)導(dǎo)致災(zāi)難性遺忘,通常learning rate 在 之間,更大的learning rate可能就會(huì)發(fā)生災(zāi)難性遺忘,不利于優(yōu)化。

        此外,對(duì)transformer 逐層降低學(xué)習(xí)率也能降低發(fā)生災(zāi)難性遺忘的同時(shí)提升一些性能。

        multi-task

        Bert在預(yù)訓(xùn)練時(shí),使用了兩個(gè)task:NSP 和 MLM,那在下游任務(wù)中,增加一個(gè)輔助的任務(wù)是否能帶來(lái)提升呢?答案是否定的。如我之前嘗試過(guò)在分類任務(wù)的同時(shí),增加一個(gè)相似性任務(wù):讓樣本與label desc的得分高于樣本與其他樣本的得分,但是最終性能并沒(méi)有得到提升。具體的實(shí)驗(yàn)過(guò)程請(qǐng)看博文模型增強(qiáng)之從label下手[8]。

        此外,論文How to Fine-Tune BERT for Text Classification?[9]也任務(wù)multi-task不能帶來(lái)下游任務(wù)的提升。

        which layer

        Bert的結(jié)構(gòu)上是一個(gè)12層的transformer,在做文本分類時(shí),通常我們是直接使用最后一層的[CLS]來(lái)做fine-tuning,這樣是最優(yōu)的嗎?有沒(méi)有更好的方案?

        論文How to Fine-Tune BERT for Text Classification?[10]中針對(duì)這個(gè)問(wèn)題也做了實(shí)驗(yàn),對(duì)比了不同的layer不同的抽取策略,最終結(jié)論是所有層拼接效果最好,但是與直接使用最后一層差距不大。

        而論文Hate Speech Detection and Racial Bias Mitigation in Social Media based on BERT model[11]中,作者通過(guò)組合多種粒度的語(yǔ)義信息,即將12層的[CLS]拼接后,送人CNN,在Hate Speech Detection 中能帶來(lái)8個(gè)點(diǎn)的提升!cnn.png)

        所以在fine-tuning時(shí),也可以想一想到底是哪種粒度的語(yǔ)義信息對(duì)任務(wù)更重要。

        Self-Knowledge Distillation

        self-knowledge distillation(自蒸餾)也是一種常用的提升下游任務(wù)的手段。做法是先在Task data上fine-tuning 一個(gè)模型,然后通過(guò)模型得到Task data 的soft labels,然后使用soft labels 代替hard label 進(jìn)行fine-tuning。更多細(xì)節(jié)可以查看之前的博文Knowledge Distillation之知識(shí)遷移[12]

        知識(shí)注入

        通過(guò)注入外部知識(shí)到bert中也能提升Bert的性能,常用的方式主要有兩種:

        1. 在bert embedding 層注入:通過(guò)將外部Embedding 與Bert token-embedding 拼接(相加)進(jìn)行融合,然后進(jìn)行transformer一起作用下游;
        2. 在transformer的最后一層,拼接外部embedding,然后一起作用下游。

        如Enriching BERT with Knowledge Graph Embeddings for Document Classification[13]中,通過(guò)在 transformer的最后一層中拼接其他信息,提高模型的性能。

        數(shù)據(jù)增強(qiáng)

        NLP中數(shù)據(jù)增強(qiáng)主要有兩種方式:一種是保持語(yǔ)義的數(shù)據(jù)增強(qiáng),一種是可能破壞語(yǔ)義的局部擾動(dòng)增強(qiáng)。

        保持語(yǔ)義通常采用回譯法,局部擾動(dòng)的通常使用EDA,更多細(xì)節(jié)可以查看之前博文NLP中的數(shù)據(jù)增強(qiáng)[14]

        一起交流

        想和你一起學(xué)習(xí)進(jìn)步!『NewBeeNLP』目前已經(jīng)建立了多個(gè)不同方向交流群(機(jī)器學(xué)習(xí) / 深度學(xué)習(xí) / 自然語(yǔ)言處理 / 搜索推薦 / 圖網(wǎng)絡(luò) / 面試交流 / 等),名額有限,趕緊添加下方微信加入一起討論交流吧?。ㄗ⒁庖欢ㄒ?strong>備注信息才能通過(guò))

        本文參考資料

        [1]

        Universal Language Model Fine-tuning for Text Classification: http://arxiv.org/abs/1801.06146

        [2]

        How to Fine-Tune BERT for Text Classification?: http://arxiv.org/abs/1905.05583

        [3]

        Don't Stop Pretraining: Adapt Language Models to Domains and Tasks: https://arxiv.org/abs/2004.10964

        [4]

        Train No Evil: Selective Masking for Task-Guided Pre-Training: http://arxiv.org/abs/2004.09733

        [5]

        How to Fine-Tune BERT for Text Classification?: http://arxiv.org/abs/1905.05583

        [6]

        PET-文本分類的又一種妙解: https://xv44586.github.io/2020/10/25/pet/

        [7]

        optimizer of bert: https://xv44586.github.io/2020/08/01/optimizer-in-bert/

        [8]

        模型增強(qiáng)之從label下手: https://xv44586.github.io/2020/09/13/classification-label-augment/

        [9]

        How to Fine-Tune BERT for Text Classification?: http://arxiv.org/abs/1905.05583

        [10]

        How to Fine-Tune BERT for Text Classification?: http://arxiv.org/abs/1905.05583

        [11]

        Hate Speech Detection and Racial Bias Mitigation in Social Media based on BERT model: http://arxiv.org/abs/2008.06460

        [12]

        Knowledge Distillation之知識(shí)遷移: https://xv44586.github.io/2020/08/31/bert-01/

        [13]

        Enriching BERT with Knowledge Graph Embeddings for Document Classification: http://arxiv.org/abs/1909.08402

        [14]

        NLP中的數(shù)據(jù)增強(qiáng): https://xv44586.github.io/2020/11/10/eda/


        - END -

        往期精彩回顧





        本站qq群851320808,加入微信群請(qǐng)掃碼:

        瀏覽 57
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            精品综合 | 亚洲成人电影AV | 一本大道久久精品懂色AⅤ | 波多野结衣国产精品 | 天堂va亚欧美va亚洲va小说 | 自拍偷拍情色 | 日本精品a秘在线观看 | 美女露隐私网站 | 视频福利乱色 | 天天日天天射天天 |