基于规则和语料库的中文姓名识别研究

(整期优先)网络出版时间:2019-03-08
/ 2
摘 要 中文姓名识别是中文分词中未登录词识别的一个重要部分,处理好中文姓名问题势必会有效地提高未登录词识别的精度。本文提出了一种基于规则和语料库的中文姓名识别方法,兼顾召回率和准确率,针对1998人民日报语料库(共计58634个汉字,其中姓名357个)进行实验,召回率为85.1%,准确率为89.2%。

关键字 中文分词,未登录词识别,中文姓名识别


1 引言

中文姓名识别作为未登录词识别的一部分是中文信息处理中一个很复杂的问题。第一,姓名随着时间的改变而不断增加。第二,中文文本中的中文姓名没有像西方语言中的形态特征作为识别的标记。第三,有些人为避免重名而独辟蹊径,待之而来的是大量的异体字,生僻字、自造字[1]。同时中文姓名占未登录词的15%左右[1],故中文姓名识别对未登录词识别及中文分词有着重要意义。

目前中文姓名识别的方法有很多种,大致可以分为确定候选姓名和确定姓名两个阶段。在文献[2]中通过建立姓名资料库的方法进行中文姓名识别[2],在文献[1]中利用类向量模型进行中文姓名的识别[3]。本文提出了一种基于规则和语料库并利用2-gram进行中文姓名识别的方法,利用在语料库中进行互信息的学习,并结合识别规则在已经进行切分后的文本中对切分碎片作中文姓名的识别,经开放测试,召回率为85.1%,准确率为89.2%。

2 基于规则和语料库的中文姓名识别

2.1 假设与定义

考虑到中文姓名的构词特点[5],做以下假设:①中文姓名长度最长为四字(即复姓加双名);②中文姓名长度最短为二字(即单姓加单名);③双名成词视为单名处理。

设:中文姓名字符串可以表示为WhXiMjEkWt

其中:Wh表示姓名前置词;Xi表示姓氏集,可以是单姓,也可以是复姓;Mj为名字首字的集合,Ek为名字尾字的集合,在Mj为空时姓名为单名(sn),不为空时姓名为复名(pn);Wt表示姓名后置词。

相应的针对上面的姓名字符串有如下的定义[1]

1)姓名前置词使用度

1110408738.jpg

2)姓氏使用度

111040473.jpg

3)名字首字使用度

1110411072.jpg

4)名字尾字使用度

1110411248.jpg

5)姓名后置词使用度

1110416670.jpg

6)姓名概率估计值[1]

针对单名(sn)和复名(pn)的不同情况并考虑到姓名与上下文汉字之间的关系,本文提出了一种利用2-gram来估计姓名概率值的方法来计算姓名的2-gram概率估计值:

①单名情况:P(sn)=H(W|name)×P(X)×S(E)×R(W|name);

②复名情况:P(pn)= H(W|name)×P(X)×F(M)×S(E)×R(W|name)。

其中H(W|name)是该词作为姓名的前置词出现的条件概率,R(W|name)为该词作为后置词出现的条件概率,这样计算出概率的估计值,并与相应的阈值进行比较以确定是否为姓名。

2.2 构建知识库

根据2.1的定义,需要构建相应的知识库以记录在语料库中学习到的信息,相应的需要统计前置词、姓氏、名首字、名尾字、姓名后置词相应出现的次数和他们在语料库中出现的总次数,计算出相应的概率,并记录到知识库中,供进行姓名识别时使用。

知识库在结构上用hash结构,分别针对前置词、后置词、姓氏、名首字和名尾字建立相应的五个不同的hash表记录下在语料库中学习到的相应的概率信息。其中每个表采用的hash结构为单字hash结构,即以每个词或字的第一个字为hash表的key,剩余的字符串及其概率为value,如果为单字则为空。具体的结构如下图1所示。

1110416924.jpg

1

在语料库的学习中生成五个不同的hash表,并计算相应的概率。这种结构下在进行姓名识别的时候可以根据相应字符串的第一个字找到相应字符,在匹配的过程中根据相应剩余字符串的长度进行匹配。

2.2 阈值确定

系统中还有一张记录不同姓氏阈值的表,因为中文中各姓氏的使用频率并不一样,对所有的姓名采用同一个阈值是不合适的,所以针对每个不同的姓氏采用不同的阈值,使文本中姓氏使用度较大的汉字召回率较高,姓氏使用度较小的汉字准确率较高。在识别中兼顾召回率和准确率,以减少识别错误,提高姓名识别正确率[1]

根据2.1的姓名概率估计值的定义,可以确定姓氏x的最小阈值:

Tmin(x)pn= H(W|name)×P(X)×MiN(F(M)×S(E)) ×R(W|name) 复名情况

Tmin(x)sn= H(W|name)× P(X)×MiN(S(E)) ×R(W|name) 单名情况

