Hanlp自然語言處理包中的基于HMM-Viterbi處理人名識别的内容大概在年初的有分享過這類的文章,時間稍微久了一點,有點忘記了。看了 baiziyu 分享的這篇比我之前分享的要簡單明了的多。下面就把文章分享給大家交流學習之用,部分内容有做修改。

本文主要介紹一下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标注的人名識别原理就介紹到這裡,我想我應該把原理說清楚了,如果你還沒有看明白,就等着後續的有關隐馬的文章吧。基于隐馬的人名識别會很容把以一個姓氏作為開頭的詞語識别為人名,特别是地名中有人名字的,是以,人工整理出一些非常用姓氏的人名,以及一些地名是必要的,後續如果整理出來了,我應該會放到專欄文章裡,畢竟都是公開語料上做的,也就不涉及什麼别的不友善。