Advertisement

【NLP】一文读懂命名实体识别

阅读量:

一文读懂命名实体识别

  • 前言
  • 定义
  • 发展历史
  • 常见方法
  • 相关数据集
  • 工具推荐
  • Reference

前言

本文系统阐述了自然语言基础技术中的命名实体识别问题,在内容安排上既涵盖了基本概念与理论依据,又介绍了主流算法及其适用场景,此外还重点分析了相关的训练数据与评价指标.在实践环节,文中特别推荐了几款高效的Python工具包,并对它们的基本使用方法做了详细说明.

定义

先来看看从维基百科的定义中可以看出:Named-entity recognition (NER) (also known as entity identification、entity chunking and entity extraction) is a component of information extraction tasks that aims at identifying and categorizing named entities within unstructured texts into predefined categories including person names、organizations、locations、medical codes、time expressions、quantities、monetary values、percentages etc.

named entity recognition (NER) task 也可称为‘专有名词识别’。其主要功能是辨识文本中包含的各种类型名称的信息。具体涉及的人类角色名称、地点名称以及组织机构名称等。简单来说就是辨识出这些名称在文本中的起始位置及其所属类别。

发展历史

命名实体识别 术语首次在第6届MUC会议上提出 该会议主要关注的信息抽取任务 在第六届MUC会议上 除了上述信息抽取评测任务之外 还首次设置了专门的命名实体识别评测子任务 此外 在国际层面的相关评测会议中还包括CoNLL、ACE以及IEER等多个重要会议。

在MUC-6之前的研究主要关注的是人名、地名以及组织机构名称这三个领域的专业名词识别问题。随着MUC-6标准的发布后,研究者们开始对分类标准进行更为细致的划分工作,在地名领域则被划分为城市、州和国家三个子领域,在人名领域则被划分为政治家、演员等细分领域进行专门处理。

此外,在评测领域中还扩展了专业术语的范畴范围。例如,在CoNLL某年的评测活动中就包含了产品名称识别这一项任务。此外,在其他研究领域中还涵盖了电影标题、书籍标题、项目名称以及学科领域名称等多个方面(如包括电子邮件地址和电话号码等信息),同时还有些研究则不拘泥于'实体'类型这一限制条件

常见方法

早期的研究主要依赖于遵循固定规则来实现命名实体识别的任务。随后,在大规模数据集上应用统计方法取得了显著效果后,在自然语言处理领域中出现了大量利用机器学习算法进行命名实体识别的研究工作。宗成庆教授在其著作《统计自然语言处理》一书中大致将其分类为几种类型。

有监督学习方法:这类方法依赖于大规模标注数据集来指导机器学习算法生成参数估计值。涉及广泛使用的多种类型的学习器包括隐马尔科夫模型、语言模型、最大熵模型以及支持向量机等基础组件;此外还有决策树和条件随机场等关键组件被广泛应用在多个领域中;值得注意的是,在命名实体识别任务中;基于条件随机场的方法被认为是当前领域中的最佳选择

半监督的学习方法:这一类方法利用标注的小数据集(种子数据)自举学习。

无监督学习的方法:这类方法基于词汇资源(如WordNet等)进行语义聚类。

混合方法:几种模型相结合或利用统计方法和人工总结的知识库。

值得注意的是,在自然语言处理领域中应用广泛而深入的现代技术体系中

相关数据集

CCKS2017开放的中文的电子病例测评相关的数据。

评测任务一:https://biendata.com/competition/CCKS2017_1/

评测任务二:https://biendata.com/competition/CCKS2017_2/

CCKS2018开放的音乐领域的实体识别任务。

评测任务:https://biendata.com/competition/CCKS2018_2/

(CoNLL 2002)提供的《命名实体识别标注语料库》(AnnCorpus)作为基准数据集广泛应用于自然语言处理领域。获取途径:https://www.kaggle.com/abhinavwalia95/entity-annotated-corpus

NLPCC2018开放的任务型对话系统中的口语理解评测。

地址:http://tcci.ccf.org.cn/conference/2018/taskdata.php

一家公司提供的数据集,包含人名、地名、机构名、专有名词。

下载地址:https://bosonnlp.com/dev/resource

工具推荐

Stanford NER

斯坦福大学研发了一种基于条件随机场的方法用于命名实体识别,在该方法中使用的参数来源于CoNLL、MUC-6、MUC-7以及ACE命名实体语料库

地址:https://nlp.stanford.edu/software/CRF-NER.shtml

python实现的Github地址:https://github.com/Lynten/stanford-corenlp

