HanLP-基於HMM-Viterbi的人名識別原理介紹


Hanlp天然語言處理包中的基於HMM-Viterbi處理人名識別的內容大概在年初的有分享過這類的文章,時間稍微久了一點,有點忘記了。看了 baiziyu 分享的這篇比我以前分享的要簡單明瞭的多。下面就把文章分享給你們交流學習之用,部份內容有作修改。算法

封面.jpg 

 

本文主要介紹一下HanLP是如何利用HMM來作人名識別的。基本思想是把詞語序列做爲觀測序列,將角色序列做爲隱藏序列,當模型預測出最佳隱藏狀態序列後,利用模式最大匹配法,匹配出人名實體。下邊說一模型的三要素在這個應用中所對應的內容,由於訓練階段就是要求解這三個要素的值。ide

假設有下邊的觀測序列和其對應的隱藏序列學習

 

觀察值序列:詞1 詞2 … 詞nspa

隱變量序列:角色1 角色2 … 角色nit

訓練階段:統計三個要素(三個矩陣的元素值)class

初始機率分佈:變量

圖1.jpg

各隱變量標記意義列於下表原理

 

圖2.jpg

狀態轉移機率分佈:im

 

圖3.jpg

觀測機率分佈:統計

 圖4.jpg

有關這些機率值的計算都很簡單,就是頻率法,留在後邊介紹隱馬時候再寫。

預測階段:

根據訓練獲得的三個要素,利用Viterbi算法求解獲得了最優隱藏變量序列 角色1* 角色2* ... 角色n*

最大模式匹配階段:

利用下邊的模式串匹配出人名

{ BBCD, BBE, BBZ, BCD, BEE,BE,BG,BXD,BZ,CD,EE,FB, Y,XD}

基於HMM-Viterbi標註的人名識別原理就介紹到這裏,我想我應該把原理說清楚了,若是你尚未看明白,就等着後續的有關隱馬的文章吧。基於隱馬的人名識別會很容把以一個姓氏做爲開頭的詞語識別爲人名,特別是地名中有人名字的,所以,人工整理出一些很是用姓氏的人名,以及一些地名是必要的,後續若是整理出來了,我應該會放到專欄文章裏,畢竟都是公開語料上作的,也就不涉及什麼別的不方便。

相關文章
相關標籤/搜索