解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

風雨中的小七發表於2023-02-10

藉著ChatGPT的東風,我們來梳理下prompt正規化的相關模型。本系列會以A Systematic Survey of Prompting Methods in Natural Language Processing這篇綜述為基礎,分門別類的整理下這幾年比較有代表性的prompt模型。或許你還以其他形式看到過prompt概念,例如Demonstration,Instruction,In-Context learning,few-shot learning等等

開篇我們簡單介紹下Prompt正規化,並以其中的凍結引數Tunning-Free Prompt為線索串聯GPT2,GPT3,LAMA和AutoPrompt這四種凍結引數的基礎模型

what is prompt

  • 綜述1.Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing(五星好評)
  • 綜述2. Paradigm Shift in Natural Language Processing(四星推薦)
  • 綜述3. Pre-Trained Models: Past, Present and Future

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

Prompt即提示學習,是繼預訓練+微調正規化後眾望所歸的第四正規化。在預訓練+微調的正規化中我們調整預訓練模型來匹配下游任務資料,本質是對預訓練學到的眾多資訊進行重新排列和篩選。而Prompt是透過引入“提示資訊”,讓模型回憶起預訓練中學過的語言知識,也就是調整下游資料來適配預訓練模型,進而把所有NLP任務都統一成LM任務。

舉幾個例子,以下[x]為prompt提示詞,[z]為模型預測

  1. 分類任務:
    相比情緒分類對應的多分類0~N的輸出,Prompt會輸出對應代表情緒的token

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

  1. 抽取任務

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

  1. 生成任務

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

看著非常玄妙!但其實部分原理就來自於於超大的預訓練資料中包含的豐富文字知識。例如English2French的翻譯任務,在預訓練文字中會自然出現一些英法的對應文字如下。而提示詞的加入可以理解為嘗試還原模型在以下場景中的上下文(Attention)

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

那和預訓練+微調的正規化相比,Prompt有什麼優勢?

  • 微調引數量更小:這幾年模型越來越大,連微調都變成了一件很奢侈的事情,而prompt出現提供了新的選擇,可以freeze模型只對提示詞進行微調
  • 小樣本場景: 不少Prompt模型是面向zero-shot,few-shot場景設計的
  • 多工正規化統一:一切皆為LM!

Prompt模型的設計主要包含以下幾個模組,

  • Pretrain Model Choice:GPT等Decoder,BERT等Encoder,BART等Encoder-Decoder
  • Prompt Engineering:離散模板(文字),連續模板(embedding)的設計。模型效果對模板的敏感性,以及人工模板設計的不穩定的和難度是需要解決的問題
  • Answer Engineering: 包括答案文字的搜尋,和預測文字到標籤的對映。相比分類標籤,Prompt正規化輸出的答案多為文字,因此多了一步文字到標籤的解析
  • Training Strategy:主要有4種不同型別,LM和Prompt都凍結的Tunning-free,微調LM凍結Prompt,凍結LM微調Prompt,和LM+Prompt微調

我們先按照Training Strategy的不同,來梳理下各個方向的基礎模型,再進階的前沿模型,哈哈所以得花點時間才能輪到ChatGPT。第一章介紹Tunning-Free Prompt,在下游任務使用中LM和Prompt都是凍結的,不需要針對下游任務進行微調,可以用於Zero-shot和few-shot場景,主要介紹下GPT2,GPT3,LAMA和AutoPrompt。

GPT2

  • GPT2:Language Models are Unsupervised Multitask Learners,2019.2
  • 任務:NLG
  • Prompt: Discrete + Hand crafted Prompt
  • 核心:Language Model本身就是無監督的多工學習

在前BERT時代,通用文字表徵-GenSen就探索過透過多工得到在不同下游任務中泛化能力更好的文字表徵,而後BERT時代,MQPN,MTDNN等模型也探索過如何透過多工學習得到更加通用的大模型。

GPT2更往前邁了一步,它認為如果語言模型足夠優秀,則在擬合\(P(output|input)\)的過程中,對\(p(output|input,task)\)也會進行學習,因為NLP任務資訊本身就會在豐富的預訓練預料中出現,例如上面我們舉的翻譯的case。和GPT相比,GPT2的創新就是在“LM是無監督多工”這個觀點上,所以GPT2的評測是基於無finetune的zero-shot場景進行的,旨在證明足夠優秀的語言模型是可以不經過微調直接用在不同的下游場景中的。

