寫(xiě)在前面
大家好,我是劉聰NLP。
最近在做Prompt的相關(guān)內(nèi)容,本人意識(shí)中一直覺(jué)得Prompt機(jī)制在序列標(biāo)注任務(wù)上不是很好轉(zhuǎn)換,因此,很早前,組長(zhǎng)問(wèn)我時(shí),我夸下???,說(shuō):“誰(shuí)用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ù)的論文,核心思想是通過(guò)N-Gram方法構(gòu)建候選實(shí)體,然后將其與所有手工模板進(jìn)行拼接,使用BART模型對(duì)其打分,從而預(yù)測(cè)出最終實(shí)體類(lèi)別。是一篇「手工模板且無(wú)答案空間映射」的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í)體類(lèi)別。候選實(shí)體片段由原始文本進(jìn)行N-Gram滑窗構(gòu)建,為了防止候選實(shí)體片段過(guò)多,論文中最大進(jìn)行8-gram。
模板構(gòu)建
模板為手工模板,主要包括正向模板和負(fù)向模板,其中,正向模板表示一個(gè)文本片段是某種實(shí)體類(lèi)型,負(fù)向文本表示一個(gè)文本片段不是實(shí)體。具體模板如下表所示,我們也可以看出,最終模型效果是與手工模板息息相關(guān)的。
訓(xùn)練階段
在訓(xùn)練階段,正樣本由實(shí)體+實(shí)體類(lèi)型+正向模板構(gòu)成,負(fù)樣本由非實(shí)體片段+負(fù)向模板構(gòu)成;由于負(fù)樣本過(guò)多,因此對(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ù)(可以理解為語(yǔ)義通順度PPL,但是計(jì)算公式不同),分?jǐn)?shù)計(jì)算如下:
其中,表示實(shí)體片段,表示第k個(gè)實(shí)體類(lèi)別,T_{y_{k},x_{i:j}}表示實(shí)體片段與模板的文本。
針對(duì),每個(gè)實(shí)體片段,選擇分?jǐn)?shù)最高的模板,判斷是否為一個(gè)實(shí)體,哪種類(lèi)型的實(shí)體。
DemonstrationNER
DemonstrationNER,原文《Good Examples Make A Faster Learner: Simple Demonstration-based Learning for Low-resource NER》,核心思想為在原始文本的基礎(chǔ)上,拼接示例模板信息,提高原始序列標(biāo)注模型的效果。是一篇「示例模板且無(wú)答案空間映射」的Prompt論文。
paper:https://arxiv.org/abs/2110.08454
github:https://github.com/INK-USC/fewNER
模型如下圖(b)所示,下面詳細(xì)介紹。
任務(wù)構(gòu)造
依然是序列標(biāo)注模型,僅將原始文本后面拼接示例模板,而示例模板的作用主要是提供額外信息(什么樣的實(shí)體屬于什么類(lèi)別,與原文相似文本中哪些實(shí)體屬于哪些類(lèi)別等),幫助模型可以更好地識(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ù),選擇與原始句子最相似的句子作為示例。
模板形式主要有三種,無(wú)上下文模板、有上下文模板和詞典模板,如下圖所示,
最終實(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)過(guò)模型后的序列向量,表示示例模板經(jīng)過(guò)模型后的序列向量。損失如下:
僅考慮原始文本部分。將需要領(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ù),通過(guò)在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í)體類(lèi)型。模板信息融到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í)體類(lèi)別,即,其每個(gè)輸出內(nèi)容為。
標(biāo)簽預(yù)測(cè)時(shí),
其中,通過(guò)答案空間映射得來(lái),具體為“將標(biāo)簽中幾個(gè)詞語(yǔ)的向量加權(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ù),僅通過(guò)答案空間映射,實(shí)現(xiàn)任務(wù)轉(zhuǎn)化,消除下游任務(wù)與原始LM任務(wù)的Gap,提高模型效果。是一篇「無(wú)模板且有答案空間映射」的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í)體類(lèi)別下的token。而針對(duì)每個(gè)實(shí)體類(lèi)別下的token的整合,即答案空間映射如何構(gòu)造。
答案空間映射的構(gòu)造
在特定領(lǐng)域下,往往未標(biāo)注文本以及每個(gè)實(shí)體類(lèi)別的實(shí)體列表是很好獲取的,通過(guò)詞表回溯構(gòu)建偽標(biāo)簽數(shù)據(jù),其中,表示實(shí)體類(lèi)別,表示文本數(shù)據(jù)。由于偽標(biāo)簽數(shù)據(jù)會(huì)存在很多噪音數(shù)據(jù),因此在構(gòu)建答案空間映射時(shí),使用4種方法,對(duì)每個(gè)實(shí)體類(lèi)別中的候選詞語(yǔ)進(jìn)行篩選。
- 數(shù)據(jù)分布法,即,篩選出在語(yǔ)料庫(kù)中,每個(gè)實(shí)體類(lèi)別出現(xiàn)頻率最高的幾個(gè)詞。
- 語(yǔ)言模型輸出法,即,將數(shù)據(jù)輸入到語(yǔ)言模型中,統(tǒng)計(jì)每個(gè)類(lèi)別中詞匯在語(yǔ)言模型輸出概率的總和,選擇概率最高的幾個(gè)詞。
- 數(shù)據(jù)分布&語(yǔ)言模型輸出法,即將數(shù)據(jù)分布法和語(yǔ)言模型輸出法相結(jié)合,將每個(gè)實(shí)體類(lèi)別中的某一詞的詞頻*該詞模型輸出概率作為該詞得分,選擇分?jǐn)?shù)最高的幾個(gè)詞。
- 虛擬標(biāo)簽法,即,使用向量代替實(shí)體類(lèi)別中的詞語(yǔ),相當(dāng)于類(lèi)別「原型」,向量獲取辦法為將上述某一種方法獲取的高頻詞,輸入到語(yǔ)言模型中,獲取每個(gè)詞語(yǔ)的向量,然后進(jìn)行加和取平均,獲取類(lèi)別向量。
- 由于一些高頻詞可能出現(xiàn)在多個(gè)實(shí)體類(lèi)別中,造成標(biāo)簽混亂,因此采用閾值過(guò)濾方法去除沖突詞語(yǔ),即(某個(gè)類(lèi)別中的詞語(yǔ)出現(xiàn)的次數(shù)/詞語(yǔ)在所有類(lèi)別中出現(xiàn)的次數(shù))必須大于規(guī)定的閾值,才將該詞語(yǔ)作為該實(shí)體類(lèi)別的標(biāo)簽詞語(yǔ)。
- 實(shí)驗(yàn)發(fā)現(xiàn),絕大多少情況下,數(shù)據(jù)分布&語(yǔ)言模型輸出法獲取高頻詞,再使用虛擬標(biāo)簽法獲取類(lèi)別「原型」的方法最好。
訓(xùn)練&預(yù)測(cè)
模型訓(xùn)練階段采用LM任務(wù)的損失函數(shù),如下:
其中,,為預(yù)訓(xùn)練過(guò)程中LM層參數(shù)。
UIE
UIE,原文《Unified Structure Generation for Universal Information Extraction》,核心思想為將序列標(biāo)注任務(wù)轉(zhuǎn)化為Seq2Seq的生成任務(wù),將手工提示模板與原始文本進(jìn)行結(jié)合,通知模型待抽取的內(nèi)容,再通過(guò)特定的抽取格式,進(jìn)行逐字解碼生成,提高模型效果。是一篇「手工模板且無(wú)答案空間映射」的Prompt論文。不過(guò)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è)東西(看過(guò)源碼的人都知道,不要混淆)。百度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)化生成。
手工模板
在編碼端,通過(guò)待抽取schema(實(shí)體類(lèi)別、關(guān)系等)構(gòu)造Prompt模板,稱(chēng)為SSI,同于控制生成內(nèi)容。模板樣式如下圖所示,
在解碼端,設(shè)計(jì)了特定的抽取結(jié)構(gòu),稱(chēng)為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)練過(guò)程中,數(shù)據(jù)來(lái)自Wikidata、Wikipedia和ConceptNet。并且構(gòu)造的數(shù)據(jù)格式包含三種,分別為、和。
- ,是通過(guò)Wikidata和Wikipedia構(gòu)建的text-to-struct平行語(yǔ)料。
- ,是僅包含結(jié)構(gòu)化形式的數(shù)據(jù)。
- ,是無(wú)結(jié)構(gòu)化的純文本數(shù)據(jù)。
在預(yù)訓(xùn)練過(guò)程中,三種語(yǔ)料對(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」的效果是最好的(別整哪些沒(méi)用的,加點(diǎn)數(shù)據(jù)啥都解決了,這也是令我比較沮喪的點(diǎn)。也許、可能、大概、興許、或許是數(shù)據(jù)集或者代碼復(fù)現(xiàn)(code下載錯(cuò)誤?)的問(wèn)題,無(wú)能狂怒?。。。?/p>
當(dāng)5-shot和10-shot時(shí),EntLM方法的效果較好,但是跟答案空間映射真的是強(qiáng)相關(guān),必須要找到很好的標(biāo)簽詞才能獲取較好的效果。而TemplateNER方法測(cè)試時(shí)間太久了,在工業(yè)上根本無(wú)法落地。
就像之前我對(duì)prompt的評(píng)價(jià)一樣,我從來(lái)不否認(rèn)Promot的價(jià)值,只是它并沒(méi)有達(dá)到我的預(yù)期。是世人皆醉我獨(dú)醒,還是世人皆醒我獨(dú)醉,路還要走,任務(wù)還要做,加油!??!
-
模板
+關(guān)注
關(guān)注
0文章
109瀏覽量
20872 -
模型
+關(guān)注
關(guān)注
1文章
3521瀏覽量
50425 -
數(shù)據(jù)集
+關(guān)注
關(guān)注
4文章
1224瀏覽量
25447
原文標(biāo)題:總結(jié) | Prompt在NER場(chǎng)景的應(yīng)用
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
CYW20829在ESL場(chǎng)景下,event和Subevent時(shí)間長(zhǎng)短的設(shè)置是什么?
敏捷合成器的技術(shù)原理和應(yīng)用場(chǎng)景
華為支付-(可選)特定場(chǎng)景配置操作
多用示波器的原理和應(yīng)用場(chǎng)景
開(kāi)源大模型在多個(gè)業(yè)務(wù)場(chǎng)景的應(yīng)用案例
倍頻器的技術(shù)原理和應(yīng)用場(chǎng)景
關(guān)于歐盟法規(guī)中測(cè)試場(chǎng)景的研究

關(guān)于中斷知識(shí)學(xué)習(xí)總結(jié)筆記
汽車(chē)?yán)走_(dá)回波發(fā)生器的技術(shù)原理和應(yīng)用場(chǎng)景
AI對(duì)話魔法 Prompt Engineering 探索指南

評(píng)論