http://www.hankcs.com/nlp/ner/place-names-to-identify-actual-hmm-viterbi-role-labeling.html

命名实体识别(Named Entity Recognition)也是自然语言处理中的一个难关,特别是中文这样没有大小写等固定形态的语言。上次介绍过《实战HMM-Viterbi角色标注中国人名识别》,这次基于类似的原理,为HanLP实现中文地址地名(NS)的自动识别。

原理

训练

对熟语料自动角色标注,统计单词的角色频次、角色的转移概率等,训练出一个模型,同时总结一些可用的模式串。

识别

根据上述模型,利用HMM-Viterbi算法标注陌生文本的粗分结果,利用Aho-Corasick算法模式匹配,匹配出可能的地址,将其送入第二层隐马尔可夫模型中。

实战

训练

自动角色标注

基于层叠隐马尔可夫模型的中文命名实体识别.pdf》中使用如下地名识别角色:

我在此基础上拓充了CDE分别为三字地名的三个字位,H为中国地名的后缀,G为整个地址,这样一般最多可以识别6字地名(CDE地名+三字后缀),比论文有所改进。

通过少量的代码即可自动对熟语料进行角色标注,比如对于这一句人民日报2014切分语料中的句子:

1
王先东/nr 来自/v 湖北/ns 荆门/ns ,/w 在/p 佛山市/ns [南海区/ns 大沥镇/ns]/nz 某/rz 物业公司/nis 做/v 保安/b

逐步处理得到

