hanlp自然语言处理包的人名识别代码解析

HanLP发射矩阵词典nr.txt中收录单字姓氏393个。袁义达在《中国的三大姓氏是如何统计出来的》文献中指出:当代中国100个常见姓氏中,集中了全国人口的87%,根据这一数据我们只保留nr.txt中的100个常见词语的姓氏角色,其他词语去掉其姓氏角色状态。过滤后,nr.txt中具有姓氏角色的单字共计97个。列于下表:
丁 万 乔 于 任 何 余 侯 傅 冯 刘 卢 史 叶 吕 吴 周 唐 夏 姚
姜 孔 孙 孟 宋 尹 崔 常 康 廖 张 彭 徐 戴 方 易 曹 曾 朱 李
杜 杨 林 梁 武 段 毛 江 汤 汪 沈 潘 熊 王 田 白 石 秦 程 罗
胡 苏 范 萧 董 蒋 薛 袁 许 谢 谭 贺 贾 赖 赵 邓 邱 邵 邹 郑
郝 郭 金 钟 钱 阎 陆 陈 雷 韩 顾 马 高 魏 黄 黎 龚

实验效果
姓氏过滤前,各命名实体识别准确率
nr 33%
ns 83%
nt 43%
姓氏过滤后,各命名实体识别准确率
nr 36%
ns 83%
nt 81%
这里没有开层叠隐马预测机构名和地名,nt上升原因估计是由于很多不是人名的词语没被标为人名,那么nt的模式匹配规则匹配不上了,所以机构名准确率上来了。错误识别的人名,100个常用姓氏的不多,很多恐怕是HanLP里其他词表干预进来的。
隐马一般用于分词和词性标注是比较好的,为什么通常的序列标注方法也就是BIEO方法直接用到实体识别不合适呢。用词性标注为例,每一个词它所对应的词性标记子集是有限的,而这个子集相对于词性标记全集来说是小的。但是到了实体识别则不一定,拿人名来说,除了姓氏以外,名字词语部分可以填充的词语是任意的,也就是说任何词语都有可能出现在中间位置,此时发射矩阵中的某些词实际上就没有太大意义了,因为它可能等可能的由BIEO标记发出,而如果指利用四种标记之间的转移概率信息来确定最优的标记序列势必就影响效果。因此,我们通过引入角色标记,实际上这就引入了先验知识,比如某些字只能由姓氏标记产生,某些字一般情况都充当名字首字,某些字一般情况都充当名字末字,通过给这些不同情况下的字集按照其出现的位置的分布和其语法意义做角色定义,可以缩小每种角色标记可发出的词语集合,也就是每种词语(字)所对应的标记集的大小,相当于使发射概率分布不是均匀分布,那么预测的准确性肯定就得到提高了。
下边介绍一下HanLP人名识别的主要流程
1.使用使用匹配法求出各种分词路径用变量wordNetAll存储
2.用viterbi方法找到一条最优的分词路径,这里主要使用用户自定义词典以及核心词典,用序列变量vertexList存储。
3.角色观察,也就是根据发射概率矩阵列出vertexList中每个词语可能对应的角色标记。roleObserve(...)方法实现。
4.角色标注,利用viterbi方法求出最优角色标记序列。viterbiComputeSimply(...)方法实现。
5.对角色序列进行模式匹配得到人名。模式匹配定义在NRPattern类中。

在精度要求比较高且时间紧的情况下,最好的提高准确率的方法为,只保留常用姓氏,只保留最可能的2gram角色标记模式。在做人名识别时还有一个注意的点,如果你的预测语料和训练语料完全在文体上差别很大,或者说你就是在公开的训练语料上训练而不在预测语料上训练的话,基本上上下文信息是没有用处的,甚至有可能上下文信息会给实体边界标注带来干扰,我想任何机器学习包括深度学习,不管是文本分类领域还是实体识别领域都会有这种泛化能力的问题,这种问题恐怕通过算法是没法解决的,如果可以解决那么任何语种任何领域都可以使用一种模型,一劳永逸了。

原文地址:https://blog.51cto.com/13636660/2425823

时间: 2024-10-29 12:40:47

hanlp自然语言处理包的人名识别代码解析的相关文章

HanLP自然语言处理包开源(包含源码)

支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取,自动摘要,短语提取,拼音转换,简繁转换,文本推荐,依存句法分析(MaxEnt依存句法分析.CRF依存句法分析).提供Lucene插件,兼容Lucene4.x. HanLP: Han Language Processing 汉语言处理包 HanLP是由一系列模型与算法组成的Java工具包,目标是促进自然语言处理在生产环境中的应用.HanLP

