首页 > 其他分享 >HanLP — 命名实体识别

HanLP — 命名实体识别

时间:2024-02-02 09:46:28浏览次数:21  
标签:语料库 实体 命名 识别 HanLP 模型 标注

目录

8. 命名实体识别

8.1 概述

  1. 命名实体

    文本中有一些描述实体的词汇。比如人名、地名、组织机构名、股票基金、医学术语等,称为命名实体。具有以下共性:

    • 数量无穷。比如宇宙中的恒星命名、新生儿的命名不断出现新组合。
    • 构词灵活。比如中国工商银行,既可以称为工商银行,也可以简称工行。
    • 类别模糊。有一些地名本身就是机构名,比如“国家博物馆”
      image
  2. 命名实体识别

    识别出句子中命名实体的边界与类别的任务称为命名实体识别(Named Entity Recognition,NER)。由于上述难点,命名实体识别也是一个统计为主、规则为辅的任务。

    • 对于规则性较强的命名实体,比如网址、E-mail、IBSN、商品编号等,完全可以通过正则表达式处理,未匹配上的片段交给统计模型处理。
    • 对于较短的命名实体,比如人名,完全可以通过分词确定边界,通过词性标注模块确定类别
    • 在另一些语料库中(如PKU等),机构名这样的复合词是拆开的,此时就需要一个专门的命名实体识别模块了

    命名实体识别也可以转化为一个序列标注问题。具体做法是将命名实体识别附着到{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”战斗机,试试模型的繁华能力,发现依然能够正确识别。

标签:语料库,实体,命名,识别,HanLP,模型,标注
From: https://www.cnblogs.com/vipsoft/p/18002585

相关文章

  • 常量和变量的命名规范
    常量常量:初始化后不能再更改值!不会变动的值。所谓常量可以理解为一种特殊的变量,它的值被设定后,在程序运行过程中不允许被改变。final常量名=值;finaldoublePI=3.14;变量名一般使用大写字符。变量的命名规范所有变量、方法、类名:见名知意类成员变量:首字母小写和驼......
  • 基于yolov2网络的人脸识别系统matlab仿真,包括识别正脸,侧脸等
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述      基于YoloV2网络的面部识别系统是一种先进的实时面部识别系统,它能够识别正面、侧面等各种角度的面部。这种系统主要包括三个阶段:训练阶段、预处理阶段和识别阶段。 3.1、训练阶段 ......
  • [office] excel2010工作表的切换与重命名
    在使用excel工作表时,我们可能会对多个工作表进行来回切换查看,今天小编为大家介绍一下如何切换工作表及重命名工作表。一、切换工作表切换工作表主要有两种方法:1、直接使用鼠标对工作表标签sheet进行点击切换;2、使用快捷键,ctrl+pageup和ctrl+pagedown键,可以快速进行工作表切换。二......
  • (打标批量重命名)表格第一列是文件夹名,第二列是文件夹内的图片名
    importosimportopenpyxlfromopenpyxl.utils.exceptionsimportInvalidFileExceptiondefrename_images(base_dir,excel_path):#检查基础路径是否存在ifnotos.path.exists(base_dir):print(f"错误:提供的总地址不存在-{base_dir}")retu......
  • 李宏毅《机器学习》总结 - 2022 HW3(图像识别、CNN) Strong Baseline
    调参调吐了。。最好做到了private0.82/public0.808这题前前后后做了五天。。主要是后来train一次就得花很长很长时间,我的kaggle余额也用的差不多了。。这个题目大概就是给你11种食物的图片,让你学习,并分类CNN处理图片就先转化成\(128\times128\)个pixel,然后做......
  • PLSQL重命名表的方法和报错解决方法ORA-01765 ORA-14047
    重命名办法在PLSQL中重命名表,在表上点右健选重命名。 报错ORA-01765若不是本用户,会报错:ORA-01765:不允许指定表的所有者名称。 解决方法,使用RENAME命令在PLSQL执行不会报错。示例:ALTERTABLEuser1.log_tablenameRENAMETOlog_tablename_back20240131; 报错ORA-14047......
  • js中对数组的unshift是什么操作,为什么使用unshift进行命名?
    在JavaScript中,unshift()是数组对象的一个原生方法,它用于向数组的开头添加一个或多个元素,并将原有的数组元素依次向后移动。这个方法会改变原始数组本身,同时返回新的数组长度。在英语中,“unshift”不是一个标准的单词,但我们可以将其拆解为“un-”和“shift”。其中:“un-”是......
  • gulp : 无法将“gulp”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名
    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=gulp%20%3A%20%E6%97%A0%E6%B3%95%E5%B0%86%E2%80%9Cgulp%E2%80%9D%E9%A1%B9%E8%AF%86%E5%88%AB%E4%B8%BA%20cmdlet%E3%80%81%E5%87%BD%E6%95%B0%E3%80%81%E8%84%9A%E6%9C%AC%E6%96......
  • python识别图片中的文本保存到word中
    python可以使用第三方库pytesseract实现图像的文本识别,并将识别的结果保存到word中,代码本生不复杂pytesseract环境有点麻烦这里整理总结一下一、简介Tesseract是一个由HP实验室开发由Google维护的开源的光学字符识别(OCR)引擎,可以在Apache2.0许可下获得。它可以直接使用,或者(......
  • HanLP — 词性标注
    词性(Part-Of-Speech,POS)指的是单词的语法分类,也称为词类。同一个类别的词语具有相似的语法性质所有词性的集合称为词性标注集。词性的用处当下游应用遇到OOV时,可以通过OOV的词性猜测用法词性也可以直接用于抽取一些信息,比如抽取所有描述特定商品的形容词等词性标注词性标注指......