AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


如何优化LLM?Prompt、RAG、Fine-Tuning方法对比分析
发布日期:2024-05-03 12:51:45 浏览次数: 2075


LLM的问题

研究完当前的LLM,主要存在以下三个方面问题:

  • 幻觉问题:大模型的底层原理是基于概率,所以它有时候会一本正经胡说八道,比如我们问大模型的Chat(问答系统),“XXX博物院下周一开门吗?”我相信这样的问题你不能连续问,因为大模型会有一定的几率告诉你开门。而如果游客真的在下周一去了XXX博物院,那估计就要失望了,如果这个Chat还是博物院官方提供的,那事情最终会演变成一通12345的投诉电话。所以在很多需要非常精确的场景,仅仅依赖GPT的这种生成式回答是很不严谨的,而且看很难消除——目前常见的解决方案是前置一个BERT,或者预置大量prompt做优化。

  • 新鲜度问题:规模越大(参数越多、tokens越多),大模型训练的成本越高。类似OpenAI的ChatGPT3.5,目前的数据新鲜度依然保留在2021年,对于之后的事情就不知道了。而且对于一些高时效性的事情,大模型更加无能为力,比如帮我看看今天晚上有什么电影值得去看?这种任务是需要去淘票票、猫眼等网站先去获取最新电影信息的,大模型本身无法完成这个任务。

  • 数据安全:OpenAI已经遭到过几次隐私数据的投诉,而对于企业来说,如果把自己的经营数据、合同文件等机密文件和数据上传到互联网上的大模型,那想想都可怕。如果企业人员想问一个类似这样的问题:“帮我看看3月份XX部门的销售环比数据与哪些兄弟部门的增长是密切相关的?”,这需要打穿企业内部的很多数据。既要保证安全,又要借助AI能力,那么最好的方式就是把数据全部放在本地,企业数据的业务计算全部在本地完成。而在线的大模型仅仅完成一个归纳的功能,甚至,LLM都可以完全本地化部署。

针对以上三个方面,有多种优化方式,接下来我们不断深入了解。

Prompt

Prompt是LLM根据你提供的文本输入提示生成响应。
它基本上是一个指导模型输出的精确输入,输出将基于 LLM 现有的知识。

RAG

当你将提示工程与数据库查询结合,以获得含丰富上下文的答案时,这就是所谓的 RAG。这使得模型能够使用未经训练的数据,因为这些数据在训练时不存在或被认为不够重要。生成的输出将基于数据库中现有的知识,模型能够访问可以引用的实际数据源,而不仅仅是记住其要点。

RAG如何运作?

RAG 的工作分为两个阶段:设置阶段和检索阶段。让我们更详细地研究一下它们。

设置阶段

在此阶段,收集并准备稍后要包含在提示中的数据。它包含以下步骤:

图 1:RAG 设置阶段

1. 收集数据

首先,收集要用于增强的所有数据,例如文档、代码文件、博客文章等。

2. 分割数据

接下来,将数据分割成块。块的大小取决于用例和LLM的能力。

例如,要引用研究论文,可以将它们分成每个部分,这样块对于嵌入步骤来说不会太大,同时将语义相关的信息保持在一起(例如,结论数据是一个块。)

同样,如果尝试构建代码搜索,则可以按模块、类或函数拆分数据。

3. embedding数据

要使数据可搜索,必须将每个数据块转换为向量嵌入。这些编码文本块的大量数字列表,是通过所谓的嵌入模型完成的。

4. 存储数据

最后,当嵌入块时,可以将它们存储在矢量数据库 (如 Upstash Vector)中,以便在提示时可用。

完成所有步骤后,可以在检索阶段使用你的数据。

检索阶段

每次向LLM发送提示时,都会执行此阶段。它由以下步骤组成:

图 2:RAG召回阶段

1. 嵌入提示符

第一步是将提示文本转换为向量嵌入,其使用与在设置阶段创建嵌入相同的 LLM。这样,矢量数据库就可以可靠地将提示与数据进行比较。

在此步骤之前,最好从提示中删除填充词,以使搜索更加准确。

2. 搜索数据库

然后,你需要将嵌入发送到矢量数据库以获取与它们相关的块,可以过滤这些结果以确保它们与提示匹配。

3. 将提示与结果结合起来

现在你已经拥有搜索结果,你可以将它们与输入提示结合起来,创建一个丰富的提示,这将基于你的数据给出答案。

你可以通过向模型介绍数据以及它应该如何根据这些数据来构建其回应来启动提示,同时添加它在哪一部分找到了相关信息。

然后,在最后加入用户输入,将其附加到提示中。

4. 生成响应

