EasyNLP is a Comprehensive and Easy-to-use NLP Toolkit

EasyNLP主要特性如下:

三 EasyNLP框架特點

整體架構

如圖所示,EasyNLP架構主要有如下幾個核心模塊:

大模型知識蒸餾技術

隨著BERT等預訓練語言模型在各項任務上都取得SOTA效果,大規(guī)模預訓練模型已經成為 NLP學習管道中的重要組成部分,但是這類模型的參數量太大,而且訓練和推理速度慢,嚴重影響到了需要較高QPS的線上場景,部署成本非常高。EasyNLP框架集成了經典的數據增強和知識蒸餾算法,使得訓練出的小模型在相應任務行為上能夠逼近大模型的效果。

由于現有大部分的知識蒸餾工作都聚焦在同領域模型的蒸餾,而忽略了跨領域模型對目標蒸餾任務效果的提升。PAI團隊進一步提出了元知識蒸餾算法MetaKD(Meta Knowledge Distillation),將跨領域的可遷移知識學出,在蒸餾階段額外對可遷移的知識進行蒸餾。MetaKD算法使得學習到的學生模型在相應的領域的效果顯著提升,逼近教師模型的效果。這一算法的核心框架圖如下所示:

其中,MetaKD算法包括兩個階段。第一個階段為元教師模型學習(Meta-teacher Learning)階段,算法從多個領域的訓練數據協同學習元教師模型,它對每個領域的樣本都計算其典型得分(Prototype Score),使更具有跨領域典型性的樣本在學習階段有更大的權重。第二個階段為元蒸餾(Meta-distillation)階段,將元教師模型選擇性地蒸餾到特定領域的學習任務上。由于元教師模型可能無法做到在所有領域上都有精確的預測效果,我們額外引入了領域專業(yè)性權重(Domain-expertise Weight),使元教師模型只將置信度最高的知識遷移到學生模型,避免學生模型對元教師模型的過擬合。

下圖展示了MetaKD算法在MNLI的5個領域數據集的跨任務蒸餾效果。由結果可見,MetaKD蒸餾出的BERT-Small模型的和原始BERT模型相比,在保持模型精度值平均只下降1.5%的前提下參數減少了87%,大大減少了部署的壓力。

目前,MetaKD算法也已經集成到EasyNLP框架中開源。

知識蒸餾實踐詳見:https://github.com/alibaba/EasyNLP/tree/master/examples/knowledge_distillation

大模型小樣本學習技術

預訓練語言模型規(guī)模的擴大,使得這一類模型在自然語言理解等相關任務效果不斷提升。然而,這些模型的參數空間比較大,如果在下游任務上直接對這些模型進行微調,為了達到較好的模型泛化性,需要較多的訓練數據。在實際業(yè)務場景中,特別是垂直領域、特定行業(yè)中,訓練樣本數量不足的問題廣泛存在,極大地影響這些模型在下游任務的準確度。為了解決這一問題,EasyNLP框架集成了多種經典的小樣本學習算法,例如PET、P-Tuning等,實現基于預訓練語言模型的小樣本數據調優(yōu),從而解決大模型與小訓練集不相匹配的問題。

此外,PAI團隊結合經典小樣本學習算法和對比學習的思路,提出了一種不增添任何新的參數與任何人工設置模版與標簽詞的方案Contrastive Prompt Tuning (CP-Tuning)。這一算法的核心框架圖如下所示:

如上圖,CP-Tuning算法放棄了經典算法中以“[MASK]”字符對應預訓練模型MLM Head的預測輸出作為分類依據,而是參考對比學習的思路,將句子通過預訓練模型后,以“[MASK]”字符通過預訓練模型后的連續(xù)化表征作為features。在小樣本任務的訓練階段,訓練目標為最小化同類樣本features的組內距離,最大化非同類樣本的組間距離。在上圖中,[OMSK]即為我們所用于分類的“[MASK]”字符,其優(yōu)化的features表示為[EMB]。因此,CP-Tuning算法不需要定義分類的標簽詞。在輸入側,除了輸入文本和[OMSK],我們還加入了模版的字符[PRO]。與經典算法不同,由于CP-Tuning不需要學習模版和標簽詞之間的對應,我們直接將[PRO]初始化為任務無關的模版,例如“it is”。在模型訓練過程中,[PRO]的表示可以在反向傳播過程中自動更新。除此之外,CP-Tuning還引入了輸入文本的Mask,表示為[TMSK],用于同時優(yōu)化輔助的MLM任務,提升模型在小樣本學習場景下的泛化性。CP-Tuning算法的損失函數由兩部分組成:

