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