|
本文约3500字,阅读时间7分钟 2天,一个没有什么代码经验的产品经理,借助GPT4,写出了一个简单版的有RAG(检索增强)功能的简历库人岗匹配功能。大概效果如下: 
(看不清图片的可以看下文) 用户问: 我想找有海外留学经验,30岁以上,拥有硕士学位,做过HRIS的产品经理。找到了,可以简单介绍一下TA。
系统回复: 找到了符合条件的人选,他叫XXX,是一位31岁的男性,拥有人力资源管理硕士学位,毕业于普渡大学。XXX曾在知乎担任HRIS相关职务,具体工作包括SAP SuccessFactors的实施,主要负责员工中心、入职和绩效模块的上线。
在以往,做出一个人岗匹配功能,可能需要大量的人力物力及时间。以下为GPT4的总结: 
我用2天做出的简陋版AI人岗匹配功能,有以下特点: 1.关键词不匹配,也搜索得到。比如“在美国上过学”,简历原文里没有“美国”两个字,但是通过“普渡大学”,系统也可以判断为在美国上过大学的候选人。 2.提问-只要说人话,系统就秒懂。无需拘泥于提问的格式,如:请给我找个XX样的候选人/帮我淘个库,要XX样的/来个XX样的人选,系统都能理解。 3.回答-系统的回答,可以自由定义回答语气、形式等,提升用户体验。大家用过的聊天机器人,是不是感觉说话特别客气、官方?我只需要给系统一点提示,马上变身为淘宝客服,霸道总裁或二次元萌妹。形式上,系统找到人选后,可以让他总结一下,以人物简介+亮点+风险介绍(如工作经历断档)等方式。 那我具体是怎么搞的呢?复盘一下过程。 1. 核心技术1.1 LLMLLM全称Large Language Module,即大语言模型,具备(偷了个懒,让GPT4帮写): 高级的语言理解和上下文分析能力:LLM能理解和处理复杂的语言模式,不仅限于关键词。 广泛的知识库和学习能力:LLM接受了大量和多样化的文本数据的训练,包括不同领域的专业知识。这使得它们能够理解各种专业领域的术语,如“机器学习”、“深度学习”、“神经网络”等, 综合信息处理:LLM能够基于简历的整体内容来评估候选人的适合度,而不是单一或孤立的关键词。 动态更新和适应新知识:LLM的设计允许对新知识和概念进行快速适应和理解,减少了人力资源专业人员在特定领域知识不足的问题。
1.2RAG基于上述能力,LLM能准确理解用人需求和简历内容,但是拿着用人需求在简历库里找人,还需要实现【到简历库】+【找人】2个费劲的动作。即【建数据库】和【检索】2个重要的技术。 这个配套技术叫做RAG技术,即Retrieval-Augmented Generation,检索增强技术。 基本原理就是把简历转化为向量(1份简历1个向量),全部放到数据库里,然后把我的用人需求也转化为1个向量,到数据库里找最相近的向量。 比如: 我的用人需求转化为向量,用数值表示是0.001。 数据库里A简历用向量数值表示为0.002,B简历用向量数值表示为0.005。 那肯定是A简历更接近0.001,所以最相似,人就这样被找出来了。
为啥要把简历转化为一串向量呀? 因为向量可以用非常多的维度去表达一个意思,比较全面,能减少歧义。 二是因为向量是数字,计算机处理起数字比处理文字快。(多维向量处理GPU比CPU快,这就是英伟达为什么也火了) 1.3LLM+RAG的黄金组合,通识能力+垂直能力结合LLM可以处理通识类问题,加上RAG可以增强处理垂直领域问题的能力。 你可以理解LLM就是你请到家里做家务的保姆,家务公司早就训练好保姆中文沟通能力和基本的家务能力。但是她来你家,不清楚你家房间情况、家具的摆放位置、你的清洁要求。而RAG就相当于你往家具上贴了一个个标签,这个抽屉放碗,那个抽屉放书,书要竖着立起来放,等等,增强了她的整理能力。【贴标签】的过程就是向量化。 有了这样的组合,你可以把公司的规章制度,人力资源政策要求结合到大语言模型里,成为一个懂你们公司情况的小助手。 2. 实现过程2.1 把简历灌到人才库里把pdf简历转化为简历,我用的是python的pdfminer包。 但是具体代码怎么写的呢?我是产品经理我不会!问GPT! 
试了一下,真的可以耶!GPT太厉害了。 
(后面还做了些数据清洗的操作) 把文本转化为向量,目前效果最好就是OpenAI的,所以直接用。 
这里的数据库用的是开源的Chromadb。代码不会写?还是请GPT帮我写。 首先要搞一个空的数据库,然后往数据里导入我刚才的简历数据(text) 
当然,中间还有些细节,比如需要定义往数据库写入简历的名字是什么。 2.2 到人才库里搜人(检索增强)很简单,比如: user_query = ("我想找个美国上过学,30岁以上,拥有硕士学位,做过HRIS的产品经理。找到了,可以简单介绍一下TA") 
找到了人选:([' XXX, 男,年龄:31岁,18122749291…担任产品兼项⽬经理']) 这个没啥技术含量,就是把用户问题和找出的人选简历,拼起来,问GPT。 比如: prompt_template = """ 角色和任务:你是一个高级招聘专员,主要是根据用户问题,在人才库里找相关信息。注意:如果下述已知信息不足以回答用户的问题,请直接回复"我无法回答您的问题"。 已知信息 [' XXX, 男,年龄:31岁,18122749291…担任产品兼项⽬经理']) 用户问: 我想找个美国上过学,30岁以上,拥有硕士学位,做过HRIS的产品经理。找到了,可以简单介绍一下TA 请用中文回答用户问题。回答内容请根据用户要求一一对应讲解匹配点。 """
——————以下为系统回复—————— 找到了符合条件的人选,他叫XXX,是一位31岁的男性,拥有人力资源管理硕士学位,毕业于普渡大学。XXX曾在知乎担任HRIS相关职务,具体工作包括SAP SuccessFactors的实施,主要负责员工中心、入职和绩效模块的上线… 3. 抓狂的测试调优过程3.1 连人选电话都查不到?我问了个简单的问题:请告诉我XXX的电话是多少。 系统回答:13760687362。 我一看,明显是错的。因为18122749291才是我电话,13760687362@163.com是我邮箱前缀。都是数字,长度也一样,GPT分不出来。 咋整? 所以我让GPT帮我改代码去掉乱码,变成这样: [' XXX, 男,年龄:31岁,18122749291,13760687362@163.com…担任产品兼项⽬经理'] 这个问题就不再出现了。 3.2 怎么往人才库放第二个人?刚才成功把一个简历放进向量数据库了,如何放第二个,至第100个人进去呢? 我也不会写for循环啊!还是请GPT帮我写代码! 
没调试几次就完美运行了。GPT,永远的神! 3.3 找到了会大模型的人选,为啥问LLM就不理解了?我的问题是:请帮我找到个有LLM相关经验的候选人。数据库搜到了这个人:
最终回答:我无法回答您的问题。 为啥??ChatGPT就是LLM呀,GPT你这都不懂吗? 所以,我把LLM模型,从gpt3.5-turbo换成了gpt4,回答正确了 因此,我知道每个模型的能力是有巨大差异的,不同模型有不同的长处和弱点,和应用场景! 也知道了,以后部署自己的模型,调试结果,可以多换模型去试试。 4. 后续优化方向4.1 优化切片颗粒度我现在是把1~2千字的简历切成一个向量,拿去和用户问题向量进行匹配,精确度很差。 其实也很好理解,比如: 方式1:让你读完2000字的简历,然后问你,里面有没有{滴滴出行}4个字。 方式2:把2000字的简历,拆分成5段,每段400字;每看完400字,问你,里面有没有{滴滴出行}4个字。 肯定是方式2更好判断。
因此后面,可以做的就是把简历再切小一些,比如基本信息一个片段,工作经历一个片段,项目经历一个片段。一旦匹配到合适的片段,再拼起来给到完整的这个人的简历信息。 4.2 优化简历内容结构刚才GPT也说了,JSON这种格式化的数据,数据库更好搜索。对于我来说,把简历转化为JSON格式是需要写很多正则表达式的,拆分成姓名、年龄、教育经历等,但是求助GPT应该问题不大。 4.3 返回结果排序和匹配阈值简历库:这20个人有19个都是HR产品经理 我的需求:帮我找HR产品经理,越资深越好,最好在一线大厂里工作过,还要抗压。
简单的思路为,这19个人,可能都满足要求,但是要根据要求进行排序,匹配度达到80%的提供给招聘HR。这个阈值多少比较合适,需要大量的测试。 4.4 调整关键参数,多试在我做的这个简陋的人岗匹配模型里,有4个重要的参数: 1.LLM模型选择。这决定了分析的效果和成本,GPT4肯定比3.5好,但是更贵; 2.数据库返回的结果个数。由用户需求定,他要找几个人我给他找几个人; 3.Prompt。非常重要。虽然就是写几个字,但这几个字,就决定了这个模型能否很好的理解并运行你让他做的事。(就像你老板让你做事一样,指令越清晰,越好做); 4.用户问题。用户问题问的越清晰、具体、没有歧义,回答的越好。(请人人都提升自己的提问能力) 4.5 需要准备完整的测试集我花了1天时间做的测试,只是基于经验,觉得哪些问题可能比较重要。要让这个人岗匹配功能拿得出手,甚至能拿去卖(商业),还需要做完整的测试集合,从方方面面测试这个功能的效果,包括稳定性、安全性、鲁棒性、准确性等等。 4.6 需要有一个人岗匹配测评工具来测试效果这条是上面的延伸。要拿去卖,你总不能说我的产品很牛逼,你试试,试几条成功就买。市面上有那么多人岗匹配功能,凭啥买你的? 需要有一个相对标准的人岗匹配效果的测评工具,来测试你的产品,效果是否达到市场基准线,或者超过某些产品。当然,购买决策还需要参考价格。好的东西肯定是贵的,要看ROI。 |