AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


RAG初探 - 以人岗匹配试水
发布日期:2024-04-29 19:13:01 浏览次数: 2067


本文约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 LLM

LLM全称Large Language Module,即大语言模型,具备(偷了个懒,让GPT4帮写):

  • 高级的语言理解和上下文分析能力:LLM能理解和处理复杂的语言模式,不仅限于关键词

  • 广泛的知识库和学习能力:LLM接受了大量和多样化的文本数据的训练,包括不同领域的专业知识。这使得它们能够理解各种专业领域的术语,如“机器学习”、“深度学习”、“神经网络”等,

  • 综合信息处理:LLM能够基于简历的整体内容来评估候选人的适合度,而不是单一或孤立的关键词。

  • 动态更新和适应新知识:LLM的设计允许对新知识和概念进行快速适应和理解,减少了人力资源专业人员在特定领域知识不足的问题。

1.2 RAG

基于上述能力,LLM能准确理解用人需求简历内容,但是拿着用人需求在简历库里找人,还需要实现【到简历库】+【找人】2个费劲的动作【建数据库】【检索】2个重要的技术。

这个配套技术叫做RAG技术,即Retrieval-Augmented Generation,检索增强技术。

  • RAG基本原理

基本原理就是把简历转化为向量(1份简历1个向量),全部放到数据库里,然后把我的用人需求也转化为1个向量,到数据库里找最相近的向量。

比如:

我的用人需求转化为向量,用数值表示是0.001。

数据库里A简历用向量数值表示为0.002,B简历用向量数值表示为0.005。

那肯定是A简历更接近0.001,所以最相似,人就这样被找出来了。


为啥要把简历转化为一串向量呀?

因为向量可以用非常多的维度去表达一个意思,比较全面,能减少歧义。

二是因为向量是数字,计算机处理起数字比处理文字快。(多维向量处理GPU比CPU快,这就是英伟达为什么也火了)

1.3 LLM+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…担任产品兼项⽬经理'])

  • 把匹配结果和用户问题组合成Prompt模板

这个没啥技术含量,就是把用户问题和找出的人选简历,拼起来,问GPT。

比如:

prompt_template =

"""

角色和任务:你是一个高级招聘专员,主要是根据用户问题,在人才库里找相关信息。注意:如果下述已知信息不足以回答用户的问题,请直接回复"我无法回答您的问题"。

已知信息:([' XXX,  男,年龄:31岁,18122749291…担任产品兼项⽬经理'])

用户问: 我想找个美国上过学,30岁以上,拥有硕士学位,做过HRIS的产品经理。找到了,可以简单介绍一下TA

请用中文回答用户问题。回答内容请根据用户要求一一对应讲解匹配点。

"""

  • 调用LLM解析Promp, 得到最终回复

——————以下为系统回复——————

找到了符合条件的人选,他叫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。



53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询