NLP新寵——淺談Prompt的前世今生

NLP新寵——淺談Prompt的前世今生

轉自:NLP新寵——淺談Prompt的前世今生

作者:閔映乾,中國人民大學信息學院碩士,目前研究方向為自然語言處理。

在這里插入圖片描述

《Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing》

導讀:本文的目標是對近期火爆異常的Prompt相關研究作一些追溯和展望,內容主要參考論文《Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing》,并摻雜了筆者的一些個人見解。另外,封面及文中使用的圖片均截取自該論文,轉載請注明出處。各位知乎er如果有什么問題都可以在評論區留言討論,歡迎經常交流!

本文的內容框架:

一、Prompt的產生和興起

二、什么是Prompt

三、Prompt的設計方法

四、Prompt面臨的挑戰

一、Prompt的產生和興起

近幾年來,有關預訓練語言模型(PLM)的研究比比皆是,自然語言處理(NLP)也借著這股春風獲得了長足發展。尤其是在2017-2019年間,研究者們的重心逐漸從傳統task-specific的有監督模式轉移到預訓練上。基于預訓練語言模型的研究思路通常是**“pre-train, fine-tune”**,即將PLM應用到下游任務上,在預訓練階段和微調階段根據下游任務設計訓練對象并對PLM本體進行調整。

隨著PLM體量的不斷增大,對其進行fine-tune的硬件要求、數據需求和實際代價也在不斷上漲。除此之外,豐富多樣的下游任務也使得預訓練和微調階段的設計變得繁瑣復雜,因此研究者們希望探索出更小巧輕量、更普適高效的方法,Prompt就是一個沿著此方向的嘗試。

融入了Prompt的新模式大致可以歸納成”pre-train, prompt, and predict“,在該模式中,下游任務被重新調整成類似預訓練任務的形式。例如,通常的預訓練任務有Masked Language Model, 在文本情感分類任務中,對于 “I love this movie.” 這句輸入,可以在后面加上prompt “The movie is ___” 這樣的形式,然后讓PLM用表示情感的答案填空如 “great”、“fantastic” 等等,最后再將該答案轉化成情感分類的標簽,這樣以來,通過選取合適的prompt,我們可以控制模型預測輸出,從而一個完全無監督訓練的PLM可以被用來解決各種各樣的下游任務。

因此,合適的prompt對于模型的效果至關重要。大量研究表明,prompt的微小差別,可能會造成效果的巨大差異。研究者們就如何設計prompt做出了各種各樣的努力——自然語言背景知識的融合、自動生成prompt的搜索、不再拘泥于語言形式的prompt探索等等,筆者將會在第三節進行進一步討論。

二、什么是Prompt

Prompt剛剛出現的時候,還沒有被叫做Prompt,是研究者們為了下游任務設計出來的一種輸入形式或模板,它能夠幫助PLM“回憶”起自己在預訓練時“學習”到的東西,因此后來慢慢地被叫做Prompt了。

對于輸入的文本 xxx,有函數 fprompt(x)f_{prompt}(x)fprompt?(x),將 xxx 轉化成 prompt 的形式 x′x′x,即:
x′=fprompt(x)x'=f_{prompt}(x) x=fprompt?(x)
該函數通常會進行兩步操作:

  1. 使用一個模板,模板通常為一段自然語言,并且包含有兩個空位置:用于填輸入 xxx 的位置 [X][X][X] 和用于生成答案文本 zzz 的位置 [Z][Z][Z].
  2. 把輸入 xxx 填到 [X][X][X] 的位置。

還用前文提到的例子。在文本情感分類的任務中,假設輸入是 x=x=x= ‘I Love this movie.’,使用的模板是 " [X][X][X] Overall, it was a [Z][Z][Z] movie."。那么得到的 x′x′x 就應該是 “I love this movie. Overall it was a [Z][Z][Z] movie.”

在實際的研究中,prompts應該有空位置來填充答案,這個位置一般在句中或者句末。如果在句中,一般稱這種prompt為cloze prompt;如果在句末,一般稱這種prompt為 prefix prompt[X][X][X][Z][Z][Z] 的位置以及數量都可能對結果造成影響,因此可以根據需要靈活調整。

另外,上面的例子中 prompts 都是有意義的自然語言,但實際上其形式并不一定要拘泥于自然語言。現有相關研究使用虛擬單詞甚至直接使用向量作為 prompt ,筆者將會在第三節講到。

