作者 | 臨在、岑鳴、熊兮
一、導讀
隨著BERT、Megatron、GPT-3等預訓練模型在NLP領域取得矚目的成果,越來越多團隊投身到超大規模訓練中,這使得訓練模型的規模從億級別發展到了千億甚至萬億的規模。然而,這類超大規模的模型運用于實際場景中仍然有一些挑戰。首先,模型參數量過大使得訓練和推理速度過慢且部署成本極高;其次在很多實際場景中數據量不足的問題仍然制約著大模型在小樣本場景中的應用,提高預訓練模型在小樣本場景的泛化性依然存在挑戰。為了應對以上問題,PAI團隊推出了EasyNLP中文NLP算法框架,助力大模型快速且高效的落地。
EasyNLP背后的技術框架如何設計?未來有哪些規劃?今天一起來深入了解。
二、EasyNLP簡介
EasyNLP是PAI算法團隊基于PyTorch開發的易用且豐富的中文NLP算法框架,支持常用的中文預訓練模型和大模型落地技術,并且提供了從訓練到部署的一站式NLP開發體驗。EasyNLP提供了簡潔的接口供用戶開發NLP模型,包括NLP應用AppZoo和預訓練ModelZoo,同時提供技術幫助用戶高效的落地超大預訓練模型到業務。除此之外EasyNLP框架借助PAI團隊在通信優化、資源調度方面的深厚積累,可以為用戶提供大規模、魯棒的訓練能力,同時可以無縫對接PAI系列產品,例如PAI-DLC、PAI-DSW、PAI-Designer和PAI-EAS,給用戶帶來高效的從訓練到落地的完整體驗。
EasyNLP已經在阿里巴巴內部支持10多個BU的業務,同時在阿里云上提供了NLP解決方案和ModelHub模型幫助用戶解決業務問題,也提供用戶自定義模型服務方便用戶打造自研模型。在經過內部業務打磨之后,我們將EasyNLP推向開源社區,希望能夠服務更多的NLP算法開發者和研究者,也希望和社區一起推動NLP技術特別是中文NLP的快速發展和業務落地。
EasyNLP is a Comprehensive and Easy-to-use NLP Toolkit[1]
EasyNLP主要特性如下:
- 易用且兼容開源:EasyNLP支持常用的中文NLP數據和模型,方便用戶評測中文NLP技術。除了提供易用簡潔的PAI命令形式對前沿NLP算法進行調用以外,EasyNLP還抽象了一定的自定義模塊如AppZoo和ModelZoo,降低NLP應用的門檻,同時ModelZoo里面常見的預訓練模型和PAI自研的模型,包括知識預訓練模型等。EasyNLP可以無縫接入huggingface/ transformers的模型,也兼容EasyTransfer模型,并且可以借助框架自帶的分布式訓練框架(基于Torch-Accerator)提升訓練效率。
- 大模型小樣本落地技術:EasyNLP框架集成了多種經典的小樣本學習算法,例如PET、P-Tuning等,實現基于大模型的小樣本數據調優,從而解決大模型與小訓練集不相匹配的問題。此外,PAI團隊結合經典小樣本學習算法和對比學習的思路,提出了一種不增添任何新的參數與任何人工設置模版與標簽詞的方案Contrastive Prompt Tuning,在FewCLUE小樣本學習榜單取得第一名,相比Finetune有超過10%的提升。
- 大模型知識蒸餾技術:鑒于大模型參數大難以落地的問題,EasyNLP提供知識蒸餾功能幫助蒸餾大模型從而得到高效的小模型來滿足線上部署服務的需求。同時EasyNLP提供MetaKD算法,支持元知識蒸餾,提升學生模型的效果,在很多領域上甚至可以跟教師模型的效果持平。同時,EasyNLP支持數據增強,通過預訓練模型來增強目標領域的數據,可以有效的提升知識蒸餾的效果。
三、EasyNLP框架特點
1.整體架構
如圖所示,EasyNLP架構主要有如下幾個核心模塊:
- 基礎模塊:提供了預訓練模型庫ModelZoo,支持常用的中文預訓練模型,包括BERT,MacBERT,WOBERT等;也提供常用的NN模塊,方便用戶自定義模型;
- 應用層:AppZoo支持常見的NLP應用比方說文本分類,文本匹配等;EasyNLP支持預訓練模型落地工具,包括小樣本學習和知識蒸餾,助力大模型快速落地,這里也集成了多個PAI團隊自研的算法;
- NLP應用和解決方案:提供了多個NLP解決方案和ModelHub模型幫助用戶解決業務問題;
- 工具層:可以支持本地拉起服務,也可以在阿里云產品上部署和調用,比方說PAI-DLC、PAI-DSW、PAI-Designer和PAI-EAS,給用戶帶來高效的從訓練到落地的完整體驗。
2.大模型知識蒸餾技術
隨著BERT等預訓練語言模型在各項任務上都取得SOTA效果,大規模預訓練模型已經成為 NLP學習管道中的重要組成部分,但是這類模型的參數量太大,而且訓練和推理速度慢,嚴重影響到了需要較高QPS的線上場景,部署成本非常高。EasyNLP框架集成了經典的數據增強和知識蒸餾算法,使得訓練出的小模型在相應任務行為上能夠逼近大模型的效果。
由于現有大部分的知識蒸餾工作都聚焦在同領域模型的蒸餾,而忽略了跨領域模型對目標蒸餾任務效果的提升。PAI團隊進一步提出了元知識蒸餾算法MetaKD(Meta Knowledge Distillation),將跨領域的可遷移知識學出,在蒸餾階段額外對可遷移的知識進行蒸餾。MetaKD算法使得學習到的學生模型在相應的領域的效果顯著提升,逼近教師模型的效果。這一算法的核心框架圖如下所示:
其中,MetaKD算法包括兩個階段。第一個階段為元教師模型學習(Meta-teacher Learning)階段,算法從多個領域的訓練數據協同學習元教師模型,它對每個領域的樣本都計算其典型得分(Prototype Score),使更具有跨領域典型性的樣本在學習階段有更大的權重。第二個階段為元蒸餾(Meta-distillation)階段,將元教師模型選擇性地蒸餾到特定領域的學習任務上。由于元教師模型可能無法做到在所有領域上都有精確的預測效果,我們額外引入了領域專業性權重(Domain-expertise Weight),使元教師模型只將置信度最高的知識遷移到學生模型,避免學生模型對元教師模型的過擬合。
下圖展示了MetaKD算法在MNLI的5個領域數據集的跨任務蒸餾效果。由結果可見,MetaKD蒸餾出的BERT-Small模型的和原始BERT模型相比,在保持模型精度值平均只下降1.5%的前提下參數減少了87%,大大減少了部署的壓力。
目前,MetaKD算法也已經集成到EasyNLP框架中開源。
知識蒸餾實踐詳見[2]。
3.大模型小樣本學習技術
預訓練語言模型規模的擴大,使得這一類模型在自然語言理解等相關任務效果不斷提升。然而,這些模型的參數空間比較大,如果在下游任務上直接對這些模型進行微調,為了達到較好的模型泛化性,需要較多的訓練數據。在實際業務場景中,特別是垂直領域、特定行業中,訓練樣本數量不足的問題廣泛存在,極大地影響這些模型在下游任務的準確度。為了解決這一問題,EasyNLP框架集成了多種經典的小樣本學習算法,例如PET、P-Tuning等,實現基于預訓練語言模型的小樣本數據調優,從而解決大模型與小訓練集不相匹配的問題。
此外,PAI團隊結合經典小樣本學習算法和對比學習的思路,提出了一種不增添任何新的參數與任何人工設置模版與標簽詞的方案Contrastive Prompt Tuning (CP-Tuning)。這一算法的核心框架圖如下所示:
如上圖,CP-Tuning算法放棄了經典算法中以“[MASK]”字符對應預訓練模型MLM Head的預測輸出作為分類依據,而是參考對比學習的思路,將句子通過預訓練模型后,以“[MASK]”字符通過預訓練模型后的連續化表征作為features。在小樣本任務的訓練階段,訓練目標為最小化同類樣本features的組內距離,最大化非同類樣本的組間距離。在上圖中,[OMSK]即為我們所用于分類的“[MASK]”字符,其優化的features表示為[EMB]。因此,CP-Tuning算法不需要定義分類的標簽詞。在輸入側,除了輸入文本和[OMSK],我們還加入了模版的字符[PRO]。與經典算法不同,由于CP-Tuning不需要學習模版和標簽詞之間的對應,我們直接將[PRO]初始化為任務無關的模版,例如“it is”。在模型訓練過程中,[PRO]的表示可以在反向傳播過程中自動更新。除此之外,CP-Tuning還引入了輸入文本的Mask,表示為[TMSK],用于同時優化輔助的MLM任務,提升模型在小樣本學習場景下的泛化性。CP-Tuning算法的損失函數由兩部分組成:
如上所示,兩個部分分別為Pair-wise Cost-sensitive Contrastive Loss(PCCL)和輔助的MLM損失。我們在多個GLUE小樣本數據集上進行了驗證,其中訓練集中每個類別限制只有16個標注樣本。從下述結果可以看出,CP-Tuning的精確度超越了經典的小樣本學習算法,也比標準Fine-tuning算法的精確度高10%以上。
目前,除了我們自研的CP-Tuning算法之外,EasyNLP框架中集成了多種經典小樣本學習算法例如PET、P-tuning等。
小樣本學習實踐詳見[3]。
4.大模型落地實踐
下面我們給出一個示例,將一個大的預訓練模型(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 |
代碼詳見[4]。
四、應用案例
EasyNLP支撐了阿里巴巴集團內10個BU20多個業務,同時過PAI的產品例如PAI-DLC、PAI-DSW、PAI Designer和PAI-EAS,給集團用戶帶來高效的從訓練到落地的完整體驗,同時也支持了云上客戶自定定制化模型和解決業務問題的需求。針對公有云用戶,對于入門級用戶PAI-Designer組件來通過簡單調參就可以完成NLP模型訓練,對于高級開發者,可以使用AppZoo訓練NLP模型,或者使用預置的預訓練模型ModelZoo進行finetune,對于資深開發者,提供豐富的API接口,支持用戶使用框架進行定制化算法開發,可以使用我們自帶的Trainer來提升訓練效率,也可以自定義新的Trainer。
下面列舉幾個典型的案例:
- PAI團隊和達摩院NLP團隊[5]合作共建落地超大預訓練模型(百億參數),推出自研小樣本學習算法CP-Tuning和模型稀疏化算法CAP。其中,這一自研CP-Tuning算法與AliceMind平臺集成, 實現了超大預訓練模型的小樣本學習,在在小樣本場景下,比標準Fine-tune精準度提升10%以上;
- PAI團隊和達摩院合作在FewCLUE小樣本學習榜單上獲得冠軍,甚至一個小樣本學習任務上的精準度超過了人類。同時,阿里巴巴某BU使用ToB客戶服務場景下的業務數據在EasyNLP框架下進行小樣本學習算法學習,在業務數據上相比Baseline,提升實體識別的準確度2%以上,提升屬性識別的準確度5%以上;
- 針對公有云客戶對文本分類功能的小模型、高QPS需求,基于EasyNLP框架的知識蒸餾功能,采用某預訓練模型作為教師模型(參數量3億)、PAI-BERT中文小預訓練模型作為學生模型(參數量4百萬),蒸餾得到這一小模型上線,參數量約為原有模型的百分之一,精度損失在10%以內;基于此,我們集成了知識蒸餾功能,助力大模型在實際業務場景下落地;
- 在風控場景,我們收集了約一億的中文預訓練數據,基于EasyNLP預訓練了一個PAI-BERT中文模型,在風控數據上取得了非常不錯的效果,提升了10%以上的準確率和召回率;基于此,我們在公有云上也推出了文本風控解決方案[6],在多個客戶場景里落地并取得不錯的效果;
- 隨著UGC等用戶生成內容不斷涌現,對從文本提取標簽用于細粒度分析的需求不斷涌現;采用基于EasyNLP預訓練中文模型,在新聞數據的超過300個類別的文本標簽預測準確率超過80%;基于此,我們集成了文本標簽預測,關鍵詞抽取,和實體詞提取等功能,在公有云上推出了通用文本打標解決方案[7],并且在多個典型客戶場景里成功落地,服務于智能推薦等應用場景。
五、RoadMap
- 基于EasyNLP的中文CLUE/FewCLUE等的Benchmark
- 知識預訓練技術: 發布一系列知識預訓練模型,致力于提升預訓練模型的常識性和知識性
- 中文預訓練模型:發布針對中文的SOTA的預訓練模型,降低中文預訓練技術門檻
- 多模態預訓練:發布針對中文的多模態預訓練模型
- 中文數據的收集和API接口:收集常用的中文數據,提供預處理和訓練接口
- 垂直場景的SOTA中文模型整合:針對垂直業務場景,整合效果最好的中文模型
- 發布解決方案和PAI組件
項目開源地址:https://github.com/alibaba/EasyNLP
參考文獻
[AAAI 22] DKPLM: Decomposable Knowledge-enhanced Pre-trained Language Model for Natural Language Understanding. https://arxiv.org/abs/2112.01047
[ACL 2021] Meta-KD: A Meta Knowledge Distillation Framework for Language Model Compression across Domains. https://arxiv.org/abs/2012.01266
[arXiv] Making Pre-trained Language Models End-to-end Few-shot Learners with Contrastive Prompt Tuning:https://arxiv.org/pdf/2204.00166
[AAAI 22] From Dense to Sparse: Contrastive Pruning for Better Pre-trained Language Model Compression. https://arxiv.org/abs/2112.07198
[EMNLP 2021] TransPrompt: Towards an Automatic Transferable Prompting Framework for Few-shot Text Classification. https://aclanthology.org/2021.emnlp-main.221/
[CIKM 2021]. EasyTransfer -- A Simple and Scalable Deep Transfer Learning Platform for NLP Applications. https://github.com/alibaba/EasyTransfer
[1]https://github.com/alibaba/EasyNLP
[2]https://github.com/alibaba/EasyNLP/tree/master/examples/knowledge_distillation[3]https://github.com/alibaba/EasyNLP/tree/master/examples/fewshot_learning[4]https://github.com/alibaba/EasyNLP/tree/master/examples/landing_large_ptms[5]達摩院NLP團隊:https://github.com/alibaba/AliceMind
[6]文本風控解決方案:https://help.aliyun.com/document_detail/311210.html[7]通用文本打標解決方案:https://help.aliyun.com/document_detail/403700.html