实战HMM-Viterbi角色标注地名识别

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

看完99%的人都学会了!9次Android面试经验总结,我先收藏为敬

我们都是被圈养的人? 我的朋友程序员K,说他在电力行业的一家软件公司做了八年Android开发,用到的各种技术,数据库,网络请求,事件传递,响应框架都很熟悉,甚至JNI/NDK/Framework&…

从外包公司到今日头条offer,含BATJM大厂

前言 最近有不少人问我这样一个问题:「我刚接触编程,准备学习下Android开发,但是担心现在市场饱和了,Android开发的前景怎么样?」 想着可能有很多人都有这样的担心,于是就赶紧写篇文章,来跟你…

PTA -- A1046 Shortest Distance

题意及思路 题意:有N个节点(1至N),求给定的st号到en号的距离最小值,这些点构成一个环,即1->2 ... ->N ->1。 思路:第一步,预处理操作,以dis[ i ] 表示&#xff…

从外包公司到今日头条offer,聪明人已经收藏了!

开头 让我们一起来看看,字节跳动的第三面,面试官都问了什么?(第一二面的题目及答案已整理,需要的可以在文末领取) 从七月中旬开始,我前前后后差不多一共投递了八十份简历,到目前为…

从外包月薪5K到阿里月薪15K,原理+实战+视频+源码

前言 转眼间,2020 年已过去一大半了,2020 年很难,各企业裁员的消息蛮多的,降职,不发年终奖等等。2020 年确实是艰难的一年。然而生活总是要继续,时间不给你丧的机会!如果我们能坚持下来&#x…

C#编写的发送手机短信的类库 C#开发短信的方法和简介 短信编程实例

发送手机短信源代码(针对国内短信编码) / ///文 件:PDUdecoding.cs ///概 要:针对国内短信编码(USC2) ///组成结构:包含四个函数: /// smsDecodedCenterNumber(string srvCenterNumber) …

从新手到Flutter架构师,一篇就够!吐血整理

在开始回答前,先简单概括性地说说Linux现有的所有进程间IPC方式: 1. **管道:**在创建时分配一个page大小的内存,缓存区大小比较有限; 2. 消息队列:信息复制两次,额外的CPU消耗;不合…

从新手到Flutter架构师,一篇就够!学习路线+知识点梳理

前言 IT行业薪水高,这是众所周知的,所以很多人大学都选择IT相关专业,即使非该专业的人,毕业了也想去一个培训机构镀镀金,进入这一行业。 但是有关这个行业35岁就退休的说法,也一直盛传。 加上这几年不断…

从新手到Flutter架构师,一篇就够!帮你突破瓶颈

前言 马上快到金三银四都春招阶段了,在这本就是跳槽、找工作的年后黄金时间,大多数求职者都早早做好年后求职的准备,其中不乏有年前早早辞了工作准备年后跳槽的有经验的职场老人们,也有一批即将毕业的应届毕业生的职场新人们。 …

从新手到Flutter架构师,一篇就够!附赠课程+题库

导语 Android 音视频开发这块目前的确没有比较系统的教程或者书籍,网上的博客文章也都是比较零散的。只能通过一点点的学习和积累把这块的知识串联积累起来。 音视频的开发,往往是比较难的,而这个比较难的技术就是NDK里面的技术。音视频/高…

微信小程序之视图容器(swiper)组件创建轮播图

一、视图容器(Swiper) 1、swiper:滑块视图容器 微信官方文档:https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html 二、swiper应用 1、页面逻辑(index.js) Page({data: {imgUrls: [{l…

从草根到百万年薪程序员的十年风雨之路,使用指南

前言 文章篇幅较长,建议耐心食用,相信对你有帮助。码字不易,如果有误,欢迎指出。 前部分是面试经历,后部分是附带的问题笔记/推荐回答/书籍。 我的微信小号有一组特殊的朋友。他们从 CSDN上看到我之前发布的《从阿里到…

修复png bug的脚本

代码 //IE5.5 PNG Alpha Fix v2.0 Alpha: Background Tiling Support//(c) 2008 Angus Turnbull http://www.twinhelix.com//This is licensed under the GNU LGPL, version 2.1 or later.//For details, see: http://creativecommons.org/licenses/LGPL/2.1/varIEPNGFix windo…

从草根到百万年薪程序员的十年风雨之路,吊打面试官系列!

开头 大家好,我是G哥,目前人在荆州办事,但是干货还是要安排上! 国外有一个爆火的开发人员学习路线,目前已经在 Github收获了 131 k star,Star 数量在 Github 所有仓库中排名第 9 。这个仓库有多火就不用说…

从零开始系统化学Android,值得收藏!

前言 每年的3、4月份是各大企业为明年拓展业务大量吸纳人才的关键时期,招聘需求集中、空缺岗位多,用人单位也习惯在初秋进行大规模招聘。 金九银十,招聘旺季,也是一个求职旺季。 不打无准备的仗,在这种关键时期&…

网易严选Java开发三面面经:java技术编程培训班

前言 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。提供了完善的认证机制和方法级的授权功能。是一款非常优秀的权限管理框架。它的核心是一组过滤器链,不同的功能经由不同的过滤器。这篇文章就是想通过一个小案例将Spring Security整合到…

网易严选Java开发三面面经:java读文件内容

一、前言 Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于…

网易严选Java开发三面面经:mysql索引面试题

写在前面 最近,很多小伙伴出去面试都被问到了Spring问题,关于Spring,细节点很多,面试官也非常喜欢问一些很细节的技术点。所以,在 Spring 专题中,我们尽量把Spring的每个技术细节说清楚,将透彻…

网易严选Java开发三面面经:南京黑马java培训怎么样

个人背景 如标题所示,我的个人背景非常简单,Java开发经验1年半,学历普通,2本本科毕业,毕业后出来就一直在Crud,在公司每天重复的工作对我的技术提升并没有什么帮助,但小镇出来的我也深知自我努…

网易架构师深入讲解Java开发!BAT等大厂必问技术面试题

前言 MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBa…