基于大语言模型的人岗匹配系统设计与实现
作者: 高子轩 王敏
摘要:当前随着每年求职的人数日益增多及网络招聘的普及,投职简历的数量呈几何级数增长。企业的人力资源部门工作量急剧增多,需要从海量的简历中找出企业所需人才。为解决这一难题,文章设计实现了一款基于语言大模型LLM( Large Language Model) 的人岗匹配系统,实验结果表明该方法可以显著减少人力资源部门的工作量,原来由人工耗费几天才能完成的人岗匹配工作被人工智能所取代,缩减为只需几分钟就能完成,大大提高了工作效率。
关键词:人岗匹配;LLM;人工智能;文心一言;语义搜索
中图分类号:TP309.2 文献标识码:A
文章编号:1009-3044(2025)05-0024-03 开放科学(资源服务) 标识码(OSID) :
0 引言
当前,每年毕业的大学生人数逐年递增,仅2024 年的毕业生数量达到了1 084.6万人,每到招聘季都会有数以百万计的大学生投递简历,同时许多公司也会公布自己的招聘启事,招募满足应聘条件的学生。随着网络的普及,基于网络的数字化招聘逐渐成为主流,数字化招聘一方面极大地提高了求职人员投递简历的便捷性,另一方面也让招聘方的人力资源部门面临极大挑战[1]。由于网络投递简历十分便捷,求职者为了增加被录用的概率,通常会大量海投,而不管自己是否匹配招聘岗位,求职者简历编写的质量也参差不齐,这就需要企业人力资源部门的人员投入更多的精力去审核海量的简历,工作量相对以前有了数倍的增加,如何快速准确地从大量求职者中为企业筛选出合适的人才,是当前很多企业的人力资源部门面临的一大挑战[2]。
为解决人工筛选简历耗时长、效率低下的问题,本文将人工智能技术引入人才招聘中。人岗匹配是简历筛选时的一个重要环节,目的是要高效准确地识别人才能力是否和工作要求的岗位相匹配。2022年ChatGPT 大语言模型的横空出世,让自然语言处理NLP(Natural Language Processing) 技术实现质的飞跃,随后国内的百度、字节跳动、华为也都纷纷推出了自己的大语言模型,人工智能已经具备了较为成熟的理解人类语言并和人类进行交流的能力。本文提出了利用基于人工智能语言大模型技术对简历文本的语义进行自动识别,概括出用户画像,判断求职者的能力是否满足岗位要求,并为招聘方推荐最适合招聘岗位的候选人。
1 基于大语言模型LLM(Large Language Model)的人岗匹配系统的构建
以往国内外很多专家学者尝试用深度学习的方法来解决人岗匹配的问题,但是有一个不可避免的问题是深度学习的模型非常依赖于训练数据,按照特定的人工标注的训练数据产生的模型仅在与训练数据集相仿的领域中表现出较好的准确性,而对于冷门或新型领域,由于缺少标注过的训练数据而表现较差[3]。加之求职简历涉及个人隐私,很难获得全行业的求职简历来进行标注和训练,使得此类模型不具备良好的通用性,因此影响到了它的实际应用和推广[4]。本文设计的人岗匹配系统要克服这些缺陷,采用近年来炙手可热的基于大语言模型LLM的方法,通过小样本甚至零样本学习实现简历文本的实体抽取,关键词匹配和语义检索,即依据招聘岗位的实际需求,形成检索条件,对简历库进行遴选,智能化地找出与工作岗位最匹配的n个候选人简历,屏蔽其他匹配度不高的简历,从而显著降低人力资源部门的工作量,提高工作效率。
本文设计的人岗匹配系统的框架如图1所示,在这个系统中选用的大语言模型是百度的文心一言,之所以选择百度而不是ChatGPT,是因为美国的OpenAI 公司在2024年7月9日以后就终止了ChatGPT在中国的API服务。根据全球增长咨询公司发布的《2024年中国大模型能力评测》,百度文心一言在国内的15个大模型中综合表现位居首位,而且为用户提供了免费调用文心一言大模型的API接口。因此选用了文心一言来处理简历和招聘的文本语言语义,并将数据实现结构化。由于不同形式的文本简历会被处理成结构化的数据格式,包括时间、地理等特定格式的信息,还有像薪酬、工龄这样的数值信息以及工作岗位、专业之类的分类信息,所以选用了Elasticsearch数据库,主要该数据库支持多样查询,支持对时间格式的排序,按时间区间的统计;对地理支持位置搜索;对数值数据支持范围查询。对于文本数据,需要处理成向量,按照向量距离来判断语义的匹配程度,而Milvus 是一款专门用于存储和检索向量数据的数据库,支持多种先进的高性能向量检索算法,因此选用它作为语义检索的数据库。文本的向量化采用的是业内使用广泛且成熟的BGE(BAAI General Embedding) 编码。
如图1所示,所有的简历文档都会被预处理,系统调用LLM,这里采用的是文心一言的大模型作为语义分析和实体提取的工具,经过LLM的处理后将非结构化的文档变成了结构化的特征属性集合[5]。简历中的内容分为两类,一类是基础数据可以用数值或分类表示的属性,例如年龄、期望薪酬、工作年限、城市的邮编、学历等可以用数值来表示,应聘岗位和工作类型可以用分类来表示。将这些字段和用户ID组成一个记录存入Elasticsearch数据库。另外还有很多文字描述的内容,例如个人爱好、特长、曾获得的奖项、团队协作精神、独立科研能力、写作能力等文本数据。设计好一个描述应聘者的固定句式,样例如下:
“ 我今年{age}岁,学历是{degree},工作年限是{work_time}年,希望获得的工作类型如 下:{type},期望薪资范围为{minimum}~{maximum},我的其他特点如下: {talent}。”
其中age,degree,work_time, type, minimum, maxi⁃mum这些字段可以用该用户在Elasticsearch数据库中的值直接填充,talent填充的是文字描述的个人爱好、特长等内容。对一个特定应聘者填充完成该句子后再采用BGE模型编码成1024维的向量,加上用户ID 后存入Milvus数据库,可见一个用户简历在预处理后会用用户ID做关联,分别将基础数据和专用于描述该应聘者的词向量存入Elasticsearch数据库和Milvus数据库。
招聘方发出的招聘启事是一个普通文本,包含了对招聘人员的要求,人力资源的工作人员将招聘启事上传给系统后,也可以类似简历那样处理,调用大语言模型LLM将非结构化的招聘启事转化成一个结构化的属性集合,根据这些属性的取值形成一个搜索条件发送给Elasticseaech数据库进行查询,按照招聘的硬性条件进行must的匹配,例如薪资范围、学历要求、年龄要求、工作城市、工作或实习经历等,对于其他的一些特点可以进行should 匹配,例如招聘的工作岗位、工作类型等,因为招聘单位提供的岗位和工作类型很多时候不止一个,因此满足其一即可。存入Elas⁃ticsearch数据库的属性大多是用具体数值来表示的,例如学历就可以根据初中到博士用数值1~5来代替,故要求本科以上的搜索条件就是学历≥3,对于招聘启事中的其他文字描述,例如熟练掌握何种工具、获得何等奖项或证书、与人的沟通能力、团队协作精神、独立工作能力、业余爱好、认同何等的企业文化等,也采用与简历类似的方式进行处理,编写一个用于查询的固定句式:
“招聘程序员,城市029,最低薪资10 000,最高薪资20 000,至少2年工作经验,熟练掌握C++,python,UML等工具,有协作精神,有良好的客户沟通能力,认同一荣俱荣、一损俱损的企业文化。”
然后用BGE编码把这些文本内容转换成1024维的词向量在Milvus数据库中进行查找。Milvus 是一个开源的数据库,其主要特点是具有一个向量相似度搜索引擎,可以为大规模向量数据提供高效的存储、 索引和检索功能。Milvus提供的高效方法来处理和查询高维向量数据,正好满足了本系统中文本相似度匹配的需求。
在Elasticsearch数据库中进行条件搜索的伪码如图2所示。
对于每个搜索的条目还要给出一个得分score,可以根据实际需求调整score的取值来划定招聘候选人的范围。score的具体得分由must部分的搜索比对结果base score 和should 部分的搜索比对结果optionalscore两部分组成,在must比对部分不仅有文本的精确匹配得分text_score,还要有各个数值字段取值范围的比对得分numeric_score,因此must部分的得分计算公式为:
base_score = 0.6 * text_score + 0.4 * (numeric_score1 + numeric_score2);
should部分的得分optional score的初值为0,每找到一个完全匹配项就加0.2,部分匹配项就加0.1,搜索完所有optional field 字段后累加的数值即为optionalscore的结果。最终的final score得分计算公式为:
final_score = 0.7 * base_score + 0.3 * optional_score
计算匹配结果得分score的伪码如图3所示。
召回策略的流程图如图4所示。
服务器后端通过查询模块query会收到前端发送的信息,进行多次召回。第一次在Elasticsearch数据库中通过范围匹配筛选满足各项数值的简历id,例如薪资要求范围,工作年限范围等字段采用must方式,即必须全部匹配;对于工作类型、工作岗位等分类,这里采用should方式,因为应聘者只要满足一个岗位的要求即可。在进行Milvus 检索前,首先将招聘启事中识别的实体字段组合成完整句子,再调用BGE进行词嵌入后编码,获得查询条件的向量表示,最后调用Milvus的 search()函数进行语义搜索。两个数据库的搜索结果分别返回,将Elasticsearch数据库的匹配分数阈值设定为1.3、 Milvus 的匹配分数阈值定为0.6。若搜索结果满足条件数量为0,则进行第二轮召回。第二轮召回将 Elasticsearch 和Milvus的匹配阈值改小一些,再重复操作,若得到结果数量令人满意即可终止,输出查询结果。若还是没有获得足够多的简历,则修改阈值进行第三轮召回,如此循环,直到找出足够数量的搜索结果。
2 实验结果
实验的软硬件配置如表1所示。
从智联招聘上收集了200份不同样式的个人简历和10份招聘启事,采用基于LLM的方法进行人岗匹配,并将搜索结果和人工检索的结果进行匹配,发现匹配的准确率在70%左右。对于人岗匹配的正确程度,有不同的等级划分,例如完全匹配、不同程度的部分匹配等,并赋予了不同的权重。设完全匹配权重为w1,不同程度的部分匹配权重为w2,w3,...,wm 等。完全匹配数量为n1,部分匹配数量为n2,n3,...,nm,总样本数量为N。则准确率公式为:
Accurracy = w1*n1 + w2*n2 + ...+wm*nm/N *100%
经分析发现,影响准确率的原因主要是简历的样式比较多,大语言模型处理的时候,有些简历不能百分百理解准确,在预处理中有信息遗漏;自然语言描述的文本内容采用BGE编码,BGE编码是基于trans⁃former网络的,由于人员不足,提供的训练数据样本量偏小是造成影响准确度的一个主要原因,以后在继续扩充样本量持续改进之后,准确率会有相应提高。
3 结束语
本文设计并实现了基于大语言模型方法的人岗匹配系统,虽然当前准确率还不能达到人工匹配的水准,但以后还可以通过大量标注数据来增强训练,实现对模型的改进和优化,从而不断提升准确率和命中率。可以预见,在人工智能爆发的时代,传统人工翻阅简历匹配工作岗位的方式在不远的将来就会被新技术取代,从而大大提高企业人力资源部门的工作效率。
参考文献:
[1] 贺伟,汪林,吴小玥.人工智能技术对人力资源管理研究的影响述评[J].中国科学基金,2024,38(5):831-840.
[2] 陈春凤,李荣远.大数据和人工智能技术背景下文科生数据思维培养研究[J].电脑知识与技术,2024,20(18):111-113,120.
[3] 刘琼雯,林川.面向小样本的岗位模糊匹配推荐算法[J].电子设计工程,2023,31(14):51-56,61.
[4] 张如静,高圣国.基于前景理论下不确定语言评价的人岗双边匹配决策研究[J].计算机与数字工程,2024,52(2):492-495.
[5] 代必芳,陈贵平.人工智能问答系统的对话与改进策略研究:以文心一言为例[J].电脑知识与技术,2024,20(8):14-16,38.
【通联编辑:梁书】