如何让ChatGPT学习私有化知识,并且保留部分对话功能

问题情境

情景:比如我希望用 GPT 做一个产品的客服,现在有一些相关文档,如何让 GPT 学习到产品信息呢? 并且还具备正常对话功能
一个方案是直接把产品信息当做输入喂给GPT,但是ChatGPT/GPT-4/LLMs 一般都有输入长度的限制( token 长度的限制),如果信息太长超过token长度则无法把这些信息一股脑的当做输入扔进去。但又想让 ChatGPT 学到这些知识,所以这个问题就必须想办法解决。

解决方案

一、finetune微调

微调(finetune)是深度学习领域一个很常用的操作,就是模型的再次训练。通过 finetune 可以小幅度改变大模型的参数,使大模型聚焦于特定场景的知识(即私有数据知识)。但 finetune 需要大量的 GPU 资源进行模型训练,同时需要一定的深度算法基础保证模型能够按自己需求把私有数据的知识学习到。门槛较高

但是实际操作过程中,微调后的model反而容易发生“遗忘“,变成了一个专才,是具备了回答特定问题的能力,但是丧失了对话功能。不知道openai如何让chatgpt具备这种全才功能的?

对此 GPT4是这样解释的:

在微调(fine-tuning)GPT-3之后,模型会专门关注于特定的任务或者专门的领域。这是因为在微调过程中,模型将根据新的训练数据重新调整其参数,以更好地适应这些特定任务或领域。这可能会导致模型在其他任务或领域中的表现下降,因为它主要优化了在新数据上的表现。
然而,ChatGPT是一个通用的对话模型,它是通过在大量的对话数据上进行预训练和微调训练得到的。这意味着它可以在各种不同的对话场景和主题上进行自然和连贯的对话。
关于如何实现的,我会简单解释一下:
预训练阶段(Pretraining Stage):模型首先在大量的互联网文本上进行预训练。在这个阶段,模型学习到了大量的语言知识,包括语法、词汇、常识以及各种主题的基本信息。
微调阶段(Fine-tuning Stage):预训练完成后,模型将在特定的对话数据上进行微调。这些数据可能包括人与人的对话、人与机器的对话等。在这个阶段,模型学习到了如何进行自然和连贯的对话。
关键的区别在于,微调阶段的数据是多样化的,包含了各种不同的对话场景和主题,所以ChatGPT能够在各种不同的对话中表现得较好。这和针对特定任务或领域进行微调的模型是不同的。对于特定任务的微调模型,它的数据是特定的,导致它在这个任务上表现得很好,但在其他任务上可能就不行了。

User
那我可以解决这种微调后的遗忘问题嘛?比如从prompt上下功夫?
ChatGPT
在微调模型后确实可能会出现“遗忘”问题,即模型在专门优化新任务时可能会忽视其原有的知识和能力。这在迁移学习领域是一个常见的问题,研究者们提出了一些策略来缓解这个问题,比如慢速微调、弹性权重共享等。
对于你提出的在prompt上下功夫的想法,的确是一个有效的策略。正确的prompt设计可以帮助模型更好地理解任务并使用其已有的知识。
在OpenAI的GPT-3中,已经展示了通过精心设计的prompt可以大幅度提升模型的表现。比如在机器翻译任务中,将prompt设计为“Translate the following English text to French: …”可以帮助模型更好地执行任务。在对话任务中,也可以使用类似的策略,比如可以在每一次对话开始时告诉模型你需要的是一个全能的对话模型,而不仅仅是针对特定任务或领域的专家。
然而,虽然精心设计的prompt可以提高模型的表现,但并不能完全解决遗忘问题。这是因为微调过程中的遗忘问题本质上是因为模型在新任务上过度优化导致的,而prompt设计只能帮助模型更好地理解任务,无法改变微调过程中的优化方向。要彻底解决这个问题可能需要更深入的研究和新的策略。

二、基于检索的提示补充

Context Learning

GPT系列的大语言模型都有一个共同的原理,是基于上下文学习(Context Learning)能力进行训练和结果生成。

上下文学习可以通过一个不完全准确的例子理解:

历史数据:我今天头疼,所以我生病了。
历史数据:我今天肚子疼,所以我生病了。
输入(提示):我今天脚疼,所以_______
模型:我今天脚疼,所以我生病了
模型通过学习历史数据,模型能对当前的输入进行预测。因为历史的数据表示,我“疼”了就会“生病”,所以模型通过数据抽象总结出了这个因果关系,并根据“脚疼”推理出“生病”。当数据足够多、足够丰富,模型能够预测的结果也就越丰富,越随机。

这个例子虽然不完全准确,但能反映出部分上下文学习的核心思想。

上下文学习中输入被称为提示(Prompt),提示越准确、包含的信息越多,模型所能准确推理出更准确的结果。
回到上述的问题,如何让 GPT 学到额外的私有信息,就是尽可能构建出包含有用的、包含私有知识更多的提示,从而使 GPT 根据上下文能力学到额外的信息。但因为算法本身原因,大模型都有输入的限制,要求输入不能超过某一长度,因此无法通过无限制的增大长度来增大信息。

》因此回到了本部分的解决方案,基于检索的提示补充。

基于检索的提示补充核心思路是:

根据输入信息1 检索本地私有数据库/文档中的内容,得到额外的信息2;
将信息2 和 输入信息1 安装特定的提示模版(Prompt template)组合成一个包含信息更多的新输入信息3;
再将信息3作为输入调用 GPT 模型,生成最终的结果。

目前基于检索的提示补充开源工具有

OpenAI 的官方插件:chatgpt-retrieval-plugin
本地/私有数据收集和索引,构建外部数据与大模型之间接口的开源项目:Llama-index
同样是 外部数据、其他应用与大模型交互的接口层框架:LangChain

文本参考

https://zhuanlan.zhihu.com/p/623031303

你可能感兴趣的:(大语言模型微调,chatgpt,学习,人工智能,微调)