《zw版·Halcon-delphi系列原创教程》航母舰载机·视觉定位标志的识别代码

<zw版·Halcon-delphi系列原创教程>航母舰载机·视觉定位标志的识别代码 航母舰载机机身上的黄黑圆圈的标志是什么意思,辐射?核动力?战术核弹? <百度百科>介绍如下     这是工业数字摄影测量的人工标志    数字摄影测量(Basic concept of digital photogrammetry)是基于数字影像和摄影测量的基本原理,应用计算机技术.数字影像处理.影像匹配.模式识别    等多学科的理论与方法,提取所摄对像以数字方式表达的几何与物理信息的摄影测量学

opencv颜色识别代码分享

android 平台 opencv 实现颜色识别代码:http://www.eyesourcecode.com/thread-40682-1-1.htmlopencv的颜色识别简单实现的代码:http://www.eyesourcecode.com/thread-39765-1-1.html更多OpenCV源码免费下载:http://www.eyesourcecode.com/forum-OpenCV-1.html

层叠隐马模型下的音译人名和日本人名识别

命名实体中的人名识别包括中国人名,音译人名和日本人名.比如"北川景子参演了林诣彬导演,克里斯·摩根编剧的<速度与激情3>""林志玲亮相网友:确定不是波多野结衣?".以前用三层HMM做过中国人名的识别,取得了满意的效果.这次来实现另外两种人名的自动识别.音译人名常用字法音译人名按照地域又可以分为欧美人名和俄罗斯人名,两者的常用字差别较大.不过,由于翻译人名中使用的汉字相对固定,所以只需整理一个常用字库就可以实现基本的识别,比如:欧美人名常用字--·--阿埃

一种基于词性序列的人名识别方法

在人名识别:[我, 爱, 杨, 尚, 川] 中,爱.杨.尚都是姓,会有多个识别结果,那么我们如何消歧并选择一个最合理的结果呢? 下面看看人名识别:[我, 爱, 杨, 尚, 川] 的计算机分析过程,此过程的分析程序出自Java分布式中文分词组件 - word分词: 人名识别:[我, 爱, 杨, 尚, 川] 识别到人名:爱杨尚 识别到人名:杨尚川 识别到人名:尚川 开始从多个识别结果中选择一个最佳的结果:[[我, 爱杨尚/nr, 川], [我, 爱, 杨尚川/nr], [我, 爱, 杨, 尚川/nr

个人小程序实现自然语言对话工程查询--快递,身份证,词典,天气等功能完整代码解析

这个小程序旨在通过自然语言对话查询快递.身份证.天气.诗歌.词典等等的功能. 自然语言对话,即使用中文语言直接对程序下命令,比如:‘查一下天气’,“帮我查一下123456这个运单号吧”,“我想听李白的静夜思”等等. 如果还是不明白,请阅读博客 https://i.cnblogs.com/EditPosts.aspx?postid=7203097&update=1 的前言部分. 1. 小程序功能介绍 如果希望直接体验小程序,请直接扫描下面的二维码,这样更直观. 但是发布的小程序里没有身份证查询,因

大快HanLP自然语言处理技术介绍

大快HanLP自然语言处理技术介绍 这段时间一直在接触学习hadoop方面的知识,所以说对自然语言处理技术也是做了一些了解.网络上关于自然语言处理技术的分享文章很多,今天就给大家分享一下HanLP方面的内容. 自然语言处理技术其实是所有与自然语言的计算机处理相关联的技术的统称,自然语言处理技术应用的目的是为了能够让计算机理解和接收我们用自然语言输入的指令,实现从将我们人类的语言翻译成计算机能够理解的并且不会产生歧义的一种语言.接合目前的大数据以及人工智能,自然语言处理技术的快速发展能够很好的助力

思考 8 cpu如何识别代码

首先,cpu无法直接识别代码,cpu只能识别0和1,cpu是有大量的与.或.非电路组成的,因此cpu只能对0.1组成的二进制数进行此类运算,无法直接识别代码 特殊规定的0和1组成的的数用,英文字符,即汇编语言 汇编语言再通过规定,形成C语言.c++语言 C.C++语言编写其他语言如Java等高级语言的运行环境 详见知乎问题:CPU 是怎么认识代码的?https://www.zhihu.com/question/348237008 原文地址:https://www.cnblogs.com/epll

java代码解析二维码

java代码解析二维码一般步骤 本文采用的是google的zxing技术进行解析二维码技术,解析二维码的一般步骤如下: 一.下载zxing-core的jar包: 二.创建一个BufferedImageLuminanceSource类继承LuminanceSource,此类在google的源码中有,但是为了使用方便,下面有此类的源码,可以直接复制使用: private final BufferedImage image; private final int left; private final