那如何讓模型針對不同的任務給出預測呢?作者透過在原始Input上加入任務相關提示詞的方式,這不prompt就來了!舉個例子

  • Translation:English = 輸入 French = ?
  • Summarization:文章 + TL;DR:?,這裡TL;DR是Too Long; Didn't Read的縮寫,可類比我們的‘一言以蔽之‘,會出現在大段文字的末尾作為總結昇華,或者對話中

幾年前看GPT2的論文,只覺得模型更大了(評估是用的1542M的版本是Bert-large的5倍),樣本更多了,zero-shot的能力挺新奇但是效果差點意思。如今從Prompt的角度重讀,GPT2更像是在探索模型zero-shot能力的時候不小心推開了prompt的大門,從最直觀的視角構建了Prompt提示詞,也就是類似的任務在常規文字中是以什麼形式(關鍵詞)出現的,就以該形式構建文字輸入即可~

除此之外GPT2對模型的微調以及構造了更大質量更高的資料集這裡就不細說了~

GPT3

  • GPT3: Language Models are Few-Shot Learners, 2020.5
  • Making pre-trained language models better few-shot learners
  • 任務:無所不能
  • Prompt: Discrete + Hand crafted Prompt + Prompt Augmentation
  • 核心:大力出奇跡!175B大模型在few-shot,zero-shot的模型表現甚至可以比肩微調

GPT3是GPT2的延續,一方面旨在進一步提高模型的zero-shot能力,方法簡單粗暴加引數就完事了!175Billion的引數首次證明了規模的量變會帶來質變![Ref8]詳細論證了大模型會帶來一些奇蹟般的能力,包括更強的複雜推理,知識推理,和樣本外泛化能力!

另一方面GPT3在few-shot場景做了很多嘗試,提出了自帶神秘光環的in-context learning,可以被歸類為multi-prompt中的prompt augmentation方案~

175Billon!

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

GPT3的模型結構延續GPT系列,但測試了不同模型引數量級的8個模型在不同下游任務上的效果,從125M到175B,模型效果在zero/one/few-shot的設定下都有穩步提升。在TriviaQA等任務上175B的GPT3甚至超越微調模型拿到了SOTA,算是預訓練模型超越微調模型的第一次。但在NLI(判斷兩個句子是相似,對立,中性),WiC(判斷一個單詞是否在兩個句子中含義相同)兩個任務上GPT3的表現非常差,看起來似乎對涉及兩個句子間邏輯推斷的任務並不擅長。或許因為類似兩個文字的邏輯推斷在預訓練文字中未出現過?

針對GPT3變態的模型大小,我們不聊技術壟斷,OpenAI好有錢blabla我更好奇的是增長的引數究竟是如何提升模型能力?是更多的引數可以記憶更多的知識?還是更大的向量空間可以讓模型學到更加線性可分的空間表徵,使得下游任務對資訊的解碼更加簡單,所以在few-shot場景有更好的表現?還沒看到較嚴謹的論證,有知道的盆友求答疑解惑

In-context learning

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

論文在GPT2已有的zero-shot的基礎上,提出了In-Context learning的概念,也稱類比學習,上下文學習或者語境學習。有one-shot和few-shot兩種方案,對應不同的增強Prompt的構建方式。隨著模型引數量級的提升,few-shot,one-shot帶來的效果提升更加顯著。以英翻法任務為例

  1. zero-shot: Prompt為任務描述

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

  1. one-shot: Prompt Augmentation,任務描述+一個帶答案的樣本

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

  1. few-shot: Prompt Augmentation,任務描述+多個帶答案的樣本

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

GPT3對其他NLP任務的prompt構建方案詳見論文附錄G~

對於Prompt Augmentation帶來的效果提升,個人感覺in-context這個詞的使用恰如其分,就是帶答案的樣本輸入其實做了和任務描述相似的事情,也就是讓待預測的輸入處於和預訓練文字中任務相關語料相似的上下文。帶答案的樣本比任務描述本身更接近自然的上下文語境。

不過prompt增強的構建還有許多細節待研究,例如抽取哪些樣本更好,不同樣本模型預測結果是否穩健,樣本答案的構建方式,樣本的順序是否有影響等等。針對素材生成的場景沒啥所謂,但是對抽取,分類,QA等任務,如果不同的prompt會得到顯著不同的結果,就讓人很頭疼了~