复制代码
    # 安装:pip install stanfordcorenlp
    # 国内源安装:pip install stanfordcorenlp -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 使用stanfordcorenlp进行命名实体类识别
    # 先下载模型,下载地址:https://nlp.stanford.edu/software/corenlp-backup-download.html
    # 对中文进行实体识别
    from stanfordcorenlp import StanfordCoreNLP
    zh_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27', lang='zh')
    s_zh = '我爱自然语言处理技术!'
    ner_zh = zh_model.ner(s_zh)
    s_zh1 = '我爱北京天安门!'
    ner_zh1 = zh_model.ner(s_zh1)
    print(ner_zh)
    print(ner_zh1)
    
    [('我爱', 'O'), ('自然', 'O'), ('语言', 'O'), ('处理', 'O'), ('技术', 'O'), ('!', 'O')]
    [('我爱', 'O'), ('北京', 'STATE_OR_PROVINCE'), ('天安门', 'FACILITY'), ('!', 'O')]
    
    
    # 对英文进行实体识别
    eng_model = StanfordCoreNLP(r'stanford-corenlp-full-2018-02-27')
    s_eng = 'I love natural language processing technology!'
    ner_eng = eng_model.ner(s_eng)
    s_eng1 = 'I love Beijing Tiananmen!'
    ner_eng1 = eng_model.ner(s_eng1)
    print(ner_eng)
    print(ner_eng1)
    
    [('I', 'O'), ('love', 'O'), ('natural', 'O'), ('language', 'O'), ('processing', 'O'), ('technology', 'O'), ('!', 'O')]
    [('I', 'O'), ('love', 'O'), ('Beijing', 'CITY'), ('Tiananmen', 'LOCATION'), ('!', 'O')]
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

MALLET

麻省大学所开发的基于统计方法的自然语言处理软件包,在其序列标注工具的实际应用中具有实现命名实体识别的能力。该软件包的官方网站可访问地址为:http://mallet.cs.umass.edu/

Hanlp

HanLP是一个包含多个模块的自然语言处理工具包,由大快搜索公司负责开发并提供免费下载。该工具包旨在推广自然语言处理技术在企业生产环境中的应用,并且支持多种核心功能如文本分析、信息抽取等。 HanLP具备命名实体识别能力,并提供详细的中文分词和语义分析功能。 HanLP的GitHub官方仓库位于https://github.com/hankcs/pyhanlp位置。

官网:http://hanlp.linrunsoft.com/

复制代码
    # 安装:pip install pyhanlp
    # 国内源安装:pip install pyhanlp  -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 通过crf算法识别实体
    from pyhanlp import *
    # 音译人名示例
    CRFnewSegment = HanLP.newSegment("crf")
    term_list = CRFnewSegment.seg("我爱北京天安门!")
    print(term_list)
    
    [我/r, 爱/v, 北京/ns, 天安门/ns, !/w]
    
    
      
      
      
      
      
      
      
      
      
      
    
    AI助手

NLTK

NLTK是一个高效的Python构建的平台,用来处理人类自然语言数据。

Github地址:https://github.com/nltk/nltk
官网:http://www.nltk.org/

复制代码
    # 安装:pip install nltk
    # 国内源安装:pip install nltk  -i https://pypi.tuna.tsinghua.edu.cn/simple
    import nltk
    s = 'I love natural language processing technology!'
    s_token = nltk.word_tokenize(s)
    s_tagged = nltk.pos_tag(s_token)
    s_ner = nltk.chunk.ne_chunk(s_tagged)
    print(s_ner)
    
    
      
      
      
      
      
      
      
      
    
    AI助手

SpaCy

专业的自然语言处理工具可惜的是无法处理中文文本。
Gihub地址:https://github.com/explosion/spaCy
官网:https://spacy.io/

复制代码
    # 安装:pip install spaCy
    # 国内源安装:pip install spaCy  -i https://pypi.tuna.tsinghua.edu.cn/simple
    import spacy 
    eng_model = spacy.load('en')
    s = 'I want to Beijing learning natural language processing technology!'
    # 命名实体识别
    s_ent = eng_model(s)
    for ent in s_ent.ents:
       print(ent, ent.label_, ent.label)
    
    Beijing GPE 382
    
    
      
      
      
      
      
      
      
      
      
      
      
    
    AI助手

Crfsuite

可以载入自己的数据集去训练CRF实体识别模型。

文档地址:

https://sklearn-crfsuite.readthedocs.io/en/latest/?badge=latest

相关代码已完成上传:https://github.com/yuquanle/StudyForNLP/blob/master/NLPbasic/NER.ipynb

Reference

Link

加油!

感谢!

努力!

全部评论 (0)

还没有任何评论哟~