盛 劍,向政鵬,秦 兵,劉 銘,王莉峰
(1. 哈爾濱工業(yè)大學 社會技術與信息檢索研究中心,黑龍江 哈爾濱 150001;2. 騰訊科技(深圳)有限公司,廣東 深圳 518000)
命名實體識別(named entity recognition, NER)是自然語言處理領域(natural language processing, NLP)的基礎任務之一,也是信息抽取中最為重要的一個子任務,并且可以對后續(xù)的抽取任務提供幫助。命名實體識別任務意在識別文本中的事物的名稱,例如人名、地名和機構名。本文主要在多場景多領域下研究命名實體識別,以LSTM-CRF為基礎并引入CNN(卷積神經網(wǎng)絡)從文本中進一步提取有用的語義特征。
早期的命名實體識別大多是基于規(guī)則的方法,但是由于語言結構本身具有不確定性,制訂出統(tǒng)一完整的規(guī)則難度較大?;谝?guī)則的方法需要構造特定的規(guī)則模板,采用的特征包括統(tǒng)計信息、標點符號、關鍵字、位置詞、中心詞等,以模式和字符串相匹配為主要手段,尤其依賴于知識庫和詞典的建立。針對不同領域,需要專家重新書寫規(guī)則,代價較大,存在規(guī)則建立周期長、移植性差且需要建立不同領域知識庫作為輔助以提高系統(tǒng)識別能力等問題。
傳統(tǒng)的命名實體識別方法大多采用有監(jiān)督的機器學習模型,如隱馬爾可夫模型[1]、最大熵[2-3]、支持向量機和條件隨機場[4]等。最大熵模型具有結構嚴謹、通用性良好的特點,但訓練時間復雜度高,需要明確的歸一化計算[5],導致計算上的開銷比較大。條件隨機場在分詞和命名實體識別上表現(xiàn)出色,提供了一個特征靈活、全局最優(yōu)的標注框架,但同時存在收斂速度慢、訓練時間長的問題。通常來講,最大熵和支持向量機在正確率上比隱馬爾可夫模型略高,但是隱馬爾可夫模型在訓練和識別時的速度要更快一些,主要是由于Viterbi算法在解碼時具有較高的效率?;诮y(tǒng)計的方法對特征的選取依賴性較高,需要從文本中分析選擇對于此項任務影響因子較大的特征,并將這些特征加入到特征模板中,通過對訓練語料所包含的語言語義信息進行統(tǒng)計和分析,進行有效的特征選擇,從訓練語料中不斷發(fā)現(xiàn)強特征。有關特征可以分為具體的停用詞特征、上下文特征、詞典及詞性特征、單詞特征、核心詞特征以及語義特征等。與基于規(guī)則的方法相似,基于統(tǒng)計的方法對于語料庫的依賴性也較大,而建立較大的領域語料庫又是一大難點。
Naturallanguageprocessing(almost)fromscratch[6]是使用神經網(wǎng)絡進行命名實體識別較早的工作,文中,作者提出使用窗口方法和句子方法兩種網(wǎng)絡結構來進行命名實體識別。窗口方法的輸入為預測詞的上下文窗口,使用傳統(tǒng)的神經網(wǎng)絡進行求解。句子方法將整個句子作為當前預測詞的輸入,加入句子中相對位置特征來區(qū)分句子中的每個詞,然后使用一層卷積神經網(wǎng)絡求解。訓練時作者提出兩種目標函數(shù),一是詞級別的對數(shù)似然函數(shù),使用softmax來預測標簽概率,當成一個傳統(tǒng)的分類問題來做;二是句子級別的似然函數(shù),即考慮到CRF模型在序列標注任務中天然的優(yōu)勢,將標簽之間的轉移分數(shù)加入到目標函數(shù)中。這也是后來神經網(wǎng)絡——CRF模型的先驅工作。
當前最好的實體識別模型是LSTM-CRF模型[7-8],該網(wǎng)絡由兩個長短時記憶網(wǎng)絡組成,一個前向記憶網(wǎng)絡和一個后向記憶網(wǎng)絡,前者用于學習前向的序列信息,后者用于學習后向的序列信息,得到每個隱層的表示,將隱層映射到所需分類的特征維度,之后選取概率最大的一維作為其實體類別,該方法也稱之為softmax[9]。盡管該模型在獨立的序列標注任務中取得了成功,例如詞性標注,但是該模型忽略了標簽間的依賴關系,這一缺點導致了部分精度的損失。實體識別任務存在某些內在限制,例如I-PER 標簽并不能接在B-LOC標簽的后邊。因此,用條件隨機場模型(CRF)來學習標簽之間的關系,而不是進行獨立的標注。目前將神經網(wǎng)絡和CRF模型相結合的模型已經成為命名實體識別的主流模型。由于RNN有天然的序列結構,所以RNN-CRF使用更加廣泛。使用神經網(wǎng)絡有天然的無需大量人工特征的優(yōu)勢,只需要詞向量或者字符向量就可以達到主流的水平,加入高質量的詞典特征可以進一步提升效果。
本文提出的細粒度命名實體識別算法以LSTM-CRF模型為基礎,并引入CNN從文本中進一步提取有用的語義特征做實體邊界劃分,之后交給細粒度劃分模塊做小類別分類。第一步通過使用RNN對命名實體的上下文進行表示,并使用softmax分類確定該命名實體所屬的大類別(即領域);第二步利用每個領域下的語料構建模型以確定命名實體所屬的細粒度類別(小類別)。實驗結果顯示,命名實體識別的F1值在全領域上平均值達到80%左右,能在一定程度上說明實現(xiàn)的分階段方案是有效的。
本文實現(xiàn)的模型共包含三個模塊:語料回標模塊、命名實體識別模塊、命名實體細粒度劃分模塊。在獲取某個詞條為命名實體后,則將該命名實體和命名實體的上下文交由細粒度的命名實體類別劃分模塊,先由模塊確定該命名實體的大類別標簽(所屬領域),然后再確定該實體的小類別標簽。對句子的識別提供了有交叉多標簽的命名實體識別結果,即有可能出現(xiàn)輸入“ABCDE”,識別結果為“AB”和“BC”為不同領域下的命名實體。另外,在對實體打標簽時也會出現(xiàn)一個實體有多個標簽的情況,類似于“馬龍”可能是一個人名,也是一個體育明星,這時該方案會對命名實體提供屬于多個領域的細粒度類別標簽。
舉例來說,輸入文本為:
趙麗穎,1987年10月16日出生于河北省廊坊市,華語影視女演員,畢業(yè)于廊坊市電子信息工程學校。
輸出文本為:
[趙麗穎][影視明星,人名],1987年10月16日出生于[河北省][地名][廊坊市][地名],華語影視女演員,畢業(yè)于[廊坊市電子信息工程學校][機構名,教育機構]。
該文本在經過12個領域的命名實體識別模塊后,在傳統(tǒng)、娛樂和教育領域均有命名實體被識別出來,將結果全部保留送入細粒度類別劃分模型得到最終的分類。此例中,趙麗穎被識別成影視明星和人名,河北省和廊坊市被識別為地名,廊坊市電子信息工程學校被識別成機構名和教育機構名。
模型的整體結構如圖1所示。
圖1 模型整體結構
在詞典回標模塊中,從網(wǎng)絡中爬取了除人名、地名、機構名外其他類別下的細粒度命名實體詞典。并從網(wǎng)絡中爬取文本數(shù)據(jù),利用詞典回標數(shù)據(jù)形成大規(guī)模的訓練集、開發(fā)集和測試集。
實現(xiàn)階段發(fā)現(xiàn),自動標注的數(shù)據(jù)里面有很多誤標注的數(shù)據(jù)(噪聲)存在,例如把“你的名字是什么”這句話標注為“[你的名字][影視劇]是什么”,即認為“你的名字”是個影視劇,但是顯然該詞條不是一個命名實體。
通過抽樣分析,發(fā)現(xiàn)語料回標的質量不是很高,回標結果舉例,如表1所示。
表1 回標結果舉例
基于此類問題,人工對粗糙的機器標注的語料進行二次標注,得到了小規(guī)模的較為準確的標注語料。
本文以LSTM+CRF構建基準的命名實體識別模塊[10-11],引入CNN特征提取模塊[12],用于識別輸入文檔中的命名實體。
卷積神經網(wǎng)絡最早應用在計算機視覺任務上,如今也廣泛應用在自然語言處理任務上。
卷積神經網(wǎng)絡其實就是多層卷積運算,然后對每層的卷積輸出用非線性激活函數(shù)做轉換。卷積過程中每塊局部的輸入?yún)^(qū)域與輸出的一個神經元相連接。對每一層應用不同的卷積核,每一種卷積核可以理解為是對一種特征進行提取,然后將多種特征進行匯總。
CNN在句子建模上有著廣泛的應用,CNN強大的特征捕捉能力,使得在句子建模過程中,先組合底層鄰近的詞語信息,逐步向上傳遞,上層又組合新的短語信息,從而使得相距較遠的句子也存在聯(lián)系,這種聯(lián)系通常是語義上的聯(lián)系。
本文卷積的時候是整行進行的,卷積核的高為詞向量的維度,寬為2、3不等。如圖2最下方CNN提取句子特征部分所示,寬為2的卷積核對整個序列進行卷積得到維度為4的向量。對每個卷積核卷積得到的向量通過max pooling操作,將結果拼接在一起,得到的向量作為整個句子的表示。將此句子表示加入到LSTM獲取到的每個詞的上下文表示,從而使每個詞可以既具有句子表示又可以具有詞級別表示。
LSTM+CNN+CRF的基本結構,如圖2所示。
圖2 LSTM+CNN+CRF基本結構
LSTM+CRF為兩層結構,其中輸入表示層由雙向LSTM組成,通過LSTM中的每個cell單元對輸入文檔進行編碼,將隱層得到的輸出與CNN提取的類似n-gram的特征進行拼接[13],通過全連接層進行tag分類,得到的矩陣為CRF層的發(fā)射矩陣[14]。
在CRF中,給定一個觀察序列x,目的是希望找到一個概率最大的標記序列y。在命名實體識別任務中,x表示詞序列,y表示命名實體標記。那么給定的概率可由式(1~3)計算:
(4)
根據(jù)每個被識別出的命名實體在語料中出現(xiàn)的頻率和命名實體的置信度(φ(Ne))設定閾值,然后選擇大于閾值的命名實體作為可信的標注結果。
條件隨機場的目標函數(shù)在考慮了狀態(tài)特征函數(shù)的同時,還包含有標簽之間轉移特征函數(shù)。使用SGD學習模型參數(shù),在給定已訓練好的模型時,給定輸入序列,預測輸出序列使目標函數(shù)最大化的最優(yōu)序列,是一個動態(tài)規(guī)劃問題,使用維特比算法進行解碼。
本文將命名實體的細粒度類別劃分切分為兩個步驟:①根據(jù)命名實體及命名實體的上下文進行領域(大類別標簽)的劃分; ②根據(jù)第一步得到的領域信息(大類別標簽)進行類別的細分,以得到命名實體的小類別標簽。
本文模型采用Tang[16]提出的對句子中目標詞的建模方法對命名實體的表示進行建模,這個模型在中文零指代消解任務[17]中也發(fā)揮了較大的作用。具體來說,在第一步通過使用兩個單向LSTM對命名實體的上文和下文分別進行表示,再將上文的表示和下文的表示拼接在一起作為命名實體的表示,最后使用softmax分類確定該命名實體所屬的大類別(即領域);第二步利用每個領域下的語料構建同樣的模型,以同樣的方式確定命名實體所屬的細粒度類別(小類別)。在兩個步驟中使用同樣的模型,區(qū)別在于:第一個步驟分類的類別為12個領域,第二個步驟將訓練12個分類器,每個分類器只對一個領域下的小類別標簽進行分類。 模型結構如圖3所示。
圖3 命名實體建模模型
在建模命名實體的上下文時,本文對實體的表示按以下規(guī)則進行處理:
(1) 每次僅對一個命名實體進行分類;
(2) 句中如果有多個命名實體,則每次僅處理一個命名實體,將其余的部分都看作是上下文;
(3) 命名實體如果由多個詞組成,直接將多個詞看作是一個詞。
實驗過程中,第一個步驟使用12個領域語料的訓練集進行訓練(在訓練的時候會對訓練語料隨機打亂順序),然后在12個領域語料的開發(fā)集上進行模型的選擇,最后保留在開發(fā)集上效果最好的模型。在第2個步驟中,對12個領域中每一個領域,分別按上述方法利用該領域的訓練語料訓練分類器,最終得到12個個分類器。每一個分類器都做一個領域下的命名實體的細粒度劃分。
本文將細粒度命名實體的識別分為兩個階段。第一個階段利用序列標注算法確定某個詞條是否為命名實體(利用12個領域下的命名實體識別器判斷某一詞條是否為該領域下的命名實體),第二個階段根據(jù)第一階段識別出的命名實體進行細粒度類別劃分。因此實驗部分分別對這兩個階段的效果進行檢測。最后,檢測兩個階段合二為一后的效果,即給定一個句子,模型識別出其命名實體以及命名實體的領域和細粒度標簽信息的效果。
本文從領域角度出發(fā),定義一套命名實體(NE,named entity)標簽體系,研發(fā)面向互聯(lián)網(wǎng)多場景文本數(shù)據(jù)的命名實體識別通用解決方案,提升文本詞法分析質量。表2中展示了我們所定義的12個領域以及這12個領域下的總計46個細粒度標簽。
表2 標簽體系
本實驗采集了與需求對應的12個類別下的命名實體構建詞典。
在獲取詞典后,利用從網(wǎng)絡爬取和騰訊方面給出的文本數(shù)據(jù)進行回標,獲取每個類別下的數(shù)據(jù)集,句子級數(shù)據(jù)集規(guī)模(單位:條)如表3所示。
表3 回標數(shù)據(jù)集統(tǒng)計
在語料中,每個領域分別隨機抽樣100條語料,并計算出準確率(標注正確實體/所有實體)。抽樣的結果如表4所示。
表4 回標準確率抽樣(%)
領域準確率領域準確率傳統(tǒng)98.91旅游96.67教育90.24餐飲93.07游戲86.96房產83.01娛樂70.05電商62.50金融82.79體育75.00汽車91.35醫(yī)療65.15
在模型的訓練過程中,使用了預訓練的中文詞向量,使用Python庫gensim中的Word2Vec的接口訓練中文維基百科的語料得到。
通過對訓練集中的問進行統(tǒng)計。對于詞表中的詞w,如果有對應的預訓練詞向量,則使用對應的預訓練的詞向量作為詞w的詞向量的初始值;如果沒有對應的預訓練的詞向量,則詞w的詞向量將隨機產生。在模型的訓練過程中,詞向量會隨著訓練時得到的梯度進行微調。
2.4.1 實體識別模塊實驗結果
此模塊利用12個領域下的語料分別訓練12個命名實體識別器,這些命名實體識別器僅進行0-1識別,即確定某詞條是否為某領域下的命名實體。因此,本節(jié)給出了在各個領域下命名實體的0-1識別結果,并對比了與LSTM+CRF模型的結果,效果有所提高。
實驗結果如表5所示。由表5可見,加入CNN后,在大部分領域的命名實體識別效果均有所提高,說明CNN能夠從文本中獲得對命名實體識別有益的特征。
2.4.2 命名實體的細粒度類別劃分模塊實驗結果
命名實體的細粒度類別劃分模塊分為兩個階段,因此實驗部分也給出了兩個階段的劃分結果。第一個階段的輸入為由命名實體識別模塊識別出的命名實體及其上下文,輸出為該命名實體的大類別標簽,這個階段記為領域劃分階段。在進行此部分實驗時,假設輸入的命名實體為正確的命名實體。此部分實驗能夠檢測命名實體被劃分到了正確的大類別下的準確程度。本部分的實驗數(shù)據(jù)均為詞典回標得到的數(shù)據(jù),按照7∶1∶1的比例隨機劃分為訓練集、開發(fā)集和測試集。
表5 命名實體識別模塊實驗結果(%)
本模塊只對命名實體識別模塊識別正確的實體進行細粒度類別劃分,并不對實體的識別結果進行修改,因此本模塊只對命名實體類別劃分的準確率進行分析。領域劃分階段的實驗結果,如表6所示。
表6 領域劃分階段的實驗結果(%)
由表6可見,領域劃分的準確率在95%以上,說明在命名實體識別準確的情況下,依據(jù)上下文可以獲得較為準確的領域劃分結果。因此我們首先對命名實體的領域進行確定,再對命名實體的細粒度標簽進行劃分。
細粒度類別劃分模塊的第二個階段,對命名實體在第一個階段識別出的領域下進行細粒度劃分,記為類別劃分階段。本階段同樣假設輸入為由命名實體識別模塊識別出的命名實體及其上下文,輸出則為該命名實體的細粒度類別標簽。此部分實驗能夠檢測命名實體被劃分到細粒度的類別下的準確程度。表7給出了實驗結果。
表7 類別劃分階段的實驗結果(%)
表7中,醫(yī)療、娛樂、游戲等領域實驗中訓練集的效果不如開發(fā)集和測試集的原因是我們的訓練數(shù)據(jù)中有回標誤差。
2.4.3 命名實體識別整體實驗結果
將命名實體識別和命名實體的細粒度類別劃分兩個步驟合二為一,測試了本文實現(xiàn)的命名實體細粒度劃分的整體準確率,使用的語料是人工標注的語料,結果如表8所示。由于在細粒度類別劃分模塊中只對命名實體識別模型識別正確的實體進行細粒度類別劃分,因此最后結果的準確率等于兩個模塊準確率的乘積,召回率等于命名實體識別模塊的召回率。在此實驗中,輸入為未經處理的原始文本,而輸出為帶有細粒度標簽的命名實體。
表8 細粒度類別劃分模塊的實驗結果(%)
從表8的實驗結果可見,大部分領域的效果都在80%左右,小部分領域效果較差,這些領域效果較差的主要原因是數(shù)據(jù)在標注的過程中出現(xiàn)了錯誤,而在人工標注的語料中則不包含這些錯誤的信息,因而模型學到的更多的是錯誤的信息。
另外,由于訓練語料是由詞典回標產生的,所以模型往往可以正確識別常見的命名實體,而對于一些出現(xiàn)次數(shù)較少的命名實體就難以正確識別。部分實體的類別在自動標注的過程中被誤標,原因是數(shù)據(jù)回標時將部分非命名實體標注為命名實體。例如,對于文本“l(fā)osea磨砂拼接小方包2017新款斜挎包迷你鎖扣包韓版復古單肩包小”中的“迷你”,在汽車領域的標簽是“汽車—品牌”,但是在當前語境下就是錯誤的標簽。在該領域下實驗效果較差的原因就是在數(shù)據(jù)回標時,將大量的“迷你”標注為“汽車—品牌”,所以在訓練的時候,模型學習到的信息是將“迷你”的類別識別為“汽車—品牌”。
部分抽樣的錯誤樣例見表9。其中,由“【”和“】”括起來的為模型識別出的命名實體。
從表9中可以看出,錯誤樣例中的錯誤是多樣的,既有命名實體識別模塊識別的錯誤,也有細粒度類別劃分的錯誤。同時,來源于構建語料時詞典回標造成的錯誤也是難以正確識別的。
表9 錯誤樣例示例
本文設計并實現(xiàn)的分階段細粒度命名實體識別方案能夠將大部分命名實體識別出來,并確定該命名實體的細粒度標簽。對于某些細粒度的命名實體,比如藥品、影視名、汽車車系等,由于在訓練語料中分布稀疏,其中一些類別的命名實體的命名非常隨意,比如車系有“唐”“A7”等,使得針對這類的命名實體的細粒度劃分變得不準確,但是如果不強調小類別,而是僅進行大類別的劃分,本文實現(xiàn)的方法F1值在全領域上平均值達到了80%左右,在一定程度上說明本論文實現(xiàn)的分階段方案是有效的。