介绍
全球招聘行业规模达200亿美元,每天都有成千上万人在数千个就业平台上上传简历并申请工作。 在这些平台上列出了企业的空缺职位,求职者也可以申请。 每个企业都有专门的招聘部门,该部门会手动检查申请人的简历,并提取相关数据以查看其是否合适。
????
随着人们对简历的风格和表现力产生创意,从这些简历中自动提取数据非常困难,并且仍然主要是手工工作。 一些研究表明,在这些工作门户网站上,只有1%的求职者简历进入下一阶段。 因此,我们谈论的是浪费大量时间来查看甚至没有说过必要的基本技能的简历。
求职者的看法也不理想。 您有50个不同的工作门户网站,例如Monster或Indeed,您每次都必须创建一个新的个人资料。 然后,您必须顺其自然地找到一个角色(押韵!)合适,列表似乎永无止境。 您总是会感到不满意,因为这里可能会有更多的工作,您应该进一步研究。 您还注册了该电子邮件时事通讯,该电子邮件时事通讯向您发送了最不相关的工作。
所以这里的问题是,我们如何进行简历信息提取过程, 更聪明更好? 如果系统可以自动拒绝简历中具有技能的申请人不符合标准怎么办? 如果您作为求职者可以只上传您的简历并准确显示所有相关工作该怎么办?
在本文中,我们旨在解决这个确切的问题。 我们将深入研究如何利用深度学习和OCR进行简历解析。
自动化您的简历解析工作流程。使用 Nanonets 构建自定义简历解析器。
理想的简历过滤系统
让我们尝试为智能数据提取系统设计理想的系统,以进行恢复过滤。
申请人的简历在表示,设计,字体和布局方面具有不同的格式。 理想的系统应尽快提取有洞察力的信息或这些简历中的内容,并帮助招聘人员无论他们的外表如何,因为它们具有诸如候选人的经验,技能,学术成就等基本资格。 另外,在相反的情况下,候选人可以将简历上传到Monster或确实的工作列表平台,并立即向他/她显示匹配的工作,甚至在有关新工作的电子邮件警报中进一步显示。
什么是简历解析
It将简历数据的非结构化形式转换为结构化格式。 这是一个分析和提取简历/简历数据并返回机器可读输出(如XML或JSON)的程序。 这有助于自动存储和分析数据。
基于OCR的解析的优点
招聘人员可以为工作设置条件,不匹配条件的候选人可以快速自动地被过滤掉。
- 为招聘人员节省了大量的工时,以更好地迎合潜在的候选人。
- 可以对候选人进行评估并匹配其他合适的角色。
- 公司可以随时跟踪申请人的质量。 可以对候选人进行有意义的分析。
- 如果下一步要进行在线测试,则可以合理地整合候选清单和测试过程。
- 职位门户的注册过程变得非常简单。 目前,候选人必须在注册网站时以表格形式输入其信息。
现在,我们将研究由北京理工大学的一个团队于2018年发表的关于简历信息提取的研究。 最终目标是从简历中提取信息并提供自动职位匹配。 我们将这项工作称为“传统技术”,因为所提出的算法使用简单的规则试探法和文本匹配模式。 这项研究的作者提出了两个简单的步骤来提取信息。 第一步,将简历的原始文本标识为不同的简历块。 为了实现这一目标,他们设计了一个功能 写作风格,以在文本块上对句子语法信息进行建模。
为了识别文本块,该算法仅遵循一些标题,例如“项目实验”和“兴趣和爱好”。 只要标识了这些标题,它们就会通过逐行直到找到下一个标题来促进后续工作。 分割这些块后,它们将使用其功能 写作风格 并针对每条线执行一些基于规则的启发式方法。 在他们的方案中,他们考虑了中文简历,其中空格用于分隔不同的标签,这非常清楚 写作风格 特征。 这是他们如何提及工作经验的示例。
“2005-2010年[工作职位]”、“[工作职位][工作时间]”和“[大学][专业][学位][时间范围]”。
下图是定义其启发式规则及其各自操作的图像。
第二步,使用几个分类器来识别简历中事实信息的不同特征。 收集了不同的名称实体,例如大学名称,公司名称,职位和部门,这些名称实体很容易从简历中提取。 下面是文本算法,
看一下该算法,它是一个基于正则表达式的简单模式匹配系统。 与此类似,提出了几种工具和研究。
使用命名实体识别
另一种传统方法是使用 命名实体识别。 当您要从提取的区域中获取一组特定的字符串时,可以使用它。 例如,考虑以下简历的组成部分,
假设您只想要他擅长的编程语言。 可以使用NER解决这类问题。在深入探讨之前,让我们来看看这是怎么回事,
命名实体识别 是一种算法,其中将文本字符串作为输入(段落或句子),并标识相关名词(人,地点和组织)和其他特定单词。 例如,在给定的简历中,如果要提取,则仅使用NER的姓名和电话号码会使我们的工作容易得多。 可以通过深度学习来实现。 这是由于一种称为单词嵌入的技术,该技术能够理解单词之间的语义和句法关系。 对于大多数涉及数据的程序,都需要进行一些预处理,即使此“继续解析”也包含其中一项。 在大多数情况下,简历将另存为PDF或DOCX,因此为了简便起见,在第一步中,我们将word文档转换为变量中的save。 请遵循以下代码,
import docx2txt
def extract_text_from_doc(doc_path):
temp = docx2txt.process(doc_path)
text = [line.replace('t', ' ') for line in temp.split('n') if line]
return ' '.join(text)
path = "vihark.docx"
text = extract_text_from_doc(path)
正如我们在这里看到的,我们使用了一个名为doct2txt的库,该库将word文档中存在的所有信息复制到变量名文本中。 接下来,我们将导入spacy库并为NER加载预训练的模型。 在我们将其投入使用之前,您还需要下载它。
import spacy
from spacy.matcher import Matcher
# load pre-trained model
nlp = spacy.load('en_core_web_sm')
# initialize matcher with a vocab
matcher = Matcher(nlp.vocab)
def extract_name(resume_text):
nlp_text = nlp(resume_text)
# First name and Last name are always Proper Nouns
pattern = [{'POS': 'PROPN'}, {'POS': 'PROPN'}]
matcher.add('NAME', None, pattern)
matches = matcher(nlp_text)
for match_id, start, end in matches:
span = nlp_text[start:end]
return span.text
name = extract_name(text)
print(name)
我使用了Resume,该模型可以从Resume中提取名称。 同样,我们可以使用NER从简历中提取其他组件。
输出:库尔马(Vihar Kurama)
挑战传统算法失败
- 由于1000种不同格式且没有直接顺序,因此无法遍历不同的简历模板和编写规则
- 在标题和其中的嵌套内容之间创建层次结构非常棘手
- 创建规则以提取诸如经验,毕业年份等的值并不总是那么简单。
- 当工作领域(市场营销与工程学)发生变化时,规则将需要随着语言的变化而变化。
使用深度学习构建准确的简历解析引擎
在上一节中,我们讨论了传统方法。 在这里,我们将讨论如何为简历解析构建准确的自动化模型。 让我们开始吧!
我们如何做到这一点? 我们如何建立一个适用于所有简历模板的通用模型? 这是哪里 深度学习(DL)和计算机视觉(CV) 进入图片。 如果您不熟悉DL,可以将其视为使用数学函数从数据中学习的人工大脑。 与传统算法不同,这些算法被认为是智能的,这意味着它们可以在不同的情况下高精度地工作。 另外一个优点是,与传统算法不同,这些算法可以轻松集成或部署到任何现有系统中。 另一方面,计算机视觉算法就像机器的眼睛一样,它们可以智能地检测和预处理图像并将其立即转换为可编辑的数据。
考虑到我们的简历解析问题,从深度上讲,深度学习可以从简历中智能地找到有用的区域,然后传递到计算机视觉,在计算机视觉中它将识别出的部分转换为可编辑文本。 现在,我们将通过不同的技术来理解构建模型的整个过程。
目标检测和OCR
简历基本上是由不同部分组成的实时模板。 这意味着简历中的大多数部分都是相似的,但是它们以不同的格式组织。 简历的各个组成部分是[职业目标,教育背景,工作经验,领导才能,出版物等]。 为了提取这些组件,我们将它们视为对象,并通过对象检测算法对其进行检测。 有几个挑战需要解决,例如表提取(有时在表中添加诸如教育背景之类的组件),字体变化,模板变化等。
现在,我们将深入研究如何使用对象检测从简历中提取组件。 为了实现这一目标,通常使用卷积神经网络(CNN)。 有几种基于CNN的应用程序可以实现图像分类和分割问题的最新性能。 下面是一个简单的CNN的图片,
对于使用对象检测进行的继续解析,页面分割通常是第一步。 页面细分的主要目标是将简历分为文本区域和非文本区域。 稍后,我们从非文本部分中提取不同的组件对象,例如表,节。 与涉及大量参数的传统基于规则的方法不同,基于学习的方法(在这种情况下为CNN)的主要目标是首先将文档页面分成几行,然后对每行进行分类,并通过不同的方式组合分类结果规则。
现在,我们将讨论一些对象检测方法
[注意:这些算法并不总是相同,随着新技术和不同神经网络体系结构性能的不断变化,]
方法1:基于CNN的文档图像中的页面对象检测
这项工作是由Xiaohan Yi及其团队在2017年ICDAR(国际文档分析和识别会议)上提出的。 这项研究的目的是使用CNN从扫描的页面中检测特定区域。 所提出的算法经过三个阶段可以取得良好的效果,让我们对其进行讨论。
阶段1: 在此阶段,作者收集了一个数据集,该数据集由从CiteSeer的12,000篇科学论文中选择的1,100份英语文档页面图像组成。 这些文档中的每一个在布局以及文本(字体,颜色)方面都有变化。 在此阶段,作者收集了一个数据集,该数据集由从CiteSeer的12,000篇科学论文中选择的1,100份英语文档页面图像组成。 这些文档中的每一个在布局以及文本(字体,颜色)方面都有变化。 他们手动注释了每个页面中的对象,总共共有380,000个文档页面对象,包括350,000个文本行,22,000个公式,5,783个图形和2,295个表格。
为了检测物体,使用了两种方法。 首先,提出一个粗略的建议,即利用广度优先搜索(BFS)在过滤后的二进制图像中查找所有8个相连的组成区域,一旦生成了一个组成部分,就用其包围矩形替换该组成部分,以减少其中的不相关信息。图片。 其次,使用修剪策略来检测页面中的列并过滤多列中存在的区域。
阶段2: 第二阶段涉及设计和训练卷积神经网络。 作者提议在VGG-16网络之上构建基于空间金字塔池(SPP)的CNN。 在CNN上使用SPP的一个主要区别是,(SPP)结构通过固定比例的下采样将要素图池化为固定大小。 随机梯度下降用于训练网络。
VGG-16已经是一个经过培训的现有网络,已达到ImageNet数据集上分类任务的最新水平。
阶段3: 在最后阶段,结果被拉出。 拟议的网络实现了细分文本行,论坛,表格和图形的召回准确性,分别为94.1%,90.9%,88.5%,83.2%。 下面是整个过程的图片,
文献参考: 文档图像中基于CNN的页面对象检测– IEEE会议出版物
在本节中,我将讨论由Adobe和宾夕法尼亚州立大学的研究人员提出的工作“学习使用多峰完全卷积神经网络从文档中提取语义结构”。 作者提出了一种端到端,多模式,完全卷积的网络,用于从文档图像中提取语义结构。 该网络将文档作为输入,并将其划分为感兴趣的区域并识别每个区域的作用。 让我们看看如何在建议的不同阶段实现这一目标。
阶段1: 第一阶段类似于先前方法中讨论的阶段- 页面分割。 在这里,不直接注释图像, 文字嵌入图 (您可以将它们视为来自具有相同含义的词具有相似表示形式的文本的学习嵌入)。 使用文本嵌入的好处是,它甚至可以分辨列表和几个段落之间的区别,因为它们将以较低的尺寸表示。
阶段2: 该阶段称为逻辑结构分析。 它基于图像语义,将图像的每个区域分为与语义相关的类,例如段落和标题。 这基本上是他们提出的多模态全卷积神经网络的输出。 现在让我们讨论所建议模型的体系结构,下面是屏幕截图。
该模型的核心特征是它使用了一种替代的跳过连接,该连接由图像中的蓝色箭头和受Inception架构启发的膨胀卷积块表示。 每个膨胀卷积块由5个具有3×3内核大小的膨胀卷积和d = 1、2、4、8、16的膨胀组成。在常规CNN中使用它们的必要性是减少下采样时的信息丢失。 在收集的数据集上对这种体系结构进行了培训,该数据集包括总共271个带有各种复杂布局的带标签文档。 所有卷积层的内核大小均为1×2,步幅为2。池化(在编码器中)和非池化(在解码器中)的内核大小为84.6×83.3。在每次卷积后立即应用批处理归一化层以及所有非线性函数之前。 该网络在提取bkg,图形,表格,节,标题,列表,段落方面达到了IOU准确性,分别具有79.4%,58.3%,61.0%,66.7%,77.1%,XNUMX%,XNUMX%的准确性。 下图是模型如何返回感兴趣的分段区域的图像。
文献参考: 学习使用多峰完全卷积神经网络从文档中提取语义结构
自动化您的简历解析工作流程。使用 Nanonets 构建自定义简历解析器。
使用纳米网
使用Nanonets API您可以自动从求职和匹配所需的简历中提取所有必要的信息。 只需上传一份简历,并以您选择的格式返回所有提取的字段。
自动化您的简历解析工作流程。使用 Nanonets 构建自定义简历解析器。
我们解决了上面列出的大多数问题,因此您不必花时间重新发明轮子。
- 标识键值对:它们在格式之间的位置不一致:使用我们的GCN实现,我们可以解析简历中的键。 我们的GCN实施包括优化功能,用于查找正确的邻域搜索,以在特征爆炸和缺少上下文之间获得最佳权衡,以使模型正确解释每个键属于哪个键。
2.考虑多种语言。
我们的模型已经使用与语言无关的文本嵌入进行了训练。 这是通过创建特征空间来实现的,以使单词“ Education”和“educación”(西班牙语)和“educação”(葡萄牙语)全部映射到相同的要素空间。 因此,文本功能变得与语言无关,并且无需针对每种语言训练模型。
3.没有足够的数据来训练特定的键(类不平衡):我们拥有大量的Resumes,我们的模型经过训练可以缓解此问题。
其他问题
- 轮作和裁剪: 作为预处理步骤的一部分,我们已经实现了旋转和裁剪模型,以识别文档的边缘,然后正确调整文档的方向。 这使用类似于对象检测模型的模型,其中修改了目标函数以标识4个角,而不是对象检测问题中标准的2个点。 这解决了轮播和裁剪问题
- 文件质量模糊不清: 我们在预处理流程中放置了一个质量模型,该模型仅接受超过特定质量阈值的文档。 这是一个二进制分类器,它是一个简单的图像分类模型,在许多质量优良的文档上进行了训练。 在文档捕获管道中,如果文档不符合要求的质量标准,则可以提早拒绝它们,并可以将其发送以进行重新捕获或手动处理。
- 数据漂移: 当模型仅暴露给来自单个供应商或单个区域的数据时,数据漂移便成为问题。 如果该模型经过历来在各种不同的供应商,地理行业等方面的培训,则数据漂移的可能性将大大降低,因为它已经暴露于这些差异中。