type
status
date
slug
summary
tags
category
icon
password
AI summary
Preface
从2022年12月到现在,ChatGPT始终是一个 🔥的话题,从开放注册我就开始尝鲜,被它的生成能力所震撼,如今的 model 是更加强大的GPT4,经常刷贴看别人对于GPT4的测试,忍不住开了 Plus,真香。关于它的介绍,网上已经有很多写得很好的帖子,同时最近基于 LLM 产出了很多 paper 和 开源项目,将 LLM 推向了一个更高的阶段。本文的 Chameleon 🦎,一种 Plug-and-Play 的组合推理框架,解决了大型语言模型(LLMs)无法获取最新信息、利用外部工具或进行精确数学推理等固有限制。Now, let’s start explore it!
Abstarct
首先作者说,目前的 LLM 面临内在的限制,例如无法访问最新信息、使用外部工具或执行精确的数学推理等。因为 LLM 的训练数据都是基于之前的数据,对于一个训练好的 LLM 自己本身是无法获得最新消息的,同时像 ChatGPT 等,只是一个生成模型,无法直接与外部工具资源进行交互,进而获取最新的信息,但是可以像 newbing 一样通过附加技术喂给它最新数据。
然后作者说,Chameleon 就是解决 LLM 的这些内在限制。Chameleon 建立在LLM上,作为 “natural language planner,”,它推断出适当的工具序列来组合和顺序执行,以生成最终响应,从而扩展了 LLMs 的能力,像 LLM models, off-the-shelf vision models, web search engines, Python functions, and rule-based modules tailored to user interests。大致的流程为:Chameleon 使用 LLM(such as GPT4) 作为一个 planner,对于给定的 task 推断出合适的工具序列进行组合和执行,以生成最终的回应。文章指出,使用 GPT4 作为 planeer 的 Chameleon 在 ScienceQA 和 TabMWP 任务上达到了新的 SOTA。
最后作者解释了一下 Chameleon 的由来:
This title draws inspiration from the chameleon's ability to adapt and blend into its surroundings, which parallels the adaptability and versatility of large language models in compositional reasoning tasks with external tools.
Introduction
前面已经提到LLM 固有的限制,目前也有许多工作针对性的使用外部工具等来加强 LLM 的能力,将语言模型与外部工具和资源相结合。例如,在网络搜索引擎和外部知识资源的帮助下,LLM 能够访问实时信息并利用领域专业知识。为了增强数学推理能力,最近的工作使用 LLM 生成复杂程序以利用强大的计算资源,更有效地执行逻辑推理任务。另一条最近的工作线,例如 ViperGPT ,Visual ChatGPT ,VisProg 和HuggingGPT 将一系列基础计算机视觉模型集成在一起,以赋予LLM执行视觉推理任务的能力。
但是作者指出,尽管这些工作对于提升了 LLM 的能力,但是都有一些局限性:
- 仅限于少数工具(MathPrompter, Toolformer)
- 依赖于特定领域的工具(ViperGPT,Visual ChatGPT)
所以对于多样性的问答就会有局限性,比如多模态的信息。比如这个问题:
Question:Which is the main persuasive appeal used in this ad ?(这则广告使用的主要说服呼吁是什么?)
为了解决这个问题,一般需要以下步骤:
- 推断存在一个包含文本上下文的广告图像,并调用 text decoder 来获取图像中的文字,理解图片呈现的信息
- 获取相关的 background knowledge 以阐述 “persuasive appeal” 的定义和各种类型之间的差异
- 根据问题输入和前面步骤得到的中间结果生成一个解决方案
- 以特定的方式提供最终答案
所以,基于以上问题,作者提出了 Chameleon ,组合各种工具来解决广泛的问题。Chameleon 有以下优势:
- 能够调用各种工具,Python、Web Search、LLM and rule-based modules
- 不需要任何的训练和微调 LLM,利用 LLM 的强大 in-context learning 能力输出具体问题的 program
所以,Chameleon 的工作流程大致如下:
- 首先将 “question” 和 “每一个工具的描述” 以及一些 few-shot 案例作为 prompt,让 LLM 推断出适合解决这个问题的 “一些列工具模块”
- 然后按顺序调用执行这些工具,得到最终的 answer
在程序的每个模块执行期间,该模块处理查询并缓存上下文,返回由模块本身输出的结果,并更新 query 和缓存的上下文以供后续模块执行。将模块组合为一个顺序程序,后续模块的执行可以利用先前缓存的上下文和更新的 query。就比如,前面的那个例子,第一个调用的是 text-decoder model,它的输出就会被添加到 query 中,作为下一个 model 的输入,也就是整合利用了前面 model 输出的有用的信息。
Related Work
Large Language Models
LLM 最近几年发展迅速,表现出了惊叹的 zero-shot or few-shot 能力。COT(Chain-of-Thought) 通过指导LLM把复杂问题分解成中间推理步骤来得出最终答案。也就是,在让 LLM 得出结果之前,让他先输出推理过程,然后根据推理过程再得出最终的结果。整个过程就和人类的思考方式一样,对于一个复杂的数学题,一步步写出中间的求解过程,最后得出答案,这样能够有效的提高正确率:
Chain-of-Thought:a coherent series of intermediate reasoning steps that lead to the final answer for a problem
Chain-of-Thought Prompting 也就是给 prompt 的 answer 中加上中间步骤的推理过程,以此让 LLM 输出时也保持这种方式。这种就是 few-shot-CoT,也就是在 prompt 中加入了一些 example,之后的一篇 zero-shot-CoT 让人震撼:
没错,只是一句 “Let’s think step by step”,就可以输出推理过程。对于输出最终的结果,其实是个两阶段的过程,第一步就是输出推理过程,第二步是答案提取,通过将第一步骤的推理和 question 拼接并添加一个答案提取的指示性 prompt 来让 LLM 提取得到最终的结果:
Compositional Reasoning
Compositional reasoning refers to the process of breaking down complex problems into smaller sub-problems and solving them step-by-step to arrive at a solution. 组合推理是指将复杂的问题分解成更小的子问题,并逐步解决它们以得出解决方案的过程。
早期的研究认为复杂的推理任务具有基本的组合性,所以提出了神经模块网络(NMN)将这些任务分解成子任务并确定相应的神经模块组合。
比如视觉问答(Visual Question Answering, VQA)任务。
- 复杂的推理任务:视觉问答任务要求模型根据给定的图像回答与其相关的自然语言问题。例如,给定一张包含多个物体的图像和一个问题:“哪个物体最靠近红色的球?”,模型需要识别物体、颜色,并判断它们之间的空间关系来回答问题。
- 分解为子任务:
- 对象检测:识别图像中的物体及其边界框。
- 颜色识别:识别图像中物体的颜色。
- 空间关系推理:判断物体之间的空间关系,如距离、相对位置等。
- 问题解析:从自然语言问题中提取关键信息,如“红色的球”和“最靠近”。
- 答案生成:根据上述子任务的结果生成最终答案。
- 设计神经网络模块:
- 对象检测:使用卷积神经网络(CNN)进行特征提取,然后使用区域建议网络(RPN)生成物体候选框。
- 颜色识别:设计一个用于颜色分类的多层感知器(MLP)。
- 空间关系推理:设计一个循环神经网络(RNN)或Transformer来处理物体之间的空间关系。
- 问题解析:使用循环神经网络(RNN)或Transformer来解析自然语言问题。
- 答案生成:设计一个用于生成答案的循环神经网络(RNN)或Transformer。
- 组合模块:按照任务需要,将这些神经模块按特定顺序组合在一起。例如,首先使用对象检测模块识别图像中的物体,然后使用颜色识别模块识别物体颜色,接着使用空间关系推理模块处理物体之间的空间关系。同时,使用问题解析模块处理自然语言问题。最后,根据所有模块的输出结果,使用答案生成模块生成最终答案。
- 训练和推理:
- 训练:使用带有图像、问题和正确答案的标注数据集进行训练。在训练过程中,通过梯度下降等优化算法来更新每个模块的权重,以最小化预测误差。
- 推理:在训练完成后,神经模块网络可以对新的输入数据(图像和问题)进行推理,并生成相应的答案。由于每个模块都专注于处理一个子任务,因此整个网络的解释性较强。可以通过检查每个模块的输出,来理解整个推理过程。例如,对于给定的问题:“哪个物体最靠近红色的球?”在推理过程中,可以观察到:
- 对象检测模块输出物体及其边界框,如球、立方体等。
- 颜色识别模块为每个检测到的物体分配颜色。
- 空间关系推理模块计算物体之间的距离,并找到最靠近红色球的物体。
- 问题解析模块从问题中提取关键信息,如要找到哪个物体最靠近红色球。
- 答案生成模块根据前面模块的输出结果生成最终答案,如“绿色立方体”。
通过这样的过程,神经模块网络(NMN)可以将复杂的视觉问答任务分解为子任务,并通过组合各个模块来解决整个问题。这提高了网络的解释性和适应性,有助于在不同领域和任务之间迁移和推广。
但是,这些方法依赖于脆弱的现成 parsers(可能是自然语言处理(NLP)中的语法解析器或者语义解析器,用于将任务中的问题或输入数据解析为一系列子任务),并受到模块配置的限制。
- 脆弱性:现成的 parsers 很可能在处理复杂或者特定领域的任务时遇到困难。这些解析器可能对一些输入数据过于敏感,从而导致错误的子任务分解。如果解析结果不准确,那么神经模块网络的整体性能也将受到影响。
- 模块配置的限制:早期的神经模块网络需要手动确定模块之间的连接和组合方式。这种方法可能需要大量的人工干预和领域知识,限制了模型的泛化能力。而且,在训练过程中,这种静态的模块组合方式可能无法很好地适应不同的任务和数据。
所以,后续的一些研究通过使用强化学习和弱监督学习,不依赖解析器,以端到端的方式预测特定实例的网络布局。端到端模块网络 (N2NMNs),它通过直接预测特定于实例的网络布局来学习推理,而无需 parsers 的帮助,其包含一个布局策略,预测特定于给定问题的神经网络布局,并从模块动态组装它。But,训练这样的网络既耗时又昂贵。
Chameleon 同样也是通过生成一组 model 组合的 program,但是具有以下优势:
- Chameleon 生成由模块组成的顺序程序,易于推广到各种领域和任务,并允许以即插即用的方式扩展到新模块
- Chameleon 不需要任何训练,而是利用大型语言模型(LLM)的 in-context learning 能力根据 natural language instruction and demonstrations 动态的生成 program。
Tool-Augmented Language Models
尽管 LLMs 在许多任务上表现出了令人印象深刻的性能,但它们仍存在一些固有的局限性,比如:
- 无法访问最新信息:LLMs在训练时获取的知识是有限的,无法实时更新。
- 无法利用外部工具:LLMs不能直接与外部工具(如数据库、搜索引擎等)交互。
- 在进行精确数学推理方面的不足:LLMs在处理复杂数学问题时可能会遇到困难。
为了解决这些问题,研究人员越来越关注利用外部工具和模块化方法来增强LLMs的能力
- 利用网络搜索引擎辅助获取实时信息,以帮助LLMs获取最新数据。
- 利用外部资源中的领域特定知识来丰富LLMs的知识库。
- 使用Python解释器生成复杂程序,以便利用强大的计算资源并更有效地执行逻辑推理任务。
比如说 HuggingGPT 🤗,通过大型语言模型(LLM)作为控制器(相当于“逻辑中枢”)来调用现有的 model ,从而解决复杂的任务。该框架包括四个步骤:任务规划、模型选择、任务执行和结果聚合。
- 任务规划阶段,HuggingGPT从用户输入中识别任务需求,提取数据集、场景信息等信息
- 模型选择阶段,HuggingGPT 根据任务需求从 HuggingFace 库中选择最合适的 AI 模型
- 任务执行阶段,选定的AI模型对数据进行处理,并将结果回传给HuggingGPT
- 响应生成阶段,HuggingGPT 对所有返回的数据进行聚合分析,生成最终的响应,返回给用户
但是作者指出:现有方法要么仅局限于使用一小部分工具(Toolformer),要么仅限于特定任务的工具(VisualGPT),这降低了它们在不同技能维度上的性能,并限制了它们在新任务上的泛化能力。同时一些研究工作依赖大量的监督学习(Toolformer ~\todo)或者专注于生成命令[WebGPT]和程序[ViperGPT]来推断工具的选择。但是,这种方法需要针对特定任务和特定工具精心定制提示,既不灵活也不具有适应性。
与此不同,Chameleon 使用自然语言指令来指导LLMs,这些指令简单地描述了每条规则的作用,并提供了一些 calling examples(in-context learning),这消除了在学习组合不同工具时需要 additional training or tool-specific prompts 的需求。更重要的是,通过更改 instructions,Chameleon 为用户提供了在 tool types and sources, updating the underlying LLMs, adding new tools, and adapting to new tasks 适应新任务方面的灵活性。
General Framework
Chameleon 有一个 natural language planner, P,能够根据 Question 和 context 生成一系列按顺序执行的 models,这些 models 存储在 M中,然后按照顺序执行这些 models 得到最终的 answer。
的输入为:query (可以包括 question + context???),module inventory ,constraints 就是指对生成的 program 的一些限制,比如最后program中有些 module 的顺序必须是一定的。p 就是 输出的一个 program,内容是一系列按照顺序排列的 models。既然说 是一个 natural language planner,是因为它是基于 LLM 实现的,通过设计好的 prompt 让 LLM 输出一系列的 models:
在这个 prompt 里,首先指定了需求,扮演一个 policy model,也就是一个决策者,基于给定的 modular set 和 question ,输出能够解决这个问题的一系列 modules。从这里可以看到,所谓的 modular set 就是一些可以扩充的 modules 及其对应的自然语言描述,每一个 module 也对应一种类型的 tool:
然后通过一些 few-shot examples,让 学会输出给定 query 的 program:
然后基于输出的 programs,按顺序执行其中的 modules。对于某个 modules,其执行过程为:
是当前 module 的输入,是从之前执行的 modules 输出中保留的一些 informations。得到 之后,对于下一个 module 的输入, 和 都会更新:
最终的答案就是通过最后一个 module 输出得到:
这里我们拿 knowledge_retrieval 这个 module 举例,
question_text
就是 , test_prompt
可以认为就是这个 module 的输入 ,可以看到, 的更新的基本结构就是:一些元数据 Metadata
用于辅助判断,从之前的 modules 输出累积的 response
,以及一个引导性的输出关键词。其实每次所谓的 更新其实就是添加更新后的 response
,将之前 module 输出的信息,作为下次一 module 的输入一部分,提供更多的信息。同时也可以看到,
response
是从 cache
中提取得到的,其实 cache
的更新操作是在每一个 module 执行完之后就更新了:最重要的就是更新
response
,后面的一些更新其实是新的键值对,当作 log 记录。所以,参照代码来看,这里的 其实是上述代码中的
test_prompt
,是 question+response 的结合。 是 cache,保存输出,更新。
其实,module 真正的输入就只有一个 ,这里多了一个cache,其实对输入并没有什么用,如果说真有用,就是每次 module 执行完之后并没有直接更新 ,而是只更新了 cache。然后在下一个 module 执行的时候借助更新的 cache 得到新的 ,还不是直接更新 ,相当于多余了一步。如果每次 module 执行完之后直接更新 ,根本不需要展示出 cache,只是相当于一个 log。Applications of Chameleon
Module Inventory
下面主要是对目前涉及到的 Module 做一个简单的功能描述:
Knowledge Retrieval ( )
获得的背景知识对于解决复杂问题至关重要。在这里,“Knowledge Retrieval ”模块旨在以生成方式获取领域特定的知识,即通过向 LLMs 输入 prompt 生成与所给查询相关的背景信息。通常,这个模块有助于为解决专业领域的问题提供有用的背景知识,比如科学和数学。例如,如果一个问题涉及税收表格,这个模块可以生成与税收相关的知识,为当前任务提供有价值的上下文。
Question: Think about the magnetic force between the magnets in each pair. Which of the following statements is true?
Context: The images below show two pairs of magnets. The magnets in different pairs do not affect each other. All the magnets shown are made of the same material, but some of them are different shapes.
Options: (A) The magnitude of the magnetic force is greater in Pair 1. (B) The magnitude of the magnetic force is greater in Pair 2. (C) The magnitude of the magnetic force is the same in both pairs.
Metadata: {'pid': 270, 'has_image': True, 'grade': 6, 'subject': 'natural science', 'topic': 'physics', 'category': 'Velocity, acceleration, and forces', 'skill': 'Compare magnitudes of magnetic forces'}
Knowledge:
- Magnets can pull or push on each other without touching. When magnets attract, they pull together. When magnets repel, they push apart. These pulls and pushes between magnets are called magnetic forces.
- The strength of a force is called its magnitude. The greater the magnitude of the magnetic force between two magnets, the more strongly the magnets attract or repel each other.
- You can change the magnitude of a magnetic force between two magnets by changing the distance between them. The magnitude of the magnetic force is greater when there is a smaller distance between the magnets.
这是用于 Knowledge Retrieval 的 prompt 中的一个 few-shot example,输入是 question+context+options+metadata,可以看到这里的 knowledge 主要是一些概念性的知识。
Query Generator()
这一个 module 主要是生成适用于 “Bing Search" module 的 query,因为在请求搜索引擎时需要创建合适的请求,以此更能有效地检索到有价值的信息。
上述代码中的 "Capital of Wyoming" 就会被当作 query 请求 API 获取信息。
Bing Search ()
与 “Knowledge Retrieval” 类似,“Bing Search” 的目标是为任务提供更广泛的相关的知识,特别是当任务需要更广泛的信息或需要来自多个来源的最新信息,Bing Search” 具有很大的优势。通过使用搜索引擎 API 实现这个模块,根据输入查询返回相关的搜索结果。然后,返回的结果可以被解析并被系统中的其他模块利用,以从不同的来源收集更丰富的上下文信息,更有效地支持解决问题。
Image Captioner()
This module is designed to generate captions for images, which can be employed to offer additional context for the given question. 。通常情况下,“Image Captioner” 在需要对图像进行语义理解的问题中使用。通过利用预训练的图像标注模型,“Image Captioner” 模块为输入图片生成 captions 。
Text Detector()
本模块旨在识别给定图像中的文本(OCR)。通常情况下,在需要从包含图表、表格、地图或其他视觉元素的图片中提取文本信息时,会使用“Text Detector”。通过有效地检测各种格式的文本,该模块有助于分析和理解基于图像的内容。
Row Lookup()
在涉及表格上下文的问题中,定位相关单元格以回答问题通常是必要的。具有众多单元格的大型表可能会分散系统注意力,使理解数据变得困难。"Row Lookup" 模块返回仅保留与问题相关的行的简化版本表格。该模块接受一个问题和一个表作为输入,并输出简化后的表格。如果所有行都相关,则返回原始表。
Column Lookup()
和上面一个类似,主要是简化表格,返回与问题相关的列。如果所有列都相关就返回原始表格。
Experiments
Modules implementations
On ScienceQA, the Answer Generator” module extracts the answer snippet from the result provided by the Solution Generator” and selects the most similar option from the given choices.
其实首先就是,如果能够从 solution Generator 的输出中提取到在指定 options中提取到对应的选项,就获得答案,但是如果没有直接找到,就进行字符串相似度计算,就是将输出的结果一个个和 options 中的待选项进行相似度计算,这个相似度计算就是重叠的字符的数量比上最大的字符串的字符长度,然后返回相似度最高的对应的选项。
- 作者:huhu
- 链接:https://blog.mwwlzz.top/article/Chameleon
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章