自從 GPT-3 問世,展現出千億級模型的強大實力以來,NLP 任務面臨著規模、樣本、Fine-tuning 性能的不可能三角。如何在保證 10 億參數以下的語言模型可以達到 SOTA 的 Few-Shot (甚至是 Zero-shot)還有 Fine-tuning 的效能?一定要上千億的參數並且忍受不穩定的 prompt 提示才可以解決 zero-shot 場景嗎?本文中,IDEA 研究院封神榜團隊介紹了一種新的「表現型」UniMC,僅有 2 億參數即可達到 Zero-shot 的 SOTA。相關工作已經被 EMNLP 2022 接收。
在今年的一篇文章[1] 中指出,自預訓練技術被提出以來,NLP 界一直存在著一個不可能三角(如下圖1),即一個模型不能同時滿足:
圖1
不可能三角存在的原因是,目前預訓練模型的參數量只有達到一定的數量級,並且使用提示學習才能體現出強大的few/zero-shot 表現。
最近我們封神榜團隊被EMNLP 2022 收錄的論文:《Zero-Shot Learners for Natural Language Understanding via a Unified Multiple Choice Perspective》則打破了這一「魔咒」,提供了一個靈活高效的解決思路。我們的論文提出的UniMC 在擁有模型參數量很小(僅是億級)和SOTA 的Fine-tuning 能力的前提下,同時還能擁有(與5400 億的PaLM 相當的) SOTA的Few/Zero-Shot 性能。
2018 年BERT 的提出,標誌著整個NLP 領域進入一個預訓練時代,NLP 的百尺竿頭終於更進一步。現有的模型如 DeBERTa 等預訓練掩碼語言模型(PMLM)已經可以在 10 億級以下的參數做到 fine-tuning 的 SOTA 了,但是面對 Zero-shot 場景下的 NLU 任務時表現無力。
原因在於,使用 PMLM 的時候,我們需要在其頂部針對具體任務增加一個 MLP 層,如圖 2(c)。而且,這個 MLP 層會增加額外的參數,這使得這種方法面對 Zero-shot 場景時,只能選擇隨機初始化,根本沒辦法獲得合理的輸出。而且,在 finetuning 的場景下,增加 MLP 層也會造成不同任務之間是無法遷移的(例如,2 分類和 3 分類任務之間無法遷移)。
針對Zero-shot 場景,近年來的主流做法是利用上百億甚至千億的預訓練語言模型(PLM)統一將NLU 任務轉化為文本生成任務,這樣可以透過人工構造prompt 或是人工設計verbalizer 使得大模型可以應用在zero-shot 任務上,如圖2(a)。進一步地,FLAN 論文中,使用了大量人工構造的模版來統一了不同的任務,使得別的任務的知識可以遷移到特定任務上,如圖 2(b)。不過,這樣的生成模型有以下缺點:
#而我們提出了圖2(d)中UniMC 的方法,避免了上述問題,並且在中英文數個任務中達到了SOTA 或是與最先進模型相近的表現。
#圖2
模型想法
大部分的NLU 任務都是基於標籤的,而產生模型需要將標籤給生成出來,這無疑是加重了任務的難度和模型的學習成本。對於許多基於標籤的任務(Label-based Task)來說,通常只需要給定輸入文本,輸出文本屬於每種 label 的機率。基於這個思路,我們將 NLU 任務轉化為多項選擇任務(Multiple-Choice)。即給定文字、問題和選項,輸出每個選項的機率,而不需要將選項生成出來。
在此基礎之上,我們提出一個新的概念:模型的表現型。現有的模型表現型,都是在後面加上某個層,例如分類層。或者是,生成模型 GPT 的表現型是透過 Prompt 來挖掘模型的知識。而我們提出的 UniMC 方案不需要在 PMLM 引入任何額外的層,挖掘了另一個 PMLM 的表現型。
在本論文中,我們選擇了 ALBERT 作為我們的骨幹 PMLM 網路。
統一的多項選擇格式
#如圖3,我們希望將基於標籤的NLU 任務都轉換成統一的MC(Multiple-Choice)格式。我們的理念是,盡可能少添加人工資訊。
圖3
#具體地說,我們做瞭如下兩步:
優點:只設計了一個 option prompt,設計一個或沒有 question prompt。
模型結構
#UniMC 的結構如下圖4 所示,它採用類似BERT 的自編碼結構。主要流程為,我們先統一好不同任務的輸入,並且限制好輸入資訊之間的流通性,經過PMLM 之後,利用O-MLM、OP 和MLM 進行MC training,最後使用O-MLM 和OP 進行zero- shot 預測。接下來我將一步一步拆解我們的方案。
圖4
#輸入Input
#如圖5 紅色實線框區域內容。在輸入到 UniMC 之前還要處理一下,變成 UniMC 獨特的 token 格式。為了提升運算效率,我們將所有選項與問題和文字直接拼接,即 [Options, Question, Passage]。而我們在每個選項的前面插入一個特殊的 token,[O-MASK],用來表示 yes 或 no(選不選這個選項)。 (註,為了可以提高復用性,我們復用了[MASK] token。
#如圖5 綠色虛線框區域內容。我們需要考慮輸入資訊來源太多,有選項資訊、問題資訊和文字段資訊。它們之間的資訊會互相影響,所以我們希望隔絕不同的資訊。例如,我們在輸入的時候,假如可以看到別的選項,那麼這題的難度就下降了,模型會有惰性。
因此我們進行瞭如下考慮:
##圖5
模型如何做選擇題?(O-MLM 和OP)
如圖6,我們利用O -MLM 和OP 任務來讓模型可以去「選擇」答案。O-MASK 完全繼承於MASK token(具體地,為了不添加額外的參數以及充分利用模型在無監督預訓練階段所學習到的知識,我們重複使用了MaskLM head 的參數)。唯一不同的是,它是100% 被mask 的。O-MLM 任務的目標就是把O-MASK 解碼出'yes' 或'no',其用來預測該選項是否被選擇。而OP 任務的作用在於,從各個選項的'yes'中預測答案。具體地,我們取每個 [O-MASK] 輸出的'yes'的logit 進行softmax 得到每個選項的機率,取機率最大的選項最為預測答案即可。
##圖6
在一個Batch 中處理多個MC 任務
如圖7,我們希望在一個batch中放入多個MC 資料集,這樣可以增強模型的能力,而且,也更加統一(Unified)。我們在建構batch 的時候,發現了一個問題:假如,一個batch 裡面有不同選項的sample 呢?
所以我們在輸出的前面,再設計了一個logit mask 的方法。直接給無關的 token 賦予一個負無窮大的預測值,加起來,我們就可以在計算 softmax 的時候消除別的 token 對於 O-MASK 的影響了。並且,不同數量的多項選擇題可以在一個 batch 中統一處理。
#圖7
##模型訓練與預測
# 與FLAN 的Instruction Tuning 不同,我們僅僅在MC 資料集上進行訓練,這主要是為了讓模型學會如何做選擇題,並且MC 資料集具有一定的通用性,例如,不同的數據集可能由數量不等的標籤組成。 圖8 #Zero-shot Inference 有趣的是,我們可以發現,這兩個任務,是可以在Training 和zero-shot inference 兩個階段擁有一致性的。這是因為我們都是使用了 O-MLM 和 OP 兩個任務來實現讓模型做選擇題。而由於我們拋棄了分類層,所有的參數都可以重複使用,這樣一來就啟動了 PMLM 的 Zero-shot 能力。 #圖9 英文場景 我們收集了14 份multiple -choice 任務進行預訓練,然後做其他NLU 任務進行zero-shot 效能測試。在 4 個 NLI 任務中, UniMC 取得了 SOTA 並且超越 5,400 億參數的 PaLM 模型。
##並且我們 在分類任務上擊敗了以GPT-2 和GPT-3 為骨幹的網路。對於非常困難的 Dbpedia 任務,高達 13 個類別,甚至可以達到 88.9% 的超高準確率。
圖11 #為了探究UNIMC 的泛化性,我們和FLAN 做了比較。可以看到,我們的 UniMC 幾乎可以在所有任務中超越 FLAN 或接近。 圖12 中文場景 在中文場景中,我們收集了40 份有監督資料集,並統一建構成為MC 的任務形式對UniMC 模型進行預訓練,然後在FewCLUE 和ZeroCLUE 的9 個任務上進行測試。截止 2022 年 8 月 30 日, UniMC 取得了 FewCLUE 和 ZeroCLUE 雙榜第一(圖中的二郎神 - UnifiedMC 即為 UniMC)。 #圖13 #####圖14############總結##########我們提出了一個新穎的Zero-shot 場景下的NLU 任務的解決方案,僅利用億級的參數量就戰勝了千倍參數量的複雜大模型。 ###### 此外,我們幾乎沒有引入任何的人工資訊。並且克服了 BERT 類別模型的預訓練和微調不一致的問題,我們的訓練和預測是具有一致性的。我們甚至可以做到一次訓練,多次 zero-shot 預測,大大節約了算力成本。目前 IDEA 封神榜團隊已經推出了超過 70 個預訓練大模型。 #引用 ##[1]Impossible Triangle: What's Next for Pre-trained Language Models?https://readpaper.com/paper/4612531641570566145##UniMC 效能
以上是打破不可能三角、比肩5400億模型,IDEA封神榜團隊僅2億級模型達到零樣本學習SOTA的詳細內容。更多資訊請關注PHP中文網其他相關文章!