最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

提示學習(Prompt Learning)

2023-07-10 20:43 作者:Tartaether  | 我要投稿

Prompt Learning|深入淺出提示學習要旨及常用方法

(轉載Prompt Learning|深入淺出提示學習要旨及常用方法 - 知乎 (zhihu.com),自用筆記)

一. NLP的訓練范式有哪些

二. 為什么需要提示學習

三. 提示學習是什么

四. 常見的提示學習方法

1. 硬模板方法:

2. 軟模板方法:

五. 總結

參考:

近年來 NLP 學術領域發(fā)展真是突飛猛進,剛火完對比學習(contrastive learning),又有更火的提示學習 prompt learning。眾所周知,數(shù)據(jù)標注數(shù)據(jù)很大程度上決定了AI算法上限,并且成本非常高,無論是對比學習還是提示學習都著重解決少樣本學習而提出,甚至在沒有標注數(shù)據(jù)的情況下,也能讓模型表現(xiàn)比較好的效果。本文主要介紹 prompt learning 思想和目前常用的方法。

目錄

一. NLP的訓練范式有哪些

二. 為什么需要提示學習

三. 提示學習是什么

四. 常見的提示學習方法

五. 總結

一. NLP的訓練范式有哪些

目前學術界一般將NLP任務的發(fā)展分為四個階段即NLP四范式:

  1. 第一范式:基于傳統(tǒng)機器學習模型的范式,如 tf-idf 特征+樸素貝葉斯等機器算法;

  2. 第二范式:基于深度學習模型的范式,如 word2vec 特征 + LSTM 等深度學習算法,相比于第一范式,模型準確有所提高,特征工程的工作也有所減少;

  3. 第三范式:基于預訓練模型 + finetuning的范式,如 BERT + finetuning 的NLP任務,相比于第二范式,模型準確度顯著提高,但是模型也隨之變得更大,但小數(shù)據(jù)集就可訓練出好模型;

  4. 第四范式:基于預訓練模型 + Prompt + 預測的范式,如 BERT + Prompt 的范式相比于第三范式,模型訓練所需的訓練數(shù)據(jù)顯著減少。

NLP發(fā)展的四種范式的

在整個NLP領域,你會發(fā)現(xiàn)整個發(fā)展是朝著精度更高、少監(jiān)督,甚至無監(jiān)督的方向發(fā)展的,而 Prompt Learning 是目前學術界向這個方向進軍最新也是最火的研究成果。

二. 為什么需要提示學習

為什么呢?要提出一個好的方式那必然是用來解決另一種方式存在的缺陷或不足,那我們就先從它的上一個范式來說起,就是預訓練模型 PLM + finetuning范式 常用的是 BERT+ finetuning:

BERT+finetuning微調范式

這種范式是想要預訓練模型更好的應用在下游任務,需要利用下游數(shù)據(jù)對模型參數(shù)微調;首先,模型在預訓練的時候,采用的訓練形式:自回歸、自編碼,這與下游任務形式存在極大的 gap,不能完全發(fā)揮預訓練模型本身的能力

必然導致:較多的數(shù)據(jù)來適應新的任務形式——>少樣本學習能力差、容易過擬合

上游任務與下游任務存在的gap

其次,現(xiàn)在的預訓練模型參數(shù)量越來越大,為了一個特定的任務去 finetuning 一個模型,然后部署于線上業(yè)務,也會造成部署資源的極大浪費。

模型專用性特定任務微調導致部署成本過高

三. 提示學習是什么

首先我們應該有的共識是:預訓練模型中存在大量知識;預訓練模型本身具有少樣本學習能力。

GPT-3 提出的 In-Context Learning,也有效證明了在 Zero-shot、Few-shot場景下,模型不需要任何參數(shù),就能達到不錯的效果,特別是近期很火的GPT3.5系列中的 ChatGPT。

Prompt Learning 的本質:

將所有下游任務統(tǒng)一成預訓練任務;以特定的模板,將下游任務的數(shù)據(jù)轉成自然語言形式,充分挖掘預訓練模型本身的能力。

