识别 人名,地名,组织机构,日期,时间,百分数,货币这七大实体。重点是人名,地名和组织机构的识别。属于未登录词识别的范畴。
人名特征:当今仍使用,活跃的中文姓氏大致有1000 多个,前 586 个姓占了 98.5%。其余姓氏不到 1.5%。名字用字分布较姓氏用字分布要平缓,分散。共 3679 个名字用字,词性分布也很广泛,不仅有实词,还有各类虚词。
地名特征:较之人名相比,地名更像一个闭集。绝大部分地名可以通过相关资料覆盖。如《中国地名录》,《地理词典》,《地物名词》词典集,但也有困难的情况,比如用词比较自由,分散等。。。
组织机构:相比人名、地名,这是难度最大的识别,以上所有的难点都出现在此,再加上本身的难点。
设计思路就是将命名实体的任务从中文分词的基础模块中分离出来,命名实体作为一个独立的模块位于基础分词步骤之后。在LTP3.3 和 StanfordNLP 中都把命名实体作为一个单独的模块来处理。与专名词典特征提取如下(部分)
基于提取的特征构建 CRF 训练模型。。。然后整体的分词流程如下
分词流程如下:
(1)首先通过原子切分,将字符串转换为字符列表,这个阶段与 ICTCLAS 的分词方法相似。
(2)与内部词典(或用户导入词典)进行最大匹配,根据匹配结果给出成词的特征函数。
(3)将字符串与匹配到的词典词汇共同匹配特征模板,包括 CRF 的标准模板和内部词典匹配结果特征模板。
(4)根据匹配的模板,查询和计算模板的概率。
(5)建立词网,使用 Viterbi 算法解码。
(6)输出分词结果。
算法思想:首先在词语粗切分的基础上,采用底层 HMM 模型识别出普通无嵌套的人名,地名和机构名等比如【辛普森】,然后依次采取高层 HMM 模型识别出嵌套了人名,地名的复杂地名和机构名。比如【美国/辛普森/公司】
在叠层式 HMM 的基础上,加入基于角色标注的命名实体方法如下:
角色 | 意义 | 例子 |
A | 上文 | 【参与】亚太经合组织的活动 |
B | 下文 | 中央电视台【报道】 |
X | 连接词 | 北京【和】天津 |
C | 特征词的一般前缀 | 北京【电影】学院 |
F | 特征词的译名性前缀 | 美国【摩托罗拉】公司 |
G | 特征词的地名性前缀 | 交通银行【北京】分行 |
H | 特征词的机构名前缀 | 【中共中央】顾问委员会 |
I | 特征词的特殊性前缀 | 【中央】电视台 |
J | 特征词的简称性前缀 | 【巴】政府 |
K | 整个机构 | 【麦当劳】 |
L | 方位词 | —— |
M | 数词 | 公交集团【五】分公司 |
P | 单字碎片 | —— |
D | 机构名的特征词 | 国务院侨务【办公室】 |
W | 符号 | —— |
S | 句子的开头 | —— |
Z | 非机构名成分 | —— |
标注顺序如下:
比如: 参与/v [北京/ns 电影/n 学院/nis]/nt 和/cc [美国/nsf 辛普森/nr 公司/nis] / nt 的/ude 活动/vn
(1)添加句首句尾
[始##始/S 参与/v [北京/ns 电影/n 学院/nis]/nt 和/cc [美国/nsf 辛普森/nr 公司/nis] / nt 的/ude 活动/vn 末##/末/Z]
(2)标注上文
[始##始/S 参与/A [北京/ns 电影/n 学院/nis]/nt 和/A [美国/nsf 辛普森/nr 公司/nis] / nt 的/ude 活动/vn 末##/末/Z]
(3)标注下文
[始##始/S 参与/A [北京/ns 电影/n 学院/nis]/nt 和/B [美国/nsf 辛普森/nr 公司/nis] / nt 的/B 活动/vn 末##/末/Z]
(4)标注中间
[始##始/S 参与/A [北京/ns 电影/n 学院/nis]/nt 和/X [美国/nsf 辛普森/nr 公司/nis] / nt 的/B 活动/vn 末##/末/Z]
(5)处理整个句子
[始##始/S 参与/A 未##地/G 电影/C 学院/D 和/X 未##地/G 未##人/F 公司/D 的/B 活动/Z 末##/末/Z]
然后根据标注的语料统计角色词典如下,后面数字代表频率
公司 D 4621 A 24 B 24
公司总部 B 1
公司治理 B 2
公司股票 B 1
公告 B 15 X 1
公告栏 B 2
公园 C 9
公安 C 728 A 19 B 5
...
然后统计转移概率矩阵,从一个角色标签转移到另一个角色的频次。
A | B | ... | Z | |
A | 0 | 0 | ... | 0 |
B | 3013 | 0 | ... | 125708 |
... | ... | ... | ... | ... |
Z | 95874 | 0 | ... | 19796133 |
举例如下:比如在组织机构名识别之前(先识别人名,地名),会得到如下输出
[济南/ns 杨铭宇/nr 餐饮/n 管理/vn 有限公司/nis 是/vshi 由/p 杨先生/nr 创办/v]
然后根据角色标注如下:
[S 1162194][济南 G 83472 B 1200 A 470 D 84 X 4] [杨铭宇 F 4309 B 769 A 266 D 254 X6] [餐饮 C 58 B 12][管理 C 706 B 70 A 5] [有限公司 D 2861 A 1 B 1][是 A 2340 B 353 X 20 P 2][由 A 1579 B 16 X 11] [杨先生 F 4309 B 769 A 266 D 254 X 6][创办 A 20 B 5][B 710]
然后根据 HMM 计算机构名角色标注如下:
[/S 济南/G 杨铭宇/F 餐饮/C 管理/C 有限公司/D 是/B 由/A 杨先生/F 创办/A /B]
[始##始/S 未##地/G 未##人/F 餐饮/C 管理/C 有限公司/D 是/B 由/A 未##人/F 创办/A 末##末/B]
最后进行模式匹配,有一个组织机构名称的角色模式库。当上文识别出角色标注串与组织机构的模式串匹配时,就认为识别出了一个组织机构。部分如下
CCCD
PPD
PPDCD
PPFCCD
PPFCD
...
经过细分,识别出机构名【济南杨铭宇餐饮管理有限公司】GFCCD 。