下一步會進行答案搜索,顧名思義就是LM尋找填在[Z]處可以使得分數最高的文本 z^\hat{z}z^ 。最后是答案映射。有時LM填充的文本并非任務需要的最終形式,因此要將此文本映射到最終的輸出 y^\hat{y}y^?。例如,在文本情感分類任務中,“excellent”, “great”, “wonderful” 等詞都對應一個種類 “++”,這時需要將詞語映射到標簽再輸出。

三、Prompt的設計

Prompt大致可以從下面三個角度進行設計:

  • Prompt的形狀
  • 手工設計模板
  • 自動學習模板

Prompt的形狀

Prompt 的形狀主要指的是 [X][X][X][Z][Z][Z] 的位置和數量。上文提到cloze promptprefix prompt的區別,在實際應用過程中選擇哪一種主要取決于任務的形式和模型的類別。cloze prompts 和 Masked Language Model 的訓練方式非常類似,因此對于使用MLM的任務來說 cloze prompts 更加合適;對于生成任務來說,或者使用自回歸LM解決的任務,prefix prompts就會更加合適;Full text reconstruction models 較為通用,因此兩種 prompt 均適用。另外,對于文本對的分類,prompt 模板通常要給輸入預留兩個空,[X1][X_1][X1?][X2][X_2][X2?]

手工設計模板

Prompt最開始就是從手工設計模板開始的。手工設計一般基于人類的自然語言知識,力求得到語義流暢且高效的模板。例如,Petroni等人在著名的LAMA數據集中為知識探針任務手工設計了cloze templates;Brown等人為問答、翻譯和探針等任務設計了prefix templates。手工設計模板的好處是較為直觀,但缺點是需要很多實驗、經驗以及語言專業知識,代價較大。

自動學習模板

為了解決手工設計模板的缺點,許多研究開始探究如何自動學習到合適的模板。自動學習的模板又可以分為離散(Discrete Prompts)和連續(Continuous Prompts)兩大類。離散的主要包括 Prompt Mining, Prompt Paraphrasing, Gradient-based Search, Prompt Generation 和 Prompt Scoring;連續的則主要包括Prefix Tuning, Tuning Initialized with Discrete Prompts 和 Hard-Soft Prompt Hybrid Tuning。

離散Prompts

自動生成離散Prompts指的是自動生成由自然語言的詞組成的 Prompt,因此其搜索空間是離散的。目前大致可以分成下面幾個方法:

  1. Prompt Mining. 該方法需要一個大的文本庫支持,例如 Wikipedia。給定輸入 xxx 和輸出 yyy,要找到 xxxyyy 之間的中間詞或者依賴路徑,然后選取出現頻繁的中間詞或依賴路徑作為模板,即“ [X][X][X] middle words [Z][Z][Z] ”。
  2. Prompt Paraphrasing. Paraphrasing-based 方法是基于釋義的,主要采用現有的種子 prompts (例如手動構造),并將其轉述成一組其他候選 prompts,然后選擇一個在目標任務上達到最好效果的。一般的做法有:將提示符翻譯成另一種語言,然后再翻譯回來;使用同義或近義短語來替換等。
  3. Gradient-based Search. 梯度下降搜索的方法是在單詞候選集里選擇詞并組合成 prompt,利用梯度下降的方式不斷嘗試組合,從而達到讓 PLM 生成需要的詞的目的。
  4. Prompt Generation. 既然 Prompt 也是一段文本,那是否可以用文本生成的方式來生成 Prompt 呢?該類方法就是將標準的自然語言生成的模型用于生成prompts 了。例如,Gao 等人將 T5 引入了模板搜索的過程,讓 T5 生成模板詞;Ben-David 等人提出了一種域自適應算法,訓練 T5 為每個輸入生成一種唯一的域相關特征,然后把輸入和特征連接起來組成模板再用到下游任務中。
  5. Prompt Scoring. Davison 等人在研究知識圖譜補全任務的時候為三元組輸入(頭實體,關系,尾實體)設計了一種模板。首先人工制造一組模板候選,然后把相應的 [X][X][X][Z][Z][Z] 都填上成為 prompts,并使用一個雙向 LM 給這些 prompts 打分,最后選取其中的高分 prompt。

連續Prompts

既然構造 Prompt 的初衷是能夠找到一個合適的方法,讓 PLM 更“聽話”地得出我們想要的結果,那就不必把 prompt 的形式拘泥于人類可以理解的自然語言了,只要機器可以理解就好了。因此,還有一些方法探索連續型 prompts——直接作用到模型的 embedding 空間。連續型 prompts 去掉了兩個約束條件:

  1. 模板中詞語的 embedding 可以是整個自然語言的 embedding,不再只是有限的一些 embedding。
  2. 模板的參數不再直接取PLM的參數,而是有自己獨立的參數,可以通過下游任務的訓練數據進行調整。

