Hanlp-地名识别调试方法详解

简介: HanLP收词特别是实体比较多,因此特别容易造成误识别。下边举几个地名误识别的例子,需要指出的是,后边的机构名识别也以地名识别为基础,因此,如果地名识别不准确,也会导致机构名识别不准确。

HanLP收词特别是实体比较多,因此特别容易造成误识别。下边举几个地名误识别的例子,需要指出的是,后边的机构名识别也以地名识别为基础,因此,如果地名识别不准确,也会导致机构名识别不准确。_

类型1 数字+地名
[1] 暗访哈尔滨网约车:下10单来7辆“黑车” 1辆套牌

[2] 房天下每日成交5月12日海宁商品房销售备案43套

[3] 广西近视手术专家-黄明汉院长9月9日百色见面会

类型2 前词+地名首词成词或地名尾词+后词成词

[1] 西安国企4000元工资相当于私企多少钱?

[2] 七月份从包头到山东,十五天左右,有自驾游路线推荐吗?

[3] 最受考研人欢迎的城市,有你报考高校所在的城市吗?

类型3 地名本身成词

[1] 滴滴司机接跨省天价订单 乘客半路改道至今未付款

[2] 上联:山水不曾随我老,如何对下联?

[3] 上联:柳着金妆闲钓水,如何对下联?

Badcase分析及修正

下边介绍一下排查误判原因以及修正的方法
首先需要明确以下几点注意事项:
1.实体识别受分词精度影响。
2.实体识别同样涉及消歧的问题。
3.HanLP收录了一些不常见的实体词,会造成错误率升高。
4.HanLP基于隐马的命名实体识召回率没有特别要求的话,不需要再去训练。

这里我们以下边这个badcase的分析过程为例来说明

[5] 上联:山水不曾随我老,如何对下联?

打开提示模式 HanLP.Config.enableDebug()

运行人名识别代码

HanLP命名实体识别

def hanlp_ner(text, ner_type):

global segment
ner_li = []
for term in segment.seg(text):
    if str(term.nature) == ner_type:
        ner_li.append(str(term.word))

return ner_li

这里ner_type为你要识别的实体类型,如果是人名则ner_type='nr',地名ner_type='ns',机构名ner_type='nt'。text为要抽取实体的文本。

识别结果,这里为了清晰,只截取了部分输出:

粗分结果[上联/n, :/w, 山水/n, 不/d, 曾随/ns, 我/rr, 老/a, ,/w, 如何/ryv, 对/p, 下联/n, ?/w]
地名角色观察: S 1163565 : A 2701 B 439 X 11 不 B 214 A 3 C 3
我 A 47 B 26 , A 40525 B 10497 X 418 对 A 2896 B 454 X 215 ? B 82
地名角色标注:[ /S ,上联/Z ,:/B ,山水/A ,不/C ,曾随/H ,我/B ,老/B ,,/A ,如何/B ,对/A ,下联/Z ,?/B , /S]
识别出地名:不曾随 CH
hanlp_ns ['不曾随']

显然,曾随被认为是地名了,而且粗分结果表示的是未经地名识别模块分词和词性标注的结果,显然这是由于词表导致的。由于没有经过地名识别模块,所以不需要去地名的发射词表ns.txt中去找词语,只需要看核心词表CoreNatureDictionary.txt中去找
_1

显然,在核心词表中“曾随“被标记为一个地名,把”曾随“从词表中删除掉,并删除词表文件CoreNatureDictionary.txt.bin,之后再次运行程序得到下边的输出结果

hanlp_ns []

从这个实例,我们也可以看出一些不常见地名如果做成地名词表,就有导致错误识别实体。因此,我们应该保留一份评测语料,每当修改了实体词表后,需要跑一下测试语料查看准确率,如果降低的太多,则表示这样加进来是不可行的。同时填加的实体名也有可能会造成分词错误。

下边说明一下HanLP中有关实体的词表文件名:

1.CoreNatureDictionary.mini.txt
2.CoreNatureDictionary.txt
3.CustomDictionary.txt
4.机构名词典.txt
5.全国地名大全.txt
6.人名词典.txt
7.上海地名.txt
8.现代汉语补充词库.txt
9.ns.txt
10.nr.txt
11.nt.txt

当然这里列出的是通常最有可能导致误识别的词表,如果这些词表都没有找到,还需要在HanLP其他词典文件中寻找。

