聊聊这段时间搞大模型的经验与体会

目录

  • 引入

  • 数据侧

  • 模型侧

  • 业务侧

  • 成长

引入

在B站自学过机器学习和深度学习的朋友们应该对这个名字并不陌生:李沐。大家都心照不宣的称呼他为导师、沐神,我也不例外。对于我来说,最开始他的动手学深度学习以及后续的很多论文精读系列对我的帮助确实很大。当然,除了沐神之外,朱毅老师在多模态领域的讲解也非常精彩。

前段时候,沐神分享了他在大模型创业中的一些经历,又分享了 Llama 3.1 的精读系列,最近他回母校又做了一场关于大模型和个人职业发展的分享会,虽然没能亲身去追星,但从大家放出的资料上看,确实是又拓宽了自己的眼界。

正好也是从北京回来快半年了,最近搞的也是大模型相关的事情,看完沐神的分享后,有了不少的感触,所以索性就跟一笔,简单聊一下这段时间的一些经验和体会。

数据侧

这段时间我主要是负责集团内的两个大模型项目,一个用于话术对练,一个用于话术评价。我这的应用场景是通话对话,说白了这两个需求,一个是用于角色扮演,模拟客户与员工的对话,主要是为新人培训和练习提供真实的互动场景;另一个则是用于评价通话,主要是用于评估员工在对话过程中的专业性,并给出改进的建议。

首先先聊一下话术对练任务,其实说白了就是角色扮演。当我拿到实际的通话录音的时候,确实是感觉会面临很大的挑战。因为通话数据要比普通的文本数据复杂很多。首先就是 ASR 转录的效果,我实际抽样对比了几下,一些开源的 ASR 模型在我的场景下效果不是很令人满意,所以就基于业务数据训了一个 ASR 模型。这期间不可避免的遇到了方言、口语化、象形字转录易错、音轨穿轨、单音轨声纹分离等问题。对于前几点,暂时是通过一些工程化的方式根据规则去清洗修正了一下。对于音轨和声纹的问题,好在是比较顺利的找到了去年年底的几篇开源工作,效果还不错,我也大概抽了一眼,都是用 Transformer 和 LSTM 去做的,等有空了写下笔记。ASR 和一些问题修正后,还涉及到 TTS 的部分,好在现在的开源工作效果都不错,能够让我拿来即用。

清洗完数据后,面临的一个拿不定的问题就是数据配比的问题,看了一些文章和综述,最终拿定的结论就是采用九一开的方式。找了很多通用领域的数据,主要是单轮、多轮的对话以及一些角色扮演的数据,最后再混入清洗好的业务通话数据,构成了话术对练任务的训练预料。

话术对练任务和话术评价任务的数据还不太一样。对于对练而言,只需要准备好足够多的多轮对话数据即可。但是对于评价来说,需要更高质量的、标注好的评价数据。因为离不开人工标注的参与,我这的标注同学也没有标过这部分的数据,所以需要业务那边的培训和支持,但是她们的积极性并不高。也可以理解,毕竟大模型并不能立竿见影的很快看到结果,所以和业务拉扯、开会就费了很大的力气。这期间先是熟悉了业务对话的流程,然后很费劲的细化、量化了评价要求标准,然后制定了详细的 CoT 的标注框架流程。

因为评价要求标注有好几个维度、对话场景又可以分为多个,所以不确定不同子任务对于总损失的贡献情况,于是我又 fork 了 llama-factory 修改实现了 channel loss,确保能够看到不同子任务对于总损失的影响。

我去年几乎没怎么关注过大模型,因为我在上一家公司做的是数字人和视频生成相关的事,所以为了避免少走弯路,这期间看了大量的资料。在垂域的场景下,数据的质量真的是至关重要,毕竟丹方的质量好才能确保炼出一颗好丹。并且它并不像是通用大模型那样对数据多样性要求很高,反而垂域下的数据更要与实际业务充分的贴合。比如我这边的话术对练任务,ASR、TTS 的效果直接影响训练和实际使用,并且不可避免的会遇到一些方言、口语化、音轨等问题。再比如话术评价任务,需要结合业务去细化和量化出一个评价的要求,才能更好的实现对通话的评价,这其中不光牵扯到对业务的理解,还牵扯到和业务方的沟通。

这些都是需要去操心的点,因此,垂域大模型并不是说简单的混一混数据然后通过 Lora Finetune 或者 SFT 就可以的,它需要更加细致的数据准备,以及和实际业务需求更深刻的理解和贴合。

模型侧

刚刚聊完了关于数据相关的点,接下来聊聊关于模型的部分。