本質上就是設計一個比較契合上游預訓練任務的模板,通過模板的設計就是挖掘出上游預訓練模型的潛力,讓上游的預訓練模型在盡量不需要標注數(shù)據(jù)的情況下比較好的完成下游的任務,關鍵包括3個步驟:

  1. 設計預訓練語言模型的任務

  2. 設計輸入模板樣式(Prompt Engineering)

  3. 設計label 樣式 及模型的輸出映射到label 的方式(Answer Engineering)

Prompt Learning 的形式:

以電影評論情感分類任務為例,模型需根據(jù)輸入句子做二分類:

原始輸入:特效非??犰?,我很喜歡。

Prompt 輸入:提示模板1:?特效非??犰牛液芟矚g。這是一部[MASK]電影 ;?提示模板2:?特效非??犰?,我很喜歡。這部電影很[MASK]

提示模板的作用就在于:將訓練數(shù)據(jù)轉成自然語言的形式,并在合適的位置 MASK,以激發(fā)預訓練模型的能力。

提示學習模板框架

類別映射/Verbalizer:選擇合適的預測詞,并將這些詞對應到不同的類別。

類別映射

通過構建提示學習樣本,只需要少量數(shù)據(jù)的 Prompt Tuning,就可以實現(xiàn)很好的效果,具有較強的零樣本/少樣本學習能力。

四. 常見的提示學習方法

1. 硬模板方法:

1.1 硬模板-PET(Pattern Exploiting Training)

PET 是一種較為經典的提示學習方法,和之前的舉例一樣,將問題建模成一個完形填空問題,然后優(yōu)化最終的輸出詞。雖然 PET 也是在優(yōu)化整個模型的參數(shù),但是相比于傳統(tǒng)的 Finetuning 方法,對數(shù)據(jù)量需求更少。

建模方式:

以往模型只要對P(l|x)建模就好了(l是label),但現(xiàn)在加入了Prompt?P以及標簽映射(作者叫verbalizer),所以這個問題就可以更新為:

其中M表示模型,s相當于某個prompt下生成對應word的logits。再通過softmax,就可以得到概率:

作者在訓練時又加上了MLM loss,進行聯(lián)合訓練。

訓練架構

具體的做法:

  1. 在少量監(jiān)督數(shù)據(jù)上,給每個 Prompt 訓練一個模型;

  2. 對于無監(jiān)督數(shù)據(jù),將同一個樣本的多個 prompt 預測結果進行集成,采用平均或加權(根據(jù)acc分配權重)的方式,再歸一化得到概率分布,作為無監(jiān)督數(shù)據(jù)的 soft label ;

  3. 在得到的soft label上 finetune 一個最終模型。

1.2 硬模板- LM-BFF

LM-BFF 是陳天琦團隊的工作,在 Prompt Tuning 基礎上,提出了Prompt Tuning with demonstration & Auto Prompt Generation。

硬模板產生依賴兩種方式:根據(jù)經驗的人工設計 & 自動化搜索。但是,人工設計的不一定比自動搜索的好,自動搜索的可讀性和可解釋性也不強。

上圖實驗結果可以看出硬模板 對于prompt,改變prompt中的單個單詞 會給實驗結果帶來巨大的差異, 所以也為后續(xù)優(yōu)化提供了方向,如索性直接放棄硬模板,去優(yōu)化 prompt token embedding。

2. 軟模板方法:

2.1 軟模板- P tuning

不再設計/搜索硬模板,而是在輸入端直接插入若干可被優(yōu)化的 Pseudo Prompt Tokens,自動化尋找連續(xù)空間中的知識模板:

  1. 不依賴人工設計

  2. 要優(yōu)化的參數(shù)極少,避免了過擬合(也可全量微調,退化成傳統(tǒng) finetuning)

傳統(tǒng)離散prompt 直接將模板 T 的每個 token 映射為對應的embedding,而 P-Tuning 將模板 T 中的Pi(Pseudo Prompt)映射為一個可訓練的參數(shù) hi?。

優(yōu)化關鍵點在于,自然語言的hard prompt,替換為可訓練的soft prompt;使用雙向LSTM 對模板 T 中的 pseudo token 序列進行表征;引入少量自然語言提示的錨字符(Anchor)提升效率,如上圖的“capital” ,可見 p-tuning是hard+soft的形式,并不是完全的soft形式。

