老板让我用少量样本 finetune 模型,我还有救吗?急急急,在线等!
文 | ????????????????
編 | 王蘇
今天介紹的是一篇 NAACL'21 新鮮出爐的工作!NAACL 上周四出的結果,這篇工作本周一上傳 arxiv,周二被王蘇小哥哥發現,周三拜讀了一下,今天就來和大家分享啦!!
給大家提個問題:如果訓練樣本只有幾百條,這時候我們該怎么辦呢?
傳統的 RNN 在這個樣本大小下很難被訓練好,自然地,我們會想到使用預訓練模型,在其基礎上進行 finetune。具體來講,就是將預訓練模型作為模型的底層,在上面添加與當前任務特點相關的網絡結構。這樣就引入了預訓練的知識,對當前任務能產生很大的幫助。
除了預訓練的知識,是不是還有其他的信息我們沒有用上呢?近年來,越來越多的人在使用另一種 finetune 方法,即結合具體場景,設計新的 finetune 任務形式,從而將與當前任務相關的提示信息(prompt)引入模型。我們大名鼎鼎的 GPT 系列就是這么干的。比如我們拿 GPT3 做 QA 的 finetune,直接喂給他一串“Question:問題內容 Answer:”,剩下的答案部分就讓 GPT3 自己填完。
這類 finetune 技巧雖然陸續被使用,但并沒有人論證:這種做法相比于傳統的 finetune 方法,真的能帶來提升嗎?如果答案是肯定的,那么究竟能提升多少呢(能否量化這種提升)?
今天這篇來自 Huggingface 的文章就填補了上述兩個問題的答案。他們通過大量實驗證明:引入提示信息和多標注幾百條數據帶來的性能提升是相當的!所以,下次老板只給少量樣本,就要你 finetune 模型——不要慌!我們今天又多學了一個 trick!
論文題目:
How Many Data Points is a Prompt Worth?
論文鏈接:
https://arxiv.org/abs/2103.08493
Arxiv訪問慢的小伙伴也可以在 【夕小瑤的賣萌屋】訂閱號后臺回復關鍵詞 【0318】 下載論文PDF~
方法
前文提到,這一類 finetune 是將任務對應的輸入改寫成新的完形填空格式,讓模型預測 <MASK> 部分的詞,作為抽取任務的答案或者生成任務的結果。這種方法不需要改變模型結構、沒有額外的參數,簡直不要太方便!
引入描述集合
本文對這類方法進行了進一步簡化:不要求 <MASK> 處生成任意的文本,而是只需要完成類似于有選項的完形填空任務。這里的選項是固定的幾個詞,我們稱之為描述集合(verbalizer),不同任務會有不同的描述集合。
比如,對于判斷題的閱讀理解任務,就可以將閱讀文本、問題和 <MASK> 拼接,讓預訓練模型直接預測 <MASK> 屬于描述集合 {yes, no} 中的哪一種描述:
小明天天碼代碼碼到天明 [SEP] 小明有女朋友嗎? <MASK>
其中前半部分是閱讀文本,后面加粗的部分是問題。模型只需要判斷 <MASK> 屬于描述集合 {yes, no} 中的哪一種。
可能讀到這里,大家會疑惑:直接拼起來搞一個 True / False 的二分類不就好了嘛,何必讓模型填空呢?嘿嘿,這恰好是作者的用意:通過讓模型填空,模型可以習得描述集合中標簽文本的語義信息。
引入提示信息
直接拼接是最樸素的,但這能讓模型知道自己在做什么任務嘛?為此,作者引入了提示信息(prompt)。
還是判斷題的閱讀理解任務,對文章 和問題 ,作者將他們與一些固定的詞進行整合,以此輸入模型,讓模型預測 <MASK> 。作者提出了三種整合方式:
沒錯,就是這么簡單!這些固定的詞作為提示信息,讓模型了解當前在做的任務;同時,提示詞文本的含義也對于模型的理解產生了一定的幫助。
除了單選閱讀理解,這篇文章還關注了文本蘊含、多選閱讀理解、指代銷歧等共六個任務。對于不同的任務,有不同的提示信息與輸入格式:
對于文本蘊含任務,可以將前提 (premise, ) 與假設 (hyphothesis, ) 通過提示信息整合,作者提出了兩種整合方式:
這樣就只需要讓模型預測 <MASK> 屬于描述集合 {yes, no, maybe} 中的哪一種,以此判斷前提能否支撐假設。
對于指代銷歧任務,可以將句子 、帶標記的介詞 與名詞 通過提示信息整合:
這樣就只需要讓模型預測 <MASK> ,以此判斷介詞是否指代名詞。這里的描述集合是不受限制的,即讓模型在 <MASK> 處預測指代的名詞 。
其他任務也采用類似的整合方式,感興趣可以參考原文~
實驗
作者發現,這種使用提示信息的整合方式,在低資源的情況下對模型性能有非常大的提升!
比如在閱讀理解任務的 BoolQ 數據集上,作者將使用提示信息整合的 finetune 方法與增加一層分類層的 finetune 方法進行了對比。下圖是在使用不同數量的樣本訓練時,模型準確率的對比。
可以發現,在數據量比較小的時候,使用提示信息整合的 finetune 方法(黃色)比增加一層分類層的 finetune 方法(紫色)有更好的表現。
在某些任務上,這種表現的提升是驚人的:
這是在指代銷歧任務的 WSC 數據集上的實驗結果。在水平方向看,僅使用 25 個樣本,就達到傳統 fintune 方法使用 300 個樣本才能達到的效果!
此外,作者還進行了一系列的消融實驗,得到一些有意思的結論:
模型通過預測 <MASK> 屬于描述集合中的哪種,以此完成任務。如果將這里改為不帶語義的單純的分類,性能也會有所下降。
作者為每個任務都提供了多種整合提示信息的方式,但是發現,不同方式的區別對性能影響甚微。
總結
這篇文章對基于提示信息的 finetune 方法在進行了大量實驗,證明了這類方法在低資源的情況下性能大幅優于傳統方法。這種 finetune 的思路應該是可以應用于各類 NLP 下游任務的。尤其是低資源場景下,應該會非常有幫助。如果老板真的只給幾百條數據讓訓練模型,這樣的方法說不定就有奇效!
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
總結
以上是生活随笔為你收集整理的老板让我用少量样本 finetune 模型,我还有救吗?急急急,在线等!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无需人工!无需训练!构建知识图谱 BER
- 下一篇: 卖萌屋原创专辑首发,算法镇魂三部曲!