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