什么是 prompt learning?简单直观理解 prompt learning
由于我還沒有看過具體的 prompt 的論文和相關代碼,所以我主要參考的劉鵬飛大佬的論文和博客來簡單直觀解釋什么是 prompt learning。
目錄
- 1 預訓練語言模型
- 1.1 Feature engineering
- 1.1.1 詞袋模型
- 1.1.2 TF-IDF
- 1.1.3 總結
- 1.2 Architecture engineering
- 1.2.1 Word2Vec
- 1.2.2 GloVe
- 1.2.3 FastText
- 1.2.4 ELMo
- 1.2.5 總結
- 1.3 Objective engineering
- 1.3.1 BERT
- 1.3.2 RoBERTa
- 1.3.3 ERNIE
- 1.3.4 SKEP
- 1.3.5 總結
- 1.4 前三種預訓練語言模型總結
- 2 Prompt learning
- 2.1 第一次了解 prompt
- 2.2 Prompt 類型
- 2.3 Prompt 重構的細節
- 2.3.1 Prompt engineering
- 2.3.2 Answer engineering
- 2.4 多個 prompt
- 2.5 Prompt 訓練方式
- 3 總結
- 參考
1 預訓練語言模型
如果你對之前預訓練語言模型已經很了解了,那么可以直接跳到第二節。
在劉鵬飛大佬的論文里,他將預訓練語言模型分為了四類:基于特征工程 (feature engineering) 的方法,基于結構工程 (architecture engineering) 的方法,基于目標工程 (objective engineering) 的方法,和基于提示工程 (prompt engineering) 的方法。為了更好解釋何為 prompt,在本小節中,我們會先對前三種方法做一個介紹。
1.1 Feature engineering
由于我沒有看過任何這類別的論文,也沒有怎么使用過這類預訓練模型,所以如果這一小節有問題,請一笑而過,然后麻煩順手幫我指出其中的錯誤。
基于特征工程的方法,其目的是為了通過人們的先驗知識來定義某些規則,使用這些規則來更好地提取出文本中的特征,以此來對文本進行編碼。
1.1.1 詞袋模型
詞袋模型 (Bag-of-words model, BOW) 通過計算詞頻來對詞語進行編碼。考慮以下的三個句子:
E1: 我 喜歡 小麗
E2: 小麗 喜歡 小明
E3: 小明 喜歡 我
對這個混亂的三角戀關系,我們構建出詞與id之間的映射關系:{‘我’: 0, ‘喜歡’: 1, ‘小麗’: 2, ‘小明’: 3},接著統計詞頻,即可獲得詞編碼。E1的詞編碼為 [2,2,2,0][2, 2, 2, 0][2,2,2,0];E2的詞編碼為 [0,2,2,2][0, 2, 2, 2][0,2,2,2];E3的詞編碼為 [2,2,0,2][2, 2, 0, 2][2,2,0,2]。
優點:1. 比起 one-hot V×VV \times VV×V 的內存消耗 (VVV 為詞表大小),BOW 的內存消耗只有 VVV;2. 可以提取出詞頻這個特征。
缺點:1. 沒有詞序特征;2. 不是詞頻越大的詞越重要 (比如“的”)。
1.1.2 TF-IDF
TF-IDF (Term Frequency-Inverse Document Frequency) 能夠有效識別詞語在文本中的重要程度。其分為兩部分,TF 和 IDF。
TF 算法的公式如下:
tfij=nij∑knkjtf_{ij}=\frac{n_{ij}}{\sum_k n_{kj}}tfij?=∑k?nkj?nij??
其中 i,ki, ki,k 分別表示詞語 iii 和詞語 kkk;jjj 表示文檔 jjj;nijn_{ij}nij? 表示詞語 iii 在文檔 jjj 中的詞頻。該算法的含義是計算詞語 iii 在文檔 jjj 中的占比。
IDF算法的公式如下:
idfi=log(∣D∣1+∣Di∣)idf_i = {\rm log}(\frac{|D|}{1 + |D_i|})idfi?=log(1+∣Di?∣∣D∣?)
其中 iii 表示詞語 iii;∣D∣|D|∣D∣ 表示文檔的總數;∣Di∣|D_i|∣Di?∣ 表示詞語 iii 出現在文檔中的總次數;1是拉普拉斯平滑,防止詞語 iii 沒有在任何文檔中出現而導致分母為零。這個公式最直觀的理解可以從對數函數的圖像入手。log{\rm log}log 是個單調函數。由于 ∣D∣|D|∣D∣ 是常數,當 ∣Di∣=1|D_i|=1∣Di?∣=1 時,idfidfidf 取得最大值;而當 ∣Di∣=∣D∣|D_i|=|D|∣Di?∣=∣D∣ 時,idfidfidf 取得最小值。這也就是說,如果詞語 iii 只在一個或很少的文檔中出現,那么這個詞就對這些文檔很重要,反之如果詞語 iii 在很多文檔中出現,那么就顯得不那么重要 (比如“的”)。
TF-IDF 算法的公式如下:
tfidfij=tfij×idfitfidf_{ij}=tf_{ij} \times idf_itfidfij?=tfij?×idfi?
那么結合上兩個公式,我們就發現,TF-IDF 算法不僅考慮了在單一文檔中的詞頻,還考慮了該詞語在全局的一個出現頻率。就是說如果這個詞在少量文章中出現,且詞頻很高,那么這個詞就對這個文章很重要,反之亦然。
優點:可以有效識別詞語對文檔的重要性。
缺點:不能夠包含詞語的上下文信息。
1.1.3 總結
基于特征的方法,最大的特點就是運行速度快,同時如果特征提取到位可能會取得很好的效果,但是最大的難點就在于如何根據先驗知識來設計需要提取的特征。
1.2 Architecture engineering
基于結構工程的方法,無需再用人的先驗知識來進行特征工程,而是將人力放在如何設計一個好的模型結構來自動學習文本中的特征。
1.2.1 Word2Vec
關于 Word2Vec 的詳細信息可以看我以前的博客《Word2Vec原理與公式詳細推導》。簡單來說就是通過一個線性的全連接層,來預測詞語的上下文或者根據詞語的上下文來預測該詞語。
優點:我沒記錯的話 W2V 算是掀起了深度學習在NLP領域的熱潮,可以為每個詞語單獨賦予一個獨有的詞向量,并且詞向量中還能夠包含上該詞語的上下文信息。
缺點:1. 不能包含全局信息;2. 每個詞語有且僅有一個詞向量,沒辦法有效區分多義詞。
1.2.2 GloVe
關于 GloVe 的詳細信息可以看我以前的博客《GloVe原理與公式講解》。GloVe 則是通過給定一個目標公式,然后將其反推出來。
優點:在 W2V 的基礎上,還能夠學習到詞語的全局信息。
缺點:同樣沒有辦法區分多義詞。
1.2.3 FastText
FastText 的模型結構與 W2V 類似,只不過 W2V 是做預測上下文或中間詞,FastText 是做文本分類[4]。就是說只是輸出層不同。而且 FastText 的輸入是 char 級的 n-gram,其目的在于許多詞的字母都是重復的 (比如 apple 和 people 有 ple 是重復的),采用這種輸入方式可以有效降低輸入的數量,也可以學習到詞語的共性。雖然其目的在于做文本分類,但是也可以學習到字符級的詞向量。
優點:可以學習字符級的詞向量,訓練速度快,且性能不弱于很多大模型。
缺點:訓練出的詞向量可以放在下游任務,但是如果要用該模型做下游任務會有困難。
1.2.4 ELMo
關于 EMLo 的詳細信息可以看我以前的博客《BERT學習筆記(4)——小白版ELMo and BERT》。簡單來說就是用一個雙向RNN來學習詞語 iii 的上文與下文,通過這些上文信息與下文信息來預測詞語 iii。
優點:可以解決一詞多義的問題,因為不同的上下文輸出的詞向量是有區別的。
缺點:模型依舊是輸出詞向量,而模型本身并不能很好的用于下游任務。
1.2.5 總結
Architecture engineering 采用了深度學習的方法來學習詞向量,當輸入語料很大的時候,可以學習出一個質量很高的詞嵌入。但是這類方法僅僅是訓練出詞向量,再將詞向量放入到下游模型中作為輸入,而模型本身并不會用來做下游任務。
1.3 Objective engineering
基于目標工程的訓練方式,通常不會對模型本身做太多改動 (比如 BERT 家族或者 GPT 家族),而是在損失函數上做改動,以適應輸入數據。這類方法也叫做基于微調 (fine-tune) 的預訓練語言模型,這類模型不僅可以進行預訓練,并且訓練好的詞向量和模型本身可以直接投放到下游任務中,預訓練的參數就是模型在下游任務中的初始點。這里我就列舉幾個我看過的模型。
1.3.1 BERT
同樣,BERT 也可以看我以前寫的博客《BERT學習筆記(4)——小白版ELMo and BERT》。
BERT 采用自監督學習的方式,學習模型與詞向量。它有兩個訓練方式,分別為 Masked Language Model (MLM) 和 Next Sentence Prediction (NSP)。MLM 是隨機選擇15%的詞語,對于這些詞語:1) 有80%的概率將其替換為 [MASK];2) 有10%的概率將其替換為另外一個詞語;3) 有10%的概率保持原樣。NSP 是給定一個句子對,判斷上下句是否是一個句子對,其中:1) 50%概率下句是原句;2) 50%概率下句是另外一個句子。
1.3.2 RoBERTa
RoBERTa 該模型并沒有對 BERT 本身做什么操作,僅僅是證明了 NSP 并沒有什么卵用。同時,在做 MLM 時,為了避免每次都掩蓋相同的詞語,所以他們重復了十次隨機選擇的過程,保證每個句子有10種掩蓋方式。最后,他們還更改了訓練的數據,提出了一個更具有魯棒性的 BERT[5]。
1.3.3 ERNIE
我看過的 ERNIE 是清華大學劉知遠老師團隊的 ERNIE[6]。該模型將知識圖譜引入到了 BERT 中,用于做命名實體預測與關系分類任務。在他們的模型中,他們將命名實體的詞向量與其知識表示拼接在一起。
他們不僅采用了 MLM 與 NSP 的訓練目標,還提出了 denoising entity auto-encoder (dEA) 的損失函數。該損失函數實質上就是一個 softmax,根據詞語 wiw_iwi? 的輸出層狀態 wiow_i^owio? 來預測它的實體類別 eje_jej?:
p(ej∣wi)=exp(linear(wio)?ej)∑k=1mexp(linear(wio)?ek)p(e_j|w_i)=\frac{{\rm exp}({\rm linear}(w_i^o)·e_j)}{\sum_{k=1}^m{\rm exp}({\rm linear}(w_i^o)·e_k)}p(ej?∣wi?)=∑k=1m?exp(linear(wio?)?ek?)exp(linear(wio?)?ej?)?
這里加 linear 的目的是因為詞向量與實體向量不在相同的向量空間,通過線性單元將它們映射到相同空間中。在 dEA 中:1) 對于給定的詞-實體對,有5%的概率將實體替換為另一個實體,這是為了讓模型能夠學習到糾正錯誤的能力;2) 有15%的概率,將詞-實體對給掩蓋掉,因為系統有可能提取不出詞語-實體對,這是為了讓模型能夠糾正這種錯誤;3) 80%的概率,保持不變,這是為了讓模型能夠更好地學習到自然語言理解。
1.3.4 SKEP
SKEP 模型是用來做方面級情感分析任務。模型中一共考慮了3類任務:情感詞語識別,情感詞語極性識別,以及方面級情感詞語對及其情感傾向識別。對于每一個任務,有不同的掩蓋方式:1) 方面級情感詞語對及其情感傾向識別中,對于每個句子隨機掩蓋至多2個方面情感對;2) 情感詞語掩蓋,至多掩蓋占句子詞語總數10%的情感詞語,選擇的方式依舊是隨機選擇;3) 普通詞語掩蓋,如果情感詞語占句子詞語數不足10%的話,就采用 RoBERTa 的掩蓋方式掩蓋普通詞語至10%。
1.3.5 總結
基于目標工程的模型我發現基本都是基于 Transformer 的,這類方法對模型本身的改動不是特別大,但是會依據輸入數據的不同而人工去設計目標函數,使得模型能夠更好地學習到我們想要的特征。同時,這類方法可以將訓練好的模型直接放在下游任務中,作為起始點來進行訓練。
1.4 前三種預訓練語言模型總結
我們發現,前三種預訓練語言模型都會有人力在里面 (feature engineering 需要人工提取特征,architecture engineering 需要人工設計網絡結構,objective engineering 需要人工設計目標函數)。
2 Prompt learning
有了上面的鋪墊,我們現在再來看提示學習 (prompt learning)。可能會有許多聰明的朋友會問,為什么我們要研究一個新的預訓練方式?畢竟 BERT 這一套都一直在刷新 SOTA。劉鵬飛大佬在他的博客里面是這樣寫的[2]:
Prompt Learning激活了很多新的研究場景,比如小樣本學習,這顯然可以成為那些GPU資源受限研究者的福音。當然,我理解Prompt Learning最重要的一個作用在于給我們prompt(提示)了NLP發展可能的核心動力是什么。
但是于我而言,我個人覺得是:畢竟 BERT 家族天天刷榜,我不研究點新的東西我還怎么發論文?
2.1 第一次了解 prompt
與前三種預訓練語言模型一樣,prompt learning 同樣需要人工在里面,就是人工設計 提示模板 (prompt template) 和 答案模板 (answer template)。在具體說明何為模板之前,我們先對 prompt learning 做個定義:對輸入的文本信息按照特定模板進行處理,把任務重構成一個更能夠充分利用預訓練語言模型處理的形式。具體而言,以情感分析為例,傳統情感分析是如下的:
Input: 你是個好人。
Output: positive 或 negative
而采用 prompt learning 的話,輸入輸出就會變為如下:
Input: 你是個好人。 那么她____和你耍朋友。
Output: 想 或者 不想
簡而言之,就是將輸入文本作為一個 提示 (prompt),接著拼一個語句,再讓模型來對這個語句進行完形填空。進行完形填空的目的是,因為 BERT 的訓練任務就是做完形填空。就是為了讓下游任務更適配語言模型,而基于目標工程的預訓練語言模型則是讓模型去適配下游任務 (比如傳統的 BERT 要做情感分析還要在輸入時第一個位置添加一個 [CLS],然后輸出這個 [CLS] 的隱藏狀態后還要再接全連接層才能預測情感標簽)。
劉鵬飛大佬的論文中貼了這么一張表格來說明這幾個不同的語言模型之間的關系:
然后我們把整個 prompt 的重構方式抽象出來:1) 輸入數據不變;2) 給定一個 prompt 模板;3) 給定一個答案范圍。接下來我們簡單講解上述三個步驟。
2.2 Prompt 類型
在論文中,作者將 prompt 分為了兩類:cloze prompt 和 prefix prompt。由于每一類 prompt 都要讓下游任務滿足 預訓練方法,所以作者在論文里把這些方法抽象成了以下4種。
有了以上4種預訓練語言類型,我們再來看兩類 prompt。
針對不同任務的 prompt 都可以用下表展示。
2.3 Prompt 重構的細節
在 prompt 重構的過程中,就需要兩個關鍵的模板:prompt template 和 answer template。
2.3.1 Prompt engineering
對于 prompt template,有兩種方法來生成,分別為人工設計模板和自動生成模板。
2.3.2 Answer engineering
Answer engineering 目的是找到一個答案 [Z][Z][Z] 的空間,并且將這個空間映射到輸出的標簽 yyy 上。答案會有三種種類,tokens (比如文本分類),span (比如方面級情感分析中的方面識別),Sentence (比如機器翻譯)。
與 prompt engineering 相同,answer engineering 同樣有人工設計與自動獲取兩種方法。
2.4 多個 prompt
根據研究顯示,使用多個 prompt 可以有效提升性能。 由于多個 prompt 集成后,每個 prompt 都會有一個輸出,對這些輸出我們也需要有相應的取舍。最簡單的方法就是對每個 prompt 的輸出概率求和取平均。但是這樣有個問題就是可能有的 prompt 占比高,有的占比低,于是就有了帶權平均方法。也有研究是采用 majority voting 的方法 (我沒看過論文,但是我個人覺得就是對于分類問題,選擇最多分類的那一類)。還有采用知識蒸餾和集成做文本分類的方法,這類由于不是我的研究目標,就沒有了解。
而對于 prompt ensembling,有以下四種方法。
雖然我個人覺得這張圖已經足夠清晰了,但是我還是稍稍解釋下。
2.5 Prompt 訓練方式
在論文中這個訓練方式寫的有點多,但是在劉大佬做 EMNLP 匯報時把這個訓練方式抽象為了以下這張圖:
整個 prompt 的訓練分為兩部分,LM 的訓練和 prompts 的訓練。兩者都有不訓練和訓練兩種方式,所以就組合為了4種情況:
3 總結
由于我也才開始學習 prompt learning,所以在此寫下這個筆記方便才開始學習的人有個最直觀的了解。但是由于看的相關論文還是太少了,所以并不能夠總結出一個很完善的博客,并且許多部分也寫得相對粗糙,如果想了解更多的信息,可以多多閱讀劉鵬飛大佬的論文[1]。
參考
[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]. CoRR, 2021, abs/2107.13586.
[2] 劉鵬飛. 近代自然語言處理技術發展的“第四范式”[EB/OL]. (2021-08-01)[2022-01-03]. https://zhuanlan.zhihu.com/p/395115779
[3] 木堯の. CMU劉鵬飛 | Prompt學習的最新研究趨勢分析[EB/OL]. (2021-11-06)[2022-01-03]. https://www.bilibili.com/video/BV1zf4y1u7og?share_source=copy_web
[4] JOULIN A, GRAVE E, BOJANOWSKI P, et al. Bag of Tricks for Efficient Text Classification [C]. Proceeding of the 15th Conference of the European Chapter of the Association for Computational Linguistics, EACL 2017, April 3, 2017 - April 7, 2017, Valencia, Spain: Association for Computational Linguistics (ACL), 2017: 427-431.
[5] LIU Y, OTT M, GOYAL N, et al. RoBERTa: A Robustly Optimized BERT Pretraining Approach [J]. CoRR, 2019, abs/1907.11692.
[6] ZHANG Z, HAN X, LIU Z, et al. ERNIE: Enhanced Language Representation with Informative Entities [C]. Proceeding of the 57th Annual Meeting of the Association for Computational Linguistics, ACL 2019, July 28, 2019 - August 2, 2019, Florence, Italy: Association for Computational Linguistics (ACL), 2020: 1441-1451.
[7] TIAN H, GAO C, XIAO X, et al. SKEP: Sentiment Knowledge Enhanced Pre-Training for Sentiment Analysis [C]. Proceeding of the 58th Annual Meeting of the Association for Computational Linguistics, ACL 2020, July 5, 2020 - July 10, 2020, Virtual, Online, United states: Association for Computational Linguistics (ACL), 2020: 4067-4076.
[8] VASWANI A, SHAZEER N, PARMAR N, et al. Attention is All You Need [C]. Proceeding of the 31st Annual Conference on Neural Information Processing Systems, NIPS 2017, December 4, 2017 - December 9, 2017, Long Beach, CA, United states: Neural information processing systems foundation, 2017: 5999-6009.
總結
以上是生活随笔為你收集整理的什么是 prompt learning?简单直观理解 prompt learning的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Prompt-Learning
- 下一篇: Prompt Learning详解