`

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角色标记模式。在做人名识别时还有一个注意的点,如果你的预测语料和训练语料完全在文体上差别很大,或者说你就是在公开的训练语料上训练而不在预测语料上训练的话,基本上上下文信息是没有用处的,甚至有可能上下文信息会给实体边界标注带来干扰,我想任何机器学习包括深度学习,不管是文本分类领域还是实体识别领域都会有这种泛化能力的问题,这种问题恐怕通过算法是没法解决的,如果可以解决那么任何语种任何领域都可以使用一种模型,一劳永逸了。

 

分享到:
评论

相关推荐

    自然语言处理-人名识别

    采用统计与规则相结合的混合策略,提出一种中国人名的自动识别方法.该方法利用知识库中的统计信息,对 中国人名作初步的提取,分析中国人名构成的内部特征和外部特征,提取出特征集,并总结出相应的识别规则,对...

    自然语言处理-姓名性别分类实战.rar

    本项目是自然语言处理文本分类的一个实例---姓名性别分类。里面包含了原始数据,源代码,详细注释,可以通过有监督的学习通过读入数据,定义特征分类器,训练一个新的“朴素贝叶斯”分类器进行男女姓名的分类。具体...

    HanLP:汉语语言处理-源码

    HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用.HanLP具备功能完善,性能高效,架构清晰,语料时新,可自定义的特点。 HanLP提供下列功能: 中文...

    自然语言处理,朴树贝叶斯方法,根据姓名预测性别

    根据姓名预测性别,朴树贝叶斯分类器,内含数据集和源码,适合各类人群使用,人工智能,因对知识的尊重所以象征性收取一些费用,望谅解。

    fastNLP自然语言处理(NLP)工具包

    一款轻量级的自然语言处理(NLP)工具包自然语言处理(NLP)工具包是一种用于处理和分析人类语言的软件。它包括许多不同的工具和技术,可以帮助计算机理解和处理语言。 NLP工具包通常包括以下功能: - 分词:将...

    Android代码-Java 实现的自然语言处理中文分词

    HanLP是一系列模型与算法组成的NLP工具包,由大快搜索主导并完全开源,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。 HanLP提供下列功能: 中文...

    论文研究-基于层次特征的藏文人名识别研究.pdf

    为了提高藏文人名识别的效果,提出了结合三层的层次特征的藏文人名识别算法。提出了无须分词,仅在藏文音节粒度上,基于藏文人名三层特征:内部特征、上下文信息、并列关系特征,利用条件随机场(conditional random...

    自然语言处理期末大作业,基于CRF++和人民日报语料库(199801)的中文人名识别

    自然语言处理期末大作业,基于CRF++和人民日报语料库(199801)的中文人名识别 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分...

    典型相关分析matlab实现代码-HanLP:汉语言处理

    HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。 HanLP提供下列功能: 中文分词 最短路分词 N-最短路...

    历史名人人名方面词库字典,自然语言处理,分词

    历史名人人名方面词库字典,自然语言处理,分词

    使用CRF++工具进行人名识别

    本资源包含使用CRF++工具进行人名识别的所有资源,包括: 1.CRF++工具 2.语料库、程序、文档、实验结果等 2.1 语料库 2.2 语料库划分后的训练集、测试集 2.3 训练集,测试集进行处理后的结果 2.4 crf_learn用到...

    论文研究-基于混合方法的中文人名识别研究.pdf

    当前中文人名识别的研究主要针对中国人名,而对日本人名及音译人名的专门研究相对较少,识别效果也亟待提高。提出利用CRRM方法进行中、日及音译人名同步识别。该方法基于CRF(Conditional Random Fields)并结合了上...

    Java 词海分析 自然语言分析 人名地名机构名提取自定义词典

    中国人名识别 音译人名识别 日本人名识别 地名识别 实体机构名识别 关键词提取 TextRank关键词提取 自动摘要 TextRank自动摘要 短语提取 基于互信息和左右信息熵的短语提取 拼音转换 多音字 声母 韵母 声调 简繁转换...

    中文人名识别-哈工大软件学院中文信息处理刘秉权

    中文人名识别 哈工大 软件学院 中文信息处理 刘秉权 java

    深度学习模型的藏文人名识别方法.pdf

    深度学习模型的藏文人名识别方法.pdf

    自然语言处理之AI深度学习实战视频教程

    本课程将首先介绍自然语言处理的发展现状与挑战,同时,讲解深度学习和自然语言处理的结合应用。除了基本算法外,本课程还配备实践环节,从一些典型的方向:机器翻译、文本分类、问答等。最后,将和大家讨论NLP的...

    基于条件随机场的中文人名识别

    根据中文人名的特点, 利用条件随机场模型进行 人名识别

    论文研究-一种人名识别方法的研究.pdf

    针对汉语人名识别的难点,基于最大熵算法提出了结合多知识、多模型的识别方法,充分考虑了人名的内部特征(小颗粒特征)和人名的语境信息。论文的主要贡献是:将概率信息赋予最大熵模型,极大提高人名的准确率和召回...

    OpenNLP 是一个机器学习工具包,用于处理自然语言文本.rar

    维基百科:Apache OpenNLP库是一个基于机器学习的自然语言文本处理的开发工具包,它支持自然语言处理中一些共有的任务,例如:标记化、句子分割、词性标注、固有实体提取(指在句子中辨认出专有名词,例如:人名)、...

    自然语言处理(NLP)介绍、心得、项目经验和相关练习.docx

    自然语言处理(NLP)介绍、心得、项目经验和相关练习 1. 介绍 自然语言处理(NLP)是人工智能领域中的一个重要分支,致力于使计算机能够理解、解释、生成和与人类语言进行交互。NLP的发展涵盖了语音识别、文本分析、...

Global site tag (gtag.js) - Google Analytics