大模型badcase修复方案思考

371次阅读
没有评论

有关bad case的修复,我之前是写过一个小系列,从开始的发现问题到最终解决问题,给大家带来了一条龙的解决方案(这里放最后一篇的连接,其他的这篇里面都有传送门,心法利器[40] | bad case治疗术:解决篇),随着现在算法的版本更新,大家进入了大模型时代,当然也要面临类似的问题,我们是需要解决bad case的,这次给大家介绍一下大模型在这块的修复方案策略。

懒人目录:

  • 微调和结构升级
  • 前处理和后处理优化
  • 围绕模型进行的算法设计
  • 前后处理服务于大模型
  • 方案优缺点分析
    • 微调和结构升级
    • 前处理和后处理优化
  • 小结
  • 微调和结构升级

    这应该是做算法的大家最容易想到,也是最“极客”的方式了,希望能把这个错误的结果,通过微调或者结构升级的方式,让模型能学到,快速提升效果。

    首先,其中最简单的方式,就是把bad case交给模型学习,从而让模型快速学会,在大模型这个环境下,其实就是通过SFT的方式,让大模型学习到。

    而相对复杂的,就是观察bad case的规律,定向找到更多样本,甚至是着手修改模型结构,让模型更容易学到某些信息,例如lora、Adapter等,甚至是其他的方法,这些方案的提出依赖对数据和模型的深刻理解以及前沿知识的储备。

    前处理和后处理优化

    在讲前处理和后处理的优化之前,想先说一下前处理和后处理是什么。

    围绕模型进行的算法设计

    比较成熟的模型模块,一般都会配合有前处理和后处理模块。尽管现在的模型已经发展到很前沿的水平,模型能帮我们做很多事,但是前后处理,仍旧在项目的逐步迭代阶段,会被慢慢建立起来,为模型更好服务于整个项目保驾护航。

    前处理,即在进入模型之前所做的一系列处理,在NLP领域,可以有如下工作:

    • 预处理,例如去标点、改写的一些工作,为了让模型更好地处理。
    • 拒识,有些不需要经过模型就能完成的事,直接就先给做了,困难的、模糊的再来交给模型定夺。

    当然,在大模型领域,前处理做的最多的就是根据输入,获取足够的信息,然后构造合适的prompt来解决问题,例如这样的。

    请根据参考材料回答以下问题:
    问题:{query}
    参考材料:
    {point_num}. {content}

    我们需要检索出参考材料,也需要构造出合适的prompt,才能给模型提供足够的信息回答问题。

    而后处理,则是指在模型结果输出后,要对结果进行再处理,例如下面这些工作:

    • 对内容进行整合,例如分类后的卡阈值、模型召回后的过滤、最终结果返回的格式化等。
    • 再加工。对结果进行解码(某种程度上文本生成后的解码其实也算后处理的:心法利器[89] | 实用文本生成中的解码方法)、小幅度调整等。
    • 内容质检,检测是否有异常,是否有失败,为了解决异常而进行降级或者其他处理。

    前后处理服务于大模型

    在了解了前后处理的任务和功能后,就可以开始了解前后处理如何为大模型的bad case处理进行调优了。结合前面聊bad case修复大家反馈的问题,我这里尝试用例子的方式来给大家解释一下。

    案例1:封闭域用户经常会输入一些领域外的内容,例如类似医疗之类的领域,用户还会在里面问到“今天天气怎么样”之类的,这类问题进入到我们的领域大模型肯定是有风险的,此时,比较容易的思路是,在大模型之前加一个拒识模块,只让大模型处理领域内的内容,这个拒识其实和早先搜索和对话场景的意图识别类似,用分类模型可以做到,当然也可以配合RAG对应的知识库划定知识范围。值得提醒的是,对于被拒绝的句子,记得设计好对应的回复话术,让用户得到完整的体验(别报了错就跑了)。

    案例2:很多人提到的重复问题。模型在生成一小段以后,开始重复出现某个内容。这个问题的根源其实是在于解码层发现了某些得分很高的文段,所以就开始重复输出,要解决这个问题,最直接的方案,就是在解码层,使用有关重复的惩罚项,可以参考这个(https://huggingface.co/blog/how-to-generate),当然对应transformers中有关generate函数的文档里也有。这个解码层的处理,其实就算是在后处理中实现,这个应该是最直接高效的方案了。

    案例3:话术上的调整。很多场景用大模型,对话术的要求会比较高,例如语言风格要古朴、热情等,或者是有一些字数要求,类似这些要求,其实在prompt层面进行修改,会比较方便,只要不是太小的模型,或者效果不太差,这种类型的指令还是会比较简单。当然了,指令的执行还是会有漏网之鱼,偶尔会失效,此时比较好的方案就是在后处理模块加质检模块,有些内容是可以比较轻松地检查到的,例如不能提及某些内容,直接在后面进行后处理删掉,或者把原有话术加上特定的要求让模型再生成一次,质量就能得到更高程度的约束。

    从这些分析我们能够得到如下启示:

    • 一定要多做实验多看数据多分析数据,上面这些问题能被发现,都离不开看数据的分析思考,而且要带着目标去看去想,只盯着指标是肯定不行的。
    • 上下游的调整,对最终结果提升的反馈非常明显,是小幅度优化的重要策略。
    • 围绕模型构造前后处理模块,能有效支撑模型应对业务,降低模型在训练、数据层面的多种压力。

    方案优缺点分析

    说完了方法,肯定是要做优缺点分析的,尤其是他们之间的差异性,以便我们后面进行方案选择的,这里我按照我的理解给大家分享。

    模型微调和结构升级

    首先是优点:

    • 对大量、难以抽象、不可控的复杂问题,有显著的效果。
    • 比较容易想到,pipeline简单,可构成自动化优化方案。
    • 技术影响力。

    然后是缺点,缺点也比较明显:

    • 训练资源消耗大,成本高。
    • 知识壁垒,需要对微调等技术有比较多的了解。
    • 因为小问题就修改,容易对其他模块产生影响。
    • 收益伤害不可控,无法高把握确定收益。

    前处理和后处理优化

    首先是优点:

    • 小修小补效率高。
    • 结果基本可控,立竿见影。
    • 不容易对其他模块产生影响,可以分开处理。
    • 节约资源。

    然后是缺点:

    • 依赖对问题、数据的理解,对新人不友好。
    • 补丁多了,前后处理会变得厚重。
    • 技术影响力。

    小结

    本文主要给大家介绍了有关大模型bad case的修复方案,笼统地分为了微调结构升级和前处理和后处理优化两个思路,主要是为了方便大家进行结构化思考和思路启发,并给出一些案例让大家进行方案的理解,最后还给出一些各个方案的优缺点,为大家在方案选型上提供一些帮助。


    大模型badcase修复方案思考

    我是朋克又极客的AI算法小姐姐rumor北航本硕,NLP算法工程师,谷歌开发者专家欢迎关注我,带你学习带你肝一起在人工智能时代旋转跳跃眨巴眼

     

    Read More 

    正文完
    可以使用微信扫码关注公众号(ID:xzluomor)
    post-qrcode
     
    评论(没有评论)
    Generated by Feedzy