目前的連續 prompts 方法大致可以分為下面幾種:

  1. Prefix Tuning. Prefix Tuning 最開始由 Li 等人提出,是一種在輸入前添加一串連續的向量的方法,該方法保持 PLM 的參數不動,僅訓練合適的前綴(prefix)。它的形式化定義是,在給定一個可訓練的前綴矩陣 M?M_\phiM?? 和一個固定的參數化為 θ\thetaθ 的 PLM 的對數似然目標上進行優化,即:
    max??log?P(y∣x;θ;?)=max??∑yilog?P(yi∣h<i;θ,?)\max_{\phi}\log P(\mathbf{y|x};\theta;\phi)=\max_\phi\sum_{y_i}\log P(y_i|h_{<i};\theta,\phi) ?max?logP(y∣x;θ;?)=?max?yi??logP(yi?h<i?;θ,?)
    其中 h<i=[h<i(1);…;h<i(n)]h_{<i}=[h_{<i}^{(1)};\dots;h_{<i}^{(n)}]h<i?=[h<i(1)?;;h<i(n)?] 指的是所有神經網絡層在第 iii 個時間步的連接。如果對應的時間步在前綴??中,即 hiisM?[i]h_i\ \ is\ \ M_{\phi}^{[i]}hi???is??M?[i]? . 則它可以直接從前綴矩陣中復制過來;否則需要使用 PLM 進行計算。
    類似地,Lester 等人在輸入序列前面加上特殊的 token 來組成一個模板,然后直接調整這些 token 的 embedding。 和上面的 Prefix Tuning 的方法相比,他們的方法相對來說參數較少,因為沒有在每一層網絡中引入額外的參數。

  2. Tuing Initialized with Discrete Prompts. 這類方法中連續 prompts 是用已有的 prompts 初始化的,已有的 prompts 可以是手工設計的,也可以是之前搜索發現的離散 prompts。Zhong 等人先用一個離散 prompt 搜索方法定義了一個模板,然后基于該模板初始化虛擬的 token,最后微調這些 token 的embedding 以提高準確率。

  3. Hard-Soft Prompt Hybrid Tuning. 這類方法可以說是手工設計和自動學習的結合,它通常不單純使用可學習的 prompt 模板,而是在手工設計的模板中插入一些可學習的 embedding。Liu 等人提出了“P-Tuning”方法,通過在 input embedding 中插入可訓練的變量來學習連續的 prompts。并且,該方法使用 BiLSTM 的輸出來表示 prompt embeddings,以便讓 prompt tokens 之間有一定的交互。P-tuning 還引入了任務相關的 anchor tokens(例如關系提取中的“capital”)來進一步提高效果,這些 anchor tokens 不參與后續的調優。Han等人提出了 Prompt Tunning with Rules(PTR)方法,使用手工指定的子模板按照邏輯規則組裝成完整的模板。為了增強生成的模板的表示能力,該方法還插入了幾個虛擬 token,這些虛擬 token 的 embeddings 可以和 PLM 的參數一起被調整,PTR 的模板 token 既有實際 token 也有虛擬 token 。實驗結果證明了該方法在關系分類任務中的有效性。

四、Prompt的挑戰與展望

盡管Prompt相關研究搞得如火如荼,但目前仍存在許多問題,值得研究者們去探索。

  1. Prompt的設計問題。目前使用 Prompt 的工作大多集中于分類任務和生成任務,其它任務則較少,因為如何有效地將預訓練任務和 prompt 聯系起來還是一個值得探討的問題。另外,模板和答案的聯系也函待解決。模型的表現同時依賴于使用的模板和答案的轉化,如何同時搜索或者學習出兩者聯合的最好效果仍然很具挑戰性。
  2. Prompt的理論分析和可解釋性。盡管 Prompt 方法在很多情況下都取得了成功,但是目前 prompt-based learning 的理論分析和保證還很少,使得人們很難了解 Prompt 為什么能達到好的效果,又為什么在自然語言中意義相近的 Prompt 有時效果卻相差很大。
  3. Prompt在PLM debias方面的應用。由于 PLM 在預訓練過程中見過了大量的人類世界的自然語言,所以很自然地受到了影響。拿一個簡單的例子來說,可能不太恰當,比如說訓練語料中有很多的 "The capital of China is “Beijing.”,導致模型認為下次看到 “capital” 的時候都會預測出 “Beijing”,而不是著重看到底是哪個國家的首都。在應用的過程中,Prompt 還暴露了 PLM 學習到的很多其它 bias,比如種族歧視、恐怖主義、性別對立等等。已有相關研究關注是否可以利用 Prompt 來對這些 bias 進行修正,但還處在比較初級的階段,這也會是一個值得研究的方向。