具體的做法:

  1. 初始化一個模板:The capital of [X] is [mask]

  2. 替換輸入:[X] 處替換為輸入 “Britian”,即預測 Britain 的首都

  3. 挑選模板中的一個或多個 token 作為 soft prompt

  4. 將所有 soft prompt 送入 LSTM,獲得每個 soft prompt 的隱狀態(tài)向量 h

  5. 將初始模板送入 BERT 的 Embedding Layer,所有 soft prompt 的 token embedding用 h 代替,然后預測mask。

核心結論:基于全量數(shù)據(jù),大模型:僅微調 prompt 相關的參數(shù),媲美 fine-tuning 的表現(xiàn)。

代碼:github.com/THUDM/

2.2 軟模板- Prefix tuning

P-tuning 更新 prompt token embedding 的方法,能夠優(yōu)化的參數(shù)較少。Prefix tuning 希望能夠優(yōu)化更多的參數(shù),提升效果,但是又不帶來過大的負擔。雖然prefix tuning是在生成任務上被提出來的,但是它對soft prompt后續(xù)發(fā)展有著啟發(fā)性的影響。

優(yōu)化每一層的Propt token embedding, 而不是僅僅是輸入層

由上圖可見,模型上在每層 transformer 之前加入 prefix。特點是 prefix 不是真實的 token,而是連續(xù)向量(soft prompt),Prefix-tuning 訓練期間凍結 transformer 的參數(shù),只更新 Prefix 的參數(shù)。

只需要存儲大型 transformer 的一個副本和學習到的特定于任務的前綴即可,為每個附加任務產生非常小的開銷。

自回歸模型

以圖上自回歸模型為例的做法:

  1. 輸入表示為 Z = [ prefix ; x ; y ]

  2. Prefix-tuning 初始化一個訓練的 矩陣 P,用于存儲 prefix parameters

  3. 前綴部分 token,參數(shù)選擇設計的訓練矩陣,而其他部分的token,參數(shù)則固定 且為預訓練語言模型的參數(shù)

核心結論:Prefix-tuning 在生成任務上,全量數(shù)據(jù)、大模型:僅微調 prompt 相關的參數(shù),媲美 fine-tuning 的表現(xiàn)。

代碼:github.com/XiangLi1999/

2.3 軟模板- Soft Prompt Tuning

Soft Prompt Tuning 系統(tǒng)后驗證了軟模板方法的有效性,并提出:固定基礎模型,有效利用任務特定的 Soft Prompt Token,可以大幅減少資源占用,達到大模型的通用性。

對 Prefix-tuning 的簡化,固定預訓練模型,只對下游任務的輸入添加額外的 k個可學習的 token。這種方式在大規(guī)模預訓練模型的前提下,能夠媲美傳統(tǒng)的 fine-tuning 表現(xiàn)。

代碼:github.com/kipgparker/s

五. 總結

Prompt Learning 的組成部分

  1. 提示模板:根據(jù)使用預訓練模型,構建?完形填空?or?基于前綴生成?兩種類型的模板

  2. 類別映射/Verbalizer:根據(jù)經驗選擇合適的類別映射詞

  3. 預訓練語言模型

典型的 Prompt Learning 方法總結

  1. 硬模板方法:人工設計/自動構建基于離散 token?的模板

1)PET 2)LM-BFF

2. 軟模板方法:不再追求模板的直觀可解釋性,而是直接優(yōu)化 Prompt Token Embedding,是向量/可學習的參數(shù)

1)P-tuning 2)Prefix Tuning


后續(xù)會在分類、信息抽取任務中嘗試 Prompt Learning,持續(xù)更新中...

更新:信息抽取任務中嘗試 Prompt Learning項目:NLP-Prompt/UIE_prompt at main · jerry1993-tech/NLP-Prompt(待完善中...)

參考:

arxiv.org/pdf/2107.1358

arxiv.org/pdf/2009.0711

arxiv.org/pdf/2012.1572

arxiv.org/pdf/2103.1038

aclanthology.org/2021.a

arxiv.org/pdf/2104.0869

一文了解prompt learning在計算機視覺領域進展

