`

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

 

分享到:
评论

相关推荐

    Python-自然语言处理工具包HanLP的Python接口

    **Python-自然语言处理工具包HanLP的Python接口** 在Python的世界里,自然语言处理(NLP)是一项关键任务,涉及文本分析、语义理解、情感分析等多个领域。HanLP,由厦门汉云科技有限公司开发,是一款高效、易用的...

    Hanlp分词实现从网络片段中提取省份和城市

    HanLP是由科大讯飞开发的一款高性能的自然语言处理工具包,它提供了丰富的中文分词、词性标注、命名实体识别等功能。 首先,我们需要理解如何使用HanLP进行分词。HanLP的核心是基于统计的分词模型,它能够将输入的...

    自然语言处理入门随书代码

    HanLP,由北京大学计算机科学技术研究所开发,是一款高效的自然语言处理工具包,支持Java和Python两种语言。在Python版本的pyhanlp中,我们可以找到许多与NLP相关的功能,如分词、词性标注、命名实体识别、依存句法...

    HanLp数据字典(1.7.1)

    而“HanLP”是Java语言中一款高效、易用的自然语言处理工具包,为开发者提供了丰富的文本分析功能。本文将深入探讨 HanLP 1.7.1 版本中的数据字典,以及其在NLP应用中的关键作用。 首先,让我们了解 HanLP 的核心...

    hanlp java包的源代码

    汉语言处理(NLP,Natural Language Processing)是计算机科学领域的一个重要分支,主要研究如何让计算机理解和处理人类的自然语言。在Java编程中,HanLP是一个广泛应用的开源NLP库,由科大讯飞开发,提供了丰富的...

    hanlp 1.7.7.zip

    在Java开发领域,自然语言处理(NLP)是一项重要的技术,而HanLP(由哈工大讯飞联合创始人韩松开发)作为一款优秀的开源Java NLP库,为开发者提供了丰富的中文处理功能,如分词、词性标注、命名实体识别等。...

    hanlp-1.8.2-release.zip

    《 HanLP:中文自然语言处理库的深度解析与应用指南》 HanLP,全称“High-performance Natural Language Processing”,是一款由北京大学计算机科学技术研究所与前人人网首席架构师周靖人共同研发的开源Java自然...

    南邮自然语言处理实验三

    ### 南邮自然语言处理实验三知识点解析 #### 一、实验概述 南京邮电大学的这份实验报告针对的是自然语言处理(NLP)领域的三项基本任务:词性标注(Part-of-Speech Tagging, POS)、命名实体识别(Named Entity ...

    读书笔记2之中文分词流程HanLP

    中文分词是自然语言处理(NLP)中的基础任务,主要目标是将连续的汉字序列分割成具有独立语义的词语。在这个过程中,涉及到多个步骤和技术。以下是对中文分词流程以及汉语文本处理库HanLP的详细解析。 首先,**句子...

    python自然语言出来中文版(带标签,非扫描)

    6. **HanLP**:由阿里云开发的高性能自然语言处理工具包,支持分词、词性标注、命名实体识别、依存句法分析等任务。 7. **TextBlob**:基于NLTK构建,提供简单易用的接口进行情感分析和基础的NLP任务。 在Python ...

    NLP自然语言中英文本预处理

    自然语言处理(NLP)是计算机科学领域的一个关键分支,主要关注如何使计算机理解、解析、生成和操作人类语言。在NLP中,文本预处理是至关重要的一步,它为后续的分析、理解和生成任务奠定了基础。这个压缩包文件很...

    PyPI 官网下载 | pyhanlp-0.1.29.tar.gz

    HanLP的Java版本在自然语言处理领域有着广泛的应用,尤其是在词性标注、命名实体识别、句法分析等方面表现优秀。 在Python库"pyhanlp-0.1.29"中,我们可以期待以下主要功能: 1. **分词**:这是自然语言处理的基础...

    NLP 工具使用集合,数据处理 case 集合.zip

    NLTK(自然语言工具包)是英文处理的常用库,提供POS标注功能;HanLP、LTP(语言技术平台)则适用于中文环境。 3. 命名实体识别(NER):该任务旨在识别文本中的实体,如人名、地名、组织名等。Stanford NER和Spacy...

    中文提取.中文提取.中文提取.中文提取.中文提取.

    在IT行业中,中文提取通常涉及到自然语言处理(NLP)领域,特别是中文信息提取(IE)、文本挖掘、关键词抽取或情感分析等。 描述中重复的“中文提取”进一步强调了这个主题的核心,即在中文环境中处理和分析数据。...

    python167开放领域事件抽取系统.zip

    在自然语言处理(NLP)领域,事件抽取是一项关键任务,它涉及到从非结构化的文本中提取出具有时间、地点、参与者等要素的事件,如“会议召开”、“地震发生”或“股票上涨”。这一系统可能是为了帮助研究人员、分析...

    中文组块project

    【标题】"中文组块project"是一个专注于自然语言处理(NLP)的项目,它包含了对中文文本进行处理和分析的模块。在这个项目中,开发者可能已经实现了各种功能,如分词、词性标注、命名实体识别、情感分析等,这些都是...

    裁判文书提取import的一些文件

    在处理这些文书时,常常需要进行文本挖掘和自然语言处理(NLP)操作,以便提取关键信息,如案由、当事人、判决结果等。"裁判文书提取import的一些文件"可能指的是用于此类数据处理的工具或代码库,可能包含了读取、...

    hanlearn-api

    "hanlearn-api" 是一个基于Python的自然语言处理(NLP)库,专注于提供便捷的接口,用于在中文文本上执行各种NLP任务。这个库可能是由hanlp团队或者某个独立开发者开发的,旨在简化中文文本处理的工作流程,提高开发...

Global site tag (gtag.js) - Google Analytics