查看原文
其他

中文命名实体识别工具(NER)哪家强?

52nlp AINLP 2020-10-22


自去年以来,在AINLP公众号上陆续给大家提供了自然语言处理相关的基础工具的在线测试接口,使用很简单,关注AINLP公众号,后台对话关键词触发测试,例如输入 “中文分词 我爱自然语言处理”,“词性标注 我爱NLP”,“情感分析 自然语言处理爱我","Stanza 52nlp" 等,具体可参考下述文章:


斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
中文分词工具在线PK新增:FoolNLTK、LTP、StanfordCoreNLP
Python中文分词工具大合集:安装、使用和测试
八款中文词性标注工具使用及在线测试
百度深度学习中文词法分析工具LAC试用之旅
来,试试百度的深度学习情感分析工具
AINLP公众号新增SnowNLP情感分析模块

既然中文分词、词性标注已经有了,那下一步很自然想到的是命名实体识别(NER,Named-entity recognition)工具了,不过根据我目前了解到的情况,开源的中文命名实体工具并不多,这里主要指的是一些成熟的自然语言处理开源工具,不是github上一些学习性质的代码。目前明确有NER标记的包括斯坦福大学的NLP组的Stanza,百度的Paddle Lac,哈工大的LTP,而其他这些测试过的开源NLP基础工具,需要从词性标注结果中提取相对应的专有名词,也算是一种折中方案。

在之前这些可测的工具中,除了斯坦福大学的Stanza和CoreNLP有一套词性标记外,LTP使用的是863词性标注集,其他包括Jieba,SnowNLP,PKUSeg,Thulac,HanLP,FoolNLTK,百度Lac等基础工具的词性标注集主要是以人民日报标注语料中的北京大学词性标注集(40+tags)为蓝本:

代码名称帮助记忆的诠释
Ag形语素形容词性语素。形容词代码为 a ,语素代码 g 前面置以 A。
a形容词取英语形容词 adjective 的第 1 个字母。
ad副形词直接作状语的形容词。形容词代码 a 和副词代码 d 并在一起。
an名形词具有名词功能的形容词。形容词代码 a 和名词代码 n 并在一起。
b区别词取汉字“别”的声母。
c连词取英语连词 conjunction 的第 1 个字母。
Dg副语素副词性语素。副词代码为 d ,语素代码 g 前面置以 D。
d副词取 adverb 的第 2 个字母 ,因其第 1 个字母已用于形容词。
e叹词取英语叹词 exclamation 的第 1 个字母。
f方位词取汉字“方” 的声母。
g语素绝大多数语素都能作为合成词的“词根”,取汉字“根”的声母。由于实际标注时 ,一定
标注其子类 ,所以从来没有用到过 g。
h前接成分取英语 head 的第 1 个字母。
i成语取英语成语 idiom 的第 1 个字母。
j简称略语取汉字“简”的声母。
k后接成分
l习用语习用语尚未成为成语 ,有点“临时性”,取“临”的声母。
m数词取英语 numeral 的第 3 个字母 ,n ,u 已有他用。
Ng名语素名词性语素。名词代码为 n ,语素代码 g 前面置以 N。
n名词取英语名词 noun 的第 1 个字母。
nr人名名词代码 n 和“人(ren) ”的声母并在一起。
ns地名名词代码 n 和处所词代码 s 并在一起。
nt机构团体“团”的声母为 t,名词代码 n 和 t 并在一起。
nx非汉字串
nz其他专名“专”的声母的第 1 个字母为 z,名词代码 n 和 z 并在一起。
o拟声词取英语拟声词 onomatopoeia 的第 1 个字母。
p介词取英语介词 prepositional 的第 1 个字母。
q量词取英语 quantity 的第 1 个字母。
r代词取英语代词 pronoun 的第 2 个字母,因 p 已用于介词。
s处所词取英语 space 的第 1 个字母。
Tg时语素时间词性语素。时间词代码为 t,在语素的代码 g 前面置以 T。
t时间词取英语 time 的第 1 个字母。
u助词取英语助词 auxiliary 的第 2 个字母,因 a 已用于形容词。
Vg动语素动词性语素。动词代码为 v。在语素的代码 g 前面置以 V。
v动词取英语动词 verb 的第一个字母。
vd副动词直接作状语的动词。动词和副词的代码并在一起。
vn名动词指具有名词功能的动词。动词和名词的代码并在一起。
w标点符号
x非语素字非语素字只是一个符号,字母 x 通常用于代表未知数、符号。
y语气词取汉字“语”的声母。
z状态词取汉字“状”的声母的前一个字母。

其中HanLp增加了更细粒度的词性标注集,具体可参考:

https://www.hankcs.com/nlp/part-of-speech-tagging.html

HanLP使用的HMM词性标注模型训练自2014年人民日报切分语料,随后增加了少量98年人民日报中独有的词语。所以,HanLP词性标注集兼容《ICTPOS3.0汉语词性标记集》,并且兼容《现代汉语语料库加工规范——词语切分与词性标注》。

另外百度词法分析工具Lac使用的词性标注集中特别加了一套强相关的专名类别标签:

词性和专名类别标签集合如下表,其中词性标签24个(小写字母),专名类别标签4个(大写字母)。这里需要说明的是,人名、地名、机名和时间四个类别,在上表中存在两套标签(PER / LOC / ORG / TIME 和 nr / ns / nt / t),被标注为第二套标签的词,是模型判断为低置信度的人名、地名、机构名和时间词。开发者可以基于这两套标签,在四个类别的准确、召回之间做出自己的权衡。

哈工大LTP的命名实体标注集没有提取“时间”,具体参考如下:

https://ltp.readthedocs.io/zh_CN/latest/appendix.html

NE识别模块的标注结果采用O-S-B-I-E标注形式,其含义为

标记含义
O这个词不是NE
S这个词单独构成一个NE
B这个词为一个NE的开始
I这个词为一个NE的中间
E这个词位一个NE的结尾

LTP中的NE 模块识别三种NE,分别如下:

标记含义
Nh人名
Ni机构名
Ns地名

基于上述观察,我决定采用这种方案做中文命名实体工具测试接口:对于斯坦福Stanza的NER结果直接保留,对于 Baidu Lac 结果则保留强置信度的人名(PER)、地名(LOC)、机构名(ORG)、时间(TIME)提取结果,对于哈工大LTP的NER结果做个人名(Nh=>PER)、地名(Ns=>LOC)和机构名(Ni=>ORG)的映射,对于其他几个工具,去除斯坦福的老NLP工具CoreNLP,其他NLP工具则保留nr、ns、nt、t、nz这几个提取工具,并做了标记映射人名(nr=>PER),地名(ns=>LOC),机构名(nt=>ORG),时间(t=>TIME)。下面是几组测试结果,欢迎关注AINLP公众号试用,结果仅供参考,毕竟除了斯坦福Stanza、Baidu Lac以及哈工大LTP外,其他几个工具的“NER命名实体识别”功能是“强加”的,在实际使用中,可以根据需求采用:

推荐阅读

AINLP年度阅读收藏清单

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

DistilBERT Understanding

太赞了!Springer面向公众开放电子书籍,附65本数学、编程、机器学习、深度学习、数据挖掘、数据科学等书籍链接及打包下载

数学之美中盛赞的 Michael Collins 教授,他的NLP课程要不要收藏?

自动作诗机&藏头诗生成器:五言、七言、绝句、律诗全了

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

这门斯坦福大学自然语言处理经典入门课,我放到B站了

征稿启示 | 稿费+GPU算力+星球嘉宾一个都不少

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存