(轉載至一文了解prompt learning在計算機視覺領域進展 - 知乎 (zhihu.com))

CristianoC


374 人贊同了該文章

本文是對prompt Learning在CV領域的文獻總結,讀者閱讀完全文會對prompt learning在CV的各種用法有所了解,希望能對大家未來研究工作有所啟發(fā)。

CLIP(Learning Transferable Visual Models From Natural Language Supervision)

CLIP方法框架圖

CLIP是OpenAI的一個非常經典的工作,從網(wǎng)上收集了4億個圖片文本對用于訓練,最后進行zero-shot transfer到下游任務達到了非常好的效果,主要流程如下:

在訓練階段,文本會通過Text Encoder(Transformer)編碼成一些文本Embedding向量,圖像會通過Image Encoder(ResNet50或VIT)編碼成一些圖像Embedding向量,然后將文本Embedding和圖像Embedding歸一化后通過點積計算出一個相似度矩陣,這里值越接近于1代表文本Embedding和圖像Embedding越相似,即這個文本和圖像是配對的。我們的目標是讓這個相似度矩陣對角線趨向于1,其他趨向于0(對角線代表圖像和文本配對)。

測試zero-shot階段,會將一張沒見過的圖片通過image Encoder得到圖像embedding,然后將所有可能的類別,通過構造a photo of a {object}的文本標簽,將所有類別填入object處,通過text encoder,得到所有類別對應的文本embedding,將文本embedding和圖像embedding歸一化后進行點積,選擇點積最大的一個文本-圖像對,該類別則為預測類別。

CoOp: Learning to Prompt for Vision-Language Models

CoOp的motivation如上圖所示:CLIP是固定prompt:a photo of a [class],但是不同prompt的影響影響很大,比如從圖a可以看出,少了一個a,acc直接低了6個點。每次根據(jù)人工設計prompt太麻煩,設計的還不一定好,那怎么辦呢?熟悉nlp的prompt的小伙伴應該脫口而出了,應該像Prefix Tuning一樣,學一個連續(xù)的prompt不就完事了嗎?CoOp就是這么做的。

CoOp從原來a photo fo a [class]轉換成%5Bv%5D_%7B1%7D%5Bv%5D_%7B2%7D%5Bv%5D_%7B3%7D...%5Bv%5D_%7BM%7D%5BCLASS%5D這樣可學習的連續(xù)的prompt,這樣就不需要人工去設計prompt了。這里的prompt分為unified和class-specific兩種,unified context即對所有類別都是學一組一樣的prompt參數(shù),class-specific context指的是對每一個類別學一個單獨的prompt 參數(shù),事實證明后者對一些細粒度的任務效果比較好。(看到這里的小伙伴可能有一個疑惑,還有instance-specific context這種更細粒度的可能,為啥這里沒提呢?因為當時作者沒想好怎么設計,想好之后又寫了一篇CoCoOp)另外這里prompt里的[CLASS]不一定要放最后,也可以放句中,那這樣學習明顯更加靈活。

在實驗這有一個有意思的發(fā)現(xiàn):nlp領域有一篇叫OptiPrompt的文獻,提出連續(xù)的prompt不一定要隨機初始化,可以用人工設計的prompt的embedding初始化來引入專家經驗,CoOp做實驗發(fā)現(xiàn)就算prompt參數(shù)是隨機初始化的也能到達一樣的效果。

CoCoOp: Conditional Prompt Learning for Vision-Language Models



CoCoOp的motivation如上圖所示:作者發(fā)現(xiàn)他們之前提的CoOp在訓練過類別的數(shù)據(jù)集上表現(xiàn)的很好,但是面對新的類別,能力卻很差,從80的acc降到65,而原版的CLIP卻保持了還不錯的泛化能力,引起了作者思考,作者認為這是因為CoOp在下游任務上訓練時容易overfit base classes上。我認為一這個本質原因一方面因為用的prompt是unified或者class-specific,而不是instance-specific context,另一方面我認為用unified也可以,但是要有足夠的數(shù)據(jù)學到真正的unified的特征。

