ITPub博客

首页 > 人工智能 > 自然语言 > Hanlp-地名识别调试方法详解

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

自然语言 作者:adnb34g 时间:2019-07-29 10:10:50 0 删除 编辑


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 ][ 上联 Z 20211628 ][ A 2701 B 439 X 11 ][ 山水 B 6 A 1 ][ B 214 A 3 C 3 ][ 曾随 G 1 H 1 ]

[ A 47 B 26 ][ C 274 A 75 B 66 D 2 X 2 ][ A 40525 B 10497 X 418 ][ 如何 B 44 ][ A 2896 B 454 X 215 ][ 下联 Z 20211628 ][ B 82 ][  B 1322 ]

地名角色标注: [ /S , 上联 /Z , /B , 山水 /A , /C , 曾随 /H , /B , /B , /A , 如何 /B , /A , 下联 /Z , /B , /S]

识别出地名:不曾随 CH

hanlp_ns [' 不曾随 ']

 

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

 

显然,在核心词表中 “曾随“被标记为一个地名,把”曾随“从词表中删除掉,并删除词表文件 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 解决方法不是根本方法,直接去除掉某些词,会导致一些生僻实体识别不出来。我们是否可以考虑左右信息熵之类的测度函数来解决这种词是否需要拆开与其前后构成词。针对词法分析推荐大家使用深度学习的方法,毕竟了解这些方法也是必须的,虽然你可以在实际种不用,但是不代表你可以偷懒而不去学习。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31524777/viewspace-2652022/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
八年IT互联从业经历,专注网络营销、大数据、人工智能等领域的知识分享

注册时间:2018-03-09

  • 博文量
    172
  • 访问量
    115106