Hanlp天然语言处理包中的基于HMM-Viterbi处理人名识别的内容大概在年初的有分享过这类的文章,时间稍微久了一点,有点忘记了。看了 baiziyu 分享的这篇比我以前分享的要简单明了的多。下面就把文章分享给你们交流学习之用,部份内容有作修改。算法
本文主要介绍一下HanLP是如何利用HMM来作人名识别的。基本思想是把词语序列做为观测序列,将角色序列做为隐藏序列,当模型预测出最佳隐藏状态序列后,利用模式最大匹配法,匹配出人名实体。下边说一模型的三要素在这个应用中所对应的内容,由于训练阶段就是要求解这三个要素的值。ide
假设有下边的观测序列和其对应的隐藏序列学习
观察值序列:词1 词2 … 词nspa
隐变量序列:角色1 角色2 … 角色nit
训练阶段:统计三个要素(三个矩阵的元素值)class
初始几率分布:变量
各隐变量标记意义列于下表原理
状态转移几率分布:im
观测几率分布:统计
有关这些几率值的计算都很简单,就是频率法,留在后边介绍隐马时候再写。
预测阶段:
根据训练获得的三个要素,利用Viterbi算法求解获得了最优隐藏变量序列 角色1* 角色2* ... 角色n*
最大模式匹配阶段:
利用下边的模式串匹配出人名
{ BBCD, BBE, BBZ, BCD, BEE,BE,BG,BXD,BZ,CD,EE,FB, Y,XD}
基于HMM-Viterbi标注的人名识别原理就介绍到这里,我想我应该把原理说清楚了,若是你尚未看明白,就等着后续的有关隐马的文章吧。基于隐马的人名识别会很容把以一个姓氏做为开头的词语识别为人名,特别是地名中有人名字的,所以,人工整理出一些很是用姓氏的人名,以及一些地名是必要的,后续若是整理出来了,我应该会放到专栏文章里,毕竟都是公开语料上作的,也就不涉及什么别的不方便。