姓名识别是简历解析系统的核心组件之一,因为候选人姓名是一份简历最关键的几个字段之一,通常是第一个展示的字段,如果姓名识别出错,人们将会怀疑你接下来其他字段的解析效果,也很难相信你的解析技术能力。因此一个优秀的简历解析系统,必须达到极高的姓名解析准确率(比如98%以上)。
准确度
从技术角度来看,个人认为,80%、90%、95%、98%的准确率分别对应不同的技术能力等级(或者叫资源投入等级)。等级越高,投入越多,越往后,提升越难。
但很多人对准确率缺乏一个直观的理解,认为90%和95%的效果差别不大。实际上,5%的差异,意味着10000份简历里面前者会比后者多出500次错误,意味着每20份简历前者要比后者多出一次错误,也意味着人工校正将会花费更多的耗时。
ResumeSDK简历解析的姓名识别准确率,我们内部测试的准确率已经在99%左右,对开放数据的准确率差不多会在98%以上。
技术选型
姓名识别,从技术层面来说,可以分为这几个思路:
1) 基于规则;
2) 基于分类模型,比如NB、SVM、树模型等;
3) 基于序列标注,比如著名的CRF模型,以及加入深度学习的BiLSTM-CRF模型等;
简历里的姓名识别与常规的序列标注在场景上有很大的差别。常规序列标注通常用于在一段文本中识别其中的命名实体(NER),比如人名,而长文本一般带有丰富的上下文信息,序列标注通过对这些信息进行充分利用以达到优异的效果,这也是在深度学习爆发之前CRF在NER大行其道的重要原因。然而简历里面的姓名,一般出现于简历开头(通常是第一行),而且常常是单独存在,左右不存在其他文本,这样序列标注的优势就发挥不出来了。
此外,序列标注对标注数据的要求更加严格,需要对包含上下文的长段文本进行标注,这需要多耗费好几倍的人工时间。当然也可以采用开源的标注数据,比如新闻里的NER标注,但新闻和简历数据存在很大差异,效果必然大打折扣。
因此采用传统的分类模型,就成了更优的选择。从中可以看出,模型不是越高级越好,而是需要根据合适的场景选择合适的模型。正应了那句话:“只选对的,不选贵的”。
规则处理
当然,仅仅有机器学习模型是不够的。要达到90%以上的准确度,规则的处理是必不可少的。因为,简历的格式非常多元化,不仅有各种大小招聘网站的通用格式,还有用户自填的格式;不仅有中文的,还有英文的。可是说是相当复杂。以下列出一些看过的比较有意思的case:
1)罕见的姓氏,比如要智慧、肥雯、第五思杰,要、肥、第五都是生活中极少见得姓氏;
2)长得像人名但实际不是人名,比如杨浦、沈阳这种地区名,比如简历、年龄、高光这种从模型的角度看特别像人名的名词;
3)四字人名,比如程吉里元、权李非凡这种双姓氏的;
4)英文人名,有ChenJiaxian这种纯中文的,有Jessy Jiang这种英文+中文的,有Teo Park这种纯英文的;
此外还有大大小小不下数十个其他类似规则case的处理。
ResumeSDK正是通过对5年来碰到的各种不同简历,对遇到的各种这样case进行逐一归纳和处理解决,才达到了目前极高的解析准确度。
如果您对简历解析技术感兴趣,可以参考一下我们:ResumeSDK简历解析,是由资深BAT算法专家研发的解析系统,欢迎试用。