中文命名实体识别及关系提取 *** *** ***
中文命名实体识别 语料:人民日报1998年版 主要方法:根据训练预料,利用CRF进行机器学习
中文命名实体识别 标注集1:由字构词 将{ ns,nr,nt}三种实体类型,和分词中的词位信息{B,B1,B2,M,E,S}做组合,其它字标记为O Example:
中文命名实体识别 词缀标记 PSsur:人名的姓,比如“王” PSsuf:人名的后缀,比如“先生” Lsuf: 地名的后缀,比如“省”,“特区”,“地区” Osuf: 组织名的后缀,比如“委员会”,“公司” 原因:中文偏正关系 *为什么将词缀放到机器学习的标记中而不是用于结果修正? 后缀容易识别,但是向前匹配的位置难于确定,比如“上海IBM研究院”。
训练模板 字的特征识别: w[-1,0]:前一个字 w[0,0] w[1,0] w[-1,0]/w[0,0]:前面一个字和当前字的组合 词缀特征识别: w[-1,1]:前一个字的词缀 w[0,1],w[1,1],w[0,1]/w[1,1]/w[2,1]
测试结果 测试方法: 将训练集拆分,80%用于训练,20%用于测试(200篇左右) 测试结果: Recall Precision F-score NR 81.6% 961/1178 92.6% 884/961 86.7% NS 84.4% 1362/1613 88.8% 1190/1362 86.6% NT 85.2% 538/631 90.7% 483/538 87.9%
校正 考虑到没有充分利用分词结果 Error:"{张牙舞/nr}爪" ===》利用分词结果可以校正 校正方法:如果命名实体不是由完整的几个词组成的,判错 校正结果: Recall Precision F-score NR 79.3% 935/1178 95.5% 891/935 86.7% NS 82.5% 1331/1613 89.8% 1180/1331 86.0% NT 85.1% 537/631 91.2% 485/537 88.0% 分词本身有错误率,所以降低了识别率。
一些问题 为什么没有在标记集中加入分词信息的一列 Example:江 PSsur B B nr-B 泽 UN B1 nr-B1 民 UN E nr-E 主 PSsuf B O 席 PSsuf E O 1) 训练时间过长,内存消耗过大。 如果训练在可接受的时间内,增大训练语料比多增加分词信息有效得多。 2)分词和命名实体标注可以映射为一列,没必要增加一个维度。比如"主 PSsuf O-B"。实验数据显示,性能没有任何变化。
如何获得词缀信息 1)从训练语料中抽取所有的命名实体,然后计算频率,然后抽取所有词的后缀,然后计算频率,取频率高的。 2)手动检查是否添加了无用的后缀,比如“上海市”在训练语料出现很多次,提取后缀会出现“海市”为一个高频率后缀,这些需要特殊处理。
其它问题 为什么没有引入词性信息? 1)一般的词性标注的准确率在90%左右,而且人民日报语料的标注词性比较多,有40+种,准确率要比90%低一些。 2)命名实体的准确率在90%以上,已经比词性标注要高了。 3)对于命名实体的Recall提升的话,词性标注没有明显的帮助办法,换句话说词性对于判错还有些用,但是对于Recall只会降低。 Any Other Quentions???
关系识别 Located-in关系: 穷举任意两个在一篇文章中出现的命名实体,然后判断他们是否是Located-in关系。 判断标准: 1)如果一个地点实体(NS)是一个组织(NT)的模糊前缀。比如“上海市” “上海大白兔有限公司” 2)一个地点后紧接着一个组织,“上海市” 的"大白兔有限公司" 3) 在上下文中有关键词匹配成功 4)NT中内含NS,“上海市闵行区派出所”
关于提取地点的核心词 如果一个地点只有一个词,那么去掉它的可以忽略的后缀,所有可以忽略的后缀以字典形式存在一个文件中。 “上海市”==》“上海” 如果一个地点实体由多个词组成,那么提取它的词性,然后取最后一个NS,然后判断后缀是否可忽略,如果可忽略返回最后的NS,否则返回最后的NS+后缀 “上海/NS浦东/NS机场/N”==》“浦东机场” “香港/NS特别/a行政区/N”==》“香港”
如何匹配上下文 在没有标注语料的情况下,采用了自定义规则,因为从训练语料来看,新闻题材中需要上下文匹配的情况较少,而且特点比较一致。 匹配的上下文形式化: 作用方向:是NS在前,NT在后,还是反之。 作用域:0:一个句子,不可有其他实体打断 1:NS之后全文 (新华社北京讯) 2:NS之前全文 (记者北京报道) 上文,中间,下文:正则表达式,上下文只用一个窗口,中间的文字去掉无用词,只保留名词和动词。
例子 1 0 [-] [.*|地处/v|.*] [-] 1 0 [-] [.*|位于/v|.*] [-] 1 0 [-] [.*/v|在/p] [-] 1 0 [-] [.*|地址/n|是/v] [-] 1 2 [-] [-] [.*|报道/v|.*/w] 1 2 [-] [-] [.*|讯/v|.*/w] 1 2 [-] [-] [.*|电/v|.*/w] 0 1 [.*/w|.*] [讯/v|.*/w|.*] [-] 0 1 [.*/w|.*] [报道/v|.*/w|.*] [-] 0 1 [.*/w|.*] [电/v|.*/w|.*] [-]
Founder关系 方法和Located-in关系抽取中上下文匹配的方式相同。 实际情况中,Founder关系一定是要有关键词提示的。 比如:Bill Gates创办了微软公司 【中文中有关键词】 Bill Gates是微软之父【后文中有关键词】
Employee关系 大多数Employee关系的关键词不是动词而是变化多端的职位 Example:中共中央总书记胡锦涛 微软CEO鲍尔默 识别方法:1)提取NT和NR之间的关键名词,作用域是一个句子中不可打断,除了并列举例的人名。 2)采用一个字典匹配,检查之间是否有职位
存在的问题 命名实体识别:命名实体有很多都识别了,但是无法准确定位一个完整的命名实体,比如“三峡坝区” 命名实体识别:外国人名 关系提取:上下文匹配的办法还比较幼稚,个人认为如果有一个标注的训练语料的话,如果可以统计词频,确定关键词。
Thanks