五、引用

[1] Liu P, Yuan W, Fu J, et al. Pre-train, Prompt, and Predict: A Systematic Survey of Prompting Methods in Natural Language Processing[J]. arXiv preprint arXiv:2107.13586, 2021.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532383.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532383.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532383.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql key_len_淺談mysql explain中key_len的計算方法

mysql的explain命令可以分析sql的性能&#xff0c;其中有一項是key_len(索引的長度)的統計。本文將分析mysql explain中key_len的計算方法。1、創建測試表及數據CREATE TABLE member (id int(10) unsigned NOT NULL AUTO_INCREMENT,name varchar(20) DEFAULT NULL,age tinyint(…

requestfacade 這個是什么類?_Java 的大 Class 到底是什么?

作者在之前工作中&#xff0c;面試過很多求職者&#xff0c;發現有很多面試者對Java的 Class 搞不明白&#xff0c;理解的不到位&#xff0c;一知半解&#xff0c;一到用的時候&#xff0c;就不太會用。想寫一篇關于Java Class 的文章&#xff0c;沒有那么多專業名詞&#xff0…

初學機器學習:直觀解讀KL散度的數學概念

初學機器學習&#xff1a;直觀解讀KL散度的數學概念 轉自&#xff1a;初學機器學習&#xff1a;直觀解讀KL散度的數學概念 譯自&#xff1a;https://towardsdatascience.com/light-on-math-machine-learning-intuitive-guide-to-understanding-kl-divergence-2b382ca2b2a8 解讀…

php mysql讀取數據查詢_PHP MySQL 讀取數據

PHP MySQL 讀取數據從 MySQL 數據庫讀取數據SELECT 語句用于從數據表中讀取數據:SELECT column_name(s) FROM table_name我們可以使用 * 號來讀取所有數據表中的字段&#xff1a;SELECT * FROM table_name如需學習更多關于 SQL 的知識&#xff0c;請訪問我們的 SQL 教程。使用 …

MySQL應用安裝_mysql安裝和應用

1.下載mysql安裝包2.安裝mysql&#xff0c;自定義->修改路徑3.配置mysql&#xff0c;選擇自定義->server模式->500訪問量->勾選控制臺->設置gbk->設置密碼和允許root用戶遠程登錄等等。以管理員權限&#xff0c;在控制臺輸入&#xff1a;net start MySQL, 啟…

mysql 商品規格表_商品規格分析

產品表每次更新商品都會變動的&#xff0c;ID不能用&#xff0c;可是購物車還是用了&#xff0c;這就導致每次保存商品&#xff0c;哪怕什么都沒有改動&#xff0c;也會導致用戶的購物車失效。~~~其實可以考慮不是每次更新商品就除所有的SKU&#xff0c;畢竟有時什么都沒修改呢…

mysql維表的代理鍵字段_mysql多維數據倉庫指南--第三篇第12章(2)

賓夕法尼亞州地區客戶維在本節我將用賓夕法尼亞州地區客戶的子集維度來解釋第二種維度子集的類型。我也將向你說明如何測試該子集維度。相對的&#xff0c;一個向上鉆取的維包含了它基礎維的所有更高級別的數據。而一個特定子集維度則選擇了它基礎維的某個特定的數據集合。列表…

huggingface NLP工具包教程1:Transformers模型

huggingface NLP工具包教程1&#xff1a;Transformers模型 原文&#xff1a;TRANSFORMER MODELS 本課程會通過 Hugging Face 生態系統中的一些工具包&#xff0c;包括 Transformers&#xff0c; Datasets&#xff0c; Tokenizers&#xff0c; Accelerate 和 Hugging Face Hub。…

mysql日期比較timestamp_Mysql中的Datetime和Timestamp比較(轉載)

