前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用 Milvus 零成本构建人力资源管理系统

利用 Milvus 零成本构建人力资源管理系统

作者头像
Zilliz RDS
发布2021-03-22 11:52:28
8710
发布2021-03-22 11:52:28
举报
文章被收录于专栏:Reinvent Data Science

✏️ 作者介绍:

梁天新博士,Milvus 用户

1. 应用背景

大中型企业通常会聘用上万名具备不同技能的员工,将他们分配在不同工作岗位上。人力资源部门在人员配置时需要先遍历公司内部职员的简历。当没有员工满足岗位需求时,则需要再遍历已收藏的上万份求职简历。先不论如何收藏管理海量简历,人工筛选简历非常耗时耗力,且容易出错。如何低投入地搭建一套易用、易维护的人力资源管理系统是长期困扰管理人员的难题。

搭建一套人力资源系统并非难事,但为每一份简历找到匹配的岗位并不容易。此过程主要面临以下几个难点:

  • 个人简历写作格式不统一。为了使自己的简历更美观、更具吸引力,候选人会在简历中使用多种模版或添加图片。
  • 个人简历文件格式不统一。Word 文档和 PDF 格式较为常见。还有大量以图片形式保存的简历。

首先,Word 文档和 PDF 格式文件无法直接存入数据库,即便经过人工录入也需要重新组织格式以满足现有系统的要求。其次,依赖 SQL 正则表达式检索语义相近的简历时不够准确。最后,传统数据库需要长期维护,包括人工整理、统一格式、规范化入库等步骤。

因此,我们尝试利用深度学习方法和 Milvus 向量搜索引擎搭建一套简便易行的人力资源查询管理系统。

2. 技术流程

图:技术流程图

2.1 提取 PDF 格式简历信息

本项目使用 pdfplumber 处理 PDF 文件。pdfplumber 可以:

  • 获取 pdf 文件中的文字
  • 提取表格内容:使用 pdfplumber 轻松提取简历中的教育背景等表格中的信息。
  • 进行图形调整:PDF 页面截图中的文字或表格会被框起,因此我们能够判断 PDF 文件识别情况,以便及时调整配置。

2.2 简历中信息类型的划分

虽然简历格式不同,但所含信息大体类似。本项目将数万份简历中的信息进行如下划分:

  1. 基础信息:姓名、出生年月、学历、性别、电话、籍贯
  2. 教育经历:学位、毕业时间、毕业院校
  3. 工作经历:工作单位、工作时间、职务职位
  4. 项目经历:项目名称、项目时间、项目责任
  5. 个人技能:证书情况、个人荣誉、兴趣爱好

整理信息时需要合并相似类型的信息,例如:

  • “工作经历”、“工作经验”均属于“工作经历”
  • “教育经历”、“教育背景”均属于“教育背景”
  • “自我评价”、“个人信息'”、“证书情况”、“个人技能”、“个人荣誉”、“兴趣爱好”等均属于“个人技能”

2.3 构建信息抽取模型

在构建信息抽取模型前,我们需要将此前使用 pdfplumber 提取整理的信息制作成训练信息抽取模型的数据集。样例如下:

本项目使用 BERT-PointerNet 阅读理解式文档抽取模型。我们需要先确定抽取信息的类型,如“项目责任”,然后将信息类型同 BERT 模型进行二次合并,再用 PointerNet 抽取具体信息,如”主要负责为客户提供一手或二手房咨询、租赁买卖等相关业务的全程代理服务"。

图:BERT-PointerNet 模型[1]

我们使用训练过的 BERT-PointerNet[1]模型将非结构化的简历数据转换为向量,以便储存在 Milvus 向量搜索引擎中。

图:BERT-PointerNet 的测试效果

2.4 将数据存储在 Milvus 向量搜索引擎中

本项目中只有文本类型的数据才能被输入进数据库中。我们先搭建了 bert-serving-server 作为数据入库的 encoder 服务端,在 T4 下服务稳定,QPS 至少可以达到 16 条/秒。我们使用 Simbert 作为入库的 encoder 预训练词向量,准确率在本项目中比 bert-base 的高 10%。我们也尽量将年龄、工龄等信息转换成向量存储在数据库中。对难以转换成向量的内容信息,我们则选择进行数字化映射。

如学历的数字化映射: ['博后','博士','硕士','学士','大专','高中','其他']映射为 ['1','2','3','4','5','6','7']

每份简历具有唯一的 human_id。任意一条描述语句都作为一条 embedding 进入 Milvus 数据库,并且对应一个唯一的 unique_id。因此,每份简历都有数十个 unique_id 和一个唯一的 human_id。unique_id 对应的 embedding 代表了候选人的相关信息。这种数据入库方式有利于后续的数据查找和结果返回。

本项目中我们构建了两个collection,分别是项目经历 collection(Collection_Project)和工作经历 collection(Collection_Work)。每个候选人的两个 collection 中除了转换后的项目经历和工作经历 embedding 以外其余的都相同,特别是 human_id 完全一致。由于工作经历和项目经历在描述候选人历史的时候数据维度不同,因此需要分开存储,更利于精确寻找候选人。如下图:

2.5 查询方式

我们利用 Milvus 向量搜索引擎查询数据库中的简历信息。任意信息组合的查询均可在 20 毫秒内完成。例如:查找年龄在 20 至 40 岁之间、本科以上学历、精通策划项目、擅长编写 Java 和 Python 代码的候选人。

我们将“精通策划项目”和“擅长编写 Java 和 Python 代码“分别映射为两条向量输入到数据库中进行检索。样例如下:

通常我们选择前 topk=10 名,然后通过 human_id 进行去重,最后留下合适的候选简历。我们采用全量更新的策略:每次出现新简历入库或者无效简历删除,我们都会对库里的所有向量重新分配 ID。

3. 项目总结

本文详细介绍了如何利用 Milvus 搭建人力资源查询管理系统。我们搭建的人力资源查询管理系统具有低运营成本、高并发、易维护等优点。无需掌握 SQL 语句也可以轻松查询符合岗位需求的候选人。使用这个系统能够显著节省 IT 和人力成本。在当前这个文本、图像、音频等非结构化数据爆炸式增长的时代,通过 embedding 技术将非结构化数据映射成多维向量后再进行检索已成为趋势。Milvus 作为分布式向量检索引擎,具有高性能、易部署的特性。Milvus 极大地节省了项目开发成本,显著提高了系统检索性能,并很好地满足了本项目的技术和业务需求。

参考文献

[1] 王炳乾,梁天新,宿邵勋.基于BERT的多层标签事件抽取模型[J].中文信息学报,2020.

欢迎加入 Milvus 社区

github.com/milvus-io/milvus | 源码

milvus.io | 官网

milvusio.slack.com | Slack 社区

zhihu.com/org/zilliz-11| 知乎

zilliz.blog.csdn.net | CSDN 博客

space.bilibili.com/478166626 | Bilibili

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ZILLIZ 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 应用背景
  • 2. 技术流程
  • 3. 项目总结
  • 欢迎加入 Milvus 社区
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档