背景介紹
實(shí)體鏈指是指對(duì)于給定的一個(gè)文本(如搜索Query、微博、對(duì)話內(nèi)容、文章、視頻、圖片的標(biāo)題等),將其中的實(shí)體與給定知識(shí)庫中對(duì)應(yīng)的實(shí)體進(jìn)行關(guān)聯(lián)。實(shí)體鏈指一般有兩種任務(wù)設(shè)計(jì)方式:Pipeline式和端到端式。
Pipeline式實(shí)體鏈指步驟一般有:命名實(shí)體識(shí)別、候選實(shí)體選取、實(shí)體消歧,其中最關(guān)鍵的一步是實(shí)體消歧。Ganea[1]將文本和候選實(shí)體encode為兩個(gè)向量,使用語義匹配來進(jìn)行實(shí)體消歧。Shuang Chen[2]則將消歧問題轉(zhuǎn)化為實(shí)體類型分類,得到實(shí)體類別后,通過Link Count確定最終鏈接到的實(shí)體。
端到端式實(shí)體鏈指使用一體化模型進(jìn)行鏈指,Nikolaos Kolitsas[3]通過模型結(jié)構(gòu)創(chuàng)新,實(shí)現(xiàn)了一個(gè)模型同時(shí)實(shí)體識(shí)別和消歧。Samuel Broscheit[4]則大道至簡(jiǎn),借助大量的語料和強(qiáng)大的預(yù)訓(xùn)練模型直接使用序列標(biāo)注的方式進(jìn)行實(shí)體鏈指。
任務(wù)抽象方式
賽題說明
百度飛槳舉辦的千言數(shù)據(jù)集:面向中文短文本的實(shí)體鏈指任務(wù)給出了中文短文本、短文本中的mention以及對(duì)應(yīng)位置,需要預(yù)測(cè)文本中mention對(duì)應(yīng)實(shí)體在給定知識(shí)庫中的id,如果在知識(shí)庫中沒有對(duì)應(yīng)實(shí)體即NIL,需要再給出實(shí)體類別。
訓(xùn)練集數(shù)據(jù)共7W條,query平均長(zhǎng)度22,包含26W個(gè)mention,每個(gè)mention有6.3個(gè)候選實(shí)體,被鏈接到的NIL實(shí)體有3W個(gè),其中1.6W在知識(shí)庫中有同名實(shí)體。可以發(fā)現(xiàn)有三個(gè)特點(diǎn):
文本長(zhǎng)度短,上下文信息有限
候選實(shí)體數(shù)量多
NIL數(shù)量多,占比超過了10%
模型方案
這次比賽已經(jīng)給出了mention信息,我們只需要考慮兩個(gè)任務(wù):實(shí)體消歧和NIL分類。任務(wù)的關(guān)鍵有以下幾點(diǎn):如何設(shè)計(jì)輸入樣本、如何設(shè)計(jì)模型結(jié)構(gòu)、NIL實(shí)體如何與其他實(shí)體一起排序、如何挖掘更豐富和多維度的特征等。
樣本構(gòu)造
我們選取了ERNIE、RoBERTa等預(yù)訓(xùn)練語言模型進(jìn)行語義特征抽取,將需要鏈指的文本和實(shí)體描述信息用[SEP]符號(hào)拼接,作為模型的輸入。
query樣本構(gòu)造:query樣本輸入時(shí)需要將mention的位置信息傳入模型,讓模型能判斷mention在query中的具體位置,例如:“海綿寶寶:海綿寶寶和派大星努力工作,兩人來到高速公路上!”中出現(xiàn)了兩次海綿寶寶,分別鏈接到了動(dòng)畫片《海綿寶寶》和動(dòng)畫人物海綿寶寶,需要加以區(qū)分。為了解決這一問題我們通過引入標(biāo)識(shí)符將位置信息傳入,在mention兩邊加入統(tǒng)一的標(biāo)識(shí)符“#”,樣本如下:
實(shí)體描述樣本構(gòu)造:數(shù)據(jù)庫中的實(shí)體包含了實(shí)體的標(biāo)準(zhǔn)說法subject,實(shí)體的類型type和實(shí)體的一些相關(guān)SPO信息。構(gòu)造樣本時(shí)將mention字段和實(shí)體標(biāo)準(zhǔn)名用“-”拼接作為輸入,強(qiáng)化標(biāo)準(zhǔn)名和mention是否相同這一特征。實(shí)體類型是消歧重要的信息,我們構(gòu)造了“類型:實(shí)體類型”這種描述,提供實(shí)體類型信息,為了防止截?cái)啵瑢⑵浞旁趯?shí)體標(biāo)準(zhǔn)名之后。SPO信息只使用了屬性值,這樣可以使超過最大輸入長(zhǎng)度的樣本數(shù)量減少35%。
統(tǒng)計(jì)特征樣本構(gòu)造:數(shù)據(jù)和特征決定了模型的上界,為了豐富模型輸入,將實(shí)體類型、實(shí)體長(zhǎng)度、mention長(zhǎng)度、實(shí)體和mention的Jaccard相似度等特征進(jìn)行embedding了之后,和模型輸出的特征向量拼接。
模型結(jié)構(gòu)
實(shí)體消歧本質(zhì)上是對(duì)候選實(shí)體進(jìn)行排序的過程,使用query和實(shí)體信息作為輸入,對(duì)候選實(shí)體進(jìn)行排序,給出候選實(shí)體分?jǐn)?shù),選出TOP1實(shí)體。在排序?qū)W習(xí)中,有三種常見模式pointwise,pairwise和listwise,對(duì)于實(shí)體消歧這種只需要TOP1的排序任務(wù),并不需要考慮候選實(shí)體之間的順關(guān)系,只考慮全局相關(guān)性,因此我們選取了pointwise方法。
排序?qū)W習(xí)模型示意
實(shí)體分類任務(wù)和實(shí)體鏈指任務(wù)看起來沒有直接聯(lián)系,但是Shuang Chen[2]提出當(dāng)可以預(yù)測(cè)出mention的類型時(shí),消歧就相當(dāng)容易。因此我們?cè)O(shè)計(jì)了多任務(wù)模型框架,同時(shí)進(jìn)行排序和分類,兩個(gè)任務(wù)共享模型參數(shù),一起訓(xùn)練,損失函數(shù)一起優(yōu)化,通過共享排序任務(wù)和分類任務(wù)的信息,模型可以有更好的表現(xiàn),多任務(wù)損失函數(shù)如下。
最終我們模型結(jié)構(gòu)如下,將query和實(shí)體描述拼接,輸入預(yù)訓(xùn)練語言模型,將CLS、mention開始和結(jié)束位置的向量拼接作為特征向量。排序任務(wù)將特征向量輸入全連接層,然后經(jīng)過tanh最終輸出[-1,1]區(qū)間的分?jǐn)?shù),分?jǐn)?shù)越高代表越有可能是目標(biāo)實(shí)體。分類任務(wù)將特征向量輸入全鏈接層,經(jīng)過softmax層輸出各個(gè)分類的得分。
實(shí)體鏈指和分類模型結(jié)構(gòu)
模型優(yōu)化
數(shù)據(jù)清洗
基于置信學(xué)習(xí)數(shù)據(jù)清理:分析數(shù)據(jù)集我們發(fā)現(xiàn),數(shù)據(jù)之中存在部分標(biāo)注錯(cuò)誤,根據(jù)Northcutt[6]置信學(xué)習(xí)的思想,我們?cè)谠紨?shù)據(jù)上用n-flod方式訓(xùn)練了5個(gè)模型,用這些模型預(yù)測(cè)原始訓(xùn)練集的標(biāo)簽,然后融合5個(gè)模型輸出的標(biāo)簽作為真實(shí)標(biāo)簽,再?gòu)脑加?xùn)練集中清理真實(shí)標(biāo)簽與原標(biāo)簽不一致的樣本,根據(jù)經(jīng)驗(yàn)清理的樣本數(shù)量最好不大于10%。
NIL實(shí)體排序方式實(shí)驗(yàn)
實(shí)體消歧過程中NIL實(shí)體如何和其他實(shí)體一起排序,是單獨(dú)作為一個(gè)分類任務(wù),還是將NIL轉(zhuǎn)換為特定類型的實(shí)體參與排序,針對(duì)這個(gè)問題,我們?cè)O(shè)計(jì)了三種方案:
方案1:只對(duì)知識(shí)庫中存在的實(shí)體進(jìn)行排序,當(dāng)top1的score小于閾值時(shí),認(rèn)為是NIL實(shí)體;
方案2:構(gòu)造NIL實(shí)體樣本“mention-mention,類型:未知類型”,例如:“英雄三國(guó)-英雄三國(guó),類型:未知類型”,表示該實(shí)體是一個(gè)未知實(shí)體。預(yù)測(cè)和訓(xùn)練時(shí),所有mention候選實(shí)體中增加一個(gè)未知實(shí)體,參與排序;
方案3:將所有候選實(shí)體拼接,和query樣本一起輸入模型進(jìn)行分類,判斷是不是NIL實(shí)體,理論上這樣可以帶來更多全局信息??紤]到訓(xùn)練速度,我們先用1)中的方案進(jìn)行排序,然后將top3的實(shí)體描述拼接,訓(xùn)練一個(gè)分類模型。
對(duì)抗訓(xùn)練
對(duì)抗訓(xùn)練流程示意
對(duì)抗訓(xùn)練是指在模型的訓(xùn)練過程中構(gòu)建對(duì)抗樣本,參與模型訓(xùn)練的方法。正常訓(xùn)練過程中,如果梯度方向陡峭,那么很小的擾動(dòng)都會(huì)產(chǎn)生很大的影響。為了防止這種擾動(dòng),對(duì)抗訓(xùn)練在模型訓(xùn)練的過程中使用帶擾動(dòng)的對(duì)抗樣本進(jìn)行攻擊,從而提升模型的魯棒性。我們實(shí)驗(yàn)了FGM和PGD兩種生成對(duì)抗樣本的方式。
對(duì)抗樣本生成代碼
實(shí)驗(yàn)結(jié)果分析
模型可解釋性
可解釋性建模示意
在訓(xùn)練完模型后,我們首先會(huì)想要知道模型學(xué)到了哪些特征。C Guan[7]提出了一種基于互信息的可視化方法,這種方法相較其他可視化方法,具有普適性和一貫性的特點(diǎn),即解釋指標(biāo)有明確的意義,同時(shí)又能比較神經(jīng)元之間、層與層之間和模型與模型之間的差異。
可解釋性建模代碼
為了了解模型到底關(guān)注哪些輸入特征,我們基于Paddle2.0復(fù)現(xiàn)了該算法,對(duì)各個(gè)詞的重要程度進(jìn)行了可視化,顏色越深重要程度越高。通過可視化發(fā)現(xiàn),模型傾向于關(guān)注實(shí)體的類型和用來區(qū)分實(shí)體的片段,例如示例1吃得慢、食物、吃法、火腿腸,示例2中的珊迪、海綿寶寶、開關(guān)電源品牌。示例3種的人物、種族、夢(mèng)三國(guó)等,可以看到多任務(wù)模型關(guān)注的特征都是對(duì)消歧有幫助的。
實(shí)驗(yàn)結(jié)果分析
相關(guān)實(shí)驗(yàn)中參數(shù)配置如下:ERNIE和BERT的模型batch size為64,初始學(xué)習(xí)率為 5e-5,max_seq_length為256,RoBERTa-Large的模型batch size為32,初始學(xué)習(xí)率為 1e-5,max_seq_length為256,均采用了基于指數(shù)衰減的學(xué)習(xí)率衰減策略。
對(duì)比不同預(yù)訓(xùn)練模型和置信度學(xué)習(xí)的結(jié)果,發(fā)現(xiàn)模型效果RoBERTa-Large > ERNIE+置信度學(xué)習(xí)>ERNIE>BERT??梢钥吹紼RNIE專門針對(duì)中文數(shù)據(jù)進(jìn)行了任務(wù)優(yōu)化,確實(shí)比BERT的效果更好,但是ERNIE(12層)和RoBERTa-Large(24層)的對(duì)比說明了一寸長(zhǎng)一寸強(qiáng),更多的參數(shù)可以有更好的表現(xiàn)。
表1 預(yù)訓(xùn)練模型對(duì)比
對(duì)比單任務(wù)和多任務(wù)時(shí),我們使用了基于ERNIE的模型。通過對(duì)比多任務(wù)和單任務(wù)的模型效果,我們發(fā)現(xiàn)多任務(wù)不但流程簡(jiǎn)單,而且效果也比單任務(wù)聯(lián)合好。排序時(shí)模型需要借助類型信息判斷mention與候選實(shí)體是否一致;NIL分類時(shí)能學(xué)習(xí)到知識(shí)庫中其他候選實(shí)體的信息,所以兩個(gè)任務(wù)共享參數(shù)可以使模型提取到兩個(gè)任務(wù)的共性,提升模型效果。
表2 單任務(wù)和多任務(wù)對(duì)比
從模型1、2、3可以看到對(duì)抗學(xué)習(xí)是一種通用的模型優(yōu)化方法,在各種模型上都有明顯提升,但是FGM和最強(qiáng)一階對(duì)抗方式PGD實(shí)體鏈指任務(wù)上差距并不明顯。
表3 對(duì)抗學(xué)習(xí)效果
NIL不同方式參與排序的實(shí)驗(yàn)中,我們發(fā)現(xiàn)使用構(gòu)造NIL樣本參與匹配和對(duì)排序TOP1的score卡閾值這兩種方式結(jié)果差別不大,AUC分別為0.97和0.96,訓(xùn)練NIL分類器的AUC僅為0.94,猜測(cè)是因?yàn)閷?duì)候選實(shí)體進(jìn)行top3采樣時(shí),已經(jīng)有了誤差積累。
NIL不同方式參與排序的ROC曲線
通過將表現(xiàn)好的模型進(jìn)行融合我們?cè)赿ev測(cè)試集上的F1達(dá)到了88.7,在A榜數(shù)據(jù)集F1達(dá)到88.63,在B榜數(shù)據(jù)集F1達(dá)到91.20,最終排名第二。
小布助手的探索
小布助手每天處理千萬級(jí)別的用戶問題,其中涉及實(shí)體詞的query高達(dá)30%。這些由不同人發(fā)出的真實(shí)對(duì)話里,既包含千人千面的主觀表達(dá),更包含大量的創(chuàng)新詞匯,多義詞,同義詞,同時(shí)也經(jīng)常會(huì)面對(duì)“李白是誰”、“我要聽《李白》”這類mention有歧義的問題。
為了更好地理解用戶的問題,小布不僅借助OGraph在實(shí)體消歧方向進(jìn)行探索,還在命名實(shí)體識(shí)別和候選實(shí)體挖掘上做了很多工作。我們使用B/I標(biāo)簽進(jìn)行命名實(shí)體識(shí)別,為了提升輸入信息的豐富程度,使用Lattice LSTM和FLAT等結(jié)構(gòu),引入詞匯信息作為特征補(bǔ)充。為了做好候選實(shí)體選取的召回,從搜索點(diǎn)擊日志、自研知識(shí)圖譜OGraph等來源離線挖掘同義詞庫,為了解決復(fù)合實(shí)體的問題,離線挖掘了上下位關(guān)系,添加到同義詞庫中,提升實(shí)體的召回率。
小布助手實(shí)體鏈指流程
小布助手的技術(shù)積累不僅幫助我們?cè)诒荣愔忻星懊?,而且已?jīng)幫用戶解決“哥哥的代表作”、“李白是誰”、“我要聽《李白》”等常見而語音助手又極易誤解的用戶問題。黑格爾說過:人是靠思想站立起來的。思考賦予人類尊嚴(yán),驅(qū)動(dòng)文明不斷向前。小布助手匯聚無數(shù)背后英雄的思想,也在默默努力,然后用有趣貼心有靈魂驚艷所有人。
賽后感想
工欲善其事,必先利其器,本次比賽使用了飛槳2.0框架進(jìn)行訓(xùn)練,動(dòng)態(tài)圖模式下程序可即時(shí)執(zhí)行并輸出結(jié)果,提高了編碼效率。借助百度的PaddleNLP工具包,可以無縫切換ERNIE、BRART、RoBERTa等預(yù)訓(xùn)練模型,非常適合比賽時(shí)快速實(shí)驗(yàn)。
PaddleNLP工具包鏈接:
https://github.com/PaddlePaddle/PaddleNLP
這次比賽的賽題也很值得探索,實(shí)體消歧和分類兩個(gè)任務(wù)如何有機(jī)結(jié)合,可以做很多嘗試。一個(gè)實(shí)體鏈指任務(wù)就有抽象成多種方式,足以見得兵無常勢(shì),水無常形,我們?cè)诮鉀Q算法問題時(shí),要跳出思維定勢(shì),嘗試從不同的角度去抽象問題,找到最佳的解決方案。
本項(xiàng)目鏈接:
https://aistudio.baidu.com/aistudio/projectdetail/1639840
除了實(shí)體鏈指任務(wù),千言項(xiàng)目還有情感分析、閱讀理解、開放域?qū)υ?、文本相似度、語義解析、機(jī)器同傳、信息抽取等方向持續(xù)打榜中。
傳送門:
https://www.luge.ai/
參考文獻(xiàn)
[1]Deep Joint Entity Disambiguation with Local Neural Attention. Octavian-Eugen Ganea, Thomas Hofmann.
[2]Improving Entity Linking by Modeling Latent Entity Type Information,Shuang Chen, Jinpeng Wang, Feng Jiang, Chin-Yew Lin.
[3]End-to-End Neural Entity Linking. Nikolaos Kolitsas, Octavian-Eugen Ganea, Thomas Hofmann.
[4] Improving Entity Linking by Modeling Latent Entity Type Information. Shuang Chen, Jinpeng Wang, Feng Jiang, Chin-Yew Lin.
[5]Towards Deep Learning Models Resistant to Adversarial Attacks. A Madry, A Makelov, L Schmidt, D Tsipras.
[6]Confident Learning: Estimating Uncertainty in Dataset Labels. Curtis G. Northcutt, Lu Jiang, Isaac L. Chuang.
[7]Towards a Deep and Unified Understanding of Deep Neural Models in NLP. Chaoyu Guan, Xiting Wang, Quanshi Zhang, Runjin Chen, Di He, Xing Xie.
聯(lián)系客服