对于话术对练任务,拿数据训完之后,暴露出的一个问题就是说话的风格过于机器化。其实按照我之前的知识储备直接就想到了 RLHF,但是毕竟过去1年了,所以又看了其它的一些资料,比如 RLAF、DPO、simPO 等等,还看过阿里关于对齐的综述,包括比较火的直接编辑表征空间解决对齐这些方法。最后权衡了一下,还是决定先试一下 RLHF 的方法,毕竟奖励模型和强化学习的策略从理论上来讲确实是合理的,只不过将 PPO 进行了替换,最后的效果也确实有了很大的改善,能够流利的去对话了,只不过偶尔还是会出现一些只回答“嗯”和答非所问的问题。其实这个问题的出现我能够猜到,在实际的对话语料中,存在了不少的这种回答,比如员工在说问题3,客户在说问题1,在单轮场景下是答非所问的。我还不清楚是不是和 llama factory 关于 history 损失计算那有关系。先存疑吧,目前是先用着积累一下数据和反馈。

对于话术评价任务,最开始的想法太过于理想化,直接来大尺寸的模型 + 大量的高质量 CoT 数据,但实际上数据标注难度太大,并且也不可能标那么多的通话。所以就退而求其次,采用两阶段的方式。一阶段先细化、量化好话术评价要求,然后调不同大模型的 API 来调试不同的提示词,得到一个业务觉得认可的结果。然后二阶段的时候再批量去生成评价,然后人工再去复标,这样会极大的节省人工的精力和提高效率。

关于话术评价这边的训练,目前还没进展到。初步的想法就是先拿尺寸小一些模型来试试效果,当然稠密的模型和 MoE 架构的模型我也一定会试的,并且还有一个可行的方案是会尝试用大模型蒸馏,比如用一个 32/72B 的模型去做教师。

RAG 也是一个不错的想法,通过 few-shot 的方式提供示例,但是目前这些开源的 RAG 项目其实用起来并不是很舒服,光 PDF 识别这一块就问题很多,并且知识库的存储方式我也想换,所以之前讨论了一下,决定是重构 RAG,但是人手不够所以就暂时搁置了,先弄完话术评价二阶段的训练再去重构,同时集团那边也有智能文档问答的需求,所以为了可重复利用还会给 Agent 留出一些地方来,不过这都是后话了。

在我的场景里,模型训练这块其实说白了只是微调,上周在调试话术评价的提示词的时候,发现大多数的开源模型得到的结果已经还算可以了,只不过涉及到一些专有名词或者实际业务场景时生成的结果会有瑕疵,所以会有二阶段的训练,目的就是让模型尽可能的知道业务领域的专有名词以及实际的通话对话流程。

不过,有一点是我比较担心的,就是续训练模型有极大的概率会学了新的忘了旧的,所以至于后面要不要进行退火、后训练或者其它一些处理都要看二阶段的效果。但是矛盾的一点是,我既担心又不担心,因为一阶段的产出是高质量的带有 CoT 的数据,所以二阶段的效果理论上是能够达到预期的,对于评价的通用能力不就是包含于对话术评价的能力的提升里了吗?

总的来说,如果数据量不够,就可以先尝试用大模型和调试提示词去看看能不能满足需求,至少是会缓解标注的压力,其次再是标注数据和训练,至于数据如何标,也要根据业务去实际的考量,比如在我的场景下,需要制定细化的评价标准和 CoT 的框架,才能使模型的结果令人满意。至于从0去预训练或者基于一个强 base 去后训练,恐怕这对于绝大多数场景来说是不现实的,随着开源的势头越来越大,模型将不会成为壁垒,数据和算力相比来讲会更加重要和难以获取和处理。

业务侧

在业务侧,除了要强调垂域模型应贴合实际业务需求外,还想说的是一点是:大模型的评估虽然很难,但很重要。其实最开始我也遇到了这一些列的问题,就是话术对练、话术评价两个大模型以及一个 RAG 项目如何验收?好在大家搞大模型除了打榜外,也有很多人关注到了这一点,能够让我搜到一批文章,接下来也简单聊一下。

首先是话术对练,在这里其实我的评价维度有三部分,第一个是垂域生成能力的统计评估,这一块又包含了统计评估和语义评估;第二个就是对于垂域生成能力的客观评估了,这一块专门做一个奖励模型,来输出和人的一致性得分;第三个就是通用生成能力的对比评估,这一块主要是分为通用能力和扮演能力,找的开源打榜的数据,测试和它们的差距。有了评估验收的方式后,就是制定验收的区间了,比如这一些得分在多少区间达到验收的标准。

其次是话术评价,这一块比对练要麻烦的多,首先是要制定并和业务确定下他们想要的输出格式,以及上面提到的话术要求标准。有了这个之后,再去想如何评估模型生成的话和人标注的话的一致性。首先,传统的机器翻译的一些指标是肯定不合理的,太死板和生硬。其次,基于语义的相似也不是很公平。在看了几篇工作后,我想到了一个我们内部都一致认可的方法,大致的思路就是将生成问题的评估转化为回归问题的评估。

