命名实体识别

概念层次

命名实体识别

概念

  • 命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。通常包括两部分:(1)实体边界识别;(2) 确定实体类别(人名、地名、机构名或其他)。
  • 是一个分类问题,给一个单词判断是哪个类别

主要工作

识别出有意义的短语并进行分类

  • 实体:(组织名,人名,地名)、时间表达式(日期、时间)和数字表达式(货币值、百分数等)

主要方法

基于规则

  • 根据语言学上的表现, 人为设定一些规则来识别命名实体

缺点

  • 依赖规则的设定,且需要大量的专业知识
  • 不同领域会有不同的规则,对于每个新领域都需要重新设定规则
  • 消耗人力、时间

基于统计

  • 利用原始的经过加工的(人工标注的)语料进行训练,其语料的加工(标注)不需要太多的语言学的知识。
  • 小规模的语料可以在接受的时间和人力代价下完成。
  • 基于统计的方法实现起来,对于新的领域适应性较强。只需要利用新领域的语料进行训练即可

缺点

  • 专业性缺乏
  • 性能较低

常用方法

  • N元模型
  • 隐马尔科夫(HMM)- 评测性能最好
  • 最大熵(ME)
  • 决策树

命名实体识别的词性标记

  • onomatopoeia:象声词

  • 命名实体结果如下,ltp命名实体类型为:人名(Nh),地名(NS),机构名(Ni);ltp采用BIESO标注体系。B表示实体开始词,I表示实体中间词,E表示实体结束词,S表示单独成实体,O表示不构成实体。

par_model_path = os.path.join(LTP_DATA_DIR, 'parser.model')  # 依存句法分析模型路径,模型名称为`parser.model`
from pyltp import Parser
parser = Parser() # 初始化实例
parser.load(par_model_path)  # 加载模型
words = ['欧几里得', '是', '西元前', '三', '世纪', '的', '希腊', '数学家', '。']
postags = ['nh', 'v', 'nt', 'm', 'n', 'u', 'ns', 'n', 'wp']
arcs = parser.parse(words, postags)  # 句法分析
rely_id = [arc.head for arc in arcs]    # 提取依存父节点id
relation = [arc.relation for arc in arcs]   # 提取依存关系
heads = ['Root' if id == 0 else words[id-1] for id in rely_id]  # 匹配依存父节点词语
for i in range(len(words)):
    print relation[i] + '(' + words[i] + ', ' + heads[i] + ')'
parser.release()  # 释放模型

输出结果

SBV(欧几里得, 是)
HED(是, Root)
ATT(西元前, 世纪)
ATT(三, 世纪)
ATT(世纪, 数学家)
RAD(的, 世纪)
ATT(希腊, 数学家)
VOB(数学家, 是)
WP(。, 是)

参考网址

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