1
2
3
4
5
6
7
原始语料 [未##人/nr, 来自/v, 湖北/ns, 的/ude1, 荆门/ns, ,/w, 在/p, 乌鲁木齐市/ns, [南海区/ns 大沥镇/ns]/ns, 某/rz, 物业公司/nis, 做/v, 保安/b]
添加首尾 [始##始/S, 未##人/nr, 来自/v, 湖北/ns, 的/ude1, 荆门/ns, ,/w, 在/p, 乌鲁木齐市/ns, [南海区/ns 大沥镇/ns]/ns, 某/rz, 物业公司/nis, 做/v, 保安/b, 末##末/Z]
标注上文 [始##始/S, 未##人/nr, 来自/A, 湖北/ns, 的/A, 荆门/ns, ,/w, 在/A, 乌鲁木齐市/ns, [南海区/ns 大沥镇/ns]/ns, 某/rz, 物业公司/nis, 做/v, 保安/b, 末##末/Z]
标注下文 [始##始/S, 未##人/nr, 来自/A, 湖北/ns, 的/B, 荆门/ns, ,/B, 在/A, 乌鲁木齐市/ns, [南海区/ns 大沥镇/ns]/ns, 某/B, 物业公司/nis, 做/v, 保安/b, 末##末/Z]
标注中间 [始##始/S, 未##人/nr, 来自/A, 湖北/ns, 的/X, 荆门/ns, ,/B, 在/A, 乌鲁木齐市/ns, [南海区/ns 大沥镇/ns]/ns, 某/B, 物业公司/nis, 做/v, 保安/b, 末##末/Z]
拆分地名 [始##始/S, 未##人/nr, 来自/A, 湖北/ns, 的/X, 荆门/ns, ,/B, 在/A, 乌鲁木齐市/ns, 南海区/ns, 大沥镇/ns, 某/B, 物业公司/nis, 做/v, 保安/b, 末##末/Z]
处理整个 [始##始/S, 未##人/Z, 来自/A, 湖北/G, 的/X, 荆/C, 门/H, ,/B, 在/A, 乌鲁木齐/G, 市/H, 南/C, 海/D, 区/H, 大/C, 沥/D, 镇/H, 某/B, 物业公司/Z, 做/Z, 保安/Z, 末##末/Z]

统计词频

在对所有熟语料句子执行自动标注后,即可统计每一个非Z词语的词频,得到一个角色词典:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
位于 A 1660 X 93 B 33
位列 B 17 A 13 X 1
位居 B 25 A 14 X 1
位次 B 1
位置 B 5 A 1
低 B 9
低于 A 18 B 2
低产田 B 1
低价 B 1
低估 A 5
低保 B 3
低保户 B 3
低效 B 1
低温 B 3
低热值 B 1
低碳 B 27
低空 B 2
低调 B 5
低速 B 3
低阶煤 B 1
住 A 81 B 53
住友 B 1
住在 A 271 B 1

统计转移矩阵

转移矩阵指的是从一个角色标签转移到另一个角色的频次,利用它和角色词频可以计算出HMM中的初始概率、转移概率、发射概率,进而完成求解。关于维特比算法和实现请参考《通用维特比算法的Java实现》。

这里对人民日报2014切分语料训练出如下转移矩阵:

识别

例子

以“南翔向宁夏固原市彭阳县红河镇黑牛沟村捐赠了挖掘机”为例,不进行地名识别时,会得出下列输出:

1
[南翔/ns, 向/p, 宁夏/ns, 固原市/ns, 彭/nz, 阳/ag, 县/n, 红/a, 河镇/ns, 黑/a, 牛/n, 沟/n, 村/n, 捐赠/v, 了/ule, 挖掘机/n]

上例中“宁夏”“固原市”等属于常用地名,因此被收录到核心词典中,此处表现出正确的分词结果。但是像“彭阳县”“红河镇”“黑牛沟村”等地名属于非常小的地方,没有被词典收录,自然也没法得出正确的分词结果。

角色标注

1
2
地名角色观察:[  Z 41339414 ][南翔 H 1000 ][向 A 1076 B 115 X 70 C 49 D 5 ][宁夏 H 1000 ][固原市 H 1000 ][彭 C 85 ][阳 D 1255 C 81 B 1 ][县 H 6878 B 25 A 23 D 19 X 3 C 2 ][红 C 1000 B 46 A 3 ][河镇 H 1000 ][黑 C 960 B 25 ][牛 D 24 C 8 B 7 ][沟 H 107 D 90 E 36 C 27 B 14 A 3 ][村 H 4467 D 68 B 28 A 8 C 3 ][捐赠 B 10 A 1 ][了 A 4115 B 97 ][挖掘机 B 1 ][  Z 41339414 ]
地名角色标注:[ /Z ,南翔/H ,向/B ,宁夏/H ,固原市/H ,彭/C ,阳/D ,县/H ,红/C ,河镇/H ,黑/C ,牛/D ,沟/E ,村/H ,捐赠/B ,了/A ,挖掘机/B , /Z]

模式匹配

利用Aho-Corasick算法模式匹配如下模式串:

1
2
3
4
        CH
        CDH
        CDEH
        GH

得到如下地名:

1
2
3
识别出地名:彭阳县 CDH
识别出地名:红河镇 CH
识别出地名:黑牛沟村 CDEH

第二层隐马模型细分

其实这应该算是第三层隐马模型,因为地名识别中也用到了一次HMM,并且那次的输出是这次的输入。细分之后得出最终的结果:

1
[南翔/ns, 向/p, 宁夏/ns, 固原市/ns, 彭阳县/ns, 红河镇/ns, 黑牛沟村/ns, 捐赠/v, 了/ule, 挖掘机/n]

总结

HMM模型可以解决很多问题,将多个HMM模型层叠起来,可以发挥出更加精准的效果。

不过2元文法依然会有误命中的情况,事实上,一些高频地名已经收录到核心词典和用户自定义词典中。所以HanLP的默认配置关闭了地名识别,仅仅在一些极端情况下(专门提取县级地址)交由用户打开。

目录

  • 原理
  • 训练
  • 识别
  • 实战
  • 训练
  • 自动角色标注
  • 统计词频
  • 统计转移矩阵
  • 识别
  • 角色标注
  • 模式匹配
  • 第二层隐马模型细分
  • 总结

转载请注明:码农场 » 实战HMM-Viterbi角色标注地名识别

转载于:https://www.cnblogs.com/DjangoBlog/p/4224606.html

实战HMM-Viterbi角色标注地名识别相关推荐

  1. 语音助手——QU——语义角色标注及其应用

    这一章我们来讲一下语义角色标注(Semantic Role Labeling (SRL))以及其在语音助手中的应用,主要分为4部分:什么是语义角色标注.为什么需要语义角色标注.如何实现.语音助手中的应 ...

  2. 自然语言处理(NLP)之pyltp的介绍与使用(中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注)

    pyltp的简介   语言技术平台(LTP)经过哈工大社会计算与信息检索研究中心 11 年的持续研发和推广, 是国内外最具影响力的中文处理基础平台.它提供的功能包括中文分词.词性标注.命名实体识别.依 ...

  3. 自然语言处理工具HanLP-基于层叠HMM地名识别

    本篇接上一篇内容<HanLP-基于HMM-Viterbi的人名识别原理介绍>介绍一下层叠隐马的原理. 首先说一下上一篇介绍的人名识别效果对比: 1. 只有Jieba识别出的人名 准确率极低 ...

  4. 基于飞桨PaddlePaddle的语义角色标注任务全解析

    https://www.toutiao.com/a6706071441667785219/ 2019-06-24 20:22:10 自然语言处理中的自然语言句子级分析技术,可以大致分为词法分析.句法分 ...

  5. 自然语言处理基础技术之语义角色标注

    今天是总结nlp基础技术的最后一篇,后面开始工具实战篇,我觉得实践对新手小白入门是相当有帮助的~~ #语义角色标注定义: 维基百科定义:Semantic role labeling, sometime ...

  6. 语义角色标注 Semantic Role Labeling(SRL) 初探(整理英文tutorial)

    语义角色标注 本文链接 最近调研了一下语义角色标注,记录如下 将语言信息结构化,方便计算机理解句子中蕴含的语义信息. 语义角色标注 (Semantic Role Labeling, SRL) 是一种浅 ...

  7. 语义角色标注视为依存句法分析任务:探索论元内部的隐式树结构

    ©作者 | 张宇 单位 | 苏州大学博士生 研究方向 | 句法分析/语义分析 语义角色标注(SRL)是 NLP 中一个基础且重要的任务,主要涉及谓词和论元的识别,以及相应的角色标签标注等等. 最近主流 ...

  8. python英文语义角色标注_八款中文词性标注工具使用及在线测试

    结束了中文分词工具的安装.使用及在线测试,开启中文词性标注在线测试之旅,一般来说,中文分词工具大多数都附带词性标注功能的,这里测试了之前在AINLP公众号上线的8款中文分词模块或者工具,发现它们都是支 ...

  9. 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 语义角色标注

    语义角色标注 本教程源代码目录在book/label_semantic_roles,初次使用请您参考Book文档使用说明. 说明¶ 本教程可支持在 CPU/GPU 环境下运行 Docker镜像支持的C ...

最新文章

  1. 一文看尽目标检测:从YOLO v1到v3的进化之路
  2. bootstrap 评价页面_文章评论《 HTML5 与 Bootstrap 应用实例 》
  3. 玩转VSCode插件之Remote-SSH
  4. 老李分享:系统可用性评估
  5. 数据结构Java03【(时间、空间复杂度),排序(冒泡、快速、插入、希尔、选择、归并、基数、队列基数)】
  6. php interbase,PHP: Firebird/InterBase - Manual
  7. Mahout的taste推荐系统里的几种Recommender分析
  8. matlab优化 带参数设置,优化选项参考 - MATLAB Simulink - MathWorks 中国
  9. 产品总监基本功:从零到壹
  10. pytorch实现孪生神经网络对人脸相似度进行识别
  11. android 编辑txt,.txt到可修改的android数据库
  12. window server 2016 中添加ISCSI硬盘
  13. Echart3绘制世界地图连线中国城市
  14. ABeam Insight | 女性科技系列(1):女性科技(FemTech)简述
  15. jxl创建excel加水印
  16. vue 移入显示_vue鼠标移入显示点赞图标,移出隐藏点赞图标,现在我想点击点赞图标,鼠标移出不会隐藏图标,怎么做?...
  17. jQuery 08-13
  18. 各种OOM代码样例及解决方法
  19. awk 处理反算日志流量
  20. 家到学校路线图怎么画_从家到学校的详细地图这样画

热门文章

  1. 新买的锅要怎么处理?-新锅开锅处理
  2. sqoop遇到mysql字段为保留字_关于在sqoop 导出数据到mysql数据库的过程对于空字符的处理。...
  3. 公众平台模板消息所在行业_第三方工具微信公众号模板消息群发如何操作?
  4. linux 内存使用原理,linux中内存使用原理
  5. mysql定时清空表数据_Mysql实现定时清空一张表的旧数据并保留几条数据
  6. html 天气特效,用CSS制作天气特效动画,源码分享
  7. linux下iostat命令无效,linux iostat命令详解
  8. 滑膜观测器物理意义_电机控制中的滑模控制(滑模观测器设计)
  9. html5与css3都要学吗,前端要学css3吗?
  10. anaconda如何卸载库_小白必看!Anaconda安装全攻略