CoCoOp的做法很簡單,他在CoOp的基礎上,引入了一個輕量的網(wǎng)絡Meta-Net(僅僅是Linear-ReLU-Linear),將image Encoder的輸出通過Meta-Net得到一個M維的向量,將這M維的向量直接加在CoOp上的每一個prompt token上,通過這種方式做到instance-specific context。這種方式其實就是把每個圖片的特征引入了prompt的構造里,所以CoCoOp的第一個Co就是指這種Conditional。

DenseCLIP: Language-Guided Dense Prediction with Context-Aware Prompting

由于這一系列的介紹主要圍繞prompt進行,所以這篇文獻也主要講講prompt設計那部分:

作者提出了prompt構造的2種方式,一種叫Pre-model prompting,即將圖像通過image encoder之后得到圖像embedding,這個embedding將作為Transformer的k和v輸入進一個Decoder里面生成一個prompt的模板。這種方式和CoCoOp就挺像的,只不過CoCoOp是用一個很簡單的backbone生成一個M維的token,再把這個token加在原來CoOp上生成的每一個prompt向量,這里是直接用一個更復雜的backbone直接生成一個prompt;第二種是Post-model prompting,即將圖像通過image encoder之后得到圖像embedding,然后作為k和v輸入進decoder,這里decoder的query是CoOp生成模板加上[class]后的文本通過text encoder的文本embedding,通過decoder生成一個v_%7Bpost%7D和文本向量做相加來更新文本特征,經過實驗發(fā)現(xiàn)第二種方式更好。從直觀上也很好理解,因為這樣的prompt image encoder和text encoder都參與了。

Unifying Vision-and-Language Tasks via Text Generation



現(xiàn)在vision-language learning的方法都是task-specific的,即要為每個下游任務特別設計,本文利用prompt設計來兼容7個下游任務的學習,如上圖所示,對不同的下游任務只需要加上不同的文本前綴即可,比如一個視覺問答的任務就加上vqa,對visual grounding的任務就加上visual grounding即可。具體模型如下所示:

整體流程是一個encoder-docoder的結構,encoder部分將prefix prompt、text embedding、 visual embedding作為輸入,其中visual embedding由faster-rcnn提取的ROl features、Box coordinates, image ides, region ids構成,把encoder輸出的結果傳遞給一個自回歸的decoder得到模型的輸出。不同下有任務模板如下所示:

MAnTiS:Multimodal Conditionality for Natural Language Generation



這篇文章把prompt用在了商品的文案生成上,首先用ResNet-152作為image encoder提取視覺特征,提取出的視覺特征會用一個linear layer映射到文本embedding的維度;商品名稱和我們希望生成的文案會通過LM Token Embedding Layer提取文本特征,這里用的GPT-2。不同數(shù)據(jù)之間會用SEP分開,然后輸入進一個decoder生成文案。效果如下:

MAPLE: MULTI-MODAL PROMPT LEARNING



這篇文章的出發(fā)點很有新意,一直以來我們做prompt都是在圖片或者文本一個模態(tài)做prompt,這篇文章覺得只在其中一個模態(tài)(分支)做prompt只能達到次優(yōu)的性能,所以他們提出應該在每一個模態(tài)都應該做prompt,示意圖如上所示。

模型架構圖如上所示:首先文本端除了文本的輸入embedding,會拼接一些文本prompt向量,圖像端同樣除了圖像的embedding輸入,也會拼接一些圖像prompt向量。這里要注意,這兩個prompt向量是有交互的,因為作者認為為了讓prompt發(fā)揮拉近不同模態(tài)距離的作用,不同模態(tài)的prompt應該要深層交互。具體交互的做法就是將文本prompt的embedding,通過一個linear層 映射到圖像embedding維度,轉換成圖像prompt向量,但這個交互只會發(fā)生在前J層,后面J-K層就不需要交互了,因為作者認為經過前面的交互,后面層的特征已經不是各自獨立模態(tài)的特征了,自然不需要交互了。

CPT:Colorful Prompt Tuning for Pre-Training Vision-Language Models

這篇文章是prompt用在image grounding的工作,我認為他的出發(fā)點十分值得思考:

