微信扫码
与创始人交个朋友
我要投稿
随着LLM技术的不断发展,大小企业组织乃至个人开发者都在纷纷尝试利用其强大的能力构建应用。然而当实际的业务场景存在一定垂直和领域知识的要求,预训练的LLM在实际应用中往往可能无法达到预期的性能水平,这时使用什么样技术来针对性的改善特定场景LLM的表现,就成为要解决的首要问题,那目前首选的,用来优化LLM的重要方案有两种——微调和RAG。
既然微调和RAG都是作为现在LLM优化的重要技术, 那我们要如何进行选择呢?笔者之前也写过两个方案的差别,但是到真正结合产品需求进行落地时,发现还是遇到了一些问题。前一篇小纸条基于阿里云的百炼进行了RAG+Agent的应用构建,但是在操作过程中发现配合Agent使用的RAG的向量知识库在大小上有很大的限制,笔者去看了比如Coze和魔搭等平台,也都是有一样的限制,基本就是单文件10-20M,5-10个文件的限制,笔者也去咨询了阿里云的客服,对于超过这样的数据量的场景要如何支持,客服给到的建议是,使用大模型开发微调到部署的一站式平台PAI。
为啥Agent智能体平台对RAG知识库都有这样的限制呢?是RAG就不太适合大数据量的场景么?那我现在遇到的场景难道更适合的是模型微调吗?......这一波实操下来,才发现还是要结合实际场景来理解这两种方案的差别,才能真正的理解这两种技术,所以今天我们就来再深入聊聊,弄清楚讲明白到底什么场景适合微调,什么又适合RAG。
在对比之前,我们先简单了解微调和RAG。
模型微调(Model Fine-tuning)
模型微调(Model Fine-tuning)是一种在已有的预训练模型基础上,根据特定的任务和数据集,对模型的参数进行进一步调整和优化的技术。
预训练模型通常是在大规模通用数据上进行训练的,学习到了通用的语言知识和特征表示。但这些模型可能不能完全适应特定的领域、任务或数据集,比如医学、法学等等。通过微调,我们可以利用预训练模型已经学到的有用信息和模式,只需使用相对较少的数据和计算资源,对模型的部分参数进行更新,使其能够更好地处理新的任务或适应特定的数据分布。
在微调过程中,通常会保留模型的大部分结构和参数,只对一些高层的、与特定任务相关的层进行重新训练,或者调整学习率等训练参数,以使模型能够在新的任务中表现得更出色。模型微调的优点包括节省训练时间和计算资源、利用预训练模型的强大表示能力、能够在较小数据集上取得较好的效果等。
微调本质是将特定领域知识记忆纳入到模型的参数中, 经过微调后,模型可以为你提供更准确、更接近你特定领域的答案。
优点:
节省训练时间和计算资源:利用预训练模型已经学习到的通用知识和特征,避免了从头开始训练模型的巨大计算开销。
提高性能:基于在大规模数据上学习到的良好初始化参数,能够在较小的特定数据集上获得更好的性能。
迁移学习:可以将在一个领域学习到的知识应用到其他相关领域,提高模型的泛化能力。经过微调的模型可以相对更好地处理原始训练过程中未包含的内容。
数据需求相对较少:不需要大量的标注数据来训练一个全新的模型,少量的特定领域数据就能进行有效的微调。
缺点:
可能受到预训练模型的限制:如果预训练模型的架构或参数不太适合新任务,微调的效果可能有限。
成本:虽然不用从0-1的训练,但是还是需要微调训练的资源成本。
过拟合风险:在微调过程中,如果数据量过小或训练不当,容易导致过拟合。
对新数据的适应性有限:如果新数据与预训练数据的分布差异较大,微调可能无法很好地适应。
技术要求:需要更深入地了解机器学习和语言模型架构, 了解底层模型原理以及参数配置。
高质量数据要求:有效的微调工作需要大量且精心策划的数据集,高质量数据集是微调模型的必然要求, 直接关系到微调的质量。
RAG
RAG 是检索增强生成(Retrieval-Augmented Generation)的简称,它为大语言模型(LLMs)提供了从数据源检索信息的能力,并以此为基础生成回答。
RAG 结合了信息检索技术和大语言模型的提示功能,即模型根据搜索算法找到的信息作为上下文来查询回答问题。无论是查询还是检索的上下文,都会被整合到发给大语言模型的提示中。
RAG使用向量数据库(或者其他数据库)存储数据,像是一种外挂,作为LLM的行业信息提供方。微调相当于让大模型去学习了新的一门学科,在回答的时候完成闭卷考试。知识库相当于为大模型提供了新学科的课本,回答的时候为开卷考试。
优点:
知识更新及时且经济:无需训练,只需更新数据库即可完成知识更新,成本较低。
知识掌控力较强:相比微调,不用担心模型学不到或遗忘知识的问题。
效果更稳定且可解释性较强:在稳定性和可解释性方面表现较好。
能有效减少幻觉问题:只要检索不出大问题,整体效果有优势。
适用场景广泛:可应用于企业信息库建设、AI 文档问答、业务培训、科研等场景,并能搭配 AI agent 加快大模型的商业化进程。
缺点:
依赖知识库:如果不具备构造知识库的条件,例如没有具体的业务数据,或者机器不支持支撑检索等,RAG 则无从谈起。
模型返回风格无法从数据中学习:对于某些业务,如话术生成,更多是对语言风格的约束,可能只需通过 prompt 解决或构造业务数据进行训练,而无需使用 RAG。
实时信息限制:对于依赖实时信息而非固有信息的任务,如对话摘要,通过工程手段直接将信息获取导入到模型即可,不一定需要把对应内容入库。如果对摘要内容不满意,可通过 prompt 或微调来解决。虽然 few-shot 方式下也可用 RAG,但并非必须。
数据质量限制:输出的质量在很大程度上取决于检索到的信息的相关性和准确性。所以RAG检索效果对入库的数据质量也有要求。
指令和领域知识限制:若指令不生效或大模型完全不具备相关领域知识,即使把答案摆在面前,RAG 也可能无法解决问题。
资源成本:虽然 RAG 的资源密集程度低于完全微调的方法,但它仍然需要相当大的计算能力。
如何根据业务场景选型?
先上结论和三张直观观对比图!
咱来展开解释解释
如果对回答的内容范围和精确程度要求更高,比如要求回答需要来自于训练的数据集,那选RAG。
如果业务场景需要的数据较少,且不怎么更新,对准确度要求不高,同时又希望大模型可以有领域鲜明的个性,领域专业的语言风格,了解特殊专业里的专业用词,这时就应该选择微调。
这是因为微调后AI大模型并不会严格按照你的数据进行回答,甚至会出现无中生有的情况。微调更多的是让LLM的回答大体上不跑偏,语言风格更加符合训练数据的风格,但细节和事实部分跟原始数据可能并没有那么强的关联,更多的是学规律,所以不要以为大模型训练之后就完全按照你的微调数据集回答了。
或者我们这么记!以下这些条件符合就用微调:
对回答准确度要求不高的场景,比如情感类,咨询类,陪聊类场景,对回答精确度要求没那么高时,可以微调
当对回答的语言风格不满意时,比如 通用大模型回答没有个性,需要一个特定人设时,选微调
当场景是一个细分领域,有很多专有名词时,微调可以让回答更加专业
当需要对问答库进行总结,润色,不是原封不动返回正确回答时,选微调
其他的,选RAG!
展开一下,如果需要严格按照您的数据来回答,可以这么选择:
中文场景:RAG 知识库+通义千问(实测了一下)
英文场景:RAG 知识库+llama3.1(最新出的)
我们再来结合下面这张图来加深一下理解纵坐标是外部信息的需要程度,如果外部信息很多,甚至更新频率很快,这时候更推荐用知识库+大模型的方案,不然反复微调,时间和资源都是比较大的成本,性价比可不如RAG。
RAG与模型微调结合
虽然我们上面对于微调与RAG基于场景有了选型的对比,但也不是说选择了一个就完全放弃另一个,两者也是可以结合,互相借力,以更好的应对业务场景。
RAG和微调并不是冲突的,它们是两种相辅相成的行业解决方案。开发者可以同时使用两种方案来优化模型。比如在建立RAG系统时候,我们可以将收集到的信息和反馈用于后续微调的数据集。
对于二者的结合,可以采用比如AI Agents/LangChain的架构,同时做到大知识库+特定领域专家大模型的组合,既保证了知识的实效,也具备了领域专业的风格。
总结
总结一下选择RAG或微调时考虑的因素:
数据的可用性和质量:如果高质量数据充足,微调可能是更好的选择;如果数据更新频繁或数据量大,RAG可能更合适。
成本和资源:微调通常需要更多的计算资源和时间。如果资源有限,RAG可能是一个更经济的选择。
更新频率:如果知识库需要频繁更新,RAG提供了一种更灵活的更新机制。
任务的复杂性:对于复杂任务或需要模型学习特定行为的任务,微调可能更有效。
可解释性和稳定性:RAG通常提供更好的可解释性和稳定性,因为它的回答直接依赖于知识库文档。
其实呢,除了这两个技术,对于模型能力的调整还有Prompt提示词工程以及完全的从头训练,从成本和操作难度上来看,Prompt工程<RAG知识库<微调大模型<从头训练大模型。
<rag知识库<微调大模型<从头训练大模型。< p=""></rag知识库<微调大模型<从头训练大模型。<>
最后,无论是RAG还是微调只能从数据输入和模型少量参数的角度给大模型一些干预,真正背后的大模型能力的水平还是最重要的决定因素,是这两种技术还是有无法突破的天花板,大家在真实的业务场景中也要考虑对于这个影响权重最高的背后的LLM的选型哦。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-07-11
2024-07-11
2024-07-09
2024-09-18
2024-06-11
2024-07-23
2024-07-20
2024-07-12
2024-07-26
2024-07-23
2024-11-18
2024-11-16
2024-11-16
2024-10-31
2024-10-31
2024-10-27
2024-10-26
2024-10-25