在prompt learning中一個(gè)核心問(wèn)題是模型存在死記硬背現(xiàn)象。Prompt learnin主要應(yīng)用在few-shot learning場(chǎng)景,先將訓(xùn)練數(shù)據(jù)轉(zhuǎn)換成prompt的形式,在訓(xùn)練過(guò)程模型側(cè)重于記憶訓(xùn)練數(shù)據(jù),然后使用記憶的信息做預(yù)測(cè)。這個(gè)過(guò)程會(huì)導(dǎo)致模型缺乏泛化能力,一些長(zhǎng)尾的case預(yù)測(cè)效果不好。
NIPS 2022中浙大和阿里提出使用檢索方法增強(qiáng)prompt learning,利用訓(xùn)練數(shù)據(jù)構(gòu)造知識(shí)庫(kù),在訓(xùn)練階段使用知識(shí)庫(kù)+KNN檢索相關(guān)信息輔助學(xué)習(xí),通過(guò)這種方式將需要記憶的信息從模型中拆分出來(lái),直接輸入到模型中。通過(guò)這種方式,可以讓模型參數(shù)更側(cè)重泛化信息的學(xué)習(xí),而不是過(guò)擬合訓(xùn)練數(shù)據(jù)。下面為大家詳細(xì)介紹一下這篇工作。
NLP Prompt系列——Prompt Engineering方法詳細(xì)梳理
1 Prompt Learning回顧
Prompt learning主要面向的是訓(xùn)練數(shù)據(jù)較少的場(chǎng)景。首先需要一個(gè)預(yù)訓(xùn)練模型,然后將下游任務(wù)轉(zhuǎn)換成完形填空的形式。對(duì)于分類問(wèn)題,判斷某個(gè)text屬于哪個(gè)label,轉(zhuǎn)換成如下的文本輸入到預(yù)訓(xùn)練語(yǔ)言模型中:
利用預(yù)訓(xùn)練語(yǔ)言模型,預(yù)測(cè)出[MASK]對(duì)應(yīng)的文本,后面接一個(gè)文本到label的映射函數(shù),即可實(shí)現(xiàn)文本分類任務(wù)。Prompt learning的好處是可以充分利用預(yù)訓(xùn)練語(yǔ)言模型的知識(shí),讓下游任務(wù)和預(yù)訓(xùn)練任務(wù)更加適配,以提升樣本量不足情況下的效果。我在之前的文章NLP Prompt系列——Prompt Engineering方法詳細(xì)梳理詳細(xì)介紹過(guò)prompt相關(guān)工作,感興趣的同學(xué)可以進(jìn)一步閱讀。
雖然這種方法充分運(yùn)用了預(yù)訓(xùn)練語(yǔ)言模型的知識(shí),但畢竟finetune的數(shù)據(jù)少,模型更像在死記硬背訓(xùn)練prompt數(shù)據(jù)中的信息。這對(duì)于長(zhǎng)尾樣本或非典型的句子的預(yù)測(cè)效果不友好。為了解決上述問(wèn)題,本文的核心思路是,如果我們把這些需要記憶的信息單獨(dú)拿出來(lái)存儲(chǔ)到一個(gè)知識(shí)庫(kù)中,在需要的時(shí)候檢索它們并作為模型額外輸入,就能讓模型參數(shù)沒(méi)必要再死記硬背這些信息了,從而實(shí)現(xiàn)記憶和泛化更好的平衡,有點(diǎn)【好記性不如爛筆頭】的感覺(jué)。下圖是本文提出的基本框架示意圖。
2 從知識(shí)庫(kù)中檢索信息
實(shí)現(xiàn)上面的框架核心是從知識(shí)庫(kù)中檢索信息,這也就涉及到兩個(gè)問(wèn)題,一個(gè)是如何構(gòu)造知識(shí)庫(kù),另一個(gè)是如何進(jìn)行信息檢索和利用。
在知識(shí)庫(kù)的構(gòu)造上,文中構(gòu)造的是一個(gè){K, V}格式的數(shù)據(jù),訓(xùn)練集中的每條樣本對(duì)應(yīng)一個(gè){K, V}。K代表這個(gè)樣本的prompt輸入模型后[MASK]位置的隱向量,V代表這個(gè)樣本的label對(duì)應(yīng)的單詞。由于K是模型輸出的向量,因此每訓(xùn)練幾輪,就會(huì)動(dòng)態(tài)更新知識(shí)庫(kù)中的Key,避免Key和模型最新參數(shù)隔代太多不匹配。
在信息檢索和利用上,對(duì)于當(dāng)前樣本模型先得到其[MASK]位置的向量,然后用這個(gè)向量在知識(shí)庫(kù)中進(jìn)行KNN檢索,每個(gè)類別的樣本都取出topK個(gè),檢索的距離度量是向量?jī)?nèi)積。對(duì)于每個(gè)類別檢索出的向量,使用內(nèi)積做softmax后進(jìn)行加權(quán)融合,得到這個(gè)類別最終向量,拼接到當(dāng)前樣本embedding后面輸入到模型中:
這部分檢索出來(lái)的樣本就是將需要記憶的知識(shí)直接引入到了當(dāng)前樣本中,不再需要模型參數(shù)去記憶了。此外,這種將向量引入而不是引入對(duì)應(yīng)的token,可以讓信息的擴(kuò)展更方便,直接引入樣本的token會(huì)拉長(zhǎng)輸入樣本長(zhǎng)度,導(dǎo)致模型性能下降,且長(zhǎng)度也有上限。
3 使用KNN指導(dǎo)模型訓(xùn)練和預(yù)測(cè)
上面收的引入知識(shí)庫(kù)+KNN的方法,緩解了模型參數(shù)需要強(qiáng)記憶訓(xùn)練樣本的問(wèn)題。此外,文中還通過(guò)KNN檢索結(jié)果來(lái)指導(dǎo)模型的學(xué)習(xí)過(guò)程。KNN檢索的好處是不需要模型訓(xùn)練,直接根據(jù)預(yù)訓(xùn)練的表示計(jì)算距離,利用鄰居樣本的label,就能預(yù)測(cè)當(dāng)前樣本的label。這對(duì)于模型來(lái)說(shuō)是另一個(gè)維度的信息補(bǔ)充,文中通過(guò)區(qū)分難樣本指導(dǎo)訓(xùn)練和在inference階段指導(dǎo)預(yù)測(cè)兩個(gè)方面進(jìn)一步指導(dǎo)模型的訓(xùn)練和預(yù)測(cè)。
KNN的檢索結(jié)果可以用來(lái)區(qū)分難樣本和簡(jiǎn)單樣本。通過(guò)KNN檢索以及檢索鄰居的label,可以得到當(dāng)前樣本各個(gè)類別的預(yù)測(cè)概率。這個(gè)KNN的預(yù)測(cè)結(jié)果可以作為是否是難樣本的參考,如果模型預(yù)測(cè)預(yù)測(cè)結(jié)果和KNN結(jié)果不一致,就是難樣本。對(duì)于難樣本,加大其學(xué)習(xí)權(quán)重,通過(guò)將KNN預(yù)測(cè)概率引入到交叉熵?fù)p失中實(shí)現(xiàn):
另一方面,在預(yù)測(cè)階段,也直接將KNN的預(yù)測(cè)結(jié)果拿出來(lái)和模型對(duì)于[MASK]的預(yù)測(cè)結(jié)果做插值,得到最終的預(yù)測(cè)結(jié)果:
4 實(shí)驗(yàn)結(jié)果
文中在9個(gè)NLU數(shù)據(jù)集的few-shot和zero-shot learning上對(duì)比了效果,可以看到本文提出的方法對(duì)于效果的提升還是非常明顯的。
此外,文中也對(duì)比了跨領(lǐng)域的效果,在source domain進(jìn)行prompt learning,對(duì)比在target domain上的效果:
5 總結(jié)
檢索在NLP各類任務(wù)中的應(yīng)用越來(lái)越多,本文也將檢索用于分離可記憶的信息來(lái)提升模型的泛化能力,并取得了顯著效果。檢索通過(guò)信息記憶+查詢的方式,引入了豐富的外部信息,能夠讓模型更多的容量服務(wù)于學(xué)習(xí)泛化性,而非簡(jiǎn)單的記住訓(xùn)練數(shù)據(jù)。
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7233瀏覽量
90721 -
KNN
+關(guān)注
關(guān)注
0文章
22瀏覽量
10932 -
語(yǔ)言模型
+關(guān)注
關(guān)注
0文章
557瀏覽量
10588
原文標(biāo)題:不要讓模型死記硬背—用檢索增強(qiáng)Prompt Learning
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
《AI Agent 應(yīng)用與項(xiàng)目實(shí)戰(zhàn)》閱讀心得3——RAG架構(gòu)與部署本地知識(shí)庫(kù)
學(xué)習(xí)STM32必備的知識(shí)庫(kù)
使用KNN進(jìn)行分類和回歸
基于知識(shí)庫(kù)的智能策略翻譯技術(shù)
一種基于解釋的知識(shí)庫(kù)綜合
領(lǐng)域知識(shí)庫(kù)的研究與設(shè)計(jì)
一種面向微生物領(lǐng)域的知識(shí)庫(kù)構(gòu)建方法
本體知識(shí)庫(kù)的模塊與保守?cái)U(kuò)充
如何使用Arduino KNN庫(kù)進(jìn)行簡(jiǎn)單的機(jī)器學(xué)習(xí)?

復(fù)雜知識(shí)庫(kù)問(wèn)答任務(wù)的典型挑戰(zhàn)和解決方案
面向異質(zhì)信息的網(wǎng)絡(luò)表示學(xué)習(xí)方法綜述
如何基于亞馬遜云科技LLM相關(guān)工具打造知識(shí)庫(kù)

無(wú)監(jiān)督域自適應(yīng)場(chǎng)景:基于檢索增強(qiáng)的情境學(xué)習(xí)實(shí)現(xiàn)知識(shí)遷移

評(píng)論