专栏首页机器学习技术分享8.HanLP实现--命名实体识别

8.HanLP实现--命名实体识别

笔记转载于GitHub项目https://github.com/NLP-LOVE/Introduction-NLP

8. 命名实体识别

8.1 概述

  1. 命名实体 文本中有一些描述实体的词汇。比如人名、地名、组织机构名、股票基金、医学术语等,称为命名实体。具有以下共性:
    • 数量无穷。比如宇宙中的恒星命名、新生儿的命名不断出现新组合。
    • 构词灵活。比如中国工商银行,既可以称为工商银行,也可以简称工行。
    • 类别模糊。有一些地名本身就是机构名,比如“国家博物馆”
  2. 命名实体识别 识别出句子中命名实体的边界与类别的任务称为命名实体识别。由于上述难点,命名实体识别也是一个统计为主、规则为辅的任务。 对于规则性较强的命名实体,比如网址、E-mail、IBSN、商品编号等,完全可以通过正则表达式处理,未匹配上的片段交给统计模型处理。 命名实体识别也可以转化为一个序列标注问题。具体做法是将命名实体识别附着到{B,M,E,S}标签,比如, 构成地名的单词标注为“B/ME/S- 地名”,以此类推。对于那些命名实体边界之外的单词,则统一标注为0 ( Outside )。具体实施时,HanLP做了一个简化,即所有非复合词的命名实体都标注为S,不再附着类别。这样标注集更精简,模型更小巧。

命名实体识别实际上可以看作分词与词性标注任务的集成: 命名实体的边界可以通过{B,M,E,S}确定,其类别可以通过 B-nt 等附加类别的标签来确定。

HanLP内部提供了语料库转换工序,用户无需关心,只需要传入 PKU 格式的语料库路径即可。

8.2 基于隐马尔可夫模型序列标注的命名实体识别

之前我们就介绍过隐马尔可夫模型,详细见: 4.隐马尔可夫模型与序列标注

隐马尔可夫模型命名实体识别代码见(自动下载 PKU 语料库): hmm_ner.py

https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch08/hmm_ner.py

运行代码后结果如下:

华北电力公司/nt 董事长/n 谭旭光/nr 和/c 秘书/n 胡花蕊/nr 来到/v 美国纽约/ns 现代/ntc 艺术/n 博物馆/n 参观/v

其中机构名“华北电力公司”、人名“谭旭光”“胡花蕊”全部识别正确。但是地名“美国纽约现代艺术博物馆”则无法识别。有以下两个原因:

  • PKU 语料库中没有出现过这个样本。
  • 隐马尔可夫模型无法利用词性特征。

对于第一个原因,只能额外标注一些语料。对于第二个原因可以通过切换到更强大的模型来解决。

8.3 基于感知机序列标注的命名实体识别

之前我们就介绍过感知机模型,详细见: 5.感知机分类与序列标注

感知机模型词性标注代码见(自动下载 PKU 语料库): perceptron_ner.py

https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch08/perceptron_ner.py

运行会有些慢,结果如下:

华北电力公司/nt 董事长/n 谭旭光/nr 和/c 秘书/n 胡花蕊/nr 来到/v [美国纽约/ns 现代/ntc 艺术/n 博物馆/n]/ns 参观/v

与隐马尔可夫模型相比,已经能够正确识别地名了。

8.4 基于条件随机场序列标注的命名实体识别

之前我们就介绍过条件随机场模型,详细见: 6.条件随机场与序列标注

条件随机场模型词性标注代码见(自动下载 PKU 语料库): crf_ner.py

https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch08/crf_ner.py

运行时间会比较长,结果如下:

华北电力公司/nt 董事长/n 谭旭光/nr 和/c 秘书/n 胡花蕊/nr 来到/v [美国纽约/ns 现代/ntc 艺术/n 博物馆/n]/ns 参观/v

得到了结果是一样的。

8.5 命名实体识别标准化评测

各个命名实体识别模块的准确率如何,并非只能通过几个句子主观感受。任何监督学习任务都有一套标准化评测方案,对于命名实体识别,按照惯例引入P、R 和 F1 评测指标。

在1998年1月《人民日报》语料库上的标准化评测结果如下:

模型

P

R

F1

隐马尔可夫模型

79.01

30.14

43.64

感知机

87.33

78.98

82.94

条件随机场

87.93

73.75

80.22

值得一提的是,准确率与评测策略、特征模板、语料库规模息息相关。通常而言,当语料库较小时,应当使用简单的特征模板,以防止模型过拟合;当语料库较大时,则建议使用更多特征,以期更高的准确率。当特征模板固定时,往往是语料库越大,准确率越高。

