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