[Ref6]的論文更深入的探究了in-context具體提供了哪些資訊,作者定位到以下4類資訊

  1. 輸入標籤的對應關係: 把樣本標籤改成錯誤標籤,模型效果下降有限
  2. 標籤分佈:把標籤改成隨機單詞,模型效果有顯著下降
  3. 輸入分佈:在prompt中加入領域外文字,模型效果有顯著下降
  4. 輸入輸出格式:改變雙輸入格式,在prompt中只保留標籤或者只保留輸入,模型效果都會有顯著下降

GPT3正式推開了in-context learning的大門,模型引數也斷層式的增長進入了Billon級別,後面的Flan,PaLM,LaMDA皆是這個大小。不過就效果而言GPT3在部分任務上依舊會被小模型T5吊打,以至於模型規模增長到底是否是正確的技術方向一度被質疑,直到之後的Chain of Thought出現才被逆轉,這個放在後面章節再說~

LAMA

  • LAMA: Language Models as Knowledge Bases? 2019.9
  • Github: https://github.com/facebookresearch/LAMA
  • 任務:NLU(實事抽取)
  • prompt: cloze + Hand Craft Prompt
  • 核心:不經過微調的Bert在知識抽取和開放與問答上效果驚人的好,可以比肩有監督的KG基準

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

LAMA是在GPT2和GPT3之間提出的一個探測(probe)任務,旨在研究預訓練模型儲存的知識資訊,這裡只考慮實體關係三元組(Subject, Relation, Object)。

LAMA設計的Probe方案就是人工設計的完形填空(cloze)型別的prompt模板。例如把出生地實體識別,轉化成小明出生於[MASK]的完形填空任務,如果模型預測MASK正確,就認為模型掌握了這一知識。

來具體說下LAMA針對不同關係構建的Prompt模板。論文使用以下4個評測資料

  1. Google-RE

Wikipedia抽取的事實,包括5種關係,論文只保留了出生地,死亡地,出生日期3種關係,因為剩餘兩種的預測結果為多token,而LAMA的答案模板限制只預測1個token。每種關係作者手工構建了Prompt填空模板,舉個例子

  • 出生時間
    • Federico Falco is an Argentinian writer born in [MASK] .
    • Steve Lindsey (born May, 6th [MASK]) is an American record producer
  • 出生地
    • Lucy Toulmin Smith was born at [MASK], Massachusetts, USA
    • Born in [MASK], New Jersey, Connor attended parochial schools as a child
  • 死亡地
    • Uvedale Tomkins Price died at [MASK] in 1764
    • Lewin died on December 18, 2010, at the age of 84 in [MASK]
  1. T-REx

wikidata三元組,比Google-RE範圍更廣,作者選取了41種關係,每種關係取樣了1000條事實。每種關係作者手工構建了Prompt模板,部分Prompt如下

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

  1. ConceptNet

多語言詞之間的常識關係,作者只考慮object為英文單字的16種關係,部分prompt如下

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

  1. SQuAD

QA資料集,論文選取了305條上下文無關,且回答為單字的問題。prompt模板透過人工把問題改造成MLM語句得到,舉個例子

  • The Normans combine with the [MASK] culture in Ireland
  • Isaac's chains made out of [MASK].

因為LAMA只檢測實體三元組關係,所以除Squad外的prompt模板可以抽象為'[X] relation [Y]'的完形填空形式, 但是prompt構建本身還是依賴人工,完整的LAMA資料集詳見github~

這類Hand Crafted Prompt的構建主要有2個問題,一個是全靠人工,另一個在論文中也有提到就是不同的prompt對結果有較大影響,那如何找到最優的構建方案是個需要解決的問題

在Answer模板上LAMA限定了答案只能是token,這和它選擇的預訓練模型是BERT有關,所以Answer的解析沒啥好說的就判斷預測token是否正確即可。

其他探測任務相關的細節這裡就不展開,感興趣的盆友可以去看論文~

AutoPrompt

  • paper: AutoPrompt Eliciting Knowledge from Language Models,2020.10
  • github: https://github.com/ucinlp/autoprompt
  • 任務:NLU(NLI,實事抽取,關係抽取)
  • prompt: Discrete + Gradient Search Prompt

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

