SetFit: 高效的無提示少樣本學(xué)習(xí)

如何處理少標(biāo)簽或無標(biāo)簽的訓(xùn)練數(shù)據(jù)是每個數(shù)據(jù)科學(xué)家的夢魘 ??。最近幾年來,基于預(yù)訓(xùn)練語言模型的少樣本 (few-shot) 學(xué)習(xí)出現(xiàn)并成為解決這類問題的頗有前途的方案。
因此,我們非常高興地向大家介紹 SetFit: 一個基于 Sentence Transformers 的高效的少樣本微調(diào) (fine-tune) 框架,該工作由 HuggingFace 和我們的研究伙伴 Intel Labs 以及 UKP Lab 合作完成。SetFit 僅需使用很少的標(biāo)注數(shù)據(jù)就能達(dá)到較高的準(zhǔn)確率。舉個例子,在客戶評論情感數(shù)據(jù)集 (Customer Reviews (CR) sentiment dataset) 上,每類僅使用 8 個標(biāo)注樣本,SetFit 的準(zhǔn)確率就和在 3 千個標(biāo)注樣本的訓(xùn)練全集上微調(diào) RoBERTa Large 相當(dāng)了 ??!
Intel Labs:
https://www.intel.cn/content/www/cn/zh/research/overview.htmlUKP Lab:
https://www.informatik.tu-darmstadt.de/ukp/
與其他少樣本學(xué)習(xí)方案相比,SetFit 有很多獨(dú)有的特點(diǎn):
???無需提示詞或語言器 (verbalisers)?:目前的少樣本微調(diào)技術(shù)都需要手工設(shè)計(jì)的提示或語言器,用于將訓(xùn)練樣本轉(zhuǎn)換成適合目標(biāo)語言模型的格式。SetFit 通過直接從少量標(biāo)注訓(xùn)練樣本中生成豐富的嵌入,完全省去了提示。
???快速訓(xùn)練?: SetFit 不需要使用像 T0 或 GPT-3 這樣的大規(guī)模語言模型就能達(dá)到高準(zhǔn)確率。因此,典型情況下,它的訓(xùn)練和推理會快一個數(shù)量級或以上。
???支持多語言: SetFit 可與 Hub 上的任一 Sentence Tranformer 一起使用,這意味著如果你想讓它支持多語言文本分類,你只要簡單地微調(diào)一個多語言的 checkpoint 就好了。
如果你想知道更多細(xì)節(jié),可以在下方鏈接獲取我們的論文、數(shù)據(jù)及代碼。在本文中,我們主要解釋 SetFit 是如何工作的以及如何使用 SetFit 訓(xùn)練一個你自己的模型。讓我們開始吧!
論文:
https://arxiv.org/abs/2209.11055數(shù)據(jù):
https://hf.co/SetFit代碼:
https://github.com/huggingface/setfit
SetFit 如何工作?
在設(shè)計(jì) SetFit 時,我們始終牢記高效、簡單兩個原則。SetFit 主要包含兩個階段:首先在少量標(biāo)注樣例 (典型值是每類 8 個或 16 個樣例) 上微調(diào)一個 Sentence Transformer 模型。然后,用微調(diào)得到的 Sentence Tranformer 的模型生成文本的嵌入 (embedding) ,并用這些嵌入訓(xùn)練一個分類頭 (classification head) 。

SetFit 利用 Sentence Transformer 的能力去生成基于句對 (paired sentences) 的稠密嵌入。在第一步微調(diào)階段,它使用對比訓(xùn)練 (contrastive training) 來最大化利用有限的標(biāo)注數(shù)據(jù)。首先,通過選擇類內(nèi) (in-class) 和類外 (out-class) 句子來構(gòu)造正句對和負(fù)句對,然后在這些句對 (或三元組 (triplets) ) 上訓(xùn)練 Sentence Transformer 模型并生成每個樣本的稠密向量。第二步,根據(jù)每個樣本的嵌入向量和各自的類標(biāo)簽,訓(xùn)練分類頭。推理時,未見過的樣本通過微調(diào)后的 Sentence Transformer 并生成嵌入,生成的嵌入隨后被送入分類頭并輸出類標(biāo)簽的預(yù)測。
只需要把基礎(chǔ) Sentence Transformer 模型換成多語言版的,SetFit 就可以無縫地在多語言環(huán)境下運(yùn)行。在我們的實(shí)驗(yàn)中,SetFit 在德語、日語、中文、法語以及西班牙語中,在單語言和跨語言的條件下,都取得了不錯的分類性能。
實(shí)驗(yàn)論文:
https://arxiv.org/abs/2209.11055
測試 SetFit
盡管與現(xiàn)存的少樣本模型相比,SetFit 的模型要小得多,但在各種各樣的測試基準(zhǔn)上,SetFit 還是表現(xiàn)出了與當(dāng)前最先進(jìn)的方法相當(dāng)或更好的性能。在 RAFT 這個少樣本分類測試基準(zhǔn)上,參數(shù)量為 335M 的 SetFit Roberta (使用 all-roberta-large-v1 模型) 性能超過了 PET 和 GPT-3。它的排名僅在人類平均性能以及 11B 參數(shù)的 T-few 之后,而 T-few 模型的參數(shù)量是 SetFit Roberta 的 30 倍。SetFit 還在 11 個 RAFT 任務(wù)中的 7 個任務(wù)上表現(xiàn)好于人類基線。
all-roberta-large-v1 模型地址:
https://hf.co/sentence-transformers/all-roberta-large-v1
RankMethodAccuracyModel Size2T-Few75.811B4Human Baseline73.5N/A6SetFit (Roberta Large)71.3355M9PET69.6235M11SetFit (MP-Net)66.9110M12GPT-362.7175 BRAFT 排行榜上表現(xiàn)突出的方法 (截至 2022 年 9 月)
在其他的數(shù)據(jù)集上,SeiFit 在各種各樣的任務(wù)中也展示出了魯棒的性能。如下圖所示,每類僅需 8 個樣本,其典型性能就超越了 PERFECT、ADAPET 以及微調(diào)后的原始 transformer 模型。SetFit 還取得了與 T-Few 3B 相當(dāng)?shù)慕Y(jié)果,盡管它無需提示且模型小了 27 倍。