8.6 自定义领域命名实体识别

以上我们接触的都是通用领域上的语料库,所含的命名实体仅限于人名、地名、机构名等。假设我们想要识别专门领域中的命名实体,这时,我们就要自定义领域的语料库了。

  1. 标注领域命名实体识别语料库 首先我们需要收集一些文本, 作为标注语料库的原料,称为生语料。由于我们的目标是识别文本中的战斗机名称或型号,所以生语料的来源应当是些军事网站的报道。在实际工程中,求由客户提出,则应当由该客户提供生语料。语料的量级越大越好,一般最低不少于数千个句子。 生语料准备就绪后,就可以开始标注了。对于命名实体识别语料库,若以词语和词性为特征的话,还需要标注分词边界和词性。不过我们不必从零开始标注,而可以在HanLP的标注基础上进行校正,这样工作量更小。 样本标注了数千个之后,生语料就被标注成了熟语料。下面代码自动下载语料库。
  2. 训练领域模型 选择感知机作为训练算法(自动下载 战斗机 语料库): plane_ner.py https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch08/plane_ner.py 运行结果如下: 下载 http://file.hankcs.com/corpus/plane-re.zip 到 /usr/local/lib/python3.7/site-packages/pyhanlp/static/data/test/plane-re.zip 100.00%, 0 MB, 552 KB/s, 还有 0 分 0 秒 米高扬/nrf 设计/v [米格/nr -/w 17/m PF/nx]/np :/w [米格/nr -/w 17/m]/np PF/n 型/k 战斗机/n 比/p [米格/nr -/w 17/m P/nx]/np 性能/n 更好/l 。/w [米格/nr -/w 阿帕奇/nrf -/w 666/m S/q]/np 横空出世/l 。/w 这句话已经在语料库中出现过,能被正常识别并不意外。我们可以伪造一款“米格-阿帕奇-666S”战斗机,试试模型的繁华能力,发现依然能够正确识别。

8.7 GitHub

HanLP何晗–《自然语言处理入门》笔记:

https://github.com/NLP-LOVE/Introduction-NLP

项目持续更新中…

目录


章节

第 1 章:新手上路

第 2 章:词典分词

第 3 章:二元语法与中文分词

第 4 章:隐马尔可夫模型与序列标注

第 5 章:感知机分类与序列标注

第 6 章:条件随机场与序列标注

第 7 章:词性标注

第 8 章:命名实体识别

第 9 章:信息抽取

第 10 章:文本聚类

第 11 章:文本分类

第 12 章:依存句法分析

第 13 章:深度学习与自然语言处理

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 详解隐马尔可夫模型(HMM)中的维特比算法

    笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP

    mantch
  • HanLP《自然语言处理入门》笔记--1.新手上路

    自然语言处理(Natural Language Processing,NLP)是一门融合了计算机科学、人工智能及语言学的交叉学科,它们的关系如下图所示。这门学科...

    mantch
  • Transformer各层网络结构详解!面试必备!(附代码实现)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    mantch
  • 生物识别ATM受印度银行业欢迎

    印度卡纳塔克邦首府班加罗尔出现了首台生物识别ATM机,该系统采用的是指纹识别技术,使用者无需再进行银行卡与PIN码身份验证。 该系统是在另外一个程序的基础上的扩...

    人工智能快报
  • 包都装不上你写个锤子代码,N种姿势教你装包!

    但据不完全统计,即使在 pip 如此流行的今天,包安装问题依然困扰着大部分的 Python 新手,本人也经常帮一些工作经验三四年的 Python 开发同事解决包...

    智能算法
  • MySQL 基本操作、数据库操作和表操作

    happyJared
  • 安装pip版本排雷经验分享

    相信大家经常用到pip来安装第三方扩展库。但是经常出现这样的情况:明明自己已经在终端通过pip安装了第三方库,而IDE开发工具Pycharm还提示该库没有安装。...

    猴哥yuri
  • 将Python打包成可执行文件exe的心路历程

      我们有时候需要将做好的Python程序打包成为一个exe , 方便我们使用,查找了资料发现 pyinstaller 、py2exe,最后还是选择的pyins...

    李家酒馆酒保
  • 一分钟搞定pip安装

    很多使用Python的小伙伴都需要使用pip安装相应的包,对于初学者而言,经常遇到pip安装不成功的情况,如以下典型错误:

    July
  • Python:安装pip

    这时候如何安装pip就显得很重要了,当然前提是安装了Python,并且配置了环境变量

    py3study

扫码关注云+社区

领取腾讯云代金券