喬 璐,孫有朝,吳紅蘭
(南京航空航天大學(xué)民航學(xué)院,江蘇 南京 210000)
飛機(jī)作為大型的復(fù)雜裝備系統(tǒng),服役周期長,飛行環(huán)境惡劣,導(dǎo)致故障發(fā)生頻繁,在長期的維修保障中積累了大量的故障信息。飛機(jī)故障信息通常存儲在結(jié)構(gòu)化數(shù)據(jù)庫、半結(jié)構(gòu)化表單以及大量的故障報(bào)告等介質(zhì)中。這些故障文本描述中往往包含機(jī)型、故障件、故障機(jī)理、故障模式等高價(jià)值信息,因此,從飛機(jī)文本故障信息中抽取出結(jié)構(gòu)化的關(guān)鍵信息,對飛機(jī)故障診斷具有重要意義。
傳統(tǒng)的信息抽取技術(shù)通常采用基于規(guī)則和模板的方法。Wang 等人[1]提出了基于規(guī)則匹配的方法,提取技術(shù)手冊中的非結(jié)構(gòu)化文本信息。Shao 等人[2]采用自然語言處理技術(shù),以電力故障預(yù)案文本為對象,構(gòu)建本體詞典和規(guī)則模板進(jìn)行文本的信息抽取。規(guī)則和模板是基于領(lǐng)域知識構(gòu)建的,有一定的局限性,同時(shí)人工構(gòu)建領(lǐng)域規(guī)則和模板的代價(jià)較大[3],不適用于大規(guī)模數(shù)據(jù)的信息抽取。近年來,隨著人工智能的發(fā)展,基于深度學(xué)習(xí)的文本信息抽取技術(shù)在各個(gè)領(lǐng)域中被廣泛采用。2011 年,Collobet 等人[4]首次提出了基于深度學(xué)習(xí)算法的自然語言處理技術(shù),基于該技術(shù)對英語詞匯進(jìn)行詞性標(biāo)注和命名實(shí)體識別。齊玉東等人[5]提出了條件隨機(jī)場(Conditional Random Field,CRF)與雙向長短期記憶網(wǎng)絡(luò)(Bi-directional Long Short-Term Memory,BiLSTM)結(jié)合的BiLSTMCRF 模型,融合本體特征,基于領(lǐng)域知識進(jìn)行命名實(shí)體識別。王紅等人[6]提出了將注意力機(jī)制(Attention)與雙向門控循環(huán)單元(Bi-directional Gated Recurrent Unit,BiGRU)的Att-BiGRU 模型,對民航領(lǐng)域的突發(fā)事件進(jìn)行關(guān)系抽取。Luo 等人[7]采用BiGRU-CRF 模型,對藏文語料庫進(jìn)行分詞和詞性標(biāo)注。李軍懷等人[8]融合BERT 的改進(jìn)模型ALBERT(A Lite BERT),提出了基于ALBERT-BiGRU-CRF結(jié)構(gòu)的中文命名實(shí)體識別方法。
本文提出一種基于領(lǐng)域詞典、規(guī)則和BiGRUCRF 模型的信息抽取方法?;陬I(lǐng)域知識構(gòu)建領(lǐng)域詞典庫和抽取規(guī)則,針對沒有具體規(guī)則可遵循,詞典又難以涵蓋全面的實(shí)體,采用BiGRU-CRF 模型進(jìn)行命名實(shí)體識別。
信息抽取技術(shù)是指從大量自然語言描述文本中抽取特定信息[9]。自然語言描述文本分為結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)和非結(jié)構(gòu)化數(shù)據(jù)。結(jié)構(gòu)化數(shù)據(jù)是指能夠用二維表結(jié)構(gòu)進(jìn)行表達(dá)的數(shù)據(jù)。非結(jié)構(gòu)化數(shù)據(jù)是指結(jié)構(gòu)不完整,不能夠用二維表結(jié)構(gòu)表示的數(shù)據(jù)。半結(jié)構(gòu)化數(shù)據(jù)是指以半結(jié)構(gòu)化方式存儲,可看作是若干名詞的結(jié)合。飛機(jī)故障信息記錄是對故障的文字性描述,主要是WORD、PDF、TXT 和其他電子文檔等非結(jié)構(gòu)化數(shù)據(jù)[10],所以采用非結(jié)構(gòu)化信息抽取技術(shù)從故障文本中抽取關(guān)鍵信息。非結(jié)構(gòu)化信息抽取的關(guān)鍵技術(shù)有實(shí)體抽取、關(guān)系抽取、事件抽取[11]。
實(shí)體抽取技術(shù)是指抽取文本中的信息元素,通常包含組織、位置、日期等標(biāo)簽。關(guān)系抽取技術(shù)是指在被標(biāo)記實(shí)體的文本中找到它們之間的語義關(guān)系[12]。事件抽取技術(shù)是指將人們感興趣的事件信息從文本中抽取出來,并以結(jié)構(gòu)化的形式呈現(xiàn)[11]。由于關(guān)系抽取技術(shù)和事件抽取技術(shù)無法提取自然語言文本的標(biāo)簽[13],所以本文采用實(shí)體抽取技術(shù)從飛機(jī)文本故障信息中抽取實(shí)體標(biāo)簽。
基于飛機(jī)文本信息的信息抽取流程如圖1 所示,總體可分為3個(gè)過程:
圖1 信息抽取流程
1)從新一代飛機(jī)可靠性數(shù)據(jù)庫中獲取文本信息,對文本信息進(jìn)行解析、清洗、分詞等預(yù)處理過程,采用規(guī)則、詞典和統(tǒng)計(jì)模型的方法對預(yù)處理結(jié)果進(jìn)行命名實(shí)體識別。
2)通過篇章分析與推理構(gòu)建規(guī)則庫[14],結(jié)合輔助工具和人工校對的方式構(gòu)建領(lǐng)域詞典,對命名實(shí)體識別結(jié)果進(jìn)行補(bǔ)充。
3)結(jié)構(gòu)化實(shí)體抽取后的數(shù)據(jù),豐富和擴(kuò)充新一代飛機(jī)可靠性數(shù)據(jù)庫。
命名實(shí)體識別(Named Entity Recognition,NER)是信息提取中的一部分,是指將文本中由單詞組成的實(shí)體劃分為人物、地點(diǎn)、組織、時(shí)間等類型[12]。飛機(jī)故障信息文本中的NER 是指從故障信息記錄中挖掘出作為實(shí)體的概念,用于及時(shí)發(fā)現(xiàn)故障。命名實(shí)體識別方法一般分為3 類:基于規(guī)則和詞典的方法[15]、基于機(jī)器學(xué)習(xí)的方法[16]以及基于深度學(xué)習(xí)的方法[17],如表1所示。
表1 命名實(shí)體識別的主要方法
基于規(guī)則和詞典的方法,對人工的依賴性較高,耗時(shí)耗力?;跈C(jī)器學(xué)習(xí)和深度學(xué)習(xí)的方法,能夠自動完成特征提取,效率高。通過對以上幾種方法對比分析,本文提出一種基于領(lǐng)域詞典、規(guī)則和深度學(xué)習(xí)模型結(jié)合的方法。該方法采用深度學(xué)習(xí)模型進(jìn)行訓(xùn)練,通過構(gòu)建領(lǐng)域詞典和規(guī)則對命名實(shí)體識別的結(jié)果進(jìn)行修正[18],具有精確度高、效率高等優(yōu)點(diǎn)。
命名實(shí)體識別的具體流程如圖2 所示,從數(shù)據(jù)庫獲取飛機(jī)文本信息,將數(shù)據(jù)分為測試文本和訓(xùn)練文本?;谝?guī)則庫對測試文本進(jìn)行預(yù)處理,結(jié)合領(lǐng)域詞典對測試文本進(jìn)行信息標(biāo)注。輸入訓(xùn)練文本到神經(jīng)網(wǎng)絡(luò)中,BiGRU 網(wǎng)絡(luò)提取文本特征,CRF 層進(jìn)行序列標(biāo)注[19]。運(yùn)用領(lǐng)域詞典和規(guī)則對BiGRU-CRF 模型的實(shí)體識別結(jié)果進(jìn)行補(bǔ)充,最后輸出抽取結(jié)果。
圖2 基于規(guī)則、詞典和BiGRU-CRF模型的命名實(shí)體識別流程
本文采用的命名實(shí)體識別模型是BiGRU-CRF模型,在GRU 模型基礎(chǔ)上構(gòu)建雙向GRU 網(wǎng)絡(luò),將CRF與BiGRU結(jié)合,構(gòu)建BiGRU-CRF模型。
2.3.1 BiGRU模型
GRU 模型中有更新門zt和復(fù)位門rt這2 個(gè)門,計(jì)算公式如下:
式中,xt是輸入數(shù)據(jù),ht是GRU 的輸出,rt是復(fù)位門,zt是更新門,zt和ht共同控制隱藏狀態(tài)ht-1到隱藏狀態(tài)ht的計(jì)算。更新門控制ht-1,并輸出值zt,σ是sigmoid 函數(shù),充當(dāng)門控制信號[17]。
GRU 網(wǎng)絡(luò)是一種單向的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),在傳輸過程中,只能獲取從前往后的信息,無法捕捉從后往前的信息。因此,需要用雙向GRU 網(wǎng)絡(luò)解決該問題。BiGRU網(wǎng)絡(luò)通過提取文本的前向和后向特征,可以更好地捕捉詞語之間的依存關(guān)系。它實(shí)現(xiàn)了2 個(gè)門的計(jì)算,最終輸出信息為其中表示BiGRU 的輸入信息,表示BiGRU 網(wǎng)絡(luò)的前向信息,表示BiGRU網(wǎng)絡(luò)的后向信息[16]。
2.3.2 CRF模型
條件隨機(jī)場(CRF)是一種用于詞性標(biāo)注和序列數(shù)據(jù)劃分的概率圖模型,屬于無向圖模型[20]。基于傳輸矩陣對注意向量和標(biāo)記向量進(jìn)行聯(lián)合訓(xùn)練。得到更新后的傳輸矩陣以及損失函數(shù)值,對文本特征進(jìn)行語法約束。
給定一個(gè)輸入序列x=(x1,x2,…,xn),得到一個(gè)預(yù)測標(biāo)簽序列y=(y1,y2,…,yn),標(biāo)簽序列的得分可定義為:
式中,pi,yi是i個(gè)位置輸出為yi的概率,Ai,yi+1是yi到y(tǒng)i+1的轉(zhuǎn)移概率矩陣[21]。
對標(biāo)簽序列y的概率進(jìn)行計(jì)算,可表示為:
式中,YX為標(biāo)簽序列的集合,將正確標(biāo)簽序列的對數(shù)概率最大化:
解碼時(shí),預(yù)測式(7)的最大分?jǐn)?shù),獲得輸出序列[18]:
2.3.3 BiGRU-CRF模型
BiGRU-CRF 模型分為BiGRU 模塊和CRF 模塊,BiGRU模塊獲取上下文的語義信息,CRF模塊對標(biāo)簽之間進(jìn)行約束,以確保預(yù)測的標(biāo)簽是合法的[22],如圖3所示,該模型由以下幾個(gè)部分組成:
圖3 BiGRU-CRF模型
1)輸入層:輸入的是序列,通過字符層嵌入層輸出矩陣。
2)BiGRU層:包含按前向順序記憶和后向順序記憶的兩個(gè)單元,該結(jié)構(gòu)使其能夠充分利用上下文信息[23]。
3)全連接層:將前向和后向的輸出進(jìn)行拼接。
4)CRF層:對單詞進(jìn)行序列標(biāo)記。
本文實(shí)驗(yàn)所選數(shù)據(jù)為某飛機(jī)故障報(bào)告中的故障歸零報(bào)告,以WORD 形式存儲。故障歸零報(bào)告包括故障描述、機(jī)理分析、處理措施等信息,詳細(xì)內(nèi)容如表2所示。
表2 故障歸零報(bào)告
本章基于領(lǐng)域?qū)<医?jīng)驗(yàn)構(gòu)建領(lǐng)域詞典庫,將BiGRU-CRF 模型與其他模型進(jìn)行對比分析,驗(yàn)證了該模型的有效性。通過中文分詞、語義信息標(biāo)注、信息抽取等步驟,完成了實(shí)體抽取過程。
為了提升文本特征提取的質(zhì)量,需構(gòu)建一個(gè)領(lǐng)域詞典庫。本文實(shí)驗(yàn)構(gòu)建的領(lǐng)域詞典庫包括地點(diǎn)、機(jī)型、故障件、故障件制造單位4 個(gè)詞典。詞典里的詞語主要來源于某飛機(jī)故障報(bào)告中的文本類故障數(shù)據(jù),通過人工標(biāo)注、去重、糾正、補(bǔ)充、整理匯總等流程[24],構(gòu)建較為完善的領(lǐng)域詞典庫。構(gòu)建的詞典信息如表3所示。
表3 領(lǐng)域詞典
本文實(shí)驗(yàn)從某航空公司搜集了4700 多條故障數(shù)據(jù),并對其中的故障發(fā)生日期、發(fā)生地點(diǎn)、機(jī)型、故障件名稱、故障件制造單位5 類實(shí)體進(jìn)行人工標(biāo)注。為減輕數(shù)據(jù)標(biāo)注的工作量,基于現(xiàn)有的詞典對文本數(shù)據(jù)進(jìn)行自動預(yù)標(biāo)注,再進(jìn)行人工糾正和補(bǔ)充。
實(shí)驗(yàn)工具是Python3.6 和TensorFlow-1.13。參數(shù)設(shè)置:詞向量維度為128、GRU 隱藏節(jié)點(diǎn)數(shù)為128、學(xué)習(xí)率為0.005。將收集到的4700 多條故障數(shù)據(jù)的80%數(shù)據(jù)作為訓(xùn)練集,20%的數(shù)據(jù)作為測試集。
在研究基于模型的實(shí)體抽取基礎(chǔ)上,主要對CRF、GRU、BiGRU、BiGRU-CRF 等模型進(jìn)行對比實(shí)驗(yàn)。采用正確率P(Precision)、召回率R(Recall)、F1值3個(gè)標(biāo)準(zhǔn)作為性能評價(jià)指標(biāo)[25],對命名實(shí)體的識別結(jié)果進(jìn)行評價(jià)。實(shí)驗(yàn)結(jié)果如表4所示。
表4 不同模型的實(shí)驗(yàn)結(jié)果
從表4 可以看出,CRF 模型的準(zhǔn)確率、召回率和F1 值都低于其他3 個(gè)模型。GRU 模型的準(zhǔn)確率比CRF 模型的準(zhǔn)確率高3.8 個(gè)百分點(diǎn),由于GRU 模型只能獲取前向信息,而無法獲取后向信息,所以采用雙向的BiGRU 模型的準(zhǔn)確率比單向的GRU 高0.4 個(gè)百分點(diǎn),BiGRU-CRF 模型其準(zhǔn)確率比單獨(dú)使用CRF 模型的準(zhǔn)確高5.7 個(gè)百分點(diǎn),比單獨(dú)使用BiGRU 模型的準(zhǔn)確率高1.5個(gè)百分點(diǎn)。
當(dāng)BiGRU-CRF 模型分別結(jié)合領(lǐng)域規(guī)則、領(lǐng)域詞典進(jìn)行信息抽取后,準(zhǔn)確率均有所提升。BiGRUCRF 結(jié)合領(lǐng)域規(guī)則后,準(zhǔn)確率比BiGRU-CRF 模型提升了0.5 個(gè)百分點(diǎn),結(jié)合領(lǐng)域詞典后,準(zhǔn)確率比BiGRU-CRF 模型提升了0.8 個(gè)百分點(diǎn)。當(dāng)BiGRUCRF模型結(jié)合領(lǐng)域規(guī)則和領(lǐng)域詞典進(jìn)行信息抽取后,準(zhǔn)確率最高,達(dá)到了95.2%,
中文分詞是文本語義處理的基礎(chǔ),是語義信息標(biāo)注的重要過程。分詞是將文本中的字符串合理切分成語言序列的過程[26]。本文實(shí)驗(yàn)選取“故障歸零報(bào)告”中的“故障描述”作為信息抽取的對象,選用中文詞法分析(LAC)工具進(jìn)行分詞處理,分詞結(jié)果如表5所示。
表5 中文分詞結(jié)果
對分詞結(jié)果采用BIO(B-begin,I-inside,Ooutside)標(biāo)記方法進(jìn)行標(biāo)注,其中B 表示航空裝備故障描述的初始單詞,I 表示故障描述中的中間或結(jié)尾單詞,O 表示故障描述中的詞不是命名識別所需要的物理信息[27]。對于PER 類型的實(shí)體,該實(shí)體的第一個(gè)標(biāo)記被編碼為B-PER,如果該實(shí)體由多個(gè)標(biāo)記組成,接下來的標(biāo)記被編碼為I-PER,實(shí)體外部的所有標(biāo)記被編碼為O。如表6所示。
表6 語義信息標(biāo)注結(jié)果
基于實(shí)體標(biāo)簽對文本信息進(jìn)行BiGRU-CRF 標(biāo)注,實(shí)現(xiàn)了信息標(biāo)注的自動化處理[28]。由于漢語中存在詞的意義和詞的多義,模型無法完全實(shí)現(xiàn)語境語義詞的標(biāo)注,所以需要手工校對,例如:“噴管隔熱屏”是一個(gè)故障件名稱,BiGRU-CRU 模型將其標(biāo)注成2個(gè)故障件名稱?!凹恿斢凸芡馊Α笔且粋€(gè)故障件名稱,BiGRU-CRF 模型將“加力”標(biāo)注為動詞,“輸油管”和“外圈”標(biāo)注為2個(gè)故障件名稱。
針對上述的錯(cuò)誤分析發(fā)現(xiàn),構(gòu)建的領(lǐng)域詞典中并沒有“噴管隔熱屏”這個(gè)故障件名稱。由于領(lǐng)域規(guī)則中規(guī)定如果多個(gè)故障件名稱都不在詞典里,選擇第一個(gè)出現(xiàn)的故障件名稱作為故障發(fā)生故障件名稱,所以BiGRU-CRF 將“噴管”識別為第一個(gè)故障件名稱,“隔熱屏”識別為第二個(gè)故障件名稱。領(lǐng)域詞典中也沒有“加力輸油管外圈”這個(gè)故障件名稱,所以BiGRUCRF模型將“加力”默認(rèn)為是一個(gè)動詞,領(lǐng)域詞典中只包含“輸油管”“外圈”這2個(gè)故障件名稱,并沒有構(gòu)建“輸油管外圈”這個(gè)故障件名稱。所以BiGRU-CRF將“輸油管外圈”識別成“輸油管”和“外圈”這2 個(gè)故障件名稱。為了提高信息抽取的準(zhǔn)確率,要人工結(jié)合上下文語境進(jìn)行分析,盡快確定語義信息標(biāo)注的錯(cuò)誤,最大限度地對語義標(biāo)注結(jié)果進(jìn)行校正[29],從而確保標(biāo)注結(jié)果的正確性。同時(shí),根據(jù)信息抽取的結(jié)果不斷擴(kuò)充更新領(lǐng)域詞典庫和規(guī)則庫。
實(shí)驗(yàn)通過構(gòu)建模板規(guī)則進(jìn)行實(shí)體抽取。模板規(guī)則是指抽取的內(nèi)容(段落或者實(shí)體)滿足相對固定的模板或格式,可以通過判斷字符串是否滿足這些模板或格式來進(jìn)行信息抽?。?0]。從不同來源的飛機(jī)故障信息數(shù)據(jù)中總結(jié)提煉出文本信息抽取所需的規(guī)則,一共構(gòu)建了128 條抽取規(guī)則,在算法模塊構(gòu)建時(shí),將抽取規(guī)則固化到算法中,表7 顯示了模板抽取規(guī)則的部分內(nèi)容。
表7 模板抽取規(guī)則
實(shí)體篩選規(guī)則是指如果文本中出現(xiàn)了多個(gè)同類型的實(shí)體,需要定義一些篩選規(guī)則來判斷哪個(gè)實(shí)體才是真正需要的實(shí)體[31],表8展示了實(shí)體篩選規(guī)則的實(shí)例。
表8 實(shí)體抽取實(shí)例
當(dāng)出現(xiàn)多個(gè)日期實(shí)體(橘黃色標(biāo)注),多個(gè)故障件實(shí)體(藍(lán)色標(biāo)注)時(shí),需要判斷哪一個(gè)才是需要的日期實(shí)體和故障件實(shí)體,如圖4 所示。這時(shí)候需要人工構(gòu)建一些實(shí)體篩選規(guī)則對這些實(shí)體進(jìn)一步的篩選。實(shí)體篩選規(guī)則需要結(jié)合實(shí)際數(shù)據(jù)和領(lǐng)域內(nèi)的專業(yè)知識,通過人工進(jìn)行總結(jié)和整理[32]。
圖4 實(shí)體篩選文本內(nèi)容
文本信息抽取算法模塊(Text Extraction)是一個(gè)用于抽取文本數(shù)據(jù)中關(guān)鍵信息的算法工具包[33],主要用于航空裝備領(lǐng)域。該模塊立足于航空裝備領(lǐng)域常用的各類文檔數(shù)據(jù),并結(jié)合前沿的文本信息抽取算法,采用Python 語言進(jìn)行開發(fā),可用于處理各類報(bào)告文檔、記錄文檔,將這些文檔中包含的重要信息抽取出來,形成結(jié)構(gòu)化的數(shù)據(jù)表,為航空裝備領(lǐng)域內(nèi)的數(shù)據(jù)分析提供數(shù)據(jù)來源。通過文本信息抽取算法將飛機(jī)故障報(bào)告(例如歸零報(bào)告,包括WORD、PDF、Excel等格式),抽取出其中的故障發(fā)生日期、地點(diǎn)、部隊(duì)、機(jī)型、用戶編號、故障件名稱、故障件制造單位等關(guān)鍵信息,并形成結(jié)構(gòu)化的數(shù)據(jù)表,將數(shù)據(jù)表按照表格的形式存儲到規(guī)則庫中。
如表9 所示,采用模板規(guī)則對故障歸零報(bào)告進(jìn)行解析,提取出“故障描述”內(nèi)容。基于領(lǐng)域詞典和模板規(guī)則對“故障描述”里面的“機(jī)型”“地點(diǎn)”“發(fā)生日期”“故障件名稱”“故障件制造單位”等實(shí)體進(jìn)行抽取,通過文本信息抽取算法模塊成功抽取出飛機(jī)實(shí)體信息。
表9 實(shí)體抽取結(jié)果
本文采用基于領(lǐng)域規(guī)則、詞典和BiGRU-CRF 模型的方法進(jìn)行飛機(jī)文本信息提取。通過專家構(gòu)建領(lǐng)域詞典和規(guī)則,對故障信息進(jìn)行標(biāo)注,結(jié)合BiGRUCRF模型進(jìn)行預(yù)訓(xùn)練,并對訓(xùn)練結(jié)果進(jìn)行了人工糾正和補(bǔ)充。實(shí)驗(yàn)結(jié)果表明,基于領(lǐng)域規(guī)則、詞典和BiGRU-CRF 模型的方法識別正確率達(dá)到95.2%,驗(yàn)證了該方法的有效性。飛機(jī)故障信息文本中的關(guān)鍵詞如時(shí)間、地點(diǎn)、機(jī)型、故障件名稱、故障件制造單位等信息在模型語義標(biāo)簽信息抽取的準(zhǔn)確性上取得了較好的效果,解決了傳統(tǒng)實(shí)體抽取模型長期依賴人工特征的問題。作為未來的工作,筆者將繼續(xù)探索不同的方法來合并更多的數(shù)據(jù)特征,處理其他語言的復(fù)雜性,并將該模型應(yīng)用于不同的領(lǐng)域。