概念层次
命名实体识别
概念
- 命名实体识别(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(。, 是)