原文:
www.kdnuggets.com/2017/05/deep-learning-extract-knowledge-job-descriptions.html
由 Jan Luts,Search Party 高级数据科学家撰写。
在 Search Party,我们专注于创建智能招聘软件。我们面临的一个问题是匹配候选人和职位,以建立推荐引擎。这通常需要解析、解释和规范化来自简历和职位的混乱的、半结构化/非结构化的文本数据,这就涉及到以下内容:条件随机场、词袋模型、TF-IDF、WordNet、统计分析,但也需要大量由语言学家和领域专家完成的手动工作,如创建同义词列表、技能分类、职位层级结构、知识库或本体。
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你所在组织的 IT 工作
虽然这些概念对于我们尝试解决的问题非常有价值,但它们也需要一定量的手动特征工程和人工专业知识。这些专业知识无疑是使这些技术有价值的因素,但问题仍然是是否可以使用更多自动化的方法来提取关于职位空间的知识,以补充这些传统方法。
在这里,我们的目标是探索使用深度学习方法从招聘数据中提取知识,从而利用大量的职位空缺。数据集包括来自英国、澳大利亚、新西兰和加拿大的 1000 万个职位空缺,涵盖了 2014-2016 年期间。数据总字数为 30 亿。该数据集被分为训练集(850 万)和测试集(150 万)。每个职位空缺都包含职位描述和相应的职位名称。我们发现职位名称通常是可靠的,但数据中确实存在一定的噪声。这 1000 万个职位空缺中有 89,098 个不同的职位名称。数据的预处理最小:我们将职位描述的原始文本分词,并将所有词汇转换为小写。没有进行特征工程。
我们的模型架构包括一个卷积神经网络(CNN),用于生成职位描述的嵌入和一个包含职位标题嵌入的查找表:
工作标题嵌入与职位描述嵌入之间的余弦相似度被用作评分函数。我们采用了学习排序的方法,使用成对的铰链损失来训练此模型。词汇查找表包含了 425,845 个最常见单词的 100 维嵌入。职位标题查找表包含了 89,098 个 100 维职位标题嵌入。对于卷积层,我们将过滤器数量设置为 1,000,内核宽度设置为 5,步幅设置为 1。这款模型有 52,095,400 个参数,词嵌入使用了从我们的训练数据中运行得到的重新缩放的 Word2Vec 系数进行初始化。优化使用了随机梯度下降,且使用了 dropout 作为正则化手段。实现使用了 Torch 7。
预测职位标题
显然,首先要查看的是模型被训练来做的事情:为职位描述预测职位标题。这是一个基础设施工程师的职位描述,不在训练集中:
职位标题在这个职位描述中包含,并且实际上提到了三次。职位描述中还有很多详细的职责和技能。通过将职位标题“基础设施工程师”替换为“人员”并删除其他两个引用,创建了一个替代的职位描述。
现在我们在两个职位描述上运行职位标题预测模型,并使用余弦相似度比较生成的嵌入与模型中学习到的职位标题嵌入。这些是两种情况中最可能的 10 个职位标题:
原始职位描述 | 无“基础设施工程师” | |
---|---|---|
1 | 基础设施工程师 | linux 工程师 |
2 | linux 工程师 | devops 工程师 |
3 | 系统工程师 | linux 系统工程师 |
4 | windows 工程师 | 系统工程师 |
5 | devops 工程师 | 系统管理员 |
6 | 自动化工程师 | devops |
7 | linux 基础设施工程师 | 高级 devops 工程师 |
8 | 自动化工程师 devops | linux 系统管理员 |
9 | devops 基础设施工程师 | devops 顾问 |
10 | linux 系统工程师 | 构建自动化工程师 |
对于原始职位,最匹配的职位标题是“基础设施工程师”,恰好是正确的。然而,尽管“windows 工程师”稍显异常,其他大多数职位标题在前 10 名中都很合理。对于修改后的职位描述,最匹配的职位标题是“linux 工程师”。看起来其他 9 个职位标题在这种情况下也会是可以接受的。
这个例子表明,模型能够提取职位名称,但当我们从职位描述中去掉实际职位名称时,它也给出了有意义的预测。这表明,模型在缺乏更直接的信息时,会使用描述中的职责、技能和其他类型的信息来得出预测。
虽然模型是基于职位描述数据进行训练的,我们还希望在结构不同的数据上测试它:简单的查询,不包含实际职位名称。这个表格显示了它为各种输入得出的职位名称:
输入 | 预测职位名称 |
---|---|
土建工人 | 土木工 |
照顾圣马丁小学的孩子 | 保姆 |
我们是彭伯顿卡车公司,我们正在招聘区域司机和一名 | 卡车司机 |
接受订单,广泛的产品知识,沟通技巧,餐饮技能 | 服务员 |
我们家正在寻找一个人来照顾我们最小的孩子 | 保姆 |
我们迫切需要一位具有 C++背景的开发人员 | C++开发人员 |
井淑技师(AK4679) | 汽车技师 |
我们正在寻找一个人来管理一个由五名软件开发人员和一名软件开发经理组成的团队 | |
我们正在寻找一个人来管理一个由五名会计师和一名财务经理组成的团队 | |
我们正在寻找一个人来管理一个由五名销售代表和一名销售经理组成的团队 |
这些例子表明,模型(在一定程度上)捕捉了特定职位通常做的事情。例如,它预测一个管理会计团队的人可能是财务经理。只需将“会计”替换为“软件开发人员”或“销售代表”,我们就会得到“软件开发经理”和“销售经理”这两个职位。模型学会了照顾孩子的人通常是保姆。当一家卡车公司寻找司机时,它很可能是在寻找卡车司机。鉴于“井淑技师”不是我们训练数据集中职位名称的一部分,预测“汽车技师”是合理的。
寻找相关职位名称、类比和关系
模型架构的一个副产品是,我们为训练集中所有的职位名称获得了嵌入向量。为了感受这些职位名称嵌入的质量,我们查看了嵌入空间中某个特定职位名称的最近邻:
统计学家 | 人文学科教师 | 人才招聘经理 |
---|---|---|
统计分析师 | 人文学科教师 | 人才招聘专员 |
高级统计学家 | 资深人文学科教师 | 人才经理 |
生物统计学家 | 宗教研究教师 | 人才招聘合作伙伴 |
流行病学家 | QTS NQT 地理教师 | 人才招聘经理 |
研究统计学家 | 中学地理教师 | 人才招聘顾问 |
统计程序员 | 人文学科教师 | 人才招聘负责人 |
数据科学家 | 合格历史教师 | 招聘经理 |
这些例子表明,我们发现了职位名称的不同变体(例如“统计学家”与“统计分析师”以及“人才招聘经理”与“招聘经理”),相关(子)领域(例如统计学的生物统计学和流行病学),以及拼写错误(例如“人文学科教师”)。尽管我们的方法没有考虑单词中的实际字符,但模型在大量数据的配合下似乎对拼写错误有一定的容忍度。
现在换个话题。研究人员已经展示了基于余弦距离的简单向量偏移方法在使用词嵌入寻找类比时可以非常有效。一个众所周知的例子是:cos(w(“king”) – w(“man”) + w(“woman”), w(“queen”))。我们从模型中提取了训练后的词和职位名称嵌入,并发现这种关系在我们的模型中也成立:
示例 | 预测的最近邻 |
---|---|
Java 开发人员 – Java + C++ | C++开发人员 |
市场助理 – 初级 + 高级 | 高级市场执行官 |
护士 – 护理 + 编程 | 软件工程师 |
保姆 – 婴儿 + 数据库 | 数据库管理员 |
叉车司机 – 叉车 + Hadoop | 大数据架构师 |
手机维修技师 – 三星 + 福特 | 机械与电气修整技师 |
车辆销售执行官 – 福特 + 保险 | 保险销售执行官 |
市场经理 – 市场助理 + 初级软件开发人员 | 软件开发经理 |
银行员工 – NAB + 医院 | 护士 |
银行员工 – NAB + Coles | 杂货店店员 |
银行员工 – NAB + Woolworths | 超市零售助理 |
特征探测器在寻找什么?
模型中卷积层的滤波器对应于特征探测器,这些探测器在观察到特定模式时会被激活。由于我们模型中的卷积层操作在词嵌入上,因此我们可以轻松解释这些特征探测器在寻找什么。一种直接的方法是通过可视化导致最大激活的特定输入序列。下表显示了测试数据集所有职位描述中的前 5 个输入模式,对于几个滤波器而言。
毫不奇怪,一些特征探测器在寻找职位名称。毕竟,这就是我们优化的目标:
教师 | 酒店工作人员 |
---|---|
高级讲师 高级讲师 高级讲师 | 主咖啡师 副厨师 长期工作 |
教师 教学公民人文学科 | 理想的酒店助理经理将 |
教师 中学教师 大学讲师 | 职称 酒店助理 学徒 雇主 |
描述 sen 教学助理 sen | 页面 酒店助理经理 m |
高级讲师 临床心理学讲师 | 主服务员 服务员 |
其他特征探测器寻找特定职责:
清洁 | 办公室行政 |
---|---|
熨烫 清洁 带孩子 | 预订 提供打字 归档 复印 |
清洁厕所 清洁烤箱 垃圾桶 | 归档 一般打字 接听电话 |
清洁工 清洁工 维修工 | 欢迎客户 打字 归档 发送 |
清洁厕所 客房 清洁过道 | 打字者 处理电话 |
熨烫 清洁浴室 清洁厕所 | 打字 复印 答电话 |
另一些特征探测器关注于领导能力:
领导 | 监督 |
---|---|
具有人员领导经验 高级 | 监督和管理焊工 锅炉工 |
指导 团队领导经验 高级 | 监督家庭作业 监督洗澡 |
监督和领导地面 | 激励和监督员工 有效 |
具有团队领导经验 | 管理和监督初级收费 |
监督和领导团队 | 激励和监督团队成员 |
就业类型和薪资:
休闲 | 薪资 |
---|---|
休闲 酒吧门卫 休闲角色 | 按小时支付 周末小时 |
休闲 休闲 操作员 急需 | 按小时支付 各种工作时间 |
休闲 酒吧服务员 写你的 | 按小时支付 合同期 |
休闲 休闲 清洁工 需要良好 | 按小时支付 合同期 部分 |
休闲 酒吧服务员 工作类型 休闲 | 按小时支付 提供加班 周六可用 |
位置和语言技能:
澳大利亚 | 德语 |
---|---|
悉尼中央商务区 新南威尔士 悉尼中央商务区 | 精通德语 咨询性专业 |
悉尼 墨尔本 布里斯班 珀斯 堪培拉 | 一位积极的德国专业教师 |
悉尼 澳大利亚 澳大利亚 悉尼 新南威尔士 | 指定地点 德国资源提供者 录入 |
悉尼 阿德莱德 布里斯班 查茨伍德 墨尔本 | 翻译技能 德语:英语。 |
悉尼 阿德莱德 布里斯班 查茨伍德 墨尔本 | 职位描述 德国资源提供者 录入 |
有趣的是,还存在一个用于检测候选人期望外观的特征探测器。根据这个特征探测器,良好的举止、一定的个人卫生标准和英语口音似乎是密不可分的:
外观 |
---|
白种人语言:英语头发 |
白种人语言:英语口音 |
性格 聪明 整洁的外观 友好 |
整洁和可展现的外观 关怀 |
体面 有礼貌 courteous |
这些例子说明,所获得的过滤器不仅关注职位名称,还涵盖了在职位描述中期望找到的大多数相关部分。虽然卷积神经网络(CNN)以表示和特征学习而闻名,但我们仍然发现它在几乎没有预处理的情况下,从原始且未清理的职位描述中学习预测职位名称的结果非常引人注目。
关键词短语和相关职位描述
让我们再看一看那些最大程度激活 CNN 特征检测器的输入文本片段。尽管这忽略了网络中的转移函数和全连接层,但它是一种有助于理解 CNN 预测的方式。下图突出显示了与描述中激活最大的 50 个文本窗口相对应的烤炉厨师职位描述部分。通过为每个词分配一个简单的颜色代码(按激活程度递增:灰色、黄色、橙色、红色),可以清楚地看到这些文本窗口对应于从测试数据集中提取的职位描述中的关键短语:
请注意,职位描述的前 20 个词未被使用,因为它们通常包含职位名称(通常是职位的标题)。
一个最终的见解是,模型的 CNN 部分基本上是一种将文档转化为向量的方法,用于生成可变长度职位描述的嵌入。因此,利用这些嵌入进行相似职位描述的查找没有任何阻碍。这是上面提到的烤炉厨师职位在嵌入空间中最接近的测试集空缺:
毫无意外:这位雇主也在寻找烤炉厨师。同样不太令人惊讶的是,通过查看哪些神经元显示高激活,可以发现这些职位空缺基本上共享相同的活跃神经元。例如,神经元 725 在“烹饪技能,关于食物的知识”和“Prahan 的餐馆。友好”中被激活,而神经元 444 则在“所有腌料和印度菜肴”和“一个烤炉厨师职位”中被激活。因此,模型知道这些表达在语义上是相关的。根据我们的一些实验,这似乎是寻找相似或相关职位空缺的一个有趣方法。鉴于模型不仅仅查看职位名称,并且知道哪些表达是相关的,这相比于仅比较职位名称或职位描述实际词汇的简单方法更具价值。
本文是对一系列博客文章的浓缩概述,这些文章发布在这里。
简介:Jan Luts 是 Search Party 的高级数据科学家。他于 2003 年获得比利时哈瑟尔特大学的信息科学硕士学位,并于 2004 年和 2005 年分别获得比利时鲁汶天主教大学的生物信息学和统计学硕士学位。在 2010 年获得鲁汶天主教大学电气工程系(ESAT)的博士学位后,他在该机构进行了两年的博士后研究。2012 年,Jan 移居澳大利亚,成为悉尼科技大学数学科学学院的统计学博士后研究员。2013 年,他转入私营部门,担任 Search Party 的数据科学家。
相关:
-
文本挖掘亚马逊手机评论:有趣的见解
-
文本分析:入门
-
通过众包衡量主题解释性
-
一个 90 亿美元的 AI 失败,剖析