最后,将丰富的提示发送给LLM,以生成对你的问题的答复。

Fine-Tuning

微调是指使用特定任务的数据调整大语言模型的参数,使其在某一领域内专业化。

比如,一个语言模型可以在医学文献上进行微调,从而更擅长回答健康护理相关的问题。

这就好比对一位已经技艺娴熟的工人进行额外培训,让他们在特定领域成为专家。

微调如何进行?

微调只有一个阶段:训练阶段。微调后的模型将像常规 LLM 一样工作,因此你无需稍后获取数据或将数据添加到提示中。

训练阶段

在训练阶段,收集、准备数据并将其呈现给模型。

图3:微调训练阶段

1. 收集数据

首先,收集训练所需的数据。

例如,如果你想训练一个模型以莎士比亚的风格编写所有输出,你可以收集他的所有书籍。

假设你想要防止模型在不同主题领域的上下文中意外回答(即当术语在不同字段中具有不同含义时)。你可以收集这些术语及其定义的列表。

如果你想教授有关特定领域的小模型,请收集你可以在该领域找到的所有数据。

2. 转换数据

在最好的情况下,你的数据已经采用问答形式,因此你可以跳过此步骤。如果不是,则转换过程与你的目标高度相关,但一般来说,结果是输入和所需输出的列表,其中输出基于收集的数据。

微调的目的是消除在将提示发送到模型之前不断修改提示的需要,这就是我们对 RAG 所做的事情。但是,这在训练阶段不是问题,因此你可以使用任何 LLM 获得支持。

告诉GPT-4,它应该以莎士比亚的风格回答你的问题。使用收集到的数据给出一些写得特别好的部分的例子。每个提示都可能很长,输出也可能很长,特别是如果你让它一次性回答多个问题。但是,只有在你对结果感到满意之前,你才会这样做。

之后,你可以将输入和输出列表带到下一步。

3. 训练模型

现在你已经拥有适合微调的格式的所有数据,你可以开始训练过程并提供该数据的模型。完成此步骤后,你将拥有一个调整后的模型,可以像常规模型一样使用,但无需立即进行修改。

何时使用 Prompt、RAG 及微调?

那么,我们如何决定采取哪种方法呢?

上图中有两个重要的指导参数,第一是外部知识的需求,第二是模型适应的需求,模型适应意味着改变模型的行为、词汇、写作风格等

RAG vs  Fine-tune 对比分析

访问不断变化的数据

RAG 可以让模型访问经常更改的新数据,可以通过更新矢量数据库中的记录来定期进行此操作。

以事实为基础的模型

当你需要模型忠实地表示特定信息时,RAG 是一种很好的方法。模型倾向于将提示中给出的信息视为事实。

引用正确的来源

当你需要模型引用其所呈现信息的来源时,RAG 也非常适合。

修改输出样式

微调是教授模型写作风格或输出格式的方法,微调非常适合教授难以解释的技能。

专注于特定领域

微调也有利于训练模型专注于特定领域。只需确保你的培训数据包含始终来自你所在领域的模糊术语和答案即可。

优化提示

微调是将你始终添加到提示中的数据移至模型权重的最佳方法。这可以节省金钱,因为不必再为大提示付费,而且还可以缩短响应时间。

超长上下文

如果你的提示需要超长上下文,微调也很好。在提示中获取做出明智决策所需的所有 RAG 数据可能并不总是可行。即使你的块很小,可能仍然需要数百个块来解决每个边缘情况。

将小模型变成专家

一般模型通常很慢,但较小的模型则没有那么复杂。然而,微调可以教授有关特定领域的小模型。甚至可以使用通用模型来生成训练数据。经过训练的模型可能具有其领域内通用模型的质量,但响应时间要快得多。

总结

微调更多的是改变结构(行为)而不是知识,而对于 RAG 来说,情况则相反。当你想要生成基于自定义知识库的输出,同时保持 LLM 的词汇和写作风格不变时,可以使用 RAG,但请记住提示尺寸!想要节省提示尺寸或教小模型新技巧吗?微调是一个不错的选择,但要确保你可以收集或生成所需的数据!如果你的应用程序同时需要定制知识和模型行为的改变,那么混合(RAG + 微调)是首选。如果你不需要它们中的任何一个,那么快速工程就是最佳选择。

参考

https://upstash.com/blog/comparing-rag-with-ft

https://www.rungalileo.io/blog/optimizing-llm-performance-rag-vs-finetune-vs-both

最近最受欢迎的3篇文章

利用 Kimi快速生成精美思维脑图的3种免费方法

每天学习一个思维模型:5W2H 分析模型

提升效率:这四款免费AI 工具不容错过




53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询