希望今天的内容对使用HanLP并对隐马情有独钟的小伙伴有帮助。这两天的一点小体会是,实体识别其实跟分词是密不可分的,两者都有共同的处理难点,比如词义消歧(边界的确定),词法分析其实才是真正的NLP的内容之一,而词法分析跟机器学习其实没有太大关系。上边的badcase解决方法不是根本方法,直接去除掉某些词,会导致一些生僻实体识别不出来。我们是否可以考虑左右信息熵之类的测度函数来解决这种词是否需要拆开与其前后构成词。针对词法分析推荐大家使用深度学习的方法,毕竟了解这些方法也是必须的,虽然你可以在实际种不用,但是不代表你可以偷懒而不去学习。

相关文章
|
自然语言处理 索引 算法
HanLP分词命名实体提取详解
文本挖掘是抽取有效、新颖、有用、可理解的、散布在文本文件中的有价值知识,并且利用这些知识更好地组织信息的过程。对于文本来说,由于语言组织形式各异,表达方式多样,文本里面提到的很多要素,如人名、手机号、组织名、地名等都称之为实体。
7371 0
|
3月前
|
机器学习/深度学习 数据处理 文件存储
使用Labelimg进行数据标注
数据标注是计算机视觉和机器学习项目中至关重要的一步,而使用工具进行标注是提高效率的关键。本文介绍了LabelImg,一款常用的开源图像标注工具。用户可以在图像中方便而准确地标注目标区域,为训练机器学习模型提供高质量的标注数据。LabelImg已经成为研究者和开发者在计算机视觉项目中不可或缺的工具之一。
58 0
|
3月前
|
Python
【Python • 图片识别】pytesseract快速识别提取图片中的文字
【Python • 图片识别】pytesseract快速识别提取图片中的文字
154 0
|
自然语言处理 Python
Python实现文本分词并写入新的文本文件,然后提取出文本中的关键词
Python实现文本分词并写入新的文本文件,然后提取出文本中的关键词
115 0
|
自然语言处理 机器学习/深度学习 Windows
HanLP-地名识别调试方法
HanLP收词特别是实体比较多,因此特别容易造成误识别。下边举几个地名误识别的例子,需要指出的是,后边的机构名识别也以地名识别为基础,因此,如果地名识别不准确,也会导致机构名识别不准确。 类型1 数字+地名[1] 暗访哈尔滨网约车:下10单来7辆“黑车” 1辆套牌[2] 房天下每日成交5月12日...
1108 0
|
自然语言处理
自然语言处理工具HanLP-基于层叠HMM地名识别
本篇接上一篇内容《HanLP-基于HMM-Viterbi的人名识别原理介绍》介绍一下层叠隐马的原理。首先说一下上一篇介绍的人名识别效果对比: 只有Jieba识别出的人名准确率极低,基本为地名或复杂地名组成部分或复杂机构名组成部分。
1198 0
|
自然语言处理 应用服务中间件 nginx
hanlp 加载远程词库示例
说明 ·目前的实现方式是以远程词库的内容重新构建CustomDictionary.trie,demo主要是为了实现同步远程词库,对性能暂不作考虑,对性能要求要以CustomDictionary.dat为基础实现 按hanlp作者述 trie后期可能会取消   目前CustomDictionary使用DAT储存词典文件中的词语,用BinTrie储存动态加入的词语,前者性能高,后者性能低 之所以保留动态增删功能,一方面是历史遗留特性,另一方面是调试用;来可能会去掉动态增删特性。
1187 0
|
自然语言处理 Python Ubuntu
自然语言处理工具python调用hanlp中文实体识别
Hanlp作为一款重要的中文分词工具,在GitHub的用户量已经非常之高,应该可以看得出来大家对于hanlp这款分词工具还是很认可的。本篇继续分享一篇关于hanlp的使用实例即Python调用hanlp进行中文实体识别。
1811 0
|
自然语言处理
中文自然语言处理工具hanlp隐马角色标注详解
本文旨在介绍如何利用HanLP训练分词模型,包括语料格式、语料预处理、训练接口、输出格式等。 目前HanLP内置的训练接口是针对一阶HMM-NGram设计的,另外附带了通用的语料加载工具,可以通过少量代码导出供其他训练工具使用的特定格式(如CRF++)。
1510 0
|
自然语言处理 算法 计算机视觉
pyhanlp 共性分析与短语提取内容详解
HanLP中的词语提取是基于互信息与信息熵。想要计算互信息与信息熵有限要做的是 文本分词进行共性分析。在作者的原文中,有几个问题,为了便于说明,这里首先给出短语提取的原理。在文末在给出pyhanlp的调用代码。
3609 0