1. 程式人生 > >HanLP-基於HMM-Viterbi的人名識別原理介紹

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

 

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

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

 

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

隱變數序列:角色1 角色2 … 角色n

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

初始概率分佈:

 

各隱變數標記意義列於下表

 

狀態轉移概率分佈:

觀測概率分佈:

 

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

預測階段:

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

最大模式匹配階段:

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

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

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