简单来说,评价两段文本的一致性,因为它们所服务的对象和目标是一致的,都是对通话的评价。所以就能够提取出几点维度,利用大模型根据这几点维度去给这两段文本打分,目的是衡量生成的文本和人标注的文本的一致性,每点维度都会对应了几个得分段。同时因为大模型生成存在不确定性,所以会拿到每个得分段的概率来进行加权,并且单个大模型会多跑几轮做平均。还考虑到不同大模型的效果不一样,还用了集成的思想,并且利用 spearman 系数为不同大模型赋予不同的权重。每个维度得分的累加就代表当前通话样本的评估得分,它和人的得分的绝对误差越小就代表一致性越高,这里人的得分其实就是所有得分段的最高分了,以此来验收和评估话术评价大模型的效果。

其次是关于 RAG 的项目,我当时花了大概1周的时间,把这部分的评估代码给写完了,也是看了几篇开源工作然后加入了实际的业务考量,这个就比上面两个简单了,只需要衡量输入、上下文、输出之间的关系就可以了。

总的来说,对于模型的评估其实是很重要的,这需要针对具体的任务需求来制定合理的评估验收方案,然后所有的调整都需要围绕着提升效果来做,这样就不至于盲目看不到方向,切记不要只是简单测了几条数据就觉得模型的效果可以了。

成长

说心里话,到现在也没有后悔做出离开北京这个决定。只不过对于北京,让我念想的只有两点:一是我上一家公司的主管,二是火烧云的油焖鸡。

可能真的是因为当初自己的一些努力,让我遇到和抓住了这个机会,然后就回了青岛。这半年的负责人当下来,确实是让我对自己有了更加进一步的认识和总结,主要是自身的软实力,比如性格、做事方式、对上交流等等。在我之前的两家公司,都有组长、主管给我兜底,也就是说我只需要完成好自己的任务就可以了。但现在不一样了,我不光要对“自己”,还要“对下”和“对上”,这光靠做事有责任心是远远不够的。所以讲真的,我是打心底里感激我上一家公司的主管,我在他身上学到了太多的东西,虽然我们只是短短相处了1年。

我之前的状态就是干完自己的话后,总想着学一些别的,所以就可以有时间写笔记发文章。现在其实说实话没太有心思了,因为要考虑的事情变的更多了,当然我不否认这些东西都是相互的,对我来说也是一个成长和蜕变的过程,就像是一个孩子离开了父母的襁褓。之前是领导给安排什么任务就好好的干完就可以了,遇到问题了也是直接去找。现在当位置互换后,才能切身的体会到不易。比如需要根据需求给出一套方案,同时我不光还要有1个想法,也就是说我最好是需要有备选的主意。然后就是和业务、诸多领导、老板多次开会讨论,阐述为什么这么做、这么做的收益、这么做的投入等等。然后再将活按人头去分,别人有问题也是来找我,同时还要尽可能的考虑可能会面临的问题,能不能够提前规避,要是真的遇到了怎么办…,以及关于算法这块的数据怎么弄、训练、部署、交付等等,这些都是我现在需要操心的事情,也许这也是我最近每天都失眠的原因吧。除此之外,比较重要的一点就是对全局的一个把控,一个直接的体现就是需要和各方势力周旋。说到底还是自己的经验太少、资历不够,但这些问题对于目前的我来说也不是能够急于求成的,所以只能慢慢的总结和积累,保持“尽人事、听天命”的心态。

沐神在分享会里提到了这么一句:强烈的动机要么来自欲望,要么来自恐惧。其实说的很对,最开始我对于机器学习、深度学习的学习动机确实是来自于欲望,当初的状态就是学会一个模型原理会让我很有成就感。但是现在的欲望其实已经在慢慢的转移了,我能够察觉到,对于实际问题的解决方案,能够有效的推动、能够顺利的进行、能够有效果的提升,这种成就感应该比单纯的学会一个模型要更加的强烈,或者说对目前的我来说更加需要。

所以,这是欲望。那么,会有恐惧吗?如果有,是对学习的恐惧吗?毕竟现在这么卷很多算法根本就跟不过来。如果选择悠哉悠哉的得过且过、随波逐流,会不甘心吗?

正如李沐老师所言,这是一个最好的时代,因为新技术的出现,让我们能够享受到现在甚至未来几年技术带来的变革。同时,这也是一个坏时代,因为我们需要付出比上一代更多的努力。

所以,扪心自问之后,我的心里已然有了答案,因为我坚信,经历过的这些事都是在引导我而非定义我。

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值