mysql中用于表示時間的三種類型date, datetime, timestamp (如果算上int的話&#xff0c;四種) 比較容易混淆&#xff0c;下面就比較一下這三種類型的異同相同點都可以用于表示時間都呈字符串顯示不同點1.顧名思義&#xff0c;date只表示YYYY-MM-DD形式的日期&#xff0c;datet…

隱馬爾可夫模型HMM推導

隱馬爾可夫模型HMM推導 機器學習-白板推導系列(十四)-隱馬爾可夫模型HMM&#xff08;Hidden Markov Model&#xff09; 課程筆記 背景介紹 介紹一下頻率派和貝葉斯派兩大流派發展出的建模方式。 頻率派 頻率派逐漸發展成了統計機器學習&#xff0c;該流派通常將任務建模為一…

ef mysql 的坑_C# EF 與 MySql 的那些坑

之前一直想用 mysql 和 ef 。然后多次嘗試也只能感嘆 還是 sqlsever 是親兒子。今天在單位又嘗試了一次&#xff0c;然后就成功了&#xff0c;記錄一下遇到的問題。首先是安裝包和驅動&#xff1f;。請保證 MySql.Data / MySql.Data.Entity.EF6 / mysql Connector/NET 版本對應…

使用randomaccessfile類將一個文本文件中的內容逆序輸出_Java 中比較常用的知識點:I/O 總結...

Java中I/O操作主要是指使用Java進行輸入&#xff0c;輸出操作. Java所有的I/O機制都是基于數據流進行輸入輸出&#xff0c;這些數據流表示了字符或者字節數據的流動序列。數據流是一串連續不斷的數據的集合&#xff0c;就象水管里的水流&#xff0c;在水管的一端一點一點地供水…

huggingface NLP工具包教程2:使用Transformers

huggingface NLP工具包教程2&#xff1a;使用Transformers 引言 Transformer 模型通常非常大&#xff0c;由于有數百萬到數百億個參數&#xff0c;訓練和部署這些模型是一項復雜的任務。此外&#xff0c;由于幾乎每天都有新模型發布&#xff0c;而且每個模型都有自己的實現&a…

huggingface NLP工具包教程3:微調預訓練模型

huggingface NLP工具包教程3&#xff1a;微調預訓練模型 引言 在上一章我們已經介紹了如何使用 tokenizer 以及如何使用預訓練的模型來進行預測。本章將介紹如何在自己的數據集上微調一個預訓練的模型。在本章&#xff0c;你將學到&#xff1a; 如何從 Hub 準備大型數據集如…

mysql精講_Mysql 索引精講

開門見山&#xff0c;直接上圖&#xff0c;下面的思維導圖即是現在要講的內容&#xff0c;可以先有個印象&#xff5e;常見索引類型(實現層面)索引種類(應用層面)聚簇索引與非聚簇索引覆蓋索引最佳索引使用策略1.常見索引類型(實現層面)首先不談Mysql怎么實現索引的,先馬后炮一…

pytorch lightning最簡上手

pytorch lightning最簡上手 pytorch lightning 是對原生 pytorch 的通用模型開發過程進行封裝的一個工具庫。本文不會介紹它的高級功能&#xff0c;而是通過幾個最簡單的例子來幫助讀者快速理解、上手基本的使用方式。在掌握基礎 API 和使用方式之后&#xff0c;讀者可自行到 …

RT-Smart 官方 ARM 32 平臺 musl gcc 工具鏈下載

前言 RT-Smart 的開發離不開 musl gcc 工具鏈&#xff0c;用于編譯 RT-Smart 內核與用戶態應用程序 RT-Smart musl gcc 工具鏈代碼當前未開源&#xff0c;但可以下載到 RT-Thread 官方編譯好的最新的 musl gcc 工具鏈 ARM 32位 平臺 比如 RT-Smart 最好用的 ARM32 位 qemu 平…

java list翻轉_JAVA實現兩種方法反轉單列表

/***authorluochengcheng* 定義一個單鏈表*/classNode {//變量private intrecord;//指向下一個對象privateNode nextNode;public Node(intrecord) {super();this.record record;}public intgetRecord() {returnrecord;}public void setRecord(intrecord) {this.record record;}…

OpenAI Whisper論文筆記

OpenAI Whisper論文筆記 OpenAI 收集了 68 萬小時的有標簽的語音數據&#xff0c;通過多任務、多語言的方式訓練了一個 seq2seq &#xff08;語音到文本&#xff09;的 Transformer 模型&#xff0c;自動語音識別&#xff08;ASR&#xff09;能力達到商用水準。本文為李沐老師…

mysql 工具 08s01_Mysql管理必備工具Maatkit詳解之十四(mk-kill)

mk-kill - 顧名思義&#xff0c;殺mysql線程。安裝方法查看這里。在一個OLTP的生產環境&#xff0c;一般不會讓sql執行過長的時間&#xff0c;特別是myisam這樣表鎖的引擎&#xff0c;如果出現長時間執行的sql一般是誤操作&#xff0c;要不就是出現問題了。出現這種情況&#x…