相应的姓名评价函数[4]:lnP(x)>βx

其中:P(x)为姓名的概率估计值,βx为姓氏x的姓名阈值:βxx×ln(Tmin(x))

αx为阈值调整因子: 1110413475.jpg

此评价函数的含义是:

对于文本中任意一个满足中文姓名的字符串XiMjEk

(1) 如果P(x)=100%,且lnp(x)>lnT

min(x),则该字串是姓名。

(2) 如果P(x)!=100%,且lnp(x)> αx lnTmin(x),则该字串是姓名。

其中的最小阈值及调整因子都是通过大规模语料库进行学习得到。

2.4 中文姓名识别规则

利用姓名的识别规则可以进一步对识别结果进行筛选以提高中文姓名识别的召回率和准确率。下面列举了本文所用到的一些常用的中文姓名识别规则。

1)左界规则[1]

若姓名前面是以称谓,或者是一个标点符号,或姓名在句首,或姓名的姓氏使用频率为100%,则姓名的左界确定。

2)右界规则[1]

若姓名后面面是以称谓,或者是一个指界动词,或是一标点符号,或姓名在句尾,或姓名的尾字使用频率为100%,则姓名的右界确定。

3)修饰规则[1]

若姓氏X与句号的距离不超过2个字符的距离,则否定此姓名。相应的需要建立称谓,指界动词和标点符号的字典供进行中文姓名规则识别时使用。

2.5 识别步骤

(1) 利用基于N-gram的分词方法对原始文本进行第一次切分,得到的是含有以切分好的词和连续的单字词的粗切分文本。

(2) 对粗切分结果进行第二次扫描,并以姓氏作为触发信息。如果文本中出现姓氏,且其后为一个词或者单个字或者连续的单个字,则其后的一个字可以作为名字的尾字,或者其后的两个字,第一个作为名字的首字,第二个作为名字尾字,并且其前面的一个词作为姓名的前置词。尾字后面的一个词作为姓名的后置词。对于两个紧邻的单字都为姓氏情况也要分别进行计算并取相应的估计概率较大者。

(3) 计算相应字符串的概率估计值及相应姓氏的姓名阈值,对于姓氏后面有两个单字的情况要分别计算单名(sn)和双名(pn)的不同概率估计值,取其中较大的一个。然后通过姓名评价函数来对该姓名进行评价,符合标准则识别为姓名,做相应的切分合并标记。

(4) 根据左界规则,右界规则和修饰规则对潜在姓名字符串进行再次筛选,筛选的结果就为最后姓名识别的结果。

3 实验结果及分析

对于中文姓名识别的评价有一下两个指标:

(1)中文姓名识别召回率(R)[1]:文本中中文姓名被辨识出的比例。

1110411258.jpg

(2)中文姓名识别准确率(P)[1]:被识别为中文姓名的字串中确实为中文姓名的比例。

1110427483.jpg

利用上述方法对1998年人名日报语料库中抽取了58634个汉字的语料(其中包含357个中文姓名)进行了测试,即程序识别出来的结果与人工识别的结果进行比较。具体结果见表1。

1

原有姓

名(个)

识别姓

名(个)

识别正

确(个)

识别错

误(个)

召回率

准确率

357

304

271

33

85.1%

89.1%

错误的原因主要有:①姓名尾字与下文成词的情况,例如:邓/颖/超生/前/的/事迹。②与地名,机构名等发生冲突,例如:香港/金新/集团。③对应的姓名阈值不合适,需要增加语料库训练集以求得合适的阈值。

4 结束语

中文姓名识别作为中文分词未登录词识别的一部分,本文提出了一种基于规则和语料库的中文姓名识别方法,该方法依赖于训练语料库的质量及规则的制定,下一步可以通过改进现有的规则,并添加新的规则并有选择的进行更多的语料库的学习来进一步的提高姓名识别的召回率和准确率。

参考文献

[1]许嘉璐,傅永和. 现代汉语词汇研究[M]. 广东:广东教育出版社,2006

[2]孙茂松,黄昌宁,高海燕,等. 中文姓名的自动辨识[J]. 中文信息学报,1995,9(2)

[3]贾品贵,杨一平,卢朋. 基于类向量模型的中文姓名识别研究[J]. 计算机应用研究,2007,24(4)

[4]郑家恒,李鑫,谭红叶. 基于语料库的中文姓名识别方法研究[J]. 中文信息学报,1999,12(1)

[5]张锋,樊孝忠,许云. 基于统计的中文姓名识别方法研究[J]. 计算机工程与应用,2004.10

[6]李斌,陈小荷,方芳等. 基于语料库的高频最大交集型歧义字段考察[J]. 中文信息学报,2005,20(1)

[7]刘秉伟,黄萱菁,郭以昆等.基于统计方法的中文姓名识别[J].中文信息学报,1999,14(3)