蔣 瀚
(中石化安全工程研究院有限公司,山東青島 266104)
自然語言處理(NLP)是計(jì)算機(jī)科學(xué)領(lǐng)域與人工智能領(lǐng)域的重要研究方向之一,主要圍繞計(jì)算機(jī)與人之間使用人類語言進(jìn)行有效通信的理論和方法展開研究[1],可實(shí)現(xiàn)對(duì)文檔數(shù)據(jù)的深度挖掘和高效利用[2,3]。分詞庫作為自然語言分析處理技術(shù)的基礎(chǔ),其設(shè)計(jì)的合理性將影響整個(gè)分詞系統(tǒng)的性能[4]。其中,專業(yè)分詞庫涵蓋了該專業(yè)領(lǐng)域的專有名詞詞匯、詞性、定義、同義詞等信息,以其對(duì)專業(yè)領(lǐng)域較強(qiáng)的適應(yīng)性,能夠?qū)崿F(xiàn)檢索概念在數(shù)據(jù)庫中最大限度的匹配,為專業(yè)領(lǐng)域文本挖掘與分析、行業(yè)領(lǐng)域知識(shí)圖譜的建設(shè)[5,6]提供重要的大數(shù)據(jù)資源。
目前,醫(yī)學(xué)、電氣等領(lǐng)域已有專業(yè)分詞庫構(gòu)建的研究[7,8],主要通過對(duì)現(xiàn)有專業(yè)數(shù)據(jù)庫進(jìn)行字段篩選與組合實(shí)現(xiàn),而針對(duì)?;钒踩I(lǐng)域的分詞庫研究尚無有效文獻(xiàn)支撐。因此,需要從以下角度開展研究:①對(duì)所收集到的非結(jié)構(gòu)化文本數(shù)據(jù)進(jìn)行統(tǒng)一的預(yù)處理,從而提高分詞準(zhǔn)確率;②?;钒踩珜I(yè)術(shù)語具有多樣性,例如組織機(jī)構(gòu)全稱和簡(jiǎn)稱、化學(xué)品學(xué)名和俗名等,亟需針對(duì)性地設(shè)計(jì)詞條結(jié)構(gòu);③設(shè)計(jì)合理的索引方式對(duì)詞條進(jìn)行組織,以適應(yīng)現(xiàn)有詞匯含義的變化及新專業(yè)詞匯的加入[7],同時(shí)提高詞條在專業(yè)領(lǐng)域內(nèi)開展分析的針對(duì)性。
基于上述分析,以危化品領(lǐng)域文本資料為基礎(chǔ),采用結(jié)合機(jī)器學(xué)習(xí)分詞結(jié)果與人工判讀的方法進(jìn)行新詞提取,開展分詞庫詞條和詞表構(gòu)建,研究詞表、字?jǐn)?shù)、詞條三級(jí)樹狀結(jié)構(gòu)的索引與編碼方法,為面向?;钒踩I(lǐng)域的自然語言處理技術(shù)奠定基礎(chǔ)。
作為專業(yè)詞庫的來源,文本數(shù)據(jù)采集的廣泛性、全面性至關(guān)重要。?;穼I(yè)的文本數(shù)據(jù)主要有兩個(gè)來源:
a) 從危化品領(lǐng)域相關(guān)信息系統(tǒng)中獲取的文本數(shù)據(jù),經(jīng)收集整理、爬蟲程序爬取互聯(lián)網(wǎng)資源、文本批量去重及人工篩查4個(gè)處理環(huán)節(jié),形成了結(jié)構(gòu)化的字典表信息,能夠直接作為詞條加入到詞庫中,構(gòu)成詞庫的基礎(chǔ)。
b) 從?;菲髽I(yè)登記信息、?;肥鹿收{(diào)查報(bào)告/事故詳情等資源中獲取非結(jié)構(gòu)化的文檔數(shù)據(jù),需要通過文本預(yù)處理以挖掘?qū)I(yè)詞匯。對(duì)文本的預(yù)處理包括以下步驟:①將收集到的PDF、doc以及docx文檔統(tǒng)一轉(zhuǎn)換為UTF-8編碼的文本文檔,以便于計(jì)算機(jī)程序識(shí)別和分析;②去除文本長(zhǎng)度小于所設(shè)置閾值的文檔;③去除標(biāo)點(diǎn)符號(hào)與“了”、“之”、“也”等漢語中沒有實(shí)際含義的停用詞,以達(dá)到減少噪聲的效果。
傳統(tǒng)的人工構(gòu)建詞庫方法工作量大、主觀性強(qiáng),而單純采用計(jì)算機(jī)算法則難以保證詞庫的專業(yè)性和可靠性[9],因此采取以機(jī)器學(xué)習(xí)算法為主進(jìn)行文本分詞、輔以人工篩選的方式進(jìn)行危化品專業(yè)語料提取。
專業(yè)詞匯的獲取流程主要有2種。
a) 直接從其他系統(tǒng)的結(jié)構(gòu)化表單數(shù)據(jù)中提取?;钒踩嚓P(guān)專業(yè)詞匯,如職業(yè)病、機(jī)械傷害、高空墜物等。所獲取的專業(yè)詞匯經(jīng)添加詞性項(xiàng)、初始化詞頻項(xiàng)后,可直接構(gòu)成詞條。
b) 應(yīng)用THULAC[10]等預(yù)訓(xùn)練分詞算法,將預(yù)處理后的文檔數(shù)據(jù)進(jìn)行分詞,產(chǎn)生分詞詞匯,再由人工篩選出?;废嚓P(guān)專業(yè)詞匯加入詞庫中。為減少分詞詞匯與已有專業(yè)詞匯的重復(fù)錄入,可將已有的專業(yè)詞匯作為用戶附加詞典加入分詞工具中輔助分詞。
詞庫的架構(gòu)設(shè)計(jì)主要包括詞條分類方法與組織形式的制定、各詞表及對(duì)應(yīng)詞條索引模式研發(fā)、詞庫中詞表調(diào)用機(jī)制的開發(fā)3方面內(nèi)容。通過建立領(lǐng)域覆蓋完善、分類方式合理、索引效率較高、調(diào)用邏輯正確的詞庫,能夠有針對(duì)性的組合詞表形成自定義詞典用于文本分析,提升靈活性及基礎(chǔ)數(shù)據(jù)的價(jià)值。
詞庫主要由詞表與詞條構(gòu)成,結(jié)構(gòu)如圖1所示。詞表將詞庫劃分為代表不同實(shí)體含義的若干類別。詞表由若干詞條構(gòu)成,并以其所包含的詞條的實(shí)體含義命名。
圖1 專業(yè)詞庫的結(jié)構(gòu)
詞條為詞庫的最小數(shù)據(jù)單元,包括專業(yè)詞、同義詞、詞性和詞頻4個(gè)屬性。其中,專業(yè)詞項(xiàng)即與?;钒踩嚓P(guān)的詞匯本身,同義詞項(xiàng)包括專業(yè)詞的簡(jiǎn)稱及同義詞匯,詞頻項(xiàng)統(tǒng)計(jì)基于本專業(yè)詞庫開發(fā)的自然語言處理應(yīng)用所識(shí)別的詞匯出現(xiàn)次數(shù),詞性項(xiàng)為根據(jù)專業(yè)詞的特點(diǎn)劃分的詞類。
將收集的詞條按其在危化品安全領(lǐng)域中所具有的實(shí)體含義進(jìn)行分類。專業(yè)詞庫包含的詞表為固定裝置名稱、機(jī)關(guān)處室全/簡(jiǎn)稱、化工企業(yè)板塊、人員公職、員工名稱、中國行政區(qū)劃、組織機(jī)構(gòu)全/簡(jiǎn)稱、事故類型等31類。
對(duì)形成的詞表進(jìn)行編號(hào),然后對(duì)各個(gè)詞表中的專業(yè)詞匯按字?jǐn)?shù)進(jìn)行排序,形成詞庫標(biāo)識(shí)樹如圖2所示。標(biāo)識(shí)樹的根結(jié)點(diǎn)不參與特征向量的構(gòu)成,可任意定義。詞庫中所有的詞表作為標(biāo)識(shí)樹的第一層節(jié)點(diǎn),詞匯的字?jǐn)?shù)作為標(biāo)識(shí)樹的第二層節(jié)點(diǎn),所有詞匯作為葉子節(jié)點(diǎn)。
圖2 詞庫標(biāo)識(shí)樹
詞庫的特征向量索引由詞庫標(biāo)識(shí)樹得來。由標(biāo)識(shí)樹可構(gòu)建詞庫的特征向量矩陣W,記為:
W=k*(k+m*n+m)
(1)
式中:k——詞庫中全部詞條的數(shù)量;
m——詞庫中詞表的數(shù)量;
n——詞庫中最長(zhǎng)詞匯的字?jǐn)?shù)。
構(gòu)建詞條特征向量的策略為,對(duì)于某葉子節(jié)點(diǎn),逐層向上搜索至根節(jié)點(diǎn),將該葉子節(jié)點(diǎn)與經(jīng)過的非葉子節(jié)點(diǎn)在向量對(duì)應(yīng)列的值均寫為1,其余列的值全部寫為0,即可構(gòu)成該詞條的特征向量。按同樣的方式,可將詞庫中所有詞條的特征向量求出。將求得的特征向量堆積,每個(gè)詞條的特征向量占一行,即可構(gòu)成詞庫的特征向量矩陣W。
由于詞條數(shù)量龐大,通過上述方法生成的特征向量維數(shù)(行*列數(shù))很高,因此需要建立壓縮與還原機(jī)制加快存取過程。對(duì)于特征向量為Aw(m1,m2,m3…)的詞條w,壓縮后詞條的索引值Iw(n1,n2,n3)可由公式(2)得出:
(2)
例如,對(duì)于特征向量為M的詞條a,由根節(jié)點(diǎn)出發(fā)搜索至a所經(jīng)過的節(jié)點(diǎn)均已在a的特征向量中寫為1,其余值均為0,如表1所示。詞條a的索引值的含義則為,從左開始特征向量中所有非0數(shù)值的數(shù)位,使用公式(2)可求得Ia為(1,2,5)。反之,根據(jù)索引值的含義,可快速還原出詞條的特征向量。
表1 詞條a的特征向量M
根據(jù)建立的詞庫標(biāo)識(shí)樹,可以生成各個(gè)專業(yè)詞條的特征向量,如圖3所示。依據(jù)特征向量矩陣及計(jì)算公式,可以計(jì)算出詞條的索引值分別為:爆炸(6,8,9),著火(6,8,10),泄漏(6,8,11),高空墜物(6,13,14),交通事故(6,13,15),自然災(zāi)害(6,13,16),非計(jì)劃停工(6,17,18)。
圖3 專業(yè)詞條的特征向量
jieba是一個(gè)中文分詞工具,其整體工作流程為:首先,將原始詞典與用戶自定義詞典結(jié)合,生成Trie樹,同時(shí)將每個(gè)詞的出現(xiàn)次數(shù)轉(zhuǎn)換為頻率[11]。Trie樹是一種前綴樹結(jié)構(gòu),根據(jù)詞語中漢字出現(xiàn)的順序進(jìn)行索引,其優(yōu)勢(shì)是檢索速度較快。其次,將待分詞的句子置于Trie樹中查詢,生成所有可能的句子切分,并采用有向無環(huán)圖(DAG)記錄句子中詞語的開始位置和所有可能的結(jié)束位置。再次,確定句子中切分出的詞語的出現(xiàn)頻率,對(duì)于詞典中已有記錄的詞語,則采用詞典中最小的頻率值作為該詞的頻率。最后,采用動(dòng)態(tài)規(guī)劃,對(duì)句子從右往左反向計(jì)算最大概率得到最大概率路徑,從而得到最大概率的切分組合。
對(duì)于未記錄在詞典中的詞,采用基于漢字成詞能力的隱馬爾科夫(HMM)模型[12]進(jìn)行新詞發(fā)現(xiàn)。HMM屬于生成模型的有向概率圖模型,通過聯(lián)合概率建模:
(3)
式中:t——當(dāng)前時(shí)刻;
S——狀態(tài)序列;
O——觀測(cè)序列。
HMM的解碼問題為:
(4)
(5)
則用于HMM解碼問題的Viterbi算法遞推式為:
(6)
jieba分詞模型將每一個(gè)字表示為B/M/E/S,分別代表出現(xiàn)在詞頭、詞中、詞尾以及單字成詞。將B/M/E/S作為HMM的隱藏狀態(tài),連續(xù)的各個(gè)單字作為觀測(cè)狀態(tài),其任務(wù)即為利用觀測(cè)狀態(tài)預(yù)測(cè)隱藏狀態(tài),采用Viterbi算法對(duì)HMM模型進(jìn)行求解。
Viterbi動(dòng)態(tài)規(guī)劃算法的基本思想是,如果最佳路徑經(jīng)過點(diǎn)ε,則起始點(diǎn)到ε的路徑一定是最佳路徑[13]。假設(shè)從起始點(diǎn)到結(jié)束點(diǎn)經(jīng)過n個(gè)時(shí)刻,整個(gè)過程可以劃分為k個(gè)狀態(tài),則最佳路徑一定經(jīng)過起始點(diǎn)到時(shí)刻n中k個(gè)狀態(tài)最短路徑的點(diǎn)。則t時(shí)刻隱藏狀態(tài)i所有可能的狀態(tài)轉(zhuǎn)移路徑i1到i2的狀態(tài)最大值為:
δt(i)=maxxi1,i2,…,it-1
P(it=i1,i2,…,it-1,ot,ot-1,…,o1|(A,B,π))
(7)
式中:A——HMM的轉(zhuǎn)移概率矩陣;
B——HMM的觀測(cè)概率矩陣;
π——HMM的初始狀態(tài)概率向量。
根據(jù)公式(7)可由初始時(shí)刻依次向后計(jì)算出每一個(gè)時(shí)刻的最大概率隱藏狀態(tài),進(jìn)而得到使最終時(shí)刻聯(lián)合概率最大的路徑。
結(jié)合來源于信息系統(tǒng)的結(jié)構(gòu)化文本數(shù)據(jù)及專業(yè)文檔的非結(jié)構(gòu)化文本數(shù)據(jù)兩方面數(shù)據(jù),?;穼I(yè)分詞庫總計(jì)收錄161 262個(gè)危化品安全專業(yè)詞匯,根據(jù)其實(shí)體含義被分為31個(gè)詞表。詞庫詞表的統(tǒng)計(jì)明細(xì)如表2所示。
表2 詞庫詞匯數(shù)量統(tǒng)計(jì)明細(xì)
基于目前形成的專業(yè)分詞庫,抽取其中的組織機(jī)構(gòu)全/簡(jiǎn)稱、危險(xiǎn)化學(xué)品目錄、事故簡(jiǎn)報(bào)等詞條組合形成用戶自定義詞典,導(dǎo)入jieba模型對(duì)預(yù)留的驗(yàn)證集數(shù)據(jù)進(jìn)行分詞。在未加入專業(yè)分詞庫時(shí),如聚氯乙烯、氯乙烯氣柜、危險(xiǎn)化學(xué)品、危險(xiǎn)化學(xué)品重大危險(xiǎn)源、企業(yè)名稱等詞匯均無法被正確切分。在加入專業(yè)分詞庫后,除部分復(fù)合型詞匯,例如危險(xiǎn)化學(xué)品重大危險(xiǎn)源等,其他專業(yè)詞匯均可被正確切分。可知,專業(yè)詞庫的加入能夠有效提升專業(yè)領(lǐng)域文本的分詞效果。
為進(jìn)一步評(píng)估文本分詞效果,建立定量評(píng)估指標(biāo)包括準(zhǔn)確率P、召回率R和F值。其中,P為算法正確識(shí)別的詞數(shù)與分詞得到的總詞數(shù)的比值,R為算法正確識(shí)別的詞數(shù)與實(shí)際詞數(shù)的比值,F(xiàn)值為準(zhǔn)確率和召回率的調(diào)和平均值,其計(jì)算公式如下:
(8)
假設(shè)人工分詞的結(jié)果完全正確,將未使用專業(yè)詞庫的分詞結(jié)果、導(dǎo)入專業(yè)詞庫的分詞結(jié)果分別與人工分詞的結(jié)果相比較,引入混淆矩陣分別計(jì)算準(zhǔn)確率P、召回率R及F值,分詞效果的評(píng)估結(jié)果如表3所示。與未加入專業(yè)詞庫的分詞結(jié)果相比,導(dǎo)入專業(yè)詞庫能夠使得分詞的準(zhǔn)確率P提升23%,召回率R提升33.9%,F(xiàn)值提升29%。
表3 分詞結(jié)果的混淆矩陣評(píng)估結(jié)果
通過整理獲取大量的?;肺谋緮?shù)據(jù)庫,采用基于機(jī)器學(xué)習(xí)分詞結(jié)果與人工篩選整理相結(jié)合的方式提取專業(yè)語料,設(shè)計(jì)?;钒踩I(lǐng)域?qū)I(yè)詞庫的架構(gòu)、內(nèi)容和組織方式,形成了收錄31個(gè)詞表約16萬詞的專業(yè)分詞庫,同時(shí)構(gòu)建了?;钒踩I(lǐng)域?qū)I(yè)詞庫的詞向量計(jì)算與壓縮方式。實(shí)驗(yàn)驗(yàn)證表明,所構(gòu)建分詞庫能夠提升?;奉I(lǐng)域文本的分詞效果,準(zhǔn)確率、召回率與F值分別達(dá)到80.2%、79.7%及79.9%。雖然初步構(gòu)建了?;钒踩I(lǐng)域內(nèi)專業(yè)詞庫,但從應(yīng)用效果來看,詞庫的詞匯數(shù)量、覆蓋范圍仍有提升空間。詞庫的建設(shè)是一個(gè)長(zhǎng)期積累的過程,后續(xù)研究中將通過文本訓(xùn)練數(shù)據(jù)的豐富、詞庫應(yīng)用過程中的錯(cuò)誤反饋收集來不斷進(jìn)行詞庫的更新和完善。