所解决的问题?
当前的语言模型Large Language Models (LLMs)缺乏处理复杂信息的能力,像视觉,语音这类信息就不能够很好的处理,这是一个语言模型能力缺陷上的问题。再一个是现实世界的很多问题可以拆分成子任务,通常需要多个模型之间相互协调配合。语言模型本身其实更擅长做Zero-Shot,或者是Few-Shot的任务,对于具体的任务并不如Fine-Turn的模型好。
作者将大语言模型作为中间件,去链接AI模型和语言模型,对AI模型进行规划、调度和合作。期望是具备二者的通用能力。
背景
目前存在的一些工作是训练多模态的大模型,或者给大模型加上一些工具插件来解决问题。作者提出的这个方法更加通用。
所采用的方法?
作者在这篇文章中,将large language models (LLMs)作为一个AI模型管理器,去管理各种各样的AI模型,从而解决跨领域,跨模态的复杂任务。
具体来说,就是来了一个用户的请求request,然后基于一些提前写好的prompt,HuggingGPT选择要采用哪个模型来去解决子任务,然后基于执行的结果做出响应。
整个HuggingGPT的处理过程可以分为4步:
- 任务规划(Task Planning): 理解用户的请求,并理解其意图,将其分为为可以被执行的子任务。
- 模型选择(Model Selection):基于AI模型描述和规划出来的子任务选择领域模型,或者称为专家模型(expert model)。
- 任务执行(Task Execution):调用这些AI模型,并执行拿到返回结果给ChatGPT。
- 回复生成(Response Generation):最终再次调用ChatGPT整合所有模型的预测结果,生成最终回复给用户。
上述4部分的具体细节为:
- 任务规划:一些基础的指令:任务ID:用于任务规划的ID区分;任务类型Task Type:像是图像、音频、文本等等;任务依赖:定义一些执行此任务之前的依赖,只有依赖任务都被执行,此任务才会被启动。任务参数:这些参数来自用户的request或者是依赖任务生成的。在此基础上还会给一些prompt demonstration。
- 模型选择:在做模型选择之前首先需要模型描述,这些模型描述都是来自Hugging Face本身的。由于模型太多,所有的模型描述全部输入的话,会超过prompt的长度限制,作者这里将其进行了任务分类,再依据下载次数排名,选择top-k个模型描述给到prompt中。
- 任务执行:在任务执行中最主要考虑的就是资源的调度,独立的任务可以并行执行。作者这里采用特定的符号
<resource>
去管理资源。
具体prompt的设计:
文中作者还给了一些demo,可以参考看一下。
取得的效果?
截至论文发表,HuggingGPT可以整合几百个(400+)模型,覆盖了24个任务,像分类、目标检测、分割、问题等等。
问题
这样的方法带来的问题就是,如果管理的AI模型比较多的话,需要好好设计prompt,尤其是AI模型的描述,就是这个AI模型到底能做什么样的事情。还存在一些限制,比如调用的时间开销、资源开销、max_token开销等等。
所出版信息?作者信息?
2023年,浙江大学和微软研究亚洲一起合作发表的一篇文章。
参考链接
- 论文题目:HuggingGPT: Solving AI Tasks with ChatGPT andits Friends in Hugging Face