一般用Pre-Training Vision-Language Models做image grounding的做法如上圖b所示,他們的做法是去隨機mask一些詞然后通過預測這個隨機的MASK來完成預訓練的任務。在預測即下游任務時,對沒有mask的token做語義分類,來完成grounding的任務。那這樣就會存在一個gap:因為你預訓練的時候是去預測一些mask的token,而到下游任務時預測的token是非mask,那這樣上下游的遷移就有可能會有問題,那為什么nlp不會有問題呢?我認為是對于文字來說,理解哪里的文字理解的方式是一樣的,但是對于視覺是不一樣的,比如我學會了人在“看”馬這個看的概念,那和哪個是人,哪個是馬來說這兩個問題來說,我認為學會人在“看”馬是一個不同等級的概念(可能是更高的),那這么來做效果就不一定會好了。所以CPT把問題轉換為顏色預測的任務:看一些被涂上不同顏色的圖片,然后把文本當作問題,最后回答什么顏色的圖片是問題的答案并填空,再換句話說,原來想問你在一張人在看馬的圖片里,哪個是人,現(xiàn)在直接問你,什么顏色的人在看馬,因為我們知道哪塊被填上了顏色,所以解決了這個問題。

這個方法在zero shot、few shot 場景下取得了非常好的表現(xiàn),除了image grounding,CPT也提出了別的下游任務建模方式:對目標分類任務,可以建模為紅顏色的物體是一個什么,具體如上所示。

Multimodal Few-Shot Learning with Frozen Language Models

這篇文章講故事的點很有意思,他認為之前對于文本大模型的prompt,都是在前面加上prefix prompt來提示做什么下游任務,然后可能和視覺模型一起微調或者凍住文本大模型來完成。這篇文章認為配對的圖像特征就是一種prompt,我們可以利用這個文本配對的圖像提取特征作為我們的prompt,具體結構如下所示:

將圖像通過一個NF-ResNet50提取特征,然后將一些文本通過一個text embedder提取特征,然后一起輸入進一個在大數(shù)據(jù)集下預訓練好的7billion參數(shù)的Transformer進行自回歸預測完成訓練,其中只有vision Encoder是可訓練的,其他模塊皆凍結。這樣prompt的模型可以在很多場景的zero-shot和few-shot達到一個好的效果。其中作者還提到,在面對一個新的下游任務時,我們可以輸一些圖像文本對讓模型學習到新的概念,這樣會在下游任務上表現(xiàn)的更好,具體如下所示:

VPT:Visual Prompt Tuning

終于看到一篇不用文本來做視覺prompt的文章了。VPT分為deep和shallow兩個版本,如果數(shù)據(jù)不充裕,就使用shallow版本,如果數(shù)據(jù)充裕,就使用Deep版本。我們可以看到VPT真的很簡單,shallow版本只需要在第一層輸入層之前,引入一些prompt參數(shù),和CLS和其他輸入embedding一起拼接起來輸入進第一個Transformer的encoder即可。但是如果數(shù)據(jù)充裕,那自然我們覺得僅僅在輸入引入prompt沒法很好的利用這么多數(shù)據(jù)(說白點就是可學習參數(shù)少了),所以在每一層Transformer的輸入層前都加入一些prompt參數(shù)學習。不管是shallow還是deep版本,都只需要學習輸入的prompt參數(shù)和分類頭。這篇文章的做法可以說是mainly-motivated by prefix-tuning/p-tuning的了,所以提示我們可以再找找nlp里work的prompt方法,看看怎么在cv上做work。








提示學習(Prompt Learning)的評論 (共 條)

分享到微博請遵守國家法律
凉城县| 扎囊县| 白玉县| 金昌市| 兴山县| 友谊县| 八宿县| 杭锦旗| 苏尼特右旗| 牡丹江市| 息烽县| 黄浦区| 永顺县| 宝清县| 三都| 遵化市| 延川县| 固始县| 扶沟县| 芦溪县| 丰顺县| 青州市| 治多县| 平泉县| 井研县| 喜德县| 鹤壁市| 花垣县| 诏安县| 龙游县| 彭州市| 固镇县| 襄樊市| 东明县| 新安县| 徐汇区| 武威市| 淳化县| 建阳市| 馆陶县| 阿巴嘎旗|