寫在前面
大家好,我是劉聰NLP。
最近在做Prompt的相關(guān)內(nèi)容,本人意識(shí)中一直覺得Prompt機(jī)制在序列標(biāo)注任務(wù)上不是很好轉(zhuǎn)換,因此,很早前,組長(zhǎng)問我時(shí),我夸下???,說:“誰用prompt做NER呀”。然后,調(diào)研發(fā)現(xiàn)大佬們真是各顯神通,是我目光短淺了。于是,決定進(jìn)行一番總結(jié),分享給大家。「有點(diǎn)長(zhǎng),大家慢慢看,記得點(diǎn)贊收藏轉(zhuǎn)發(fā)」
部分論文已經(jīng)在自己的數(shù)據(jù)上進(jìn)行了實(shí)驗(yàn),最后一趴會(huì)進(jìn)行簡(jiǎn)要概述,并且會(huì)分析每種方法的優(yōu)劣。
TemplateNER
TemplateNER,原文《Template-Based Named Entity Recognition Using BART》,是第一篇將Prompt方法應(yīng)用于序列標(biāo)注任務(wù)的論文,核心思想是通過N-Gram方法構(gòu)建候選實(shí)體,然后將其與所有手工模板進(jìn)行拼接,使用BART模型對(duì)其打分,從而預(yù)測(cè)出最終實(shí)體類別。是一篇「手工模板且無答案空間映射」的Prompt論文。
paper:https://arxiv.org/abs/2106.01760
github:https://github.com/Nealcly/templateNER
模型,訓(xùn)練階段如下圖(c)所示,預(yù)測(cè)階段如下圖(b)所示,下面詳細(xì)介紹。
任務(wù)構(gòu)造
將序列標(biāo)注任務(wù)轉(zhuǎn)換成一個(gè)生成任務(wù),在Encoder端輸入為原始文本,Decoder端輸入的是一個(gè)已填空的模板文本,輸出為已填空的模板文本。待填空的內(nèi)容為候選實(shí)體片段以及實(shí)體類別。候選實(shí)體片段由原始文本進(jìn)行N-Gram滑窗構(gòu)建,為了防止候選實(shí)體片段過多,論文中最大進(jìn)行8-gram。
模板構(gòu)建
模板為手工模板,主要包括正向模板和負(fù)向模板,其中,正向模板表示一個(gè)文本片段是某種實(shí)體類型,負(fù)向文本表示一個(gè)文本片段不是實(shí)體。具體模板如下表所示,我們也可以看出,最終模型效果是與手工模板息息相關(guān)的。
訓(xùn)練階段
在訓(xùn)練階段,正樣本由實(shí)體+實(shí)體類型+正向模板構(gòu)成,負(fù)樣本由非實(shí)體片段+負(fù)向模板構(gòu)成;由于負(fù)樣本過多,因此對(duì)負(fù)樣本進(jìn)行隨機(jī)負(fù)采樣,使其與正樣本的比例保持1.5:1。其學(xué)習(xí)目標(biāo)為:
預(yù)測(cè)階段
在預(yù)測(cè)階段,將進(jìn)行8-gram滑窗的所有候選實(shí)體片段與模板組合,然后使用訓(xùn)練好的模型進(jìn)行預(yù)測(cè),獲取每個(gè)候選實(shí)體片段與模板組合的分?jǐn)?shù)(可以理解為語義通順度PPL,但是計(jì)算公式不同),分?jǐn)?shù)計(jì)算如下:
其中,表示實(shí)體片段,表示第k個(gè)實(shí)體類別,T_{y_{k},x_{i:j}}表示實(shí)體片段與模板的文本。
針對(duì),每個(gè)實(shí)體片段,選擇分?jǐn)?shù)最高的模板,判斷是否為一個(gè)實(shí)體,哪種類型的實(shí)體。
DemonstrationNER
DemonstrationNER,原文《Good Examples Make A Faster Learner: Simple Demonstration-based Learning for Low-resource NER》,核心思想為在原始文本的基礎(chǔ)上,拼接示例模板信息,提高原始序列標(biāo)注模型的效果。是一篇「示例模板且無答案空間映射」的Prompt論文。
paper:https://arxiv.org/abs/2110.08454
github:https://github.com/INK-USC/fewNER
模型如下圖(b)所示,下面詳細(xì)介紹。
任務(wù)構(gòu)造
依然是序列標(biāo)注模型,僅將原始文本后面拼接示例模板,而示例模板的作用主要是提供額外信息(什么樣的實(shí)體屬于什么類別,與原文相似文本中哪些實(shí)體屬于哪些類別等),幫助模型可以更好地識(shí)別出原始文本中的實(shí)體。
示例模板的構(gòu)建
示例分為面向?qū)嶓w的示例和面向句子的示例,如下圖所示,
面向?qū)嶓w的示例構(gòu)造方法包括:
- 隨機(jī)法,即,隨機(jī)從訓(xùn)練集的實(shí)體列表中,抽取若干個(gè)實(shí)體,作為示例。
- 統(tǒng)計(jì)法,即,選擇在訓(xùn)練集中出現(xiàn)次數(shù)較多的實(shí)體,作為示例。
- 網(wǎng)格搜索法,即,對(duì)所有實(shí)體進(jìn)行網(wǎng)格搜索,判斷采用哪些實(shí)體作為示例時(shí),在驗(yàn)證集上的效果最優(yōu)。
面向句子的示例構(gòu)造方法包括:
- SBERT法,即,使用[CLS]向量之間的余弦值作為句子相似度分?jǐn)?shù),選擇與原始句子最相似的句子作為示例。
- BERTScore法,即,使用句子中每個(gè)token相似度之和作為句子相似度分?jǐn)?shù),選擇與原始句子最相似的句子作為示例。
模板形式主要有三種,無上下文模板、有上下文模板和詞典模板,如下圖所示,
最終實(shí)驗(yàn)結(jié)果為實(shí)體-網(wǎng)格搜索法-有上下文模板效果最佳。分析句子級(jí)別不好可能是由于數(shù)據(jù)空間中句子間的相似度太低導(dǎo)致。
訓(xùn)練&預(yù)測(cè)
將示例模板拼接到原始模板后面,一起進(jìn)入模型,僅針對(duì)原始文本進(jìn)行標(biāo)簽預(yù)測(cè)與損失計(jì)算,如下:
其中,表示原始文本,表示示例模板,表示原始文本經(jīng)過模型后的序列向量,表示示例模板經(jīng)過模型后的序列向量。損失如下:
僅考慮原始文本部分。將需要領(lǐng)域遷移時(shí),將原有模型的參數(shù)賦予新模型,進(jìn)訓(xùn)練標(biāo)簽映射部分參數(shù)(linear或crf)即可。
LightNER
LightNER,原文《LightNER: A Lightweight Generative Framework with Prompt-guided Attention for Low-resource NER》,核心思想為將原始序列標(biāo)注任務(wù)轉(zhuǎn)化為Seq2Seq的生成任務(wù),通過在transformer的attetion機(jī)制中融入提示信息,在少量參數(shù)訓(xùn)練下,使模型達(dá)到較好的效果。是一篇「軟模版且有答案空間映射」的Prompt論文。
paper:https://arxiv.org/abs/2109.00720
github:https://github.com/zjunlp/DeepKE/blob/main/example/ner/few-shot/README_CN.md
模型如下圖所示,下面詳細(xì)介紹。
任務(wù)構(gòu)造
將序列標(biāo)注任務(wù)轉(zhuǎn)換成一個(gè)生成任務(wù),在Encoder端輸入為原始文本,Decoder端逐字生成實(shí)體以及實(shí)體類型。模板信息融到Encoder和Decoder模型attention機(jī)制中,模板為soft-prompt,即一種可學(xué)習(xí)的自動(dòng)模板。
基于提示引導(dǎo)的Attention
如上圖(b)所示,分別在Encoder和Decoder中加入可訓(xùn)練參數(shù),其中,為transformer的層數(shù),,為模板長(zhǎng)度,為隱藏節(jié)點(diǎn)維度,表示由key和value兩項(xiàng)組成。
給定輸入序列,對(duì)于每一層transformer,的原始表示如下:
變化后的attention如下:
基于提示引導(dǎo)的Attention可以根據(jù)提示內(nèi)容重新調(diào)節(jié)注意機(jī)制,使其少參數(shù)調(diào)節(jié)。并且實(shí)驗(yàn)發(fā)現(xiàn),模板長(zhǎng)度和提示信息融入的層數(shù)影響最終效果,當(dāng)長(zhǎng)度為10時(shí),效果最佳。當(dāng)層數(shù)為12層時(shí),效果最佳。
訓(xùn)練&預(yù)測(cè)
對(duì)于Encoder端,輸入文本,獲取表示;
對(duì)于Decoder端,輸出不僅為實(shí)體內(nèi)容還可能為實(shí)體類別,即,其每個(gè)輸出內(nèi)容為。
標(biāo)簽預(yù)測(cè)時(shí),
其中,通過答案空間映射得來,具體為“將標(biāo)簽中幾個(gè)詞語的向量加權(quán)求和,作為標(biāo)簽的答案空間向量”。
消融實(shí)驗(yàn)發(fā)現(xiàn),基于提示引導(dǎo)的Attention和答案空間映射對(duì)于結(jié)果的影響均較大。
EntLM
EntLM,原文《Template-free Prompt Tuning for Few-shot NER》,核心思想為將序列標(biāo)注任務(wù)變成原始預(yù)訓(xùn)練的LM任務(wù),僅通過答案空間映射,實(shí)現(xiàn)任務(wù)轉(zhuǎn)化,消除下游任務(wù)與原始LM任務(wù)的Gap,提高模型效果。是一篇「無模板且有答案空間映射」的Prompt論文。
paper:https://arxiv.org/abs/2109.13532
github:https://github.com/rtmaww/EntLM/
模型如下圖所示,下面詳細(xì)介紹。
任務(wù)構(gòu)造
將序列標(biāo)注任務(wù)轉(zhuǎn)換成一個(gè)與預(yù)訓(xùn)練階段一致的LM任務(wù),消除下游任務(wù)與預(yù)訓(xùn)練任務(wù)的Gap。對(duì)其輸入文本進(jìn)行LM預(yù)測(cè),當(dāng)token不是實(shí)體時(shí),預(yù)測(cè)成與輸入一致的token;當(dāng)token是實(shí)體時(shí),預(yù)測(cè)成實(shí)體類別下的token。而針對(duì)每個(gè)實(shí)體類別下的token的整合,即答案空間映射如何構(gòu)造。
答案空間映射的構(gòu)造
在特定領(lǐng)域下,往往未標(biāo)注文本以及每個(gè)實(shí)體類別的實(shí)體列表是很好獲取的,通過詞表回溯構(gòu)建偽標(biāo)簽數(shù)據(jù),其中,表示實(shí)體類別,表示文本數(shù)據(jù)。由于偽標(biāo)簽數(shù)據(jù)會(huì)存在很多噪音數(shù)據(jù),因此在構(gòu)建答案空間映射時(shí),使用4種方法,對(duì)每個(gè)實(shí)體類別中的候選詞語進(jìn)行篩選。
- 數(shù)據(jù)分布法,即,篩選出在語料庫(kù)中,每個(gè)實(shí)體類別出現(xiàn)頻率最高的幾個(gè)詞。
- 語言模型輸出法,即,將數(shù)據(jù)輸入到語言模型中,統(tǒng)計(jì)每個(gè)類別中詞匯在語言模型輸出概率的總和,選擇概率最高的幾個(gè)詞。
- 數(shù)據(jù)分布&語言模型輸出法,即將數(shù)據(jù)分布法和語言模型輸出法相結(jié)合,將每個(gè)實(shí)體類別中的某一詞的詞頻*該詞模型輸出概率作為該詞得分,選擇分?jǐn)?shù)最高的幾個(gè)詞。
- 虛擬標(biāo)簽法,即,使用向量代替實(shí)體類別中的詞語,相當(dāng)于類別「原型」,向量獲取辦法為將上述某一種方法獲取的高頻詞,輸入到語言模型中,獲取每個(gè)詞語的向量,然后進(jìn)行加和取平均,獲取類別向量。
- 由于一些高頻詞可能出現(xiàn)在多個(gè)實(shí)體類別中,造成標(biāo)簽混亂,因此采用閾值過濾方法去除沖突詞語,即(某個(gè)類別中的詞語出現(xiàn)的次數(shù)/詞語在所有類別中出現(xiàn)的次數(shù))必須大于規(guī)定的閾值,才將該詞語作為該實(shí)體類別的標(biāo)簽詞語。
- 實(shí)驗(yàn)發(fā)現(xiàn),絕大多少情況下,數(shù)據(jù)分布&語言模型輸出法獲取高頻詞,再使用虛擬標(biāo)簽法獲取類別「原型」的方法最好。
訓(xùn)練&預(yù)測(cè)
模型訓(xùn)練階段采用LM任務(wù)的損失函數(shù),如下:
其中,,為預(yù)訓(xùn)練過程中LM層參數(shù)。
UIE
UIE,原文《Unified Structure Generation for Universal Information Extraction》,核心思想為將序列標(biāo)注任務(wù)轉(zhuǎn)化為Seq2Seq的生成任務(wù),將手工提示模板與原始文本進(jìn)行結(jié)合,通知模型待抽取的內(nèi)容,再通過特定的抽取格式,進(jìn)行逐字解碼生成,提高模型效果。是一篇「手工模板且無答案空間映射」的Prompt論文。不過UIE適用于所有信息抽取任務(wù),不限于NER任務(wù),但后面主要以NER任務(wù)為例,進(jìn)行闡述。
paper:https://arxiv.org/abs/2203.12277
github:https://github.com/universal-ie/UIE
模型如下圖所示,下面詳細(xì)介紹。
值得注意的是,UIE這篇論文與百度Paddle提到到UIE框架并不一個(gè)東西(看過源碼的人都知道,不要混淆)。百度Paddle提到到UIE框架本質(zhì)是一個(gè)基于提示的MRC模型,將提示模板作為query,文本作為document,使用Span抽取提示對(duì)應(yīng)的內(nèi)容片段。
任務(wù)構(gòu)造
將序列標(biāo)注任務(wù)轉(zhuǎn)換成一個(gè)生成任務(wù),在Encoder端輸入為提示模板+原始文本,Decoder端逐字生成結(jié)構(gòu)化內(nèi)容。以T5為基礎(chǔ),采用預(yù)訓(xùn)練技術(shù),學(xué)習(xí)從文本到結(jié)構(gòu)化生成。
手工模板
在編碼端,通過待抽取schema(實(shí)體類別、關(guān)系等)構(gòu)造Prompt模板,稱為SSI,同于控制生成內(nèi)容。模板樣式如下圖所示,
在解碼端,設(shè)計(jì)了特定的抽取結(jié)構(gòu),稱為SEL,而這種特殊的結(jié)構(gòu),也可以算作模板的一種吧,可以使解碼時(shí),按照統(tǒng)一要求進(jìn)行表示。抽取結(jié)構(gòu)樣式如下圖所示,
只需關(guān)注Entity部分即可。
訓(xùn)練&測(cè)試
對(duì)于Encoder端,輸入文本以及SSI內(nèi)容,獲取表示為:
對(duì)于Decoder端,逐字生成,如下:
由于訓(xùn)練數(shù)據(jù)中,待生成部分的數(shù)據(jù)格式均按照SEL格式構(gòu)造,因此生成內(nèi)容也會(huì)遵循其結(jié)構(gòu)。
而模型重點(diǎn)是如何構(gòu)造預(yù)訓(xùn)練數(shù)據(jù),在預(yù)訓(xùn)練過程中,數(shù)據(jù)來自Wikidata、Wikipedia和ConceptNet。并且構(gòu)造的數(shù)據(jù)格式包含三種,分別為、和。
- ,是通過Wikidata和Wikipedia構(gòu)建的text-to-struct平行語料。
- ,是僅包含結(jié)構(gòu)化形式的數(shù)據(jù)。
- ,是無結(jié)構(gòu)化的純文本數(shù)據(jù)。
在預(yù)訓(xùn)練過程中,三種語料對(duì)應(yīng)不同的訓(xùn)練損失,訓(xùn)練的網(wǎng)絡(luò)結(jié)構(gòu)也不一樣。訓(xùn)練整個(gè)Encoder-Decoder網(wǎng)絡(luò)結(jié)構(gòu),僅訓(xùn)練Decoder網(wǎng)絡(luò)結(jié)構(gòu),進(jìn)訓(xùn)練Encoder網(wǎng)絡(luò)結(jié)構(gòu),最終的損失是三者的加和。
總結(jié)
本人在自己的中文數(shù)據(jù)集上,測(cè)試了TemplateNER、LightNER和EntLM的效果,驚奇的發(fā)現(xiàn)當(dāng)數(shù)據(jù)量增加到50-shot時(shí),「BERT-CRF」的效果是最好的(別整哪些沒用的,加點(diǎn)數(shù)據(jù)啥都解決了,這也是令我比較沮喪的點(diǎn)。也許、可能、大概、興許、或許是數(shù)據(jù)集或者代碼復(fù)現(xiàn)(code下載錯(cuò)誤?)的問題,無能狂怒!?。。?。
當(dāng)5-shot和10-shot時(shí),EntLM方法的效果較好,但是跟答案空間映射真的是強(qiáng)相關(guān),必須要找到很好的標(biāo)簽詞才能獲取較好的效果。而TemplateNER方法測(cè)試時(shí)間太久了,在工業(yè)上根本無法落地。
就像之前我對(duì)prompt的評(píng)價(jià)一樣,我從來不否認(rèn)Promot的價(jià)值,只是它并沒有達(dá)到我的預(yù)期。是世人皆醉我獨(dú)醒,還是世人皆醒我獨(dú)醉,路還要走,任務(wù)還要做,加油?。?!
-
模板
+關(guān)注
關(guān)注
0文章
108瀏覽量
20545 -
模型
+關(guān)注
關(guān)注
1文章
3121瀏覽量
48663 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1201瀏覽量
24622
原文標(biāo)題:總結(jié) | Prompt在NER場(chǎng)景的應(yīng)用
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論