快速訓(xùn)練與推理

因?yàn)?SetFit 可以用相對較小的模型取得高準(zhǔn)確率,所以它訓(xùn)練起來可以非???,而且成本也低不少。舉個例子,在每類 8 個標(biāo)注樣本的數(shù)據(jù)集上使用 NVIDIA V100 訓(xùn)練 SetFit 只需要 30 秒,共花費(fèi) 0.025 美金;相比較而言,相同的實(shí)驗(yàn)下,訓(xùn)練 T-Few 3B 需要一張 NVIDIA A100,時間上要 11 分鐘,需花費(fèi) 0.7 美金,成本高 28 倍以上。事實(shí)上,SetFit 不僅可以運(yùn)行在那種你在 Google Colab 找到的 GPU 單卡上,甚至在 CPU 上你也僅需幾分鐘即可以訓(xùn)練一個模型。如上圖所示,SetFit 的加速與模型大小相當(dāng),因此推理時,我們也可以獲得相似的性能提升,進(jìn)一步地,對 SetFit 模型進(jìn)行蒸餾可以獲得 123 倍的加速 ??。
訓(xùn)練你自己的模型
為了利于社區(qū)用戶使用 SetFit,我們創(chuàng)建了一個小型?setfit
?庫,這樣你僅需幾行代碼就可以訓(xùn)練自己的模型了。
第一件事就是運(yùn)行如下命令安裝庫:
接著,我們導(dǎo)入?SetFitModel
?和?SetFitTrainer
,它們是流水線化 SetFit 訓(xùn)練過程的兩個核心類:
現(xiàn)在,我們開始從 HuggingFace Hub 上下載一個文本分類數(shù)據(jù)集。我們使用 SentEval-CR 數(shù)據(jù)集,它是一個客戶評論數(shù)據(jù)集。
SentEval-CR 數(shù)據(jù)集地址:
https://hf.co/datasets/SetFit/SentEval-CR
為了模擬僅有幾個標(biāo)注樣例的真實(shí)場景,我們從數(shù)據(jù)集中每類采樣 8 個樣本:
既然我們有數(shù)據(jù)集了,下一步是從 Hub 里加載一個預(yù)訓(xùn)練 Sentence Transformer 模型,并用它去實(shí)例化?SetFitTrainer
。這里我們使用 paraphrase-mpnet-base-v2 模型,我們發(fā)現(xiàn)該模型在多個數(shù)據(jù)集下都能得出很好的結(jié)果。
paraphrase-mpnet-base-v2 模型地址
https://hf.co/sentence-transformers/paraphrase-mpnet-base-v2
最后一步是訓(xùn)練和評估模型:
就這樣,你已經(jīng)訓(xùn)練了你的第一個 SetFit 模型!記得把你訓(xùn)練后的模型上傳到 Hub 里 ??。
雖然在上面的例子中我們只展示了如何用一個特定類型的模型走完全程,但其實(shí)我們可以針對不同的性能和任務(wù),切換使用任意的 Sentence Transformer 模型。舉個例子,使用多語言 Sentence Transformer 可以將少樣本分類擴(kuò)展至多語言的場景。
下一步
我們已經(jīng)向大家展示了 SetFit 是用于少樣本分類任務(wù)的有效方法。在接下來的幾個月里,我們會繼續(xù)探索將該方法擴(kuò)展至自然語言推理和詞分類任務(wù)并觀察其效果。同時,我們也會很高興看到業(yè)界從業(yè)者如何應(yīng)用 SetFit 到他們自己的應(yīng)用場景。如果你有任何問題或者反饋,請?jiān)谖覀兊?GitHub 倉庫上提出問題 ??。
SetFit GitHub 代碼倉庫地址:
https://github.com/huggingface/setfit
少樣本學(xué)習(xí)快樂!
英文原文:? https://hf.co/blog/setfit
譯者: Matrix Yao (姚偉峰),英特爾深度學(xué)習(xí)工程師,工作方向?yàn)?transformer-family 模型在各模態(tài)數(shù)據(jù)上的應(yīng)用及大規(guī)模模型的訓(xùn)練推理。