实战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,聪明人已经收藏了!

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

程序从高版本降到2.0,数据集报错 TypedTableBase

错误 命名空间“System.Data”中不存在类型或命名空间名称“TypedTableBase”(是缺少程序集引用吗?) 解决&#xff1a; 该错误出现在自动生成的XXX.Designer.cs里。 .NET 3.5 : public partial class T_OPERATOR_WLDataTable : global::System.Data.TypedTableBase<T_OPER…

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

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

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

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

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

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

小程序自定义组件中observer函数的应用

<!-- 单个数据监听 --> <view>白菜</view> <view>价格&#xff1a;{{price}}</view> <!-- bindinput输入时触发方法 --> <view>数量&#xff1a; <input type"number" bindinputchangee value"{{num1}}">…

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

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

Es6常用方法filter

1. filter针对数组起过滤作用筛选出符合条件的一个或多个元素 lvar newarr [ { num: 1, val: ceshi, flag: aa }, { num: 2, val: ww } ] console.log(newarr.filter(item > item.num2 )) // [{num:2,val:ww}] 2 .filter 自动多虑数组中 空字符串、undefined、null var …

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

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

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

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

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

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

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

前言 文章篇幅较长&#xff0c;建议耐心食用&#xff0c;相信对你有帮助。码字不易&#xff0c;如果有误&#xff0c;欢迎指出。 前部分是面试经历&#xff0c;后部分是附带的问题笔记/推荐回答/书籍。 我的微信小号有一组特殊的朋友。他们从 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…

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

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

Android View系列(二):事件分发机制源码解析

概述 在介绍点击事件规则之前&#xff0c;我们需要知道我们分析的是MotionEvent&#xff0c;即点击事件&#xff0c;所谓的事件分发就是对MotionEvent事件的分发过程&#xff0c;即当一个MotionEvent生成以后&#xff0c;系统需要把这个事件传递给具体的View&#xff0c;而这个…

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

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

[转]清华梦的粉碎——写给清华大学的退学申请

[转]清华梦的粉碎——写给清华大学的退学申请 读了全文&#xff0c;感同身受&#xff0c;全文转载。 By 王垠&#xff08;2005.09.22&#xff09; 作者王垠&#xff0c;非常有思想的一个人&#xff0c;川大计算机系97级本科&#xff0c;2001年毕业后直博保送清华大学计算机系&a…