達(dá)觀數(shù)據(jù)如何打造一個中文NER系統(tǒng)
1 NER簡介
NER(Named Entity Recognition,命名實(shí)體識別)又稱作專名識別,是自然語言處理中常見的一項(xiàng)任務(wù),使用的范圍非常廣。命名實(shí)體通常指的是文本中具有特別意義或者指代性非常強(qiáng)的實(shí)體,通常包括人名、地名、機(jī)構(gòu)名、時間、專有名詞等。NER系統(tǒng)就是從非結(jié)構(gòu)化的文本中抽取出上述實(shí)體,并且可以按照業(yè)務(wù)需求識別出更多類別的實(shí)體,比如產(chǎn)品名稱、型號、價格等。因此實(shí)體這個概念可以很廣,只要是業(yè)務(wù)需要的特殊文本片段都可以稱為實(shí)體。以下將詳細(xì)介紹達(dá)觀數(shù)據(jù)在文本語義理解過程中是如何構(gòu)建中文NER系統(tǒng)的。(達(dá)觀數(shù)據(jù) 高翔)
2 NER問題分解
NER問題的目標(biāo)是從文本抽取出特定需求實(shí)體的文本片段。針對這個任務(wù),通常使用基于規(guī)則的方法和基于模型的方法。
2.1基于規(guī)則的方法
基于規(guī)則進(jìn)行實(shí)體抽取是較容易想到的方式。針對有特殊上下文的實(shí)體,或?qū)嶓w本身有很多特征的文本,使用規(guī)則的方法簡單且有效。比如,抽取文本中物品價格,如果文本中所有商品價格都是“數(shù)字+元”的形式,則可以通過正則表達(dá)式”d*.?d+元”進(jìn)行抽取。但是如果待抽取文本中價格的表達(dá)方式多種多樣,例如“一千八百萬”、“伍佰貳拾圓”、“2000萬元”,這個時候就要修改規(guī)則來滿足所有可能的情況。隨著語料數(shù)量的增加,面對的情況也越來越復(fù)雜,規(guī)則之間也可能發(fā)生沖突,整個系統(tǒng)也可能變得不可維護(hù)。因此基于規(guī)則的方式比較適合半結(jié)構(gòu)化或比較規(guī)范的文本中的進(jìn)行抽取任務(wù),結(jié)合業(yè)務(wù)需求能夠達(dá)到一定的效果。總結(jié)一下基于規(guī)則的實(shí)體抽取方式,優(yōu)點(diǎn):簡單,快速;缺點(diǎn):適用性差,維護(hù)成本高后期甚至不能維護(hù)。(達(dá)觀數(shù)據(jù) 高翔)
2.2 基于模型的方法
從模型的角度來看,命名實(shí)體識別問題實(shí)際上是序列標(biāo)注問題。序列標(biāo)注問題指的是模型的輸入是一個序列,包括文字、時間等,輸出也是一個序列。針對輸入序列的每一個單元,輸出一個特定的標(biāo)簽。以中文分詞任務(wù)進(jìn)行舉例,例如輸入序列是一串文字:“我是中國人”,輸出序列是一串標(biāo)簽:“SSBME”,其中“BMES”組成了一種中文分詞的標(biāo)簽體系,B表示這個字是詞的開始Begin,M表示詞的中間Middle,E表示詞的結(jié)尾End,S表示單字成詞。因此我們可以根據(jù)輸出序列“SSBME”進(jìn)行解碼,得到分詞結(jié)果“我是中國人“。序列標(biāo)注問題涵蓋了自然語言處理中的很多任務(wù),包括語音識別、中文分詞、機(jī)器翻譯、命名實(shí)體識別等,而常見的序列標(biāo)注模型包括HMM,CRF,RNN等模型。
2.2.1 HMM
HMM(Hidden Markov Model,隱馬爾可夫模型)是使用非常廣泛經(jīng)典的一個統(tǒng)計(jì)模型,作為一個生成式模型,HMM用來描述一個含有隱含未知參數(shù)的馬爾可夫過程。簡單來講,HMM模型包括兩個序列三個矩陣:觀察序列、隱藏序列、初始狀態(tài)概率矩陣、狀態(tài)轉(zhuǎn)移概率矩陣、發(fā)射概率矩陣。通常情況下,我們要根據(jù)觀察序列和三個矩陣,來得到隱藏序列。
圖1:HMM模型,其中X表示隱藏序列,y表示觀察序列,a表示狀態(tài)轉(zhuǎn)移概率,b表示發(fā)射概率
以中文分詞任務(wù)舉例,使用“BMES”標(biāo)簽體系,HMM模型就是從切分好的語料中統(tǒng)計(jì)出初始狀態(tài)概率矩陣、狀態(tài)轉(zhuǎn)移概率矩陣、發(fā)射概率矩陣這三個矩陣的概率參數(shù)。初始狀態(tài)矩陣指的是序列第一個字符是BMES的概率,顯然字符是M和E的概率為0。狀態(tài)轉(zhuǎn)移概率矩陣是BMES四種狀態(tài)間轉(zhuǎn)移的概率,顯然B–>S,M–>S,M–>B等狀態(tài)的轉(zhuǎn)移概率為0。發(fā)射概率矩陣指的是一個字符是BMES四種狀態(tài)其中一種的概率,比如“中–>B:0.3“、“中–>E:0.4“等。可以看到,HMM模型只需按照模型要求,統(tǒng)計(jì)出上述概率矩陣即可,因此HMM的優(yōu)點(diǎn)是模型簡單訓(xùn)練快,但因?yàn)轳R爾可夫假設(shè)的原因,模型效果相對較差。
2.2.2 CRF
CRF(Conditional random field,條件隨機(jī)場)是一種判別式模型。條件隨機(jī)場是給定隨機(jī)變量X的情況下,隨機(jī)變量Y的馬爾科夫隨機(jī)場。馬爾科夫隨機(jī)場是概率無向圖模型,滿足成對、局部及全局馬爾可夫性。對于序列標(biāo)注問題,一般使用線性鏈條件隨機(jī)場。
圖2:一種線性條件隨機(jī)場
對于條件隨機(jī)場的模型訓(xùn)練,通常使用基于BFGS、SGD等算法的優(yōu)化算法,不同軟件包的實(shí)現(xiàn)上也有所區(qū)別。理論上CRF算法性能要優(yōu)于HMM,因?yàn)镃RF可以使用更多的特征,但同時,特征選擇對于模型的性能有一定的影響,除此之外,相對于HMM,CRF模型的訓(xùn)練也更加復(fù)雜,時間相對較長。
2.2.3 RNN
隨著深度學(xué)習(xí)的興起,RNN、LSTM、BILSTM等模型已經(jīng)被證明在NLP任務(wù)上有著良好的表現(xiàn)。相比傳統(tǒng)模型,RNN能夠考慮長遠(yuǎn)的上下文信息,并且能夠解決CRF特征選擇的問題,可以將主要的精力花在網(wǎng)絡(luò)設(shè)計(jì)和參數(shù)調(diào)優(yōu)上,但RNN一般需要較大的訓(xùn)練數(shù)據(jù),在小規(guī)模數(shù)據(jù)集上,CRF表現(xiàn)較好。在學(xué)術(shù)界,目前比較流行的做法是將BILISTM和CRF進(jìn)行結(jié)合,借鑒兩個模型各自的優(yōu)點(diǎn),來達(dá)到更好的效果。
圖3:BILSTM+CRF標(biāo)注模型
3基于CRF模型打造中文NER系統(tǒng)
上面介紹了用于序列標(biāo)注不同模型的特點(diǎn)。雖然深度學(xué)習(xí)有著廣闊的前景,并且在機(jī)器翻譯等任務(wù)上表現(xiàn)優(yōu)異,但對于序列標(biāo)注任務(wù)而言,CRF模型老而彌堅(jiān)且比較成熟,在工業(yè)界中被廣泛使用,因此本章使用CRF模型打造一個中文NER系統(tǒng)。(達(dá)觀數(shù)據(jù) 高翔)
3.1 明確標(biāo)注任務(wù)
前文講過,NER可以根據(jù)業(yè)務(wù)需求標(biāo)注各種不同類型的實(shí)體,因此首先要明確需要抽取的實(shí)體類型。一般通用場景下,最常提取的是時間、人物、地點(diǎn)及組織機(jī)構(gòu)名,因此本任務(wù)提取TIME、PERSON、LOCATION、ORGANIZATION四種實(shí)體。
3.2 數(shù)據(jù)及工具準(zhǔn)備
明確任務(wù)后就需要訓(xùn)練數(shù)據(jù)和模型工具。對于訓(xùn)練數(shù)據(jù),我們使用經(jīng)典的人民日報1998中文標(biāo)注語料庫,其中包括了分詞和詞性標(biāo)注結(jié)果,下載地址為:http://icl.pku.edu.cn/icl_groups/corpus/dwldform1.asp。對于CRF,有很多開源的工具包可供選擇,在此使用CRF++進(jìn)行訓(xùn)練。CRF++官方主頁為https://taku910.github.io/crfpp/,包括下載及使用等說明。
3.3 數(shù)據(jù)預(yù)處理
人民日報1998語料庫下載完畢后,解壓打開“199801.txt”這個文件(注意編碼轉(zhuǎn)換成UTF-8),可以看到內(nèi)容是由word/pos組成,中間以兩個空格隔開。我們需要的提取的實(shí)體是時間、人名、地名、組織機(jī)構(gòu)名,根據(jù)1998語料庫的詞性標(biāo)記說明,對應(yīng)的詞性依次為t、nr、ns、nt。通過觀察語料庫數(shù)據(jù),需要注意四點(diǎn):1,1998語料庫標(biāo)注人名時,將姓和名分開標(biāo)注,因此需要合并姓名;2,中括號括起來的幾個詞表示大粒度分詞,表意能力更強(qiáng),需要將括號內(nèi)內(nèi)容合并;3,時間合并,例如將”1997年/t 3月/t” 合并成”1997年3月/t”;4,全角字符統(tǒng)一轉(zhuǎn)為半角字符,尤其是數(shù)字的表示。
通過腳本將語料庫數(shù)據(jù)進(jìn)行處理,處理前后的結(jié)果如圖4和圖5所示。
圖4:人民日報1998標(biāo)注語料數(shù)據(jù)處理前
圖5:人民日報1998標(biāo)注語料數(shù)據(jù)處理后
3.4 模型訓(xùn)練
根據(jù)我們的NER任務(wù)需求及CRF++的訓(xùn)練要求,模型訓(xùn)練需要4個步驟:1,確定標(biāo)簽體系;2,確定特征模板文件;3,處理訓(xùn)練數(shù)據(jù)文件;4,模型訓(xùn)練。(達(dá)觀數(shù)據(jù) 高翔)
3.4.1 確定標(biāo)簽體系
對于NER任務(wù),常見的標(biāo)簽體系包括IO、BIO、BMEWO、BMEWO+。下面舉例說明不同標(biāo)簽體系的區(qū)別。
表格1:不同標(biāo)簽體系的標(biāo)注示例
大部分情況下,標(biāo)簽體系越復(fù)雜準(zhǔn)確度也越高,但相應(yīng)的訓(xùn)練時間也會增加。因此需要根據(jù)實(shí)際情況選擇合適的標(biāo)簽體系。本文選擇和分詞系統(tǒng)類似的BMEWO標(biāo)簽體系。
3.4.2 特征模版設(shè)計(jì)
特征模版是一個文本文件,其內(nèi)容如圖6所示,其中每行表示一個特征。圖6使用了unigram特征,并且僅以字符本身作為特征而不考慮其他特征。除當(dāng)前字符外,還使用了其前后3個字,以及上下文的組合作為特征。CRF++會根據(jù)特征模版生成相關(guān)的特征函數(shù)。關(guān)于特征模版的詳細(xì)解釋可以查看官網(wǎng)文檔,并且對于特征的選擇和設(shè)計(jì)可以靈活配置,圖6僅作為參考。
圖6:特征模板設(shè)計(jì)
3.4.3 訓(xùn)練數(shù)據(jù)生成
CRF模型的訓(xùn)練數(shù)據(jù)是一行一個token,一句話由多行token組成。每一行可以分為多列,除最后一列外,其他列表示特征。本文所描述的NER系統(tǒng),單字表示token,并且僅使用字符這一種特征,因此可以根據(jù)語料庫中每個字在詞中的位置和詞性,以及所選的標(biāo)簽系統(tǒng),生成CRF++的訓(xùn)練數(shù)據(jù)。生成的訓(xùn)練數(shù)據(jù)如圖7所示。
圖7:CRF++訓(xùn)練數(shù)據(jù)示例
3.4.4 模型訓(xùn)練
準(zhǔn)備好特征模版和訓(xùn)練數(shù)據(jù)后就可以進(jìn)行模型訓(xùn)練,如圖8所示。使用crf_learn命令,指定模版文件、訓(xùn)練數(shù)據(jù)文件和輸出模型文件就可以進(jìn)行訓(xùn)練。參數(shù)-f 1表示過濾頻次低于1的特征,在這里不進(jìn)行特征過濾,-c 1.0用來調(diào)節(jié)CRFs的超參數(shù),c值越大越容易過擬合。除此之外,還有-a等其他參數(shù)進(jìn)行控制調(diào)整。圖9展示了訓(xùn)練完畢的相關(guān)數(shù)據(jù)。
圖8:CRF++訓(xùn)練過程
圖9:CRF++訓(xùn)練結(jié)果
3.5 模型預(yù)測及使用
模型訓(xùn)練完畢后就可以進(jìn)行預(yù)測。CRF++提供crf_test命令進(jìn)行測試,我們使用文本“北京市委組織部長姜志剛調(diào)任寧夏副書記“進(jìn)行測試,測試文件中每字一行,每句話使用空行隔開。測試結(jié)果如圖10所示。
圖10:CRF++測試結(jié)果
從圖10的結(jié)果我們可以看到,CRF模型能夠?qū)斎胛淖中蛄休敵鱿鄳?yīng)的標(biāo)簽從而完成NER任務(wù)。在模型預(yù)測時,CRF++主要使用了維特比算法進(jìn)行nbest輸出。在模型訓(xùn)練時,可以指定-t參數(shù)輸出文本格式的模型,方便debug或編寫自己的模型加載及解碼程序。
對于一個完整的NER過程,除了得到序列標(biāo)簽外,還要對標(biāo)簽序列進(jìn)行解碼得到最終的結(jié)果。CRF++同時提供了python接口,可以方便的在python 程序中進(jìn)行模型的調(diào)用得到標(biāo)簽序列,然后通過標(biāo)簽解碼得到最終的結(jié)果。圖11展示了一個完整的NER預(yù)測結(jié)果。
圖11:使用python代碼進(jìn)行NER的預(yù)測結(jié)果
圖11展示了較好的結(jié)果,能夠識別出諸如“北京小米科技有限責(zé)任公司”這樣的組織機(jī)構(gòu)名。通過使用1998年的數(shù)據(jù)識別出了2010年才成立的公司,這就是模型算法的力量。當(dāng)然模型也有瑕疵,諸如“郁亮“、”海聞”這樣的人名沒有識別出來,這除了和模型特征選擇相關(guān)外,也和語料庫的規(guī)模和標(biāo)注有關(guān),因此語料庫的建設(shè)和積累更加重要。(達(dá)觀數(shù)據(jù) 高翔)
4 總結(jié)
本文講述了NER任務(wù)的基本概念及方法,并使用業(yè)界成熟的語料和工具開發(fā)了一個簡單能work的基于CRF模型的中文NER系統(tǒng),而實(shí)際提供線上服務(wù)的NER系統(tǒng)要比這個復(fù)雜的多。在自然語言處理的實(shí)際工作中,除了不同模型、算法、工具的使用和參數(shù)調(diào)優(yōu)外,語料庫的選擇和積累也非常重要。對于中文文本語義分析技術(shù),達(dá)觀數(shù)據(jù)擁有多年的技術(shù)積累并緊跟行業(yè)潮流,對已有成熟技術(shù)進(jìn)行深挖,對新興技術(shù)進(jìn)行研究集成。同時,針對不同行業(yè)及任務(wù)積累了豐富的文本語料,并源源不斷的使用新數(shù)據(jù)對語料模型進(jìn)行升級更新,保證分析結(jié)果的準(zhǔn)確性和實(shí)時性,為客戶提供高品質(zhì)服務(wù)。(達(dá)觀數(shù)據(jù) 高翔)
作者簡介
高翔,達(dá)觀數(shù)據(jù)聯(lián)合創(chuàng)始人,首席數(shù)據(jù)官聯(lián)盟成員,達(dá)觀數(shù)據(jù)前端項(xiàng)目組、文本語義理解組負(fù)責(zé)人,自然語言處理技術(shù)專家,上海交通大學(xué)通信專業(yè)碩士,曾代表達(dá)觀數(shù)據(jù)參加2016青年互聯(lián)網(wǎng)創(chuàng)業(yè)大賽并贏得全國總冠軍榮譽(yù)、第五屆中國創(chuàng)新創(chuàng)業(yè)大賽優(yōu)秀企業(yè)獎、中國電子i+創(chuàng)新創(chuàng)效創(chuàng)意大賽總決賽一等獎。曾就職于騰訊文學(xué),盛大文學(xué),盛大創(chuàng)新院,負(fù)責(zé)文本閱讀類產(chǎn)品、搜索引擎、文本挖掘及大數(shù)據(jù)調(diào)度系統(tǒng)的開發(fā)工作。在自然語言處理和機(jī)器學(xué)習(xí)等技術(shù)方向有著豐富的經(jīng)驗(yàn)。