如上所示,兩個部分分別為Pair-wise Cost-sensitive Contrastive Loss(PCCL)和輔助的MLM損失。我們在多個GLUE小樣本數據集上進行了驗證,其中訓練集中每個類別限制只有16個標注樣本。從下述結果可以看出,CP-Tuning的精確度超越了經典的小樣本學習算法,也比標準Fine-tuning算法的精確度高10%以上。

目前,除了我們自研的CP-Tuning算法之外,EasyNLP框架中集成了多種經典小樣本學習算法例如PET、P-tuning等。

小樣本學習實踐詳見:https://github.com/alibaba/EasyNLP/tree/master/examples/fewshot_learning

大模型落地實踐

下面我們給出一個示例,將一個大的預訓練模型(hfl/macbert-large-zh)在小樣本場景上落地,并且蒸餾到僅有1/100參數的小模型上。如下圖所示,一個大模型(3億參數)在一個小樣本場景上原始的Accuracy為83.8%,通過小樣本學習可以提升7%,達到90.6%。同時,如果用一個小模型(3百萬參數)跑這個場景的話,效果僅有54.4%,可以把效果提升到71%(提升約17%),inference的時間相比大模型提升了10倍,模型參數僅為原來的1/100。

  模型 參數量 Dev Set指標(Accuracy) Batch Inference時間
標準Finetune hfl/macbert-large-zh 325 Million 0.8375 0.54s
標準Finetune alibaba-pai/pai-bert-tiny-zh 3 Million 0.54375 0.06s
知識蒸餾Finetune alibaba-pai/pai-bert-tiny-zh 3 Million 0.7125 0.06s
小樣本Finetune hfl/macbert-large-zh 325 Million 0.90625 0.53s

代碼詳見:https://github.com/alibaba/EasyNLP/tree/master/examples/landing_large_ptms

應用案例

EasyNLP支撐了阿里巴巴集團內10個BU20多個業(yè)務,同時過PAI的產品例如PAI-DLC、PAI-DSW、PAI Designer和PAI-EAS,給集團用戶帶來高效的從訓練到落地的完整體驗,同時也支持了云上客戶自定定制化模型和解決業(yè)務問題的需求。針對公有云用戶,對于入門級用戶PAI-Designer組件來通過簡單調參就可以完成NLP模型訓練,對于高級開發(fā)者,可以使用AppZoo訓練NLP模型,或者使用預置的預訓練模型ModelZoo進行finetune,對于資深開發(fā)者,提供豐富的API接口,支持用戶使用框架進行定制化算法開發(fā),可以使用我們自帶的Trainer來提升訓練效率,也可以自定義新的Trainer。

下面列舉幾個典型的案例:

RoadMap

參考文獻

[1] [AAAI 22] DKPLM: Decomposable Knowledge-enhanced Pre-trained Language Model for Natural Language Understanding. https://arxiv.org/abs/2112.01047

[2] [ACL 2021] Meta-KD: A Meta Knowledge Distillation Framework for Language Model Compression across Domains. https://arxiv.org/abs/2012.01266

[3] [arXiv] Making Pre-trained Language Models End-to-end Few-shot Learners with Contrastive Prompt Tuning: https://arxiv.org/pdf/2204.00166

[4] [AAAI 22] From Dense to Sparse: Contrastive Pruning for Better Pre-trained Language Model Compression. https://arxiv.org/abs/2112.07198

[5] [EMNLP 2021] TransPrompt: Towards an Automatic Transferable Prompting Framework for Few-shot Text Classification. https://aclanthology.org/2021.emnlp-main.221/

[6] [CIKM 2021]. EasyTransfer — A Simple and Scalable Deep Transfer Learning Platform for NLP Applications. https://github.com/alibaba/EasyTransfer

開源項目地址:https://github.com/alibaba/EasyNLP

釘釘答疑交流群:33712734

想了解更多AI開源項目,請點擊:

https://www.aliyun.com/activity/bigdata/opensource_bigdata__ai

分享到

songjy

相關推薦