AutoPrompt是在LAMA上的改進,針對LAMA需要人工構造Prompt的問題,提出了一種基於梯度自動生成提示詞的方案。論文針對分類任務,作者設計了通用的prompt模板如下,在原始文字輸入的基礎上,拼接多個觸發詞[T],最後一個MASK token為模型預測[P]。

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

下面分別針對Prompt和Answer Engineering來說下細節

LAMA的一個核心問題就是人工構造Prompt的成本和效果的不確定性,AutoPrompt借鑑了文字對抗AdvTrigger的梯度搜尋方案,給定樣本和模型可以自動搜尋任務相關觸發詞。

AdvTrigger旨在找到和輸入以及模型無關的通用Trigger,把這個Trigger拼接在輸入文字的開頭或者結尾可以使得模型得到特定的結果,可以是增加模型的誤判率,使得模型輸出有種族歧視的文字,或者讓模型輸出相同的錯誤結果等等。以下是AdvTrigger中給出的例子(注意以下案例只顯示模型結果)

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

AutoPrompt使用了相同的Trigger搜尋方式,首先把觸發詞用[MASK]初始化,然後逐步迭代來最大化以下似然函式,即加入觸發詞後MASK預測為正確標籤的機率最大化

\[p(y|x_{prompt}) = \sum_w p([MASK]=w|x_{prompt}) \]

每一步迭代透過用以下一階泰勒展開來近似把觸發詞改成j後似然函式的變化(梯度*詞向量),得到最大化似然函式的topK個觸發詞。然後把觸發詞拼接輸入,重新計算上述似然函式。以上兩步迭代多次,得到最終的TopK觸發詞,這裡K作為超參可以有{3,6}個

\[V_{cand} = topk_{w \in V}[w_{in}^T \bigtriangledown log p(y|x_{prompt})] \]

所以AutoPrompt雖然省去了人工構建prompt,但是需要下游標註任務樣本來搜尋觸發詞,一定程度上不算是tunning-free正規化,更像是Fixed-LM Prompt-Tunning,除非搜尋得到的觸發詞能直接遷移到相同任務其他領域資料中,不過這部分論文中並未評測。

Auto Label Token Selection

AutoPrompt除了評估事實抽取任務,還加入了對分類任務的評估所以需要對Answer部分進行額外處理把模型預測的token對映到分類標籤。這裡主要是多token到單label的對映,例如哪些單詞代表情感正向,哪些是負向。依舊是基於下游人物樣本的有監督方案,top-k標籤詞的選擇需要兩步

第一步是label表徵,作者使用了模型對[MASK]的模型輸出作為x,真實標籤作為Y,訓練了一個logit classifer,這時模型權重(hidden_size * label_size )其實就是標籤的空間表徵

\[\begin{align} h = Transformer([MASK]) \\ p(y|h) \propto exp(h\odot y+\beta) \end{align} \]

第二步是token打分,作者把[MASK]替換為其他候選token,\(p(y|h_{token})\)機率值越高,意味著token的輸出向量和標籤向量相似度越高,因此選擇機率值最高的K個token來作為標籤的答案詞。

最後我們看下AutoPrompt搜尋得到的觸發詞和答案長啥樣,可以說是完全出乎意料,毫無邏輯可言,觸發詞和答案候選詞都很離譜哈哈哈

解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt

至於效果AutoPrompt超越LAMA嘛,本身AutoPrompt就是使用下游任務樣本搜尋的Prompt和label,不好才奇怪不是~~~


Reference

  1. 蘇神的必須要GPT-3嗎?不,BERT的MLM模型也能小樣本學習
  2. MQPN: The Natural Language Decathlon: Multitask Learning as Question Answering
  3. MT-DNN:Multi-Task Deep Neural Networks for Natural Language Understanding
  4. Why can GPT learn in-context? Language Model Secretly Perform Gradient Descent as Meta-Optimizers
  5. How does in-context learning work? A framework for understanding the differences from traditional supervised learning
  6. Rethinking the Role of Demonstrations: What Makes In-Context Learning Work?
  7. Universal Adversarial Triggers for Attacking and Analyzing NLP
  8. In-Context-Learning_PaperList
  9. Emerging Ability of Large Language Models

相關文章