心法利器[88] | 有关大模型幻觉问题的思考

心法利器

本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有。

2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里:CS的陋室60w字原创算法经验分享-2022版。(2023在路上了!)

往期回顾

  • 心法利器[83] | 一种技术懒惰陷阱

  • 心法利器[84] | 最近面试小结

  • 心法利器[85] | 算法技术和职业规划

  • 心法利器[86] | 毕业4年的算法工程师:进步再进步

  • 心法利器[87] | 填志愿:AI算法方向过来人的建议

最近我有大量的工作集中在大模型这块,主要是围绕着大模型做一些落地工作,幻觉,想必是很多在做相关工作的人所非常头疼的问题,本周我结合我自己的实践经验,谈谈我对幻觉问题的理解和思考,并给出一些我自己实验的还不错的解决方案。

当然了,这里的理解,是非常感性的,我没有经过很严格的论证或实证,只是在实践经验中发现了一些可以解释这些现象的规律罢了。

懒人目录:

  • 什么是大模型幻觉

  • 幻觉为什么产生

  • 怎么解决幻觉问题

    • 有关两种方案的选择和权衡

    • 模型训练

    • prompt

什么是大模型幻觉

幻觉这个词,在大模型里面使用的是Hallucination,在论文"Survey of Hallucination in Natural Language Generation"里面,给出了一个定义,“the generated content that is nonsensical or unfaithful to the provided source content”,简单的说就是输出的内容和现实或者和提供的内容不符,笼统的,都叫幻觉。

幻觉为什么产生

抛开模型,我们从人的角度去思考,再延伸到模型,可能会更好理解。这里我举几个场景的例子,大家就会明白幻觉的产生原因了。

第一个例子,小学生写作文,我们都当过小学生,也深知小学写作文的痛苦,我们当时的视角,所尴尬的问题是——觉得没有东西可以写,然而更痛苦的是,我们依旧需要交作业,于是我们会不约而同地选择了“编作文”的方法:发烧38.5度,外面下着雨,爸妈抱着我跑去医院(哪怕能打车,有公交地铁,也因为剧情需要一定要淋着雨跑去),爸妈都急的哭了,我看到了他们头上的一缕银丝。而当老师还要字数上做要求的话,200字,此时痛苦会加倍,从而编的部分更大了。而对于模型,这背后是我们的逼迫和模型具备的信息不匹配,甚至还给他上难度,这让模型无从下手,只能脚踩西瓜皮似一直向前编了。

第二个例子,我们都做过阅读理解,无论英文的还是中文的,通过考试临时地看一个文段,我们就能回复一些原来其实不会的问题,例如说明文、议论文等,举个例子“解决生态建筑声的环境问题的两个途径是什么”(网上随便找的一道高考阅读理解题的题干),想必很多人不清楚,但是如果把文章提供给大家,则大家能很快找到答案并回复。那么,相比数学物理地理政治之类的题目,这类型的题目我们一开始却做不出来而给了文章就做出来了,原因很简单,因为数学物理地理之类的题目,我们在考试前有复习好,学会了,所以做得出来,然而我们也有很多知识没学到,对这类型的问题,此时我们就不能做出来了,而若能给一些辅助材料,我们有能做出来了,这就是因为知识到位了,我们又能做出来了。模型也是如此,学无止境,大家都会遇到不会的问题,一旦不会了,那我们就很难回复正确,那对于模型而言,可不就只能乱答了。

第三个例子,我们会被要求做一些事情,随着我们长大,我们会发现,有些事情其实可以不做,有些课我们可以不听,我们是可以拒绝的,我们有能力判断什么事情可以做,什么事我们可以拒绝。而回到模型,模型内部也有自己的决策体系,然而现在我们很多情况都是再给他灌入知识,要他回答,却没有很好的机制告诉他,不会的可以拒绝,他甚至是不知道自己不知道,脚踩西瓜皮地就把字吐出来了。然而,要解决这个,在现阶段似乎还不那么简单,这背后是对话系统架构里的对话策略问题(DP,dialogue policy)。当然了,在有些情况,我们似乎又不希望模型拒绝回复,此时其实非常让人犯难,我们不得不在“拒绝回复”和“乱答”之间权衡,这是一个目前连人类自己都不见得说得明白的东西了。

第四个例子,当听到“你觉得苹果怎么样”这个问题的时候,我们会结合自己的背景以及对“苹果”的第一反应进行回复,可能是“很好吃,也很健康”,也可能是“我有在用他们的产品,感觉不错”,这里的原因除了本身苹果的歧义之外,还有一个问题在于这个问题本身缺少限制,而我们自己很可能在自己都不知道的情况下就给出了限制,或因为我们的思维习惯,或因为我们的知识面导致,但终究是因为“缺少限制”,模型可能就会输出一个他认为对的而我们感到困惑的结果。

