链载Ai

标题: 微调HR模型-增强面试评价能力 [打印本页]

作者: 链载Ai    时间: 昨天 09:37
标题: 微调HR模型-增强面试评价能力

本文约5000字,阅读时间20分钟

本文是保姆式的教程,想自己微调HR大模型可耐心看完。

先看效果

微调前:

微调后:

微调模型有什么用?

微调大模型可以让大模型适应特定的任务和场景,在此场景下表现能力更强。

比如GPT 3.5的相当于大学生,微调后相当于读了个HR的硕士,他在HR场景下能力更强,懂得更多,回答得更专业。

那我要学微调吗?

不建议。?

除非你是技术大牛,未来想加入OpenAI这种公司。真正需要会模型训练(含微调)的人,全球仅需要几百位(最顶尖的科学家)。

个人观点,未来的大模型一定是AGI即通用类大模型,在方方面面都很强。我们微调出什么HR大模型,财务大模型,花个上千万RMB去进行模型训练不说,整体效果还不如花个几分钱直接调用OpenAI的GPT4。(数据合规问题另说,都有解决办法)

在没有足够财力和时间情况下,个人/小公司微调模型意义不大。


以上为心声,下方为对外说辞:

微调好啊!?

好吧,既然你要学模型微调,那开始吧!

(做好心理准备吧,每一步都要搞你1天)

01

什么是模型微调?

抽象地说,你可以理解模型微调相当于调节灯光的亮度,根据你想要的亮度,在开关旋钮那里滑动(0~100%亮度),直到你想要的结果。

实现方法其实很简单,就是调整模型的参数(开关旋钮)。模型训练的本质就是求解最优化参数的过程。

有几个词需要澄清下,容易混淆

根据训练方式,分为无监督学习、监督学习和强化学习(基于人类的反馈学习RLHF,俗称点赞和差评)给模型进行训练。

根据训练样本量,分为零样本ZST、单样本OST、小样本FST、多样本MTL学习。


02

需求分析

这是我做这个模型微调尝试的初心,我希望能有一个HR场景:

经过2天的思考和研究,得出场景:

智谱公司的ChatGLM3 - 6b中文大模型,已经很不错了,但是我希望他在评估压力面试问题时,能更专业,所以希望微调出更强的能力。

产品目标:能正确评价压力面试答案的好坏,并结构化给出评价理由。

03

环境搭建

在模型微调前,需要准备好系统环境,主要包括:

以上内容具体怎么操作,可参考我的另一篇文章,里面有保姆式教程:

教你三步部署本地大模型


04-1

准备数据

(HR产品经理发光发热的步骤)

我如何准备训练数据呢?需要先思考以下几个问题:

毕竟要喂给模型的,格式错了就训练不了。

如果数据内容质量差,训练出来的也是垃圾,就不能增强模型评估压力面试问题的能力。最好和真实的面试记录一样。

手写?用GPT帮我生成?上网下载资料?找公司帮我做数据?

  1. 数据格式

ChatGLM3训练的数据格式是这样的(JSON格式):

{"conversations": [

{"role": "user", "content": "请评价以下压力面试的回答\n问题:你为何在上一个工作中仅待了六个月?\n回答: 在我上一个职位中,我确实只工作了六个月,但在此期间,我迅速适应了新环境并对团队做出了显著贡献。我提升了部门的工作效率通过引入新的项目管理工具,并帮助团队按时完成重要项目。我离职是因为我寻找更大的成长和学习机会。"},

{"role": "assistant", "content": "这个回答很好,主要有三个方面的原因:\n1.回答展示了应聘者积极面对挑战,快速适应变化的能力。\n2.通过举例说明在前职位中的成就,明确展示了自己的贡献和能力。\n3.说明离职原因时,强调寻求更大成长机会,体现了应聘者的职业发展导向和积极态度。"}

]}

2. 数据内容

要保证训练效果,最好对同一个面试问题,有一个好的回答和一个不好的回答。

{好的答案}

{不好的答案}

最后,我希望这些压力面试的问题和答案不能随便造,都是按照实际情况产生,比如:

  1. 数据生成

一般数据准备要分4步:

基于上述数据准备的策略,我们要怎么搞出这样的数据呢:

