从4篇最新论文详解NLP新范式——Continuous Prompt
?PaperWeekly 原創 ·?作者?|?張一帆
學校?|?中科院自動化所博士生
研究方向?|?計算機視覺
近幾年,NLP 技術發展迅猛,特別是 BERT 的出現,開啟了 NLP 領域新一輪的發展。從 BERT 開始,對預訓練模型進行 finetune 已經成為了整個領域的常規范式。但是從 GPT-3 開始,一種新的范式開始引起大家的關注并越來越流行:prompting。
首先我們根據綜述文章 Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing [1] 對 prompt 的來源和大致思想做個介紹。
NLP 中的四種范式。
全監督學習,即僅在目標任務的輸入輸出樣本數據集上訓練特定任務模型,長期以來在許多機器學習任務中發揮著核心作用,同樣的,全監督學習在 NLP 領域也非常重要。但是全監督的數據集對于學習高質量的模型來說是不充足的,早期的 NLP 模型嚴重依賴特征工程。隨著用于 NLP 任務的神經網絡出現,使得特征學習與模型訓練相結合,研究者將研究重點轉向了架構工程,即通過設計一個網絡架構能夠學習數據特征。
從 2017-2019 年開始,NLP 模型發生了翻天覆地的變化,這種全監督范式發揮的作用越來越小。具體而言,研究重點開始轉向預訓練、微調范式。在這一范式下,一個具有固定架構的模型通過預訓練作為語言模型(LM),用來預測觀測到的文本數據的概率。由于訓練 LM 所需的原始文本數據需要足夠豐富,因此,這些 LM 都是在比較大的數據集上訓練完成。
之后,通過引入額外的參數,并使用特定任務的目標函數對模型進行微調,將預訓練 LM 適應于不同的下游任務。在這種范式下,研究重點轉向了目標工程,設計在預訓練和微調階段使用的訓練目標(損失函數)。
當前我們正處于第二次巨變中,「預訓練、微調」過程被稱為「預訓練、prompt 和預測」的過程所取代。在這種范式中,不是通過目標工程使預訓練的語言模型(LM)適應下游任務,而是重新形式化(Reformulate)下游任務,使其看起來更像是在文本 prompt 的幫助下在原始 LM 訓練期間解決的任務。
通過這種方式,選擇適當的 prompt,該方法可以操縱模型的行為,以便預訓練的 LM 本身可以用于預測所需的輸出,有時甚至無需任何額外的特定任務訓練。這種方法的優點是給定一組合適的 prompt,以完全無監督的方式訓練的單個 LM 就能夠用于解決大量任務。然而該方法也存在一個問題——這種方法引入了 prompt 挖掘工程的必要性,即需要找出最合適的 prompt 來讓 LM 解決面臨的任務。
目前的 Prompt Engineering 主要分為三種方法:Discrete Prompt,Continuous Prompt 以及 Hybrid Prompt。本文挑選了最新四篇 Continuous Prompt 相關的文章加以解讀。
WARP: Word-level Adversarial ReProgramming
Prefix-Tuning: Optimizing Continuous Prompts for Generation
The Power of Scale for Parameter-Efficient Prompt Tuning
Multimodal Few-Shot Learning with Frozen Language Models
第一篇文章首次提出了 continuous prompt 的方法(從 adversarial programming 中得到的 insight),本文的輸入需要可學習的 embedding,輸出需要任務特定的輸出層,也可以看作可學習的 prompt,第二篇文章中使用類似于 continuous prompt 類似的 prefix 加到 transformer 的每一層。
這個過程能否進一步簡化呢?第三篇文章給出了答案,第三篇文章只對輸入添加額外的 個可學習的 prompt,并得到了超越前人的結果。第四篇文章屬于一篇應用,將 continuous prompt 成功的應用在了多模態領域。
WARP
論文標題:
WARP: Word-level Adversarial ReProgramming
收錄會議:
ACL 2021
論文鏈接:
https://arxiv.org/abs/2101.00121
代碼鏈接:
https://github.com/YerevaNN/warp
本文最大的貢獻在于,不同于 Discrete Prompt 需要手工尋找或者學習離散的 token 作為 prompt,本文直接優化 embedding 作為 prompt,這給了我們的模型更多的自由度,并最終在下游任務中有更好的表現。
文章的思路很簡單,我們需要優化的參數就是兩組 embedding , 代表 prompt, 是對每一類的分類參數,有點類似于全連接層這種感覺。
如上圖所示,具體來說,我們把 prompt tokens 插入到輸入序列中,再經過 encoder 和一個 MLM head,然后通過 ,那么我們分類的概率可以通過如下公式計算:
公式中的 是插入了 prompt 的序列, 是所有類別, 是預訓練語言模型的的輸出。
訓練過程也很簡單,就是在下游任務的數據集中通過梯度優化尋找使得 cross-entropy loss 最小的參數。
Experiments
實驗過程中所有的 prompt tokens 都被初始化為 [MASK] 的 embedding。
在最常用的 benchmark GLUE上,WARP 取得了非常不錯的效果,并且參數量少了好多個數量級。下表中的 # 表示訓練的參數量。
再看一下 ablation, 即模型有 個 prompt 在里面, 表示使用最佳的 MNLI 參數初始化的 WARP 模型,可以看到當我們減少可訓練 prompt 參數的數量時,性能下降,但模型仍然有效。
在 few-shot learning 的 setting 下,使用 SuperGLUE benchmark,WARP 超過了 PET 和 GPT-3。
在可解釋性方面,作者通過尋找距離 embedding 最近的 token 來進行離散化,我們摘取兩個任務對應的 prompt 來看一看,可以看到基本上沒有啥真實的語義信息。相比之下 就比較好解釋了,對 MNLI 的“contradiction”類的 embedding 接近于 token “unless”。SST-2 任務中“negative”和“positive”類的 embedding 分別接近于“defective”和“important”。
Prefix-Tuning
論文標題:
Prefix-Tuning: Optimizing Continuous Prompts for Generation
論文鏈接:
https://arxiv.org/abs/2101.00190
代碼鏈接:
https://github.com/XiangLi1999/PrefixTuning
將 prompt 用于 NLG 任務上,比如對一個數據表生成描述的任務上,任務的輸入是一個數據表(比如 【名稱:星巴克|類型:咖啡店】),輸出是一段描述(星巴克出售咖啡)。
Prefix-Tuning 在該任務的輸入前加上一個任務特定的連續序列(prefix),即下圖下方紅色的部分。與 prompt 相比,這里不再是真實的 token,而是連續序列。和 finetune 相比,finetune 優化的是整體的參數,而這里只對每個任務優化對應的 prefix。
Problem Statement:考慮一個條件生成任務,其中輸入是一個 context,輸出是一個標記序列。我們關注兩個任務,如下圖右側所示:在 table-to-text 中, 對應于線性化的數據表, 是文本描述;在 summarization 中, 是一篇文章, 是一個簡短的總結。
我們的預訓練生成模型記作 ,如下圖頂部所示記 是 的 concatenation, 是輸入 的序列號。記 第 個 step 的激活值, 是所有時間點上所有層的激活值, 是 層 transformer 在 step 時的激活值。一個自回歸的語言模型的激活值按照如下方式進行生成:
最后一層 被用來計算 next token 的概率 。
接下來進入 prefix 的方法介紹,首先 highlevel 的說一下 intuition,然后仔細說說方法。
Intuition:本文的 intuition 在于:相信有一個合適的上下文可以在不改變參數的情況下引導 LM。例如,如果我們想讓 LM 生成一個單詞(例如,Obama),我們可以將其常見的搭配作為上下文(例如,Barack)的前綴,LM 將為所需的單詞分配更高的概率。這是對于一個單詞的引導,那么是否存在一個 context 可以引導整個句子的生成呢?這是本文要回答的關鍵問題。
Method:本文對 LM 每一層的輸入添加一個 prefix ,或者對 source,target 端添加不同的 prefix ,這里使用 表示 prefix 的索引, 表示 prefix 的長度。prefix-tuning 初始化一個前綴矩陣 ,如果索引值屬于 prefix 的 ids,那就從 prefix 矩陣中拿出該 id 對應的 embedding,如果不是,那么 就是上一步計算出來的 embedding。值得注意的是,即使是第二種情況, 也是和 相關的,因為在其左側的文本里依然存在 prefix。
確定了隱變量,其實模型的訓練方式就和之前的工作一樣了,只不過這里只更新 prefix 的參數。但是實際實現的時候發現直接更新 的參數非常的不穩定,因此本文采取了一種方式重參數化的方式 ,將一個較小的矩陣 參數化到 。
Experiments:簡單看看實驗結果,對于 table-to-text 生成的實驗,使用如下三個數據集,Prefix-tuning 以較少的參數量得到了大多數 metric 上較好的性能。
值得注意的是,數據量少的時候,在初始化方面 prefix-tunning 有獨到的 trick,隨機初始化的性能往往不是很好,將 prefix 初始化為一些真實 word 對應的激活值會比較有效。特別是將 prefix 用一些任務相關的詞的激活值進行初始化,效果最好。
Prompt Tuning
論文標題:
The Power of Scale for Parameter-Efficient Prompt Tuning
收錄會議:
EMNLP 2021
論文鏈接:
https://arxiv.org/abs/2104.08691
本文有一個非常有意思的地方,如下圖所示。prompt-tuning 作為 prompt-design 和 model tuning 之間一個折中的方法,隨著模型大小的增大,一度趕上了 model tuning 的性能。使用很少的參數做 tuning 性能大大超出手工設計的? prompt。
回憶一下,第一篇文章中輸入需要可學習的 embedding,輸出需要任務特定的輸出層,第二篇文章中 prefix 加到 transformer 的每一層,這個過程能否進一步簡化呢?本文給出了答案,本文只對輸入添加額外的 個可學習的 token。除此之外,本文還提出了 prompt ensembling 的方法,即為一個 task 學習多個 prompt。
同樣的,本文 follow 預訓練模型 text-to-text 的方法,將 中的 定義為可以表示某一類標簽的 token 序列, 是輸入的一系列 token,加上 prompt 和它的參數,任務又可以寫為 。模型訓練的時候就是最大化 的概率,但是只有 可以被更新。
Design Decisions. 三種方法進行 prompt 初始化:(i) 隨機,效果一般不好。(ii) 在詞表中找幾個,讓 prompt 的參數接近真實 embedding。(iii) 根據 task 來決定,比如情感分析,我們可以將 prompt 初始化為“negative, positive, happy”等。
這里比較有意思的實驗是關于 zero-shot learning 的,本文有個觀點:因為我們限制了模型參數不被調整,prompt-tuning 阻止模型對數據集進行過擬合,畢竟幾個 prompt 并不是 over-parameterized 的,所以 prompt-tuning 也許對domain shift 更加魯棒。
文章在一個 source domain 上訓練出 prompt,然后將他直接用于 target 數據集進行 evaluation。結果如下所示,prompt-tuning 顯示出了比 model fine-tuneing 更魯棒的結果。
Frozen
論文標題:
Multimodal Few-Shot Learning with Frozen Language Models
論文鏈接:
https://arxiv.org/abs/2106.13884
prefix 或 prompt 已在文本領域“勢不可擋”,那能不能將其應用到多模態領域呢?
本文提出一種叫做“Frozen”的模型結構,它的主要思想是:利用圖像編碼器把圖像作為一種動態的 prefix,與文本一起送入 LM 中,從而更好地獲得 LM 中的先驗知識,此外,為了將 LM 中的知識遷移到多模態領域,在訓練時選擇凍結 LM 的參數,僅優化圖像編碼器有關參數,模型結構如下圖所示:
主要包括兩個部分:
預訓練自回歸語言模型:使用了 7billion 參數 transformer 模型,在公開數據集 C4 上進行訓練。
視覺編碼器:以 NF-ResNet-50 為 backbone,目標是將輸入的原生圖像轉化為連續的序列,以便與文本一起送入語言模型中。
視覺前綴的構造方式:將視覺編碼器的輸出映射為 的矩陣, 為嵌入維度, 可以看作 token 的個數,經過測試, 時效果最佳。
訓練過程稍微有點特殊,訓練時統一使用 Conceptual Captions 作為訓練集,Conceptual Captions 的輸入是一張圖片,輸出是關于此圖片的描述,所以在訓練時語言模型是在做生成任務。訓練時還固定了 LM 的所有參數,僅優化視覺編碼器的參數。這是因為 few-shot 場景下數據較少,若不固定 LM 的話,反而會破壞 LM 原有的信息,甚至使模型產生災難性遺忘。
訓練時的輸入是形如(image, text)的一堆 pair,但是 few-shot 場景下可能會輸入多個(image, text)pair,所以在位置編碼上使用了相對位置編碼,從而保證 image 相對于 text 是在其前面的。
總的來說 本文將文本中的 Prefix 應用到了圖片、文本多模態領域,將圖片作為 prefix,與文本一起送入語言模型中,利用 Image Caption 數據集訓練了一個生成式語言模型。在 VQA、OKVQA、miniImageNet 等多個數據集驗證了遷移學習的效果,在 few-shot 場景下驗證了 prefix 對模型的提升。
通過將圖片作為prefix,從而將文本中的靜態 prefix 轉化為動態 prefix,能更好的適應不同的任務。但是,由于 Visiual Encoder 和文本的處理比較簡單,模型效果離 SOTA 有一定的距離。
Conclusion
總的來說,discrete prompt 和 continuous prompt 各有優劣,discrete 學到的 prompt 自然帶有解釋性,但是離散的 token 本身就比較難優化,目前的方法也是近似的挑選而已。continuous prompt 最近的結果表現得更好,不需要考慮映射回離散的詞空間,有更大的自由度。這部分也能和 CV,多模態更緊密地結合。
參考文獻
[1] https://arxiv.org/abs/2107.13586
更多閱讀
#投 稿?通 道#
?讓你的文字被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。?
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學術熱點剖析、科研心得或競賽經驗講解等。我們的目的只有一個,讓知識真正流動起來。
?????稿件基本要求:
? 文章確系個人原創作品,未曾在公開渠道發表,如為其他平臺已發表或待發表的文章,請明確標注?
? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發送,要求圖片清晰,無版權問題
? PaperWeekly 尊重原作者署名權,并將為每篇被采納的原創首發稿件,提供業內具有競爭力稿酬,具體依據文章閱讀量和文章質量階梯制結算
?????投稿通道:
? 投稿郵箱:hr@paperweekly.site?
? 來稿請備注即時聯系方式(微信),以便我們在稿件選用的第一時間聯系作者
? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿
△長按添加PaperWeekly小編
????
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
·
總結
以上是生活随笔為你收集整理的从4篇最新论文详解NLP新范式——Continuous Prompt的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bios怎么电脑检查 BIOS如何进行电
- 下一篇: 零样本性能超越GPT-3!谷歌提出137