prompt 綜述
1. 概述
1.1 基本概念
用一句話概括模板學習,即將原本的輸入文字填入一個帶有輸入和輸出槽位的模板,然後利用預訓練語言模型預測整個句子,最終可以利用這個完整的句子匯出最終需要的答案。
模板學習最吸引人的關鍵在於其通過已有的預訓練模型,定義合適的模板就能完成 few-shot 或者 zero-shot 任務,這樣可以使得語言模型可以在預訓練階段利用盡可能多的資訊進行訓練,後續也能最大效率的發揮其作用。
從數學角度來看模板學習,我們傳統的監督學習解決的是 P (y|x; θ) 問題,訓練一個模型優化其引數 θ,在面對輸入 x 時給出輸出 y 的概率;而基於模板學習的方法希望解決的是 P (x; θ) 問題,即給定一個引數為θ的模型,你需要告訴我輸入文字 x 出現的概率,然後利用這個概率去預測正確的 y。這樣就能夠減少甚至是避免需要大量的標註資料。
1.2 典型組成
基於上面的概述可以看出,模板學習可以說由三個部分組成——模板設計、答案搜尋和答案對映。
模板的典型特點為必須具備兩個槽位,一個用來填入原始輸入文字,一個用來填入答案。根據答案槽位位置的不同可以分為兩個大類,答案槽位位於整個模板中間時一般被稱為完形填空式模板,而答案槽位位於末尾時一般被稱為字首式模板。
答案搜尋即計算答案空間中的所有候選答案填入對應槽位時 LM 的最高打分結果,所謂答案空間即根據具體任務構建的候選答案,比如對於生成任務來說答案空間就是全部的 token,而對於某些分類任務答案空間可能是固定範圍的片語,如「很好」「不錯」「還行」「極差」「垃圾」代表「-1」「0」「1」。當然最終選擇哪些答案作為最佳答案的策略不是唯一的,比如可以簡單的選擇最高分答案,也可以根據 LM 的打分進行隨機取樣多個答案。
答案對映即根據最優答案得到下游任務要求的標籤,如前文提到的「很好」對映為「1」,「極差」對映為「-1」。
2. 預訓練語言模型
這部分對各大預訓練語言模型按多個維度進行分類,以便明白在模板學習中如何選擇合適語言模型。
2.1 訓練目標
預訓練語言模型的目標主要是兩個:1)文字順序出現的概率;2)文字降噪。
以文字順序出現的概率為目標的模型普遍都是以自迴歸的方式預測一個序列中順序出現的 token(經常會是自左至右的),這種模型被稱為標準 語言模型 (Standard Language Model, SLM) ,比如 GPT。
以文字降噪為優化目標的模型往往是對一個給定文字進行噪音處理,最終去預測原始的去噪文字。利用有噪聲的部分資料去重建原始資料的方案被稱為損壞文字重建(Corrupted Text Reconstruction, CTR ) ,比如 BERT;不管是否有噪音使用所有輸入文字去重建原始資料的方案被稱為全文字重建(Full Text Reconstruction, FTR) ,比如 BART。
2.2 加噪方式
常見的加入噪聲的方式主要是四種,遮蓋、替換、刪除和置換。
2.3 編碼方向以及典型代表
目前主要使用的編碼方向主要有三種:1)從左至右;2)雙向。
從左至右的典型應用是 GPT 家族;雙向模型的一般都是 MLM(masked language model),典型模型是 BERT;將這兩種方向進行結合,即 x 部分使用雙向 mask 方式,y 部分使用從左至右方式,這種方式又分為兩類模型,一種是字首語言模型(prefix language model),其 y 部分使用 x 作為字首條件進行解碼,其典型模型是 UniLM;另一種是編解碼模型(encoder-decoder),其 y 部分使用 x 獨立編碼為條件進行解碼,其典型模型是 BART。
2.4 具體模型分類
3. Prompt 引擎
即找到一個 function,能夠將輸入轉化應用到下游任務上,並獲得最好的效果。
3.1 形式
最常見的兩種形式為完形填空式(cloze prompts)和字首式(prefix prompts)。
至於選擇什麼樣形式的模板主要是根據使用的 LM 和具體的下游任務,比如對於生成式問題或者自迴歸式預訓練模型,字首式一般表現較好,而對於完形填空問題和 masked 預訓練模型,完形填空式一般表現更好。
全文重建式模型(full text reconstruction)使用這兩種形式都可以。
對於一些特殊的多輸入任務,比如句子對分類,其選擇的模板形式則應該需要容納多個輸入。
如:
Language Models as Knowledge Bases?
Template-Based Named Entity Recognition Using BART
Prefix-Tuning: Optimizing Continuous Prompts for Generation
The Power of Scale for Parameter-Efficient Prompt Tuning
3.2 人工模板工程
人工模板即通過人工的方式來設計模板,目前也有很多設計得相當好的模板。
但其存在的問題也是顯然的,1)非常依賴設計者的經驗和直覺,相當費時;2)即便是經驗豐富的設計者也並不一定就能發現合適的模板。
3.3 自動模板學習
自動模板學習又可以進行細分。從模板形式來看可以分為離散的和連續的,離線模板比如真實的自然文字,連續的比如模板是使用 LM 的嵌入空間。從使用方式來看可以分為靜態的和動態的,靜態的即對於不同的輸入都使用同一種模板,而動態的則是對於不同輸入生成不同的模板。
3.3.1 離散模板
模板挖掘(prompt mining)
這種方式是給出輸入和輸出,自動的挖掘模板。其需要依賴一個較大的文字庫,這個文字庫需要包含輸入和輸出,然後去搜索輸入和輸出之間的中間詞或者依賴路徑,其中出現最為頻繁的中間詞或者依賴路徑作為模板使用。其表現形式為"[X] 中間詞 [Z]"。
如:How Can We Know What Language Models Know?
模板改寫(prompt paraphrasing)
這種方式是對種子模板進行改寫,種子模板可以是任意方式生成的,比如人工構造的或者挖掘而來,通過改寫獲得一系列的候選模板,然後選擇訓練結果最好的模板。改寫的方式是多樣的,比如多語言的雙向翻譯、同義詞替換,也可以利用神經網路進行改寫。
如:
How Can We Know What Language Models Know?
BARTScore: Evaluating Generated Text as Text Generation
BERTese: Learning to Speak to BERT
梯度搜索(gradient-based search)
這種方式是利用單詞候選集中的各種組合來構造模板,利用梯度下降的方式不斷迭代嘗試模板,最終獲得最合適的模板。
如:
Universal Adversarial Triggers for Attacking and Analyzing NLP
AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts
模板生成(prompt generation)
這種方式將模板的生成視為通常的文字生成任務。比如給 T5 模型來生成模板詞。
如:
Making Pre-trained Language Models Better Few-shot Learners
PADA: A Prompt-based Autoregressive Approach for Adaptation to Unseen Domains
模板打分(prompt scoring)
這種方式藉助知識圖譜的三元組概念(頭實體 - 關係 - 尾實體),首先人工構造一系列三元組模板集作為候選,分別填入輸入和輸出,利用一個單向的 LM 對這些填入的候選模板進行打分,使用打分最高的模板。當然這會使得每個輸入都可能有不同的模板。
如:Commonsense Knowledge Mining from Pretrained Models
3.3.2 連續模板
構造模板的意圖是使得 LM 能夠更好完成下游任務,並非是使得人可以理解,所以這也就說明了模板可以設計得不必滿足人可以理解這一限制。由此,利用LM的嵌入空間來設計模板成為一個自然的想法。而使用連續型模板有兩大好處,1)取消了模板詞僅能選擇有限的自然語言 token 的限制;2)移除了模板引數僅能讀取自 LM 模型的限制,這意味著模板也能進行訓練。
字首微調(prefix tuning)
這種方式在輸入前加入與任務相關的連續字首向量,這個字首向量是可訓練的,而後續的 LM 引數是固定不變的。其數學表示式如下:
其中,φ 為一個可訓練的引數,θ 為 LM 引數 h 為在第 i 步時所有神經網路層的 concat 。
這裡提到主要的兩種方法,一種是構建一個可訓練的矩陣,作為生成字首 embedding,其運作迭代方式對於每一層的 h,當h處於字首時直接複製這個矩陣,不處於字首時由 LM 引數計算;另一種方式是加入幾個特殊的字首 token 來作為模板,訓練時直接更新這些字首 token 的 embedding。
如:
Prefix-Tuning: Optimizing Continuous Prompts for Generation
The Power of Scale for Parameter-Efficient Prompt Tuning
Multimodal Few-Shot Learning with Frozen Language Models
離散模板初始化微調(tuning initialized with discrete prompt)
這種方式利用離散模板作為初始化,然後將其連續化,這種方式往往能夠提供更好的起始搜尋結果。比如利用離散化的模板將其轉化為 embedding,然後這些 token 是可以微調的,有點像字首微調模式的後一種方式。
如:
Factual Probing Is [MASK]: Learning vs. Learning to Recall
AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts
Learning How to Ask: Querying LMs with Mixtures of Soft Prompts
軟硬模板混合微調(hard-soft prompt hybrid tuning)
這種方式融合了離散模板和連續模板,其做法在於在靜態的模板中插入一些可訓練的 embedding。比如之前比較火的 p-tuning 的模板就是由可微調的 trainable token 和不可微調的 anchor token 組成。
如:
GPT Understands, Too
PTR: Prompt Tuning with Rules for Text Classification
4. 答案引擎
答案引擎的目的是找到一種對映,使得模板搜尋輸出的結果空間對映到真實的下游任務輸出空間。
4.1 答案的形式
主流的答案為三種:token span sentence,即詞粒度,短語粒度和句子粒度。
一般來說選擇何種答案形式都是和具體下游任務相關,比如分類任務、命名實體識別任務一般是詞粒度;文字生成任務一般是短語和句子粒度。
4.2 答案空間設計方式
4.2.1 人工設計
潛在的答案空間與對映方式均由人工設計,根據其答案空間的不同可分為受限空間和非受限空間,非受限空間指答案可能是全量 token 集或者固定長度的 span 或者 token 序列,這種情況對映是不必要的;受限空間是指輸出的答案是有限固定範圍的,比如常見的分類任務、實體識別任務、多選擇問答任務等,這種情況下就需要一個合適的對映方式。
4.2.2 離散答案搜尋(discrete answer search)
答案改寫(answer paraphrasing)
這種方式將原始的答案空間(即輸出的所有可能結果),通過改寫(比如回譯)擴張其覆蓋範圍上限,然後定義一個功能使得這個答案空間轉化為最終答案(比如可以是 softmax)。
如:How Can We Know When Language Models Know? On the Calibration of Language Models for Question Answering
剪枝然後搜尋(prune-then-search)
這種方式首先生成一個所有合理答案的剪枝空間,然後通過演算法進一步搜尋這個剪枝空間直到最終獲取合適的答案。比如將大型未標註資料集中頻繁出現的長於2個字母的單詞作為答案空間,在搜尋時,反覆迭代計算(如最大似然)當一個詞作為答案時與 label 之間的合適性。
如:
Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference
Automatically Identifying Words That Can Serve as Labels for Few-Shot Text Classification
AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts
Making Pre-trained Language Models Better Few-shot Learners
5. 多模板學習
大量的研究表明,使用多重模板可以提升模板方法的有效性
5.1 模板融合(prompt ensembling)
模板聚合即使用多個待回答的模板來進行預測,其具有三方面的優勢:1)使得各模板可以互補;2)不必找到所謂的最佳模板;3)在下游任務上表現更為穩定。
實際使用時如何由多個模板最後得到唯一結果有多種方式:一致性平均(uniform averaging);帶權重平均(weighted averaging);多數投票(majority voting);知識蒸餾(knowledge distillation)。
一致性平均即每個模板產生的結果的概率直接進行平均,即
權重平均即每個模板貢獻的得分是不一致的,而具體使用時權重可以是人為規定的,也可以是訓練得出的;多數投票一般用於下游為分類任務時;知識蒸餾即再訓練一個模型的來對原來的多個模板產出的結果進行擬合。
5.2 模板增強(prompt augmentation)
模板增強又被叫做證明學習,其目的是提供一些類似的答案模板來讓網路瞭解你的輸出應該是什麼。比如對於一個「中國的首都是[Z]」的輸入,改寫為「英國的首都是倫敦,日本的首都是東京,中國的首都是[Z]」。當然這種方式需要解決兩大問題:1)如何選擇更為有效的提示;2)對選擇的提示如何進行排序。
研究者發現如何選擇提示樣本對模型訓練效果會產生極大的影響(選擇不同的樣本其結果可能是sota也可能是接近隨機預測結果)。目前提出的一種方式是利用句向量空間,選擇與輸出相似的向量空間的句子作為樣本。
如:Making Pre-trained Language Models Better Few-shot Learners
而即使是相同的提示,不同的排序方式也會導致結果的巨大差別。目前提出的一種方式是依據熵來對各種排序進行打分。
如:Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity
5.3 模板融合(prompt composition)
模板融合指的是將多個子模板任務融合為一個模板任務。比如在關係抽取任務中,其目標是抽取兩個實體間的關係,可以將其改變為兩個子任務:1)識別實體詞;2)實體間的關係分類。
如:PTR: Prompt Tuning with Rules for Text Classification
5.4 模板分解(prompt decomposition)
對於那種需要對一個輸入進行多個預測的任務,使用一個模板來直接預測所有的結果會相對困難,而如果將其拆分為多個子模板一般會更為簡單。比如命名實體識別任務,需要對每個span進行進行預測,而將其拆分為分別對每個 span 進行預測就會更為簡單。
如:Template-Based Named Entity Recognition Using BART
6. 訓練策略
基於模板學習的訓練方式,通常有兩部分引數構成,其一為預訓練模型本身的引數,另一部分為模板引數,選擇不同的這兩部分引數的更新策略會影響其下游任務在不同場景下的適用性。根據預訓練模型引數是否需要微調、是否存在額外的模板引數以及模板引數是否需要微調可以將訓練策略大致分為這樣幾類:
6.1 無模板微調(promptless fine-tuning)
即常用的使用 LM finetune 的方式,它會使得 LM 的所有引數在下游任務訓練時進行微調。
其優點在於簡單方便;但缺點在於在資料集較小時容易出現過擬合或者預測結果不夠穩定,此外,經過下游任務 finetune 之後可能導致原模型在其他場景上出現災難性的遺忘。
6.2 無需微調模板(tuning-free prompting)
這種方式無需微調LM引數也無需更新模板引數,他所要做的就是找到合適的模板,此外,可以可選的加入答案模板進行增強(這種方式又被稱為上下文學習)。
其優點在於無需引數更新,是真正的零樣本學習應用方式;其缺點同樣明顯,即需要為具體的任務構造模板,為了達到比較高的準確度需要大量的模板構造工程,如果採用模板增強方式需要構造大量的答案模板,同樣需要大量的時間和精力。
6.3 模板微調(fixed-LM prompt tuning)
這種方式在原有語言模型的基礎上引入可學習的模板,在下游任務訓練過程中不更新預訓練模型,僅更新模板引數。
在保全了語言模型的本身的模型能力的同時,效果往往比無需微調模板好,其應用場景多是在小樣本學習上;由於其模板引數需要訓練,所以往往完全不能應用於零樣本學習場景,另外儘管其在小樣本學習的有效性已經被驗證,但效果仍然受制於資料集大小。模板微調也是需要選擇初始引數和構造種子模板的,且其效果往往更為不可控。
6.4 語言模型微調(fixed-prompt LM tuning)
相較於無模板的傳統 finetune 式訓練方式,這種方式仍然要求模板的存在,只是其不會進行更新,僅僅同時存在於訓練和預測過程中,其形式往往是自然語言文字。通過實驗證明,這種方式在小樣本學習上仍然可以取得可觀的進步。比如在某個實驗中定義了一個簡單的模板——無模板,僅僅將輸入和答案空間放在一起訓練(形如[X][Z],[X]為輸入文字,[Z]為答案空間)也獲得了不錯的效果。
這種訓練方式給出了更為完整的任務資訊,使得在小樣本學習時更加有效;這種方式在不同的下游任務上效果不一定都好,且仍然需要模板設計和答案空間的設計。
6.5 語言模型和模板均微調(prompt+LM tuning)
這種方式的語言模型和模板的引數均可進行更新,除了可訓練的模板似乎和常見的無模板微調方式區別不大,但加入模板使得模型在訓練開始之時獲得更好的輔助。
其優勢在於模型具有更強的表達力,其更加適用於大量複雜資料(high-data)的訓練;其劣勢在於語言模型和模板的大量引數需要優化,所以在小資料樣本時容易出現過擬合。
7. 具體應用
7.1 應用舉例
縮寫說明: task列 CR: Commonsense Reasoning QA: Question Answering SUM: Summarization MT: Machine Translation LCP: Linguistic Capacity Probing GCG: General Conditional Generation CKM: Commonsense Knowledge Mining FP: Fact Probing TC: Text Classification MR: Mathematical Reasoning SR: Symbolic Reasoning AR: Analogical Reasoning Theory: Theoretical Analysis IE: Information Extraction D2T: Data-to-text TAG: Sequence Tagging SEMP: Semantic Parsing EVALG: Evaluation of Text Generation VQA: Visual Question Answering VFP: Visual Fact Probing MG: Multimodal Grounding CodeGen: Code generation prompt engineering shape列 Clo: Cloze Pre: Prefix answer engineering shape列 Tok: token-level Sp: span-level Sent: sentence-level / document-level tuning 列 TFP: tuning-free prompting LMT: fixed-prompt LM tuning PT: fixed-LM prompt tuning LMPT: prompt+LM tuning mul-pr 列 PA: prompt augmentation PE: prompt ensembling PC: prompt composition PD: prompt decomposition ## 7.2 常見模板 ## 8. 模板學習存在的挑戰 ## 8.1 模板設計方面 1、目前的模板學習主要應用於分類和生成任務,而在其他任務上應用較少(比如資訊抽取和文字分析),究其原因在於在其他任務上設計模板沒有那麼直觀。後續發展上,或者是需要將這些任務進行任務形式的轉變使其可以適用於分類和生成任務,或者需要設計更為強大的答案引擎。 2、在許多 nlp 任務中,輸入可能包含各種結構化資訊,比如樹、圖、表格等,怎樣更好的在模板引擎和答案引擎中表述這些資訊是很大的挑戰。目前的做法主要是將一些詞彙進行編碼放入模板中,但是對於更為複雜的結構並未有過嘗試。 3、模板學習模型的表現主要依賴於模板的選擇和答案引擎的制定,目前的主流做法是先制定好答案引擎再選擇模板,如何同時對模板選擇和答案設計進行優化也是主要的挑戰之一。 ## 8.2 答案引擎方面 1、對於分類任務而言,當類別過多時如何合理的選擇答案空間是一個特別有挑戰性的問題。 2、當分類任務的答案是多位元組(multi-token)時,如何有效的編碼也是一個充滿挑戰的問題。 3、對於生成任務而言,答案往往不止一個,如何引導學習過程去學習多種答案目前還是一個巨大的問題。 ## 8.3 訓練策略方面 針對不同的任務,如何選擇合適的訓練策略目前也沒有系統的方案,各策略到底對模型結果有何影響也是缺乏系統性的解釋的。 ## 8.4 多模板學習方面 1、模板融合作為一種有效提高效果的方案,一般來說融合的模板越多效果越好,但是其複雜度也是不斷上升的,如何有效的通過蒸餾等方式降低複雜度目前還沒有這方面的研究。 2、使用模板增強時往往受制於輸入文字的長度,那麼如何提煉更有效的增強文字以及如何對這些文字進行排序也是一個重要的研究方向。 # 9. 參考資料 [1] **Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing:** http://arxiv.org/pdf/2107.13586.pdf [2] **Language Models as Knowledge Bases?:** http://arxiv.org/pdf/1909.01066.pdf [3] **Template-Based Named Entity Recognition Using BART:** http://arxiv.org/pdf/2106.01760.pdf [4] **Prefix-Tuning: Optimizing Continuous Prompts for Generation:** http://arxiv.org/pdf/2101.00190.pdf [5] **The Power of Scale for Parameter-Efficient Prompt Tuning:** http://arxiv.org/pdf/2104.08691.pdf [6] **How Can We Know What Language Models Know?:** http://arxiv.org/pdf/1911.12543.pdf [7] **BARTScore: Evaluating Generated Text as Text Generation:** http://arxiv.org/pdf/2106.11520.pdf [8] **BERTese: Learning to Speak to BERT:** http://arxiv.org/pdf/2103.05327.pdf [9] **Universal Adversarial Triggers for Attacking and Analyzing NLP:** http://arxiv.org/pdf/1908.07125.pdf [10] **AutoPrompt: Eliciting Knowledge from Language Models with Automatically Generated Prompts**:http://arxiv.org/pdf/2010.15980.pdf [11] **Making Pre-trained Language Models Better Few-shot Learners:** http://arxiv.org/pdf/2012.15723.pdf [12] **PADA: A Prompt-based Autoregressive Approach for Adaptation to Unseen Domains:** http://arxiv.org/pdf/2102.12206.pdf [13] **Commonsense Knowledge Mining from Pretrained Models:** http://arxiv.org/pdf/1909.00505.pdf [14] **Multimodal Few-Shot Learning with Frozen Language Models:** http://arxiv.org/pdf/2106.13884.pdf [15] **Factual Probing Is [MASK]: Learning vs. Learning to Recall:** http://arxiv.org/pdf/2104.05240.pdf [16]**Learning How to Ask: Querying LMs with Mixtures of Soft Prompts:** http://arxiv.org/pdf/2104.06599.pdf [17] **GPT Understands, Too:** http://arxiv.org/pdf/2103.10385.pdf [18] **PTR: Prompt Tuning with Rules for Text Classification:** http://arxiv.org/pdf/2105.11259.pdf [19] **How Can We Know When Language Models Know? On the Calibration of Language Models for Question Answering:** http://arxiv.org/pdf/2012.00955.pdf [20] **Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference:** http://arxiv.org/pdf/2001.07676.pdf [21] **Automatically Identifying Words That Can Serve as Labels for Few-Shot Text Classification:** http://arxiv.org/pdf/2010.13641.pdf [22] **Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity:** http://arxiv.org/pdf/2104.08786.pdf # 10. 加入我們 我們來自位元組跳動飛書商業應用研發部(Lark Business Applications),目前我們在北京、深圳、上海、武漢、杭州、成都、廣州、三亞都設立了辦公區域。我們關注的產品領域主要在企業經驗管理軟體上,包括飛書 OKR、飛書績效、飛書招聘、飛書人事等 HCM 領域系統,也包括飛書審批、OA、法務、財務、採購、差旅與報銷等系統。歡迎各位加入我們。
- 解鎖抖音世界盃的畫質優化實踐
- Kafka 架構、核心機制和場景解讀
- 頭條穩定性治理:ARC 環境中對 Objective-C 物件賦值的 Crash 隱患
- 位元組跳動模型大規模部署實戰
- 「飛書績效」寬表SQL自動生成邏輯淺析
- Mybatis原始碼主流程分析
- 推薦系統的Bias
- 抖音 Android 基礎技術大揭祕!| 位元組跳動技術沙龍第十期
- 基於序列標註模型的主動學習實踐
- 加密技術科普
- 二維碼掃描優化
- 前端監控系列4 | SDK 體積與效能優化實踐
- 特效側使用者體驗優化實戰 —— 包體積篇
- 深入理解 Android Studio Sync 流程
- 選擇 Go 還是 Rust?CloudWeGo-Volo 基於 Rust 語言的探索實踐
- 初探自然語言預訓練技術演進之路
- 高效能 RPC 框架 CloudWeGo-Kitex 內外統一的開源實踐
- 開源 1 週年突破 1w Star - CloudWeGo 開源社群實踐分享
- Go 語言官方依賴注入工具 Wire 使用指北
- prompt 綜述