帮我生成一系列压力面试问答及评价。每组包括一个问题,一个好回答及其评价,一个不好的回答及其评价。请依照以下简化要求:问题简短,约20字,可涵盖打断、质疑或提出难题。好回答约80字,展示候选人的应对策略、逻辑性、自信、创造力等。好回答评价约100字,聚焦于问题解决策略、适应性、条理性、举例子、自信、创造性等。不好的回答约80字,可能表现为情绪失控、逃避问题、防御性太强、缺乏逻辑和条理、缺乏准备,回答过于简单或者笼统等。不好的回答评价约100字,指出回答中的情绪失控、逃避问题、防御性太强、缺乏逻辑和条理、缺乏准备,回答过于简单或者笼统等。格式要求:{"QA":"请评价以下压力面试的回答\n问题:...\n回答:...","Eval":"这个回答很好,主要有三个方面的原因:\n1....\n2....\n3...."}{"QA":"请评价以下压力面试的回答\n问题:...\n回答:...","Eval":"这个回答不好,主要有三个方面的原因:\n1....\n2....\n3...."}


04-2

数据生成过程踩的坑

原因:因为GPT生成文本有数量限制和响应时间限制。但是我要造1000条数据怎么样?

解决方法:我让GPT帮我写了一段脚本,向GPT请求100次,把造的数据写到我本地的txt文档里。相当酷炫,我去健身回来,就搞好了!全自动!

原因:GPT受temperture的原因,结果有随机性。但我不能设置temperature=0, 因为我希望他生成多种多样的面试记录。

解决方法:我让GPT写了一段代码清洗不符合格式的数据。大概占10%。


05

微调准备

  1. 检查并下载微调的工具包

命令行指令:pip install -r requirements.txt

*注意要在ChatGLM3/finetune_demo这个目录下进行下载依赖工具包,不然就下错啦~ 不然可能下到其他工具的依赖包了。

  1. 切分数据集

我请GPT生成了1000条数据,根据经验法则,进行以下切分,训练效果最好:

  1. 设置数据集路径

记得改名和改路径!

4. 修改模型超参

啥叫超参?

就是一些超级开关,对模型训练影响很大的参数,要根据你硬件和数据集的情况调整这些开关,可以提高模型训练的效率和效果。

具体我设置的超参情况(我用Lora去微调):

(详细设置请阅读原文)

06

开始微调

常用的模型微调方式有2种:

我们采用Lora的方式进行微调。一行代码即可启动微调:

!pythonfinetune_hf.pydata//root/autodl-tmp/ZhipuAI/chatglm3-6bconfigs/lora.yaml


大约等待20分钟,就训练好了!

输出了10个模型节点,以及日志:

07

观测效果

我们采用TensorBorad去观察模型训练效果。(详细步骤请看原文)

1. 打开AutoPanel

2. 切换到TensorBorad

3. 我们一般观察几个超参:

结论:在1000这个点,损失率最低,效果最好,把这个点的模型,作为我们训练好的模型!


08

成果展示

我们采用Streamlit工具展示模型效果,具体怎么搞出来的可以参考我的另一篇文章的《5. 漂亮测试:Streamlit工具》章节。

教你三步部署本地大模型

微调前

微调后

09

踩坑心得

作为一名编程小白,整个环境搭建、微调花了大概5天时间。其中在环境搭建时,遇到的BUG不计其数,很抓狂。现在再让我从0开始搭建环境到微调完,可能也就2个小时。

  1. 显存不足/内存不足,跑不了大模型,怎么办?

importtorchimportgctorch.cuda.empty_cache()#在加载新模型前,尝试删除旧的模型实例if'model'inlocals():delmodeltorch.cuda.empty_cache()gc.collect()

rm-rf~/.cache#删除缓存文件

2. 要先按项目requirement安装依赖包

在安装ChatGLM3、下载安装大模型、微调前,都要先按要求安装依赖包,不然很容易搞到一半就报错。


3. 经常报错,说明依赖包出问题了,不如重头开始重新搞

Python环境很复杂,有很多包,每个包又有很多版本。有时你明明已经按要求安装很多包,结果不行,老是报错,然后就疯狂换数据源,升级降级包,换环境,搞得整个系统混乱不堪。

我就遇到这个问题,有个报错搞了1天都解决不了,后来我就索性从头开始搭建环境,一个个包按要求、按顺序安装,结果微调模型就一切都很顺利,2个小时就搞定了。


10

微调总结

作为HR产品经理,微调的整个过程让我很煎熬,让我有很多思想斗争。

1. 项目开始前

2. 微调过程中

3. 微调后总结








欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5