第五个例子,来源于我们看的一些侦探悬疑片,类似“看不见的客人”,影片会为我们提供大量的甚至是完整地信息给我们,来让我们去做一些“合理”的推测,但实际上这些推测都是错误的,而回到模型,我们很可能会给到模型一些带有误导的信息,例如“小明6岁,小红3岁,小明的年龄是小红的2倍,那小明60岁的时候小红多少岁”,亦或者是模型会错误或者先入为主地推断出一些信息,这跟人类似,推断总可能出错。

总结起来,其实就是这几点,这几点不互斥,但是都是我们去思考解决方案的角度:

  • 模型没有足够的输入,导致模型只能结合自己的信息进行推理。

  • 未见过的知识,不认识的信息,只能靠猜和编。

  • 对话策略问题导致回复不符合预期。

  • 信息的描述和约束不足,导致回复并不能聚焦或者不符合我们的预期。

  • 模型接收误导信息或自己的错误推测导致出现问题。

怎么解决幻觉问题

有关幻觉问题,解决方案主要分为两大派,一派是直接通过训练的方式对模型进行优化,从而让模型能够学到这个回复或者是这方面的知识,另一种则是通过prompt进行引导,让模型能回复我们需要的答案。

有关两种方案的选择和权衡

要进行选择,首先需要知道两者的内容以及具体的优劣势。

首先是模型的训练,优势:

  • 学入之后,具有一定的泛化能力,甚至形成某个子领域比较完整的信息和回复能力。

  • 模型理解特定的指令,获得新功能。

  • 信息内容加密,不再需要显性信息,甚至可进行私有化部署,包装成产品。

而劣势:

  • 训练成本,即使是LoRA之类的方式,也需要一定的显卡资源,全量微调更不好说。

  • 不稳定性,不合适的数据或训练方法甚至会让模型丧失一些原有的能力。

  • 不可更新性,对于变更很快的信息,模型要跟着更新的难度比较大。

  • 更新换代不方便,当有了新的好的基座模型,切换需要重新进行微调。

至于prompt优化,与模型训练相反,优势:

  • 不需要训练,直接修改prompt即可有一定概率让回复直接得到优化,成本和风险拉到最低。

  • 对知识的更新可以快速反应,修改prompt给的附加信息即可。

  • 更新换代方便,当有了新的好的基座模型,直接切换即可。

而劣势:

  • 上限低,很难掌握新的复杂的功能,回复能力取决于原有模型的上限。

  • 附加信息的不可加密性,只应用到模型的信息整合、阅读理解和推理能力,显性信息会体现在prompt上,存在一定安全风险。

在了解这些优缺点的情况下,我们去进行方案选型会更加快。按照我自己的经验,其实很多问题,我们并不需要依赖模型训练这种高成本的方案来进行,此时prompt绝对是一个简单方便经济的方案。

模型训练

有关模型训练,其实论文里讲的太多太多了,早前的instructGPT,到现在可谓是百花齐放,在对比学习、强化学习等方向其实都有很多有意思的工作,具体我试验的也少,请原谅我在这里先略过,等我有机会做更完善的总结或者看到更好的总结再和大家分享。

prompt

有关prompt这块,其实有很多内容可以讲,我们也针对幻觉产生的原因发散出去,给大家更好的提供一些解决思路。

  • 针对知识或者先验信息不足导致的问题,我们首先应该做的,是为模型提供知识,可以通过类似“query+背景知识:XXX+请根据背景知识回答问题”来解决,其实就是检索增强,这个我之前的文章也有聊过:。

  • 如果问题描述不清晰,则我们需要增加对问题的描述,从“你觉得苹果怎么样”改为“你觉得苹果这家公司怎么样”。

  • 在模型发挥过度或者发挥错误的时候,我们应该约束模型,例如可以通过字数约束(50字以内)、指令约束(精简精准的语句)、引导约束(请从XXX角度仔细思考)。

当然了,上周写的这篇文章:前沿重器[35] | 提示工程和提示构造技巧,总结了我最近看到学到的一些prompt技巧,应该也对大家解决幻觉问题有好处。

然而,因为本身prompt的局限性,如果模型没有学会新的指令或者新的能力,或者是一些新的对话策略的变化,prompt是无论如何都解决不了的,这跟人一样,没学过编程的那就不会写代码,我们很难通过详细描述就让模型突然具有这个能力。

心法利器[88] | 有关大模型幻觉问题的思考_第1张图片

你可能感兴趣的:(心法利器[88] | 有关大模型幻觉问题的思考)