全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器
?PaperWeekly 原創(chuàng) ·?作者 | 李國躉
學(xué)校 | 浙江大學(xué)碩士生
研究方向 | 少樣本學(xué)習(xí)
前言
THUNLP 團(tuán)隊前不久發(fā)布了 OpenPrompt 工具包和相關(guān)技術(shù)報告,筆者迫不及待上手嘗試了一下,特意撰寫此文來報告一下作為研究人員的使用感受。
本文將結(jié)合作者發(fā)布的技術(shù)報告以及個人使用感受向大家分享和介紹這個強(qiáng)大易用的 Prompt Learning 工具包。
主要分為四個部分:
為什么我們需要 Prompt 工具包?
OpenPrompt 是什么?
OpenPrompt 的優(yōu)勢:為什么我們需要 OpenPrompt?
Next Step towards PromptCenter:不僅僅是 OpenPrompt
為什么我們需要Prompt工具包?
從 LAMA 和 GPT-3 起,Prompt Learning 在近兩年開始飛速發(fā)展,涌現(xiàn)了一大批優(yōu)秀的論文,粗略總結(jié)下可以分為 few-shot learning 和 parameter-efficient learning 兩種應(yīng)用場景。
盡管開源社區(qū)有很多相關(guān)論文的優(yōu)秀實現(xiàn),但是基于以下理由,我們?nèi)匀恍枰粋€針對初學(xué)者可以開箱即用,對于研究者可以方便修改迭代,對于工業(yè)界容易部署的 Prompt 工具包。
Prompt learning 的性能并不是很穩(wěn)定,需要考慮諸多的因素,諸如? template 和 verbalizer 的設(shè)計,tunable token 和 label words 的初始化和預(yù)訓(xùn)練模型的選擇等。
一些 Prompt 的工作仍基于傳統(tǒng) fine-tuning 的代碼模版,用最小的更改成本來實現(xiàn) Prompt learning,代碼耦合程度較高,缺乏可讀性和可復(fù)現(xiàn)性。
從上述兩個因素看,作為 Prompt learning 的研究者而言,我們急需一個能夠穩(wěn)定實現(xiàn)各種經(jīng)典的 Prompt learning 方法,同時對不同策略可以靈活配置,不同模塊靈活組合的開源工具包。
于是,OpenPrompt 出現(xiàn)了。
OpenPrompt到底是什么?
回顧 Prompt learning 的幾個關(guān)鍵流程,我們可以總結(jié)出 Prompt learning 一般可以分為以下步驟:1)選擇預(yù)訓(xùn)練模型;2)設(shè)計 template;3)設(shè)計 verbalizer:確定答案空間;4)確定 tuning 策略。每個步驟中我們又需要考慮若干因秦,諸如設(shè)計 soft 還是 hard 或者 hybrid 的模版,soft token 怎么初始化,tuning 策略是什么等。
Open Prompt 就是這樣一個覆蓋 Prompt learning 全生命周期的工具包,提供了一套完整的 pipeline 以及每個 step 中靈活配置的模塊。
從上圖不難看出,OpenPrompt 提供一套完整的 Prompt Learning Pipeline,而其中每個 class 都繼承了 torch 的類或者 huggingface 的類來實現(xiàn),完美兼容最流行的深度學(xué)習(xí)框架和最流行的預(yù)訓(xùn)練模型框架,在代碼風(fēng)格和 pipeline 設(shè)計上也是完美貼合 huggingface 框架,讓研究者可以以最少的學(xué)習(xí)成本上手和修改。
下面,筆者通過一個 example 來講解整個框架的運行流程。
首先是一些基本的設(shè)置:
定義 tokenizer,然后用 PromptTokenizer 包起來,PromptTokenizer 中實現(xiàn)了額外的一些輔助方法;
定義 template:按照需要選擇 soft,或者 hard,或者 hybrid,每個都有相應(yīng)的類;
定義 verbalizer:同樣按照需要可以選擇 soft,或者 hard 等;
定義 model:一般有兩種,PromptForClassification 和? PromptForGeneration,當(dāng)然里面要傳入預(yù)訓(xùn)練模型,可以是 BERT,也可以是 T5,還要傳入定義的 template 和 verbalizer。
然后就是數(shù)據(jù)的流動:raw text 被包成一個個 InputExamp|e,并送到 template中按照 template 進(jìn)行“改造”,改造后的 example(被叫做 wrapped example)送到 tokenizer 中,最后組織成 dataset。dataloader 從 dataset 中取出一個個? batch 送入預(yù)訓(xùn)練模型中進(jìn)行 tuning(可以選擇是否 freeze 預(yù)訓(xùn)練模型)并進(jìn)行優(yōu)化。聽起來是不是很簡單?實際流程也是和傳統(tǒng)的寫法并無二致。
當(dāng)然,和 huggingface 一樣,作者除了上述寫法,還提供了 PromptTrainer 這種封裝的更好的寫法,使用習(xí)慣也和 huggingface 一樣,沒有太大學(xué)習(xí)成本。
值得一提的是,作者也提供了一種小樣本設(shè)置的 DataSampler,即從數(shù)據(jù)集中采少量樣本來模擬小樣本環(huán)境。
OpenPrompt的優(yōu)勢:為什么我們需要 Open Prompt?
剛剛知道 OpenPrompt 的時候,我對這個工具包還有些許不屑,覺得多半是現(xiàn)有方法的簡單集成,我不禁在想,雖然我們需要 Prompt 工具包,可為什么一定要用?OpenPrompt?
仔細(xì)了解和使用了 OpenPrompt 以后,我對 OpenPrompt 的設(shè)計贊不絕口,下面分享下我的一些個人感受。
什么模塊化設(shè)計,容易配置和靈活修改,適用于生成和分類任務(wù),集成了各種? prompt 的優(yōu)點我就不說了,讓我覺得井常妙的一點是作者提出的: Template Language。
實際上,prompt learning 發(fā)展到現(xiàn)在,有各種各樣的 template 和 template 組合。在做實驗的時候,設(shè)計各種各樣的 template 的實現(xiàn)成本是比較高的,很難實現(xiàn)快速迭代和嘗試。為了解決這一痛點,作者設(shè)計一種 template language 來統(tǒng)一各種各樣的 template 設(shè)計,然后用一個統(tǒng)一的函數(shù)去解析 template。
上圖展示了一些具體的例子,大家可以看論文了解詳情。具體來說,template language 有這些功能:
利用 Python 的 dict 的 key-value 形式表示 template,每個 dict 表示一個特殊的節(jié)點及其描述。
meta 標(biāo)簽表示了一些特殊的 slot,填入對應(yīng)的輸入,比如 {"meta":"premise"} 表示這個 slot 填入的是 premise sentence。
shortenable 標(biāo)簽表示了該 slot 在面臨預(yù)訓(xùn)練模型輸入長度限制時能否被截斷,比如一些特殊的 token 就不能被截斷,而一些輸入句子是可以被截斷的。
soft 標(biāo)簽指定當(dāng)前位置是 soft token,其 value 表示用什么詞進(jìn)行初始化,duplicate 表示 soft token 在該位置周圍重復(fù)多少次。soft id 標(biāo)簽則指如果兩個? soft token 有相同的 soft id,則共享 word embedding。
mask 標(biāo)簽則表示此位需要被預(yù)測,post_ processing 標(biāo)簽則表示該位置的內(nèi)容可以傳入一個函數(shù)去后處理。
從以上筆者的介紹可以看出 template language 的強(qiáng)大之處!這也是我覺得該工具包最大的亮點之一。
Next Step towards PromptCenter:不僅僅是OpenPrompt
盡管 OpenPrompt 已經(jīng)很強(qiáng)大,作者并不局限于構(gòu)建這樣一個集成了各種? prompt 的工具包。該工具的作者在智源社區(qū)的分享會提到了下一步的想法,這里我不再贅述,給大家分享其中一張 PPT,則可以窺見一二。
回顧 SPoT 這篇工作,把一個 unified 的 task 形式(seq2seq)和一個強(qiáng)大的生成模型(T5)作為基礎(chǔ),在 multi-task 上預(yù)訓(xùn)練的各個 prompt 可以在下游任務(wù)上有無限的可能。
我們有理由相信,在不遠(yuǎn)的未來,有了 Prompt Center 這一強(qiáng)大的工具,融合各種預(yù)訓(xùn)練的 prompt,應(yīng)用在各種下游任務(wù)上,將進(jìn)一步激發(fā) prompt learning?的實力。
特別鳴謝
感謝 TCCI 天橋腦科學(xué)研究院對于 PaperWeekly 的支持。TCCI 關(guān)注大腦探知、大腦功能和大腦健康。
更多閱讀
#投 稿?通 道#
?讓你的文字被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識的人。
總有一些你不認(rèn)識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)術(shù)熱點剖析、科研心得或競賽經(jīng)驗講解等。我們的目的只有一個,讓知識真正流動起來。
📝?稿件基本要求:
? 文章確系個人原創(chuàng)作品,未曾在公開渠道發(fā)表,如為其他平臺已發(fā)表或待發(fā)表的文章,請明確標(biāo)注?
? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發(fā)送,要求圖片清晰,無版權(quán)問題
? PaperWeekly 尊重原作者署名權(quán),并將為每篇被采納的原創(chuàng)首發(fā)稿件,提供業(yè)內(nèi)具有競爭力稿酬,具體依據(jù)文章閱讀量和文章質(zhì)量階梯制結(jié)算
📬?投稿通道:
? 投稿郵箱:hr@paperweekly.site?
? 來稿請備注即時聯(lián)系方式(微信),以便我們在稿件選用的第一時間聯(lián)系作者
? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿
△長按添加PaperWeekly小編
🔍
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁搜索「PaperWeekly」
點擊「關(guān)注」訂閱我們的專欄吧
·
總結(jié)
以上是生活随笔為你收集整理的全网首个OpenPrompt尝鲜报告:Prompt研究者必备实验利器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不懂就问,创远防火电线的“防火”性能怎么
- 下一篇: 博士申请 | 宾夕法尼亚州立大学招收机器