diff --git a/README.md b/README.md index 2a5a51624..d3a11380c 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ `category` 请从以下类别中选择 -- `RAG` +- 检索增强生成(`RAG`) - 语言模型(`LLM`) - 提示技术(`Prompt`) - 微调技术(`Finetune`) diff --git a/src/zh/README.md b/src/zh/README.md index cddeedeb9..b48360126 100644 --- a/src/zh/README.md +++ b/src/zh/README.md @@ -12,7 +12,7 @@ article: false projects: - icon: circle-question - name: RAG + name: 检索增强生成(RAG) link: /zh/category/rag/ - icon: circle-question @@ -40,7 +40,7 @@ projects: link: /zh/category/大模型推理/ - icon: puzzle-piece - name: Token + name: Token、分词 link: /zh/category/token/ footer: 分享知识-分享快乐 diff --git a/src/zh/posts/README.md b/src/zh/posts/README.md index 5c14e0ad6..6a0eb0ceb 100644 --- a/src/zh/posts/README.md +++ b/src/zh/posts/README.md @@ -9,11 +9,11 @@ article: false 本页面包含一些论文分享的分类: -- [RAG](./rag/) +- [检索增强生成(RAG)](./rag/) - [语言模型](./llm/) - [提示技术](./prompt/) - [微调技术](./finetune/) - [评估方法](./eval/) - [数据集](./dataset/) - [大模型推理](./reasoning/) -- [Token](./token/) \ No newline at end of file +- [Token、分词](./token/) \ No newline at end of file diff --git a/src/zh/posts/eval/M3KE.md b/src/zh/posts/eval/M3KE.md index fe137c7d2..ff6af998c 100644 --- a/src/zh/posts/eval/M3KE.md +++ b/src/zh/posts/eval/M3KE.md @@ -7,11 +7,11 @@ date: 2023-07-08 tag: - 语言模型 - 评估 -shortTitle: M3KE数据集分享 +shortTitle: M3KE-大模型中文评估 --- -# M3KE评估数据集分享 +# M3KE-大模型中文能力综合评估 M3KE数据集是一种针对大语言模型的多层次、多主题的知识评估数据集,旨在衡量中文大型语言模型在零样本和少样本设置中获取知识的能力。 @@ -26,12 +26,12 @@ M3KE数据集是一种针对大语言模型的多层次、多主题的知识评 ::: -## 1 数据集数据 +## 1 评估数据 M3KE 收集了 20,477 个真人标准化考试题目(包含 4 个候选答案),覆盖 71 个任务,包括小学、初中、高中、大学、研究生入学考试题目,涉及人文、历史、政治、法律、教育、心理学、科学、工程技术、艺术等学科。 ![图1.1 M3KE数据集中任务分布](/assets/images/eval/M3KE_1.png "图1.1 M3KE数据集中任务分布" =430x400) -## 2 数据集优势 +## 2 评估优势 (1) 契合中国教育体系,覆盖多教育阶段 研究人员模仿中国学生的教育经历,即小学、初中、高中、大学等主要教育阶段,旨在评估中文大模型在不同教育阶段下的表现。由于每个教育阶段需要掌握的知识点不同(例如,在语文学科中,小学和初中的知识或考点存在明显的差异),因此,M3KE 在不同教育阶段会包含相同的学科。为了提高数据集中学科知识点的覆盖范围,研究人员选择了中国升学考试中的统考试题,包括小升初、中考、高考,研究生入学考试和中国公务员考试等真题题目。 (2) 覆盖多学科领域 diff --git a/src/zh/posts/rag/README.md b/src/zh/posts/rag/README.md index b90719e2a..3ebba10c2 100644 --- a/src/zh/posts/rag/README.md +++ b/src/zh/posts/rag/README.md @@ -1,5 +1,5 @@ --- -title: RAG +title: 检索增强生成(RAG) icon: puzzle-piece index: false article: false diff --git a/src/zh/posts/prompt/CoT.md b/src/zh/posts/reasoning/CoT.md similarity index 97% rename from src/zh/posts/prompt/CoT.md rename to src/zh/posts/reasoning/CoT.md index 6dfea5fb9..267691d33 100644 --- a/src/zh/posts/prompt/CoT.md +++ b/src/zh/posts/reasoning/CoT.md @@ -1,88 +1,88 @@ ---- -author: lx -icon: wand-magic-sparkles -date: 2023-06-05 -shortTitle: "Chain-of-Thought: 思维链" -category: - - 提示技术 -tag: - - 推理 - - LLM - - CoT ---- - -# Chain-of-Thought: 思维链 - -该文介绍了 `Chain-of-Thought: 思维链` 框架,结合 `in-context`, `few-shot prompting` 以及多步中间推理,通过大模型来改善数学计算、常识推理的效果。 - - - -::: tip -论文题目:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models -作者:Jason Wei, Xuezhi Wang, Dale Schuurmans, Maarten Bosma, Brian Ichter, Fei Xia, Ed H. Chi, Quoc V. Le, Denny Zhou -机构:Google -::: - - - - - ---- - -## 1 背景介绍 - -> 语言模型的本质是对任意一段文本序列的概率进行建模 - -用一个训练好的大语言模型求解推理任务的几种范式: - -### 1.1 Zero-Shot - -![图1.1 Zero-Shot](/assets/images/prompt/cot1.png "图1.1 Zero-Shot" =550x) - -这里语言模型的输入就是一道数学题,连接上一个字符串 `The answer is`,然后让语言模型帮助续写。续写的答案就是80。 - -### 1.2 Zero-Shot-CoT - -![图1.2 Zero-Shot-CoT](/assets/images/prompt/cot2.png "图1.2 Zero-Shot-CoT" =550x) - -`Zero-Shot-CoT` 在 `Zero-Shot` 的基础上增加了一句 `Let's think step by step.`,大语言模型会自动续写推理过程并得出最后的答案。 - -### 1.3 Manual-CoT - -![图1.3 Manual-CoT](/assets/images/prompt/cot3.png "图1.3 Manual-CoT" =400x) - -在输入问题之前,**手动设计**一些问题和答案的样例。`Manual-CoT` 比 `Zero-Shot-CoT` 的性能要好,因为在输入端提供了问题,推理,答案的样例供参考。然而为了提供这些样例就需要人工设计,这就增加了人工的成本。 - -### 1.4 Auto-CoT - -![图1.4 Auto-CoT](/assets/images/prompt/cot4.png "图1.4 Auto-CoT" =400x) - -如何将人工设计样例的过程自动化?步骤如下: -(1)通过多样性选择有代表性的问题 -(2)对于每一个采样的问题,接上 `Let's think step by step.`,直接丢给语言模型,让它帮我们生成中间推理步骤和答案。然后把所有采样的问题和模型自动生成的推理步骤和答案全部拼接在一起来构成 `Few-Shot-Learning` 所需要的样例,最后跟上下面需要求解的问题,一起丢给语言模型,让其帮我们续写。 - - -## 2 思路 - -结合 `in-context`, `few-shot prompting` 以及多步中间推理,通过大模型来改善数学计算、常识推理的效果 - -![图2.1 CoT](/assets/images/prompt/cot5.png "图2.1 CoT" =600x) - -`CoT` 思维链的灵感来源于人做推理的过程,作者借鉴了这个过程,通过设计类似于思维链来激发大模型,使之拥有推理能力,并且能由于这个有逻辑性的思维链的存在,多步的中间推到可以得到最终的正确答案。 - -![图2.2 CoT Examplars](/assets/images/prompt/cot6.png "图2.2 CoT Examplars" =600x) - -## 3 实验结果 - -![图3.1 不同模型实验结果](/assets/images/prompt/cot7.png "图3.1 不同模型实验结果" =480x) - -100B(1000亿参数)参数量以下的模型效果不好,侧面反映了他们的instruct fine-tune不够,COT很难激发他的in-context 推理能力。而在100B以上模型效果很好,甚至超过了之前基于监督训练的SOTA模型。 - - -## 4 参考 - - +--- +author: lx +icon: wand-magic-sparkles +date: 2023-06-05 +shortTitle: "Chain-of-Thought: 思维链" +category: + - 提示技术 +tag: + - 推理 + - LLM + - CoT +--- + +# Chain-of-Thought: 思维链 + +该文介绍了 `Chain-of-Thought: 思维链` 框架,结合 `in-context`, `few-shot prompting` 以及多步中间推理,通过大模型来改善数学计算、常识推理的效果。 + + + +::: tip +论文题目:Chain-of-Thought Prompting Elicits Reasoning in Large Language Models +作者:Jason Wei, Xuezhi Wang, Dale Schuurmans, Maarten Bosma, Brian Ichter, Fei Xia, Ed H. Chi, Quoc V. Le, Denny Zhou +机构:Google +::: + + + + + +--- + +## 1 背景介绍 + +> 语言模型的本质是对任意一段文本序列的概率进行建模 + +用一个训练好的大语言模型求解推理任务的几种范式: + +### 1.1 Zero-Shot + +![图1.1 Zero-Shot](/assets/images/prompt/cot1.png "图1.1 Zero-Shot" =550x) + +这里语言模型的输入就是一道数学题,连接上一个字符串 `The answer is`,然后让语言模型帮助续写。续写的答案就是80。 + +### 1.2 Zero-Shot-CoT + +![图1.2 Zero-Shot-CoT](/assets/images/prompt/cot2.png "图1.2 Zero-Shot-CoT" =550x) + +`Zero-Shot-CoT` 在 `Zero-Shot` 的基础上增加了一句 `Let's think step by step.`,大语言模型会自动续写推理过程并得出最后的答案。 + +### 1.3 Manual-CoT + +![图1.3 Manual-CoT](/assets/images/prompt/cot3.png "图1.3 Manual-CoT" =400x) + +在输入问题之前,**手动设计**一些问题和答案的样例。`Manual-CoT` 比 `Zero-Shot-CoT` 的性能要好,因为在输入端提供了问题,推理,答案的样例供参考。然而为了提供这些样例就需要人工设计,这就增加了人工的成本。 + +### 1.4 Auto-CoT + +![图1.4 Auto-CoT](/assets/images/prompt/cot4.png "图1.4 Auto-CoT" =400x) + +如何将人工设计样例的过程自动化?步骤如下: +(1)通过多样性选择有代表性的问题 +(2)对于每一个采样的问题,接上 `Let's think step by step.`,直接丢给语言模型,让它帮我们生成中间推理步骤和答案。然后把所有采样的问题和模型自动生成的推理步骤和答案全部拼接在一起来构成 `Few-Shot-Learning` 所需要的样例,最后跟上下面需要求解的问题,一起丢给语言模型,让其帮我们续写。 + + +## 2 思路 + +结合 `in-context`, `few-shot prompting` 以及多步中间推理,通过大模型来改善数学计算、常识推理的效果 + +![图2.1 CoT](/assets/images/prompt/cot5.png "图2.1 CoT" =600x) + +`CoT` 思维链的灵感来源于人做推理的过程,作者借鉴了这个过程,通过设计类似于思维链来激发大模型,使之拥有推理能力,并且能由于这个有逻辑性的思维链的存在,多步的中间推到可以得到最终的正确答案。 + +![图2.2 CoT Examplars](/assets/images/prompt/cot6.png "图2.2 CoT Examplars" =600x) + +## 3 实验结果 + +![图3.1 不同模型实验结果](/assets/images/prompt/cot7.png "图3.1 不同模型实验结果" =480x) + +100B(1000亿参数)参数量以下的模型效果不好,侧面反映了他们的instruct fine-tune不够,COT很难激发他的in-context 推理能力。而在100B以上模型效果很好,甚至超过了之前基于监督训练的SOTA模型。 + + +## 4 参考 + + diff --git a/src/zh/posts/prompt/GoT.md b/src/zh/posts/reasoning/GoT.md similarity index 100% rename from src/zh/posts/prompt/GoT.md rename to src/zh/posts/reasoning/GoT.md diff --git a/src/zh/posts/prompt/MathPrompter.md b/src/zh/posts/reasoning/MathPrompter.md similarity index 98% rename from src/zh/posts/prompt/MathPrompter.md rename to src/zh/posts/reasoning/MathPrompter.md index 74c725308..ebfb64053 100644 --- a/src/zh/posts/prompt/MathPrompter.md +++ b/src/zh/posts/reasoning/MathPrompter.md @@ -1,148 +1,148 @@ ---- -author: lx -icon: wand-magic-sparkles -date: 2023-03-30 -shortTitle: "MathPrompter: 数学推理" -category: - - 提示技术 -tag: - - 推理 - - LLM - - CoT ---- - -# MathPrompter: 数学推理 - -[该文](https://mp.weixin.qq.com/s/DUS4pc7izs9CS3Pmz3WMxg)介绍了 `MathPrompter: 数学推理` 框架,解决需要多步推理的复杂数学问题。 - - - - - -> 论文要解决的问题 - -(1)数学问题通常只有一个正确答案,对于一个需要**多步推理**的复杂数学问题,语言模型通常都无法给出正确答案,即便有「思维链」技术的加持,往往**中间步骤也会出错**。 -(2)并且,在数学问题上,现有的语言模型通常不会对自己的答案**提供置信度**(`confidence`),让用户无从判断生成答案的可信度。 - -> 采用方法 - -(1)`MathPrompter` 使用 `Zero-shot` 思维链提示技术生成多个**代数表达式**或 **`Python` 函数**,以不同方式解决同一个数学问题,从而提高输出结果的可信度。 -(2)相比其他基于提示的 `CoT` 方法,`MathPrompter` 还会检查中间步骤的有效性。 - -> 结果 - -基于 `175B` 参数 `GPT`,使用 `MathPrompter` 方法将`MultiArith` 数据集的准确率从 `78.7%` 提升到了 `92.5%`。 - ---- - -## 1 专攻数学的Prompt - -最近自然语言处理的发展很大程度上归功于大型语言模型(LLMs)在规模上的不断扩展,其展现出了惊人的 `zero-shot` 和 `few-shot` 能力,也促成了 `prompting` 技术的发展,用户只需要在 `prompt`中给 `LLM` 输入几个简单的样例即可对新任务进行预测。`prompt` 对于**单步**的任务相当成功,但在需要**多步骤推理**的任务中,提示技术的性能仍然不够。 - -人类在解决一个复杂问题时,会将其进行**分解**,并尝试一步步地解决,思维链(CoT)提示技术就是将这种直觉扩展到 `LLMs` 中,在一系列需要推理的NLP任务中都得到了性能改进。 - -本篇论文主要研究用于解决数学推理任务的 `Zero-shot-CoT` 方法,之前的工作已经在 `MultiArith` 数据集上得到了显著的准确率改进,从 $17.7\%$ 提升到了 $78.7\%$,但仍然存在两个关键的不足之处: -(1)虽然模型所遵循的思维链改进了结果,但却没有检查思维链提示所遵循的每个步骤的有效性; -(2)没有对LLM预测结果提供置信度(`confidence`)。 - - -## 2 MathPrompter - -为了在一定程度上解决上述差距,从人类解决数学题的方式中得到启发,将复杂问题分解为更简单的多步程序,并利用多种方式在每一个步骤中对方法进行验证。 - -![图2.1 MathPrompter 工作流](/assets/images/prompt/MathPrompter1.png =550x) - -由于LLM是生成式模型,要确保生成的答案是准确的,特别是对于数学推理任务,就变得非常棘手。通过观察学生解决算术问题的过程,总结出了学生为验证其解决方案而采取的几个步骤: -(1)遵循已知结果(`Compliance with known results`),通过将解决方案与已知结果进行比较,可以评估其准确性并进行必要的调整;当问题是一个具有成熟解决方案的标准问题时,这一点尤其有用。 -(2)多重验证 (`Multi-verification`),通过从多个角度切入问题并比较结果,有助于确认解决方案的有效性,确保其既合理又准确。 -(3)交叉检查 (`Cross-checking`),解决问题的过程与最终的答案同样必要;验证过程中的中间步骤的正确性可以清楚地了解解决方案背后的思维过程。 -(4)计算验证 (`Compute verification`),利用计算器或电脑进行算术计算可以帮助验证最终答案的准确性。 - -具体而言,给定一个问题 $Q$。 - -::: code-tabs#plain - -@tab EN - -```plain -Q:At a restaurant, each adult meal costs \$5 and kids eat free. If a group of 15people came in and 8 were kids, how much would it cost for the group to eat? -``` - -@tab CN - -```plain -在一家餐厅,每份成人餐的价格是5美元,儿童免费用餐。如果有15个人进来,其中8个是孩子,那么这群人要花多少钱吃饭? -``` - -::: - - -### 2.1 生成代数模板 Generating Algebraic template - -首先将问题转化为代数形式,通过使用键值映射将数字项替换为变量,然后得到修改后的问题 $Qt$。 - -```plain -Qt: at a restaurant, each adult meal costs A and kids eat free. if a group of B people came in and C were kids, how much would it cost for the group to eat? - -Mapping:{A:5, B:15, C:8} -``` - -### 2.2 数学提示 Math-prompts - -基于上述多重验证和交叉检查的思维过程所提供的直觉上,使用两种不同的方法生成 `Qt` 的分析解决方案,即代数方式和 `Pythonic` 方式,给 `LLM` 提供以下提示,为 `Qt` 生成额外的上下文。 - -```plain -Algebraic prompt: Write a mathematical equation and generate the answer format starting with 'Answer =' - -Python prompt: Write a Python function that returns the answer. -``` -提示可以是**推导出一个代数表达式**或**编写一个Python函数** -`LLM` 模型在响应提示后可以输出如下表达式。 - -```python -# Algebraic expression output -Answer = A * (B - C) - -# Python expression output -def total_price(A, B, C): - return A * (B - C) -``` - -上述生成的分析方案为用户提供了关于LLM的「中间思维过程」的提示,加入额外的提示可以提高结果的准确性和一致性,反过来会提高MathPrompter生成更精确和有效的解决方案的能力。 - - -### 2.3 计算验证 Compute verification - -使用 `Qt` 中输入变量的多个随机键值映射来评估上一步生成的表达式,使用 `Python` 的 `eval()` 方法对这些表达式进行评估。 -然后比较输出结果,看是否能在答案中找到一个**共识**(`consensus`),也可以提供更高的置信度,即答案是正确且可靠的。 - -```python -Algebraic-answer = 35 -Pythonic-answer = 35 -``` - -一旦表达式在输出上达成一致,就使用输入 $Q$ 中的变量值来计算最终的答案。 - -### 2.4 统计学意义 Statistical significance - -为了保证各种表达式的输出结果达成共识,实验中将步骤2和3重复大约5次,并记录出现最频繁的答案值。在没有明确共识的情况下,重复步骤2、3、4。 - -## 3 实验结果 - -在 `MultiArith` 数据集上对 `MathPrompter` 进行评估,其中的数学问题专门用来测试机器学习模型进行复杂算术运算和推理的能力,要求应用多种算术运算和逻辑推理才能成功地解决。 - -![图3.1 MultiArith实验结果](/assets/images/prompt/MathPrompter2.png =550x) - -在 `MultiArith` 数据集上的准确率结果显示,`MathPrompter`的表现优于所有的 `Zero-shot` 和 `Zero-shot-CoT` 基线,将准确率从 $78.7\%$ 提升到 $92.5\%$ - -可以看到,基于 $175B$ 参数 `GPT3 DaVinci` 的 `MathPrompter` 模型的性能与 $540B$ 参数模型以及 `SOTA` 的 `Few-shot-CoT` 方法相当。 - -![图3.2 效果比较](/assets/images/prompt/MathPrompter3.png =550x) - -从上表可以看到,`MathPrompter`的设计可以弥补生成的答案有时会有一步之差的问题,可以通过多次运行模型并报告共识结果来避免。 - -此外,推理步骤可能过于冗长的问题,可以由 `Pythonic` 或`Algebraic` 方法可以解决这个问题,通常需要较少的 `token`。 - -此外,推理步骤可能是正确的,但最终的计算结果却不正确,`MathPrompter` 通过使用 `Python` 的 `eval()` 方法函数来解决这个问题。 - -在大部分情况下,`MathPrompter` 都能生成正确的中间和最终答案,不过也有少数情况,如表中的最后一个问题,代数和 `Pythonic` 的输出都是一致的,但却有错误。 +--- +author: lx +icon: wand-magic-sparkles +date: 2023-03-30 +shortTitle: "MathPrompter: 数学推理" +category: + - 提示技术 +tag: + - 推理 + - LLM + - CoT +--- + +# MathPrompter: 数学推理 + +[该文](https://mp.weixin.qq.com/s/DUS4pc7izs9CS3Pmz3WMxg)介绍了 `MathPrompter: 数学推理` 框架,解决需要多步推理的复杂数学问题。 + + + + + +> 论文要解决的问题 + +(1)数学问题通常只有一个正确答案,对于一个需要**多步推理**的复杂数学问题,语言模型通常都无法给出正确答案,即便有「思维链」技术的加持,往往**中间步骤也会出错**。 +(2)并且,在数学问题上,现有的语言模型通常不会对自己的答案**提供置信度**(`confidence`),让用户无从判断生成答案的可信度。 + +> 采用方法 + +(1)`MathPrompter` 使用 `Zero-shot` 思维链提示技术生成多个**代数表达式**或 **`Python` 函数**,以不同方式解决同一个数学问题,从而提高输出结果的可信度。 +(2)相比其他基于提示的 `CoT` 方法,`MathPrompter` 还会检查中间步骤的有效性。 + +> 结果 + +基于 `175B` 参数 `GPT`,使用 `MathPrompter` 方法将`MultiArith` 数据集的准确率从 `78.7%` 提升到了 `92.5%`。 + +--- + +## 1 专攻数学的Prompt + +最近自然语言处理的发展很大程度上归功于大型语言模型(LLMs)在规模上的不断扩展,其展现出了惊人的 `zero-shot` 和 `few-shot` 能力,也促成了 `prompting` 技术的发展,用户只需要在 `prompt`中给 `LLM` 输入几个简单的样例即可对新任务进行预测。`prompt` 对于**单步**的任务相当成功,但在需要**多步骤推理**的任务中,提示技术的性能仍然不够。 + +人类在解决一个复杂问题时,会将其进行**分解**,并尝试一步步地解决,思维链(CoT)提示技术就是将这种直觉扩展到 `LLMs` 中,在一系列需要推理的NLP任务中都得到了性能改进。 + +本篇论文主要研究用于解决数学推理任务的 `Zero-shot-CoT` 方法,之前的工作已经在 `MultiArith` 数据集上得到了显著的准确率改进,从 $17.7\%$ 提升到了 $78.7\%$,但仍然存在两个关键的不足之处: +(1)虽然模型所遵循的思维链改进了结果,但却没有检查思维链提示所遵循的每个步骤的有效性; +(2)没有对LLM预测结果提供置信度(`confidence`)。 + + +## 2 MathPrompter + +为了在一定程度上解决上述差距,从人类解决数学题的方式中得到启发,将复杂问题分解为更简单的多步程序,并利用多种方式在每一个步骤中对方法进行验证。 + +![图2.1 MathPrompter 工作流](/assets/images/prompt/MathPrompter1.png =550x) + +由于LLM是生成式模型,要确保生成的答案是准确的,特别是对于数学推理任务,就变得非常棘手。通过观察学生解决算术问题的过程,总结出了学生为验证其解决方案而采取的几个步骤: +(1)遵循已知结果(`Compliance with known results`),通过将解决方案与已知结果进行比较,可以评估其准确性并进行必要的调整;当问题是一个具有成熟解决方案的标准问题时,这一点尤其有用。 +(2)多重验证 (`Multi-verification`),通过从多个角度切入问题并比较结果,有助于确认解决方案的有效性,确保其既合理又准确。 +(3)交叉检查 (`Cross-checking`),解决问题的过程与最终的答案同样必要;验证过程中的中间步骤的正确性可以清楚地了解解决方案背后的思维过程。 +(4)计算验证 (`Compute verification`),利用计算器或电脑进行算术计算可以帮助验证最终答案的准确性。 + +具体而言,给定一个问题 $Q$。 + +::: code-tabs#plain + +@tab EN + +```plain +Q:At a restaurant, each adult meal costs \$5 and kids eat free. If a group of 15people came in and 8 were kids, how much would it cost for the group to eat? +``` + +@tab CN + +```plain +在一家餐厅,每份成人餐的价格是5美元,儿童免费用餐。如果有15个人进来,其中8个是孩子,那么这群人要花多少钱吃饭? +``` + +::: + + +### 2.1 生成代数模板 Generating Algebraic template + +首先将问题转化为代数形式,通过使用键值映射将数字项替换为变量,然后得到修改后的问题 $Qt$。 + +```plain +Qt: at a restaurant, each adult meal costs A and kids eat free. if a group of B people came in and C were kids, how much would it cost for the group to eat? + +Mapping:{A:5, B:15, C:8} +``` + +### 2.2 数学提示 Math-prompts + +基于上述多重验证和交叉检查的思维过程所提供的直觉上,使用两种不同的方法生成 `Qt` 的分析解决方案,即代数方式和 `Pythonic` 方式,给 `LLM` 提供以下提示,为 `Qt` 生成额外的上下文。 + +```plain +Algebraic prompt: Write a mathematical equation and generate the answer format starting with 'Answer =' + +Python prompt: Write a Python function that returns the answer. +``` +提示可以是**推导出一个代数表达式**或**编写一个Python函数** +`LLM` 模型在响应提示后可以输出如下表达式。 + +```python +# Algebraic expression output +Answer = A * (B - C) + +# Python expression output +def total_price(A, B, C): + return A * (B - C) +``` + +上述生成的分析方案为用户提供了关于LLM的「中间思维过程」的提示,加入额外的提示可以提高结果的准确性和一致性,反过来会提高MathPrompter生成更精确和有效的解决方案的能力。 + + +### 2.3 计算验证 Compute verification + +使用 `Qt` 中输入变量的多个随机键值映射来评估上一步生成的表达式,使用 `Python` 的 `eval()` 方法对这些表达式进行评估。 +然后比较输出结果,看是否能在答案中找到一个**共识**(`consensus`),也可以提供更高的置信度,即答案是正确且可靠的。 + +```python +Algebraic-answer = 35 +Pythonic-answer = 35 +``` + +一旦表达式在输出上达成一致,就使用输入 $Q$ 中的变量值来计算最终的答案。 + +### 2.4 统计学意义 Statistical significance + +为了保证各种表达式的输出结果达成共识,实验中将步骤2和3重复大约5次,并记录出现最频繁的答案值。在没有明确共识的情况下,重复步骤2、3、4。 + +## 3 实验结果 + +在 `MultiArith` 数据集上对 `MathPrompter` 进行评估,其中的数学问题专门用来测试机器学习模型进行复杂算术运算和推理的能力,要求应用多种算术运算和逻辑推理才能成功地解决。 + +![图3.1 MultiArith实验结果](/assets/images/prompt/MathPrompter2.png =550x) + +在 `MultiArith` 数据集上的准确率结果显示,`MathPrompter`的表现优于所有的 `Zero-shot` 和 `Zero-shot-CoT` 基线,将准确率从 $78.7\%$ 提升到 $92.5\%$ + +可以看到,基于 $175B$ 参数 `GPT3 DaVinci` 的 `MathPrompter` 模型的性能与 $540B$ 参数模型以及 `SOTA` 的 `Few-shot-CoT` 方法相当。 + +![图3.2 效果比较](/assets/images/prompt/MathPrompter3.png =550x) + +从上表可以看到,`MathPrompter`的设计可以弥补生成的答案有时会有一步之差的问题,可以通过多次运行模型并报告共识结果来避免。 + +此外,推理步骤可能过于冗长的问题,可以由 `Pythonic` 或`Algebraic` 方法可以解决这个问题,通常需要较少的 `token`。 + +此外,推理步骤可能是正确的,但最终的计算结果却不正确,`MathPrompter` 通过使用 `Python` 的 `eval()` 方法函数来解决这个问题。 + +在大部分情况下,`MathPrompter` 都能生成正确的中间和最终答案,不过也有少数情况,如表中的最后一个问题,代数和 `Pythonic` 的输出都是一致的,但却有错误。 diff --git a/src/zh/posts/prompt/SoT.md b/src/zh/posts/reasoning/SoT.md similarity index 98% rename from src/zh/posts/prompt/SoT.md rename to src/zh/posts/reasoning/SoT.md index f0bea53da..312dceed0 100644 --- a/src/zh/posts/prompt/SoT.md +++ b/src/zh/posts/reasoning/SoT.md @@ -1,149 +1,149 @@ ---- -author: lx -icon: wand-magic-sparkles -date: 2023-06-05 -shortTitle: "Skeleton-of-Thought: 思维骨架" -category: - - 提示技术 -tag: - - 推理 - - LLM - - SoT ---- - -# Skeleton-of-Thought: 思维骨架 - -[该文](https://mp.weixin.qq.com/s/9t1opfhUYm3yJuEoKPvVuQ) 介绍了清华与微软合作提出的一种全新**思维骨架**(SoT),大大减少了LLM回答的延迟,并提升了回答的质量。 - - - -由于当前先进的LLM采用了**顺序解码**方式,即一次生成一个词语或短语。然而,这种顺序解码可能花费较长生成时间,特别是在处理复杂任务时,会增加系统的延迟。受人类思考和写作过程的启发,来自清华微软的研究人员提出了「思维骨架」(SoT),以减少大模型的端到端的生成延迟。 - -核心思想:SoT引导LLM,首先生成答案的**骨架**,然后进行并行API调用或分批解码,并行完成每个骨架点的内容。SoT不仅大大提高了速度,在11个不同的LLM中可达2.39倍,而且还可能在多样性和相关性方面提高多个问题类别的答案质量。研究人员称,SoT是以数据为中心优化效率的初步尝试,揭示了推动LLM更像人类一样思考答案质量的潜力。 - - - ---- - -## 1 SoT,让大模型并行解码 - -### 1.1 背景 - -目前,最先进的LLM的推理过程依旧缓慢,交互能力大大减分。LLM推理慢的3个主要原因: - -(1)大模型需要大量内存,内存访问和计算。比如,GPT-3的FP16权重需要350 GB内存,这意味着仅推理就需要5×80GB A100 GPU。即使有足够多的GPU,繁重的内存访问和计算也会降低推理(以及训练)的速度。 -(2)主流Transformer架构中的核心注意力操作受I/O约束,其内存和计算复杂度与序列长度成二次方关系。 -(3)推理中的顺序解码方法逐个生成token,其中每个token都依赖于先前生成的token。这种方法会带来很大的推理延迟,因为token的生成无法并行化。 - -先前的研究中,大多将重点放在**大模型规模**,以及**注意力操作**上。这次,研究团队展示了,现成LLM**并行解码**的可行性,而无需对其模型、系统或硬件进行任何改动。 - -> 研究人员可以通过Slack使用Claude模型将延迟时间从22秒,减少到12秒(快了1.83倍),通过A100上的Vicuna-33B V1.3将延迟时间从43秒减少到16秒(快了2.69倍)。 - -### 1.2 思路 - -这个想法,来源于对人类自身如何回答问题的思考。对于我们来讲,并不总是按顺序思考问题,并写出答案。相反,对于许多类型的问题,首先根据一些策略推导出骨架,然后添加细节来细化和说明每一点。那么,这一点在提供咨询、参加考试、撰写论文等正式场合中,更是如此。我们能够让LLM以同样的方式思考吗?为此,研究人员提出了「思维骨架」(SoT)。具体来说, - -![图1.1 SoT框架](/assets/images/prompt/SoT1.png =650x) - -(1)引导LLM首先自己推导出一个骨架。 -(2)在骨架的基础上,LLM可以并行地完成每个点,从而提高速度。SoT既可用于加速分批解码的开源模型,也可用于加速并行API调用的闭源模型。 -(3)最后,研究人员在最近发布的11个LLM上测试SoT。结果显示,SoT不仅提供了相当大的加速度(最高可达2.39倍) ,而且它还可以在多样性和相关性方面提高几个问题类别的答案质量。 - -![图1.2 SoT效果](/assets/images/prompt/SoT2.png =680x) - -### 1.3 SoT框架 - -(1)骨架阶段。 - -SoT首先使用骨架提示模版$T^{s}$,以问题$q$为参数,组装一个骨架请求 $T^{s}(question = q)$ 。编写骨架提示模板是为了引导LLM输出**简洁的答案骨架**。然后,研究人员从LLM的骨架答案 $R^{s}$ 中提取B点。 - -(2)点扩展阶段 - -基于骨架,让LLM在每个点上平行展开。具体地说,对于带有索引 $b$ 和骨架 $R^{s}_{b}$ 的点,SoT使用 $R^{s}, point \ index = b, point \ skeleton = R_{b}^{s}$ 作为LLM的点扩展请求,其中 $T^{pe}$ 是点扩展提示模板。最后,在完成所有的点之后,研究人员连接点扩展响应 $\{R^{pe}_{b}\}_{b = 1, \cdots, B}$ 来得到最终的答案。 - -如下,Prompt 1和 Prompt 2显示了,研究人员当前实现使用的骨架提示模板图片和点扩展提示模板图片。 - -![图1.3 使用的骨架提示模板](/assets/images/prompt/SoT3.png =600x) - -![图1.4 使用的点扩展提示模板](/assets/images/prompt/SoT4.png =600x) - -(3)骨架提示模板。 - -为了使输出的骨架简短且格式一致,以提高效率和便于提取要点,骨架提示模板(1)精确描述了任务,(2)使用了两个简单的示范,(3)提供了部分答案「1」为LLM继续写作。 - -(4)点扩展提示模板。 - -点扩展提示模板描述点扩展任务,并提供部分答案。研究人员还提供了指示「在1ー2个句子中非常简短地写出」的说明,以便LLM使答案保持简洁。 - -(5)并行点扩展。 - -对于只能访问API的专有模型可以发出多个并行的API调用。对于开源模型,让模型将点扩展请求作为批处理。 - -### 1.4 为什么SoT降低了解码延迟? - -首先要对SoT为什么能够带来显著的端到端加速有一个高层次的理解。为了简单起见,在这里集中讨论点扩展阶段。 - -具有并行API调用的模型。普通方法向服务器发送一个API请求,而 SoT 并行发送多个 API 请求以获得答案的不同部分。 - -根据经验,研究人员观察到,在论文中使用的API的延迟与响应中的token数呈正相关。如果请求数量没有达到速率限制,SoT显然会带来加速。 - -采用批量解码的开源模型。普通的方法只处理一个问题,并按顺序解码答案,而SoT处理多个点扩展请求和一批答案。 - - -## 2 实验结论 - -实验数据集:使用Vicuna-80数据集,它由跨越9个类别的80个问题组成,如编码、数学、写作、角色扮演等。 - -模型:对11个最近发布的模型进行SoT测试,其中包括9个开源模型和2个基于API的模型。 - -![图2.1 评估模型](/assets/images/prompt/SoT5.png =680x) - -### 2.1 效率评估 - -(1)SoT减少不同模型上的端到端延迟 - -应用SoT后,11个模型中,有6个模型速度有2倍以上的提升(即LLaMA2-Chat-7B,LLaMA2-Chat-13B,Vicuna-7B V1.1,OpenChat-13B,Vicuna-33B V1.3,UltraLM-13B)。在ChatGPT-3.5,Vicuna-13B V1.3和Vicuna-7B V1.3上则有1.8倍以上的速度提升。但在StableVicuna-13B和Claude中,速度几乎没有提升。 - -如果排除数学和代码的问题类别,速度提升会较排除前略高。 - -![图2.2 不同模型加速效果](/assets/images/prompt/SoT6.png =720x) - -(2)SoT减少不同类别问题的端到端延迟 - -下图显示了每个问题类别在所有模型中的平均速度提升。那些SoT能够提供高质量答案的问题类别标记为绿色,不能的其他问题类别标记为红色。当前的SoT已经可以提升所有类别问题的速度。但对于那些SoT可以提供高质量答案的5个问题类别(即知识、常识、通用、角色扮演、虚拟情景),SoT可以将整体答案生成过程加速1.95倍-2.27倍。 - -![图2.3 不同问题类别加速效果](/assets/images/prompt/SoT7.png =680x) - -(3) SoT和正常生成的延迟对比 - -下图显示了模型正常生成和SoT生成的绝对延迟的比较。与正常生成相比,应用SoT的模型生成的速度提升是显而易见的。而**解码阶段**是内容生成端到端延迟的主要原因。因此,尽管SoT在骨架阶段比正常生成具有较高的预填充延迟,但这对总体延迟和总体速度提升几乎没有影响。 - -![图2.4 不同方法加速效果](/assets/images/prompt/SoT8.png =720x) - -### 2.2 质量评估 - -为了比较正常的顺序生成(以下简称为正常)和SoT生成的答案质量,研究采用了两个基于LLM的评估框架: FastChat和LLMZoo。评估过程是向LLM评判器(本研究中为ChatGPT-3.5)展示一个问题和一对答案(由正常和SoT生成),并询问其偏好。回答可能是SoT的答案胜出、与正常答案并列、输给正常答案。 - -(1)整体质量: - -下图显示了使用FastChat和LLMZoo两个指标下使用SOT的模型在所有问题下的赢/平/输率。在SoT严格优于基线时,两个指标之间存在差异(49.0% vs.10.4%)。但这两个指标都认为,在超过76%的情况下,SoT并不比基线(正常生成)差。对于FastChat指标,研究人员还展示了排除数学和编码问题(SoT不适用于这些问题,请参见3.2.2节)的比率:在超过90%的情况下,SoT与基准相当。这表明SoT的答案保持着良好的质量。 - -![图2.5 生成答案质量比较](/assets/images/prompt/SoT9.png =680x) - -(2)SOT在不同类别问题上的表现 - -下图计算了所有问题类别的净胜率(胜率-败率)。LLMZoo指标下SoT的质量比FastChat的更好。但不论在哪个框架指标下,SoT在泛型、常识、知识、角色扮演和反事实方面的表现都相对较好,而在写作、费米问题、数学和编码方面表现相对较差。 - -![图2.6 生成答案分类比较](/assets/images/prompt/SoT10.png =720x) - -## 3 局限性 - -由于提示集的限制、现有LLM判断的偏差,以及LLM属性评价的内在困难,研究人员目前对LLM问题的答案质量的评价还远不全面。 - -对更可靠的质量评价而言,扩展提示集,以及用人工评价补充基于LLM的评价非常重要。 - -然而,目前的研究主要集中在揭示潜在的效率效益上,即通过重新思考现有LLM「全序列解码」的必要性,可以实现相当大的加速。 - -因此,研究人员在最后将对答案质量的更彻底的评估留给了未来的工作。 - -## 4 参考 +--- +author: lx +icon: wand-magic-sparkles +date: 2023-06-05 +shortTitle: "Skeleton-of-Thought: 思维骨架" +category: + - 提示技术 +tag: + - 推理 + - LLM + - SoT +--- + +# Skeleton-of-Thought: 思维骨架 + +[该文](https://mp.weixin.qq.com/s/9t1opfhUYm3yJuEoKPvVuQ) 介绍了清华与微软合作提出的一种全新**思维骨架**(SoT),大大减少了LLM回答的延迟,并提升了回答的质量。 + + + +由于当前先进的LLM采用了**顺序解码**方式,即一次生成一个词语或短语。然而,这种顺序解码可能花费较长生成时间,特别是在处理复杂任务时,会增加系统的延迟。受人类思考和写作过程的启发,来自清华微软的研究人员提出了「思维骨架」(SoT),以减少大模型的端到端的生成延迟。 + +核心思想:SoT引导LLM,首先生成答案的**骨架**,然后进行并行API调用或分批解码,并行完成每个骨架点的内容。SoT不仅大大提高了速度,在11个不同的LLM中可达2.39倍,而且还可能在多样性和相关性方面提高多个问题类别的答案质量。研究人员称,SoT是以数据为中心优化效率的初步尝试,揭示了推动LLM更像人类一样思考答案质量的潜力。 + + + +--- + +## 1 SoT,让大模型并行解码 + +### 1.1 背景 + +目前,最先进的LLM的推理过程依旧缓慢,交互能力大大减分。LLM推理慢的3个主要原因: + +(1)大模型需要大量内存,内存访问和计算。比如,GPT-3的FP16权重需要350 GB内存,这意味着仅推理就需要5×80GB A100 GPU。即使有足够多的GPU,繁重的内存访问和计算也会降低推理(以及训练)的速度。 +(2)主流Transformer架构中的核心注意力操作受I/O约束,其内存和计算复杂度与序列长度成二次方关系。 +(3)推理中的顺序解码方法逐个生成token,其中每个token都依赖于先前生成的token。这种方法会带来很大的推理延迟,因为token的生成无法并行化。 + +先前的研究中,大多将重点放在**大模型规模**,以及**注意力操作**上。这次,研究团队展示了,现成LLM**并行解码**的可行性,而无需对其模型、系统或硬件进行任何改动。 + +> 研究人员可以通过Slack使用Claude模型将延迟时间从22秒,减少到12秒(快了1.83倍),通过A100上的Vicuna-33B V1.3将延迟时间从43秒减少到16秒(快了2.69倍)。 + +### 1.2 思路 + +这个想法,来源于对人类自身如何回答问题的思考。对于我们来讲,并不总是按顺序思考问题,并写出答案。相反,对于许多类型的问题,首先根据一些策略推导出骨架,然后添加细节来细化和说明每一点。那么,这一点在提供咨询、参加考试、撰写论文等正式场合中,更是如此。我们能够让LLM以同样的方式思考吗?为此,研究人员提出了「思维骨架」(SoT)。具体来说, + +![图1.1 SoT框架](/assets/images/prompt/SoT1.png =650x) + +(1)引导LLM首先自己推导出一个骨架。 +(2)在骨架的基础上,LLM可以并行地完成每个点,从而提高速度。SoT既可用于加速分批解码的开源模型,也可用于加速并行API调用的闭源模型。 +(3)最后,研究人员在最近发布的11个LLM上测试SoT。结果显示,SoT不仅提供了相当大的加速度(最高可达2.39倍) ,而且它还可以在多样性和相关性方面提高几个问题类别的答案质量。 + +![图1.2 SoT效果](/assets/images/prompt/SoT2.png =680x) + +### 1.3 SoT框架 + +(1)骨架阶段。 + +SoT首先使用骨架提示模版$T^{s}$,以问题$q$为参数,组装一个骨架请求 $T^{s}(question = q)$ 。编写骨架提示模板是为了引导LLM输出**简洁的答案骨架**。然后,研究人员从LLM的骨架答案 $R^{s}$ 中提取B点。 + +(2)点扩展阶段 + +基于骨架,让LLM在每个点上平行展开。具体地说,对于带有索引 $b$ 和骨架 $R^{s}_{b}$ 的点,SoT使用 $R^{s}, point \ index = b, point \ skeleton = R_{b}^{s}$ 作为LLM的点扩展请求,其中 $T^{pe}$ 是点扩展提示模板。最后,在完成所有的点之后,研究人员连接点扩展响应 $\{R^{pe}_{b}\}_{b = 1, \cdots, B}$ 来得到最终的答案。 + +如下,Prompt 1和 Prompt 2显示了,研究人员当前实现使用的骨架提示模板图片和点扩展提示模板图片。 + +![图1.3 使用的骨架提示模板](/assets/images/prompt/SoT3.png =600x) + +![图1.4 使用的点扩展提示模板](/assets/images/prompt/SoT4.png =600x) + +(3)骨架提示模板。 + +为了使输出的骨架简短且格式一致,以提高效率和便于提取要点,骨架提示模板(1)精确描述了任务,(2)使用了两个简单的示范,(3)提供了部分答案「1」为LLM继续写作。 + +(4)点扩展提示模板。 + +点扩展提示模板描述点扩展任务,并提供部分答案。研究人员还提供了指示「在1ー2个句子中非常简短地写出」的说明,以便LLM使答案保持简洁。 + +(5)并行点扩展。 + +对于只能访问API的专有模型可以发出多个并行的API调用。对于开源模型,让模型将点扩展请求作为批处理。 + +### 1.4 为什么SoT降低了解码延迟? + +首先要对SoT为什么能够带来显著的端到端加速有一个高层次的理解。为了简单起见,在这里集中讨论点扩展阶段。 + +具有并行API调用的模型。普通方法向服务器发送一个API请求,而 SoT 并行发送多个 API 请求以获得答案的不同部分。 + +根据经验,研究人员观察到,在论文中使用的API的延迟与响应中的token数呈正相关。如果请求数量没有达到速率限制,SoT显然会带来加速。 + +采用批量解码的开源模型。普通的方法只处理一个问题,并按顺序解码答案,而SoT处理多个点扩展请求和一批答案。 + + +## 2 实验结论 + +实验数据集:使用Vicuna-80数据集,它由跨越9个类别的80个问题组成,如编码、数学、写作、角色扮演等。 + +模型:对11个最近发布的模型进行SoT测试,其中包括9个开源模型和2个基于API的模型。 + +![图2.1 评估模型](/assets/images/prompt/SoT5.png =680x) + +### 2.1 效率评估 + +(1)SoT减少不同模型上的端到端延迟 + +应用SoT后,11个模型中,有6个模型速度有2倍以上的提升(即LLaMA2-Chat-7B,LLaMA2-Chat-13B,Vicuna-7B V1.1,OpenChat-13B,Vicuna-33B V1.3,UltraLM-13B)。在ChatGPT-3.5,Vicuna-13B V1.3和Vicuna-7B V1.3上则有1.8倍以上的速度提升。但在StableVicuna-13B和Claude中,速度几乎没有提升。 + +如果排除数学和代码的问题类别,速度提升会较排除前略高。 + +![图2.2 不同模型加速效果](/assets/images/prompt/SoT6.png =720x) + +(2)SoT减少不同类别问题的端到端延迟 + +下图显示了每个问题类别在所有模型中的平均速度提升。那些SoT能够提供高质量答案的问题类别标记为绿色,不能的其他问题类别标记为红色。当前的SoT已经可以提升所有类别问题的速度。但对于那些SoT可以提供高质量答案的5个问题类别(即知识、常识、通用、角色扮演、虚拟情景),SoT可以将整体答案生成过程加速1.95倍-2.27倍。 + +![图2.3 不同问题类别加速效果](/assets/images/prompt/SoT7.png =680x) + +(3) SoT和正常生成的延迟对比 + +下图显示了模型正常生成和SoT生成的绝对延迟的比较。与正常生成相比,应用SoT的模型生成的速度提升是显而易见的。而**解码阶段**是内容生成端到端延迟的主要原因。因此,尽管SoT在骨架阶段比正常生成具有较高的预填充延迟,但这对总体延迟和总体速度提升几乎没有影响。 + +![图2.4 不同方法加速效果](/assets/images/prompt/SoT8.png =720x) + +### 2.2 质量评估 + +为了比较正常的顺序生成(以下简称为正常)和SoT生成的答案质量,研究采用了两个基于LLM的评估框架: FastChat和LLMZoo。评估过程是向LLM评判器(本研究中为ChatGPT-3.5)展示一个问题和一对答案(由正常和SoT生成),并询问其偏好。回答可能是SoT的答案胜出、与正常答案并列、输给正常答案。 + +(1)整体质量: + +下图显示了使用FastChat和LLMZoo两个指标下使用SOT的模型在所有问题下的赢/平/输率。在SoT严格优于基线时,两个指标之间存在差异(49.0% vs.10.4%)。但这两个指标都认为,在超过76%的情况下,SoT并不比基线(正常生成)差。对于FastChat指标,研究人员还展示了排除数学和编码问题(SoT不适用于这些问题,请参见3.2.2节)的比率:在超过90%的情况下,SoT与基准相当。这表明SoT的答案保持着良好的质量。 + +![图2.5 生成答案质量比较](/assets/images/prompt/SoT9.png =680x) + +(2)SOT在不同类别问题上的表现 + +下图计算了所有问题类别的净胜率(胜率-败率)。LLMZoo指标下SoT的质量比FastChat的更好。但不论在哪个框架指标下,SoT在泛型、常识、知识、角色扮演和反事实方面的表现都相对较好,而在写作、费米问题、数学和编码方面表现相对较差。 + +![图2.6 生成答案分类比较](/assets/images/prompt/SoT10.png =720x) + +## 3 局限性 + +由于提示集的限制、现有LLM判断的偏差,以及LLM属性评价的内在困难,研究人员目前对LLM问题的答案质量的评价还远不全面。 + +对更可靠的质量评价而言,扩展提示集,以及用人工评价补充基于LLM的评价非常重要。 + +然而,目前的研究主要集中在揭示潜在的效率效益上,即通过重新思考现有LLM「全序列解码」的必要性,可以实现相当大的加速。 + +因此,研究人员在最后将对答案质量的更彻底的评估留给了未来的工作。 + +## 4 参考 diff --git a/src/zh/posts/prompt/ToT.md b/src/zh/posts/reasoning/ToT.md similarity index 98% rename from src/zh/posts/prompt/ToT.md rename to src/zh/posts/reasoning/ToT.md index 7252ac9e3..c53ed86d1 100644 --- a/src/zh/posts/prompt/ToT.md +++ b/src/zh/posts/reasoning/ToT.md @@ -1,108 +1,108 @@ ---- -author: lx -icon: wand-magic-sparkles -date: 2023-06-05 -shortTitle: "Tree-of-Thought: 思维树" -category: - - 提示技术 -tag: - - 推理 - - LLM - - CoT - - ToT ---- - -# Tree-of-Thought: 思维树 - -[该文](https://mp.weixin.qq.com/s/aI4Ltwmm-YXcpT9aiJDdRQ)介绍了 `Tree-of-Thought: 思维树` 框架,由普林斯顿和谷歌DeepMind联合提出的全新「思维树」框架,让GPT-4可以自己提案、评估和决策,推理能力最高可提升1750%。 - - - - - -::: tip -项目地址:https://github.com/kyegomez/tree-of-thoughts -::: - -思维树可以让 `LLM`: -(1)自己给出**多条不同的推理路径** -(2)分别进行评估后,决定下一步的行动方案 -(3)在必要时向前或向后**追溯**,以便实现进行**全局**的决策 -论文实验结果显示,`ToT` 显著提高了 `LLM` 在三个新任务(24点游戏,创意写作,迷你填字游戏)中的问题解决能力。比如,在24点游戏中,`GPT-4` 只解决了 $4\%$ 的任务,但 `ToT` 方法的成功率达到了 $74\%$。 - ---- - -## 1 让LLM反复思考 - -用于生成文本的大语言模型 `GPT`、`PaLM`,现已经证明能够执行各种广泛的任务。所有这些模型取得进步的基础仍是最初用于生成文本的 **自回归机制**,以从左到右的方式一个接一个地进行 `token`级的决策。 - -这样一个简单的机制能否足以建立一个通向**解决通用问题的语言模型**?如果不是,哪些问题会挑战当前的范式,真正的替代机制应该是什么? - -关于**人类认知**的文献中对于**双重过程**模型的研究表明,人类有两种决策模式: -(1)系统1 - 快速、自动、无意识模式。 -(2)系统2 - 缓慢、深思熟虑、有意识模式。 - -语言模型简单关联 `token` 级选择可以让人联想到系统1,因此这种能力可能会从系统2规划过程中增强。系统1可以让 `LLM` 保持和探索当前选择的多种替代方案,而不仅仅是选择一个,而系统2评估其当前状态,并积极地预见、回溯以做出更全局的决策。 - -这个观点突出了现有使用LLM解决通用问题方法的2个主要缺点: -(1)局部来看,`LLM` 没有探索思维过程中的不同延续——树的分支。 -(2)总体来看,`LLM` 不包含任何类型的计划、前瞻或回溯,来帮助评估这些不同的选择。 -为了解决这些问题,研究者提出了用语言模型解决通用问题的思维树框架(ToT),让 `LLM` 可以探索多种思维推理路径。 - -## 2 ToT四步法 - -现有的方法,如 `IO`、`CoT`、`CoT-SC`,通过采样连续的语言序列进行问题解决。而 `ToT` 主动维护了一个思维树。每个矩形框代表一个思维,并且每个思维都是一个连贯的语言序列,作为解决问题的中间步骤。 - -![图2.1 推理框架比较](/assets/images/prompt/ToT1.png =550x) - -`ToT` 将任何问题定义为在树上进行搜索,其中每个节点都是一个状态 $s=\left[x, z_{1 \cdots i}\right]$,表示到目前为止输入和思维序列的部分解。`ToT` 执行一个具体任务时需要回答4个问题: -(1)如何将中间过程分解为思维步骤; -(2)如何从每个状态生成潜在的想法; -(3)如何启发性地评估状态; -(4)使用什么搜索算法。 - -### 2.1 思维分解 - -`CoT` 在没有明确分解的情况下连贯抽样思维,而 `ToT` 利用问题的属性来设计和分解中间的思维步骤。 - -根据不同的问题,一个想法可以是几个单词(填字游戏) ,一条方程式(24点) ,或者一整段写作计划(创意写作)。 - -一个想法应该足够小,以便 `LLM` 能够产生有意义、多样化的样本。但一个想法也应该大,足以让 `LLM` 能够评估其解决问题的前景。 - -### 2.2 思维生成器 - -给定树状态 $s=\left[x, z_{1 \cdots i}\right]$,通过2种策略来为下一个思维步骤生成 $k$ 个候选者。 - -(1)从一个CoT提示采样思维,$z^{(j)} \sim p_{\theta}^{C o T}\left(z_{i+1} \mid s\right)=p_{\theta}^{C o T}\left(z_{i+1} \mid x, z_{1\cdots i}\right)(j=1\cdots k)$,在思维空间丰富(比如每个想法都是一个段落),并且导致多样性时,效果更好。 - -(2)使用 `proposal prompt` 按顺序提出想法,$z^{(j)} \sim p_{\theta}^{C o T}\left(z_{i+1} \mid s\right)=p_{\theta}^{C o T}\left(z_{i+1} \mid x, z_{1\cdots i}\right)(j=1\cdots k)$,这在思维空间受限制(比如每个思维只是一个词或一行)时效果更好,因此在同一上下文中提出不同的想法可以避免重复。 - -### 2.3 状态求值器 - -给定不同状态的前沿,状态评估器评估它们解决问题的进展,作为搜索算法的启发式算法,以确定哪些状态需要继续探索,以及以何种顺序探索。 - -虽然启发式算法是解决搜索问题的标准方法,但它们通常是编程的(DeepBlue)或学习的(AlphaGo)。这里,研究者提出了第三种选择,通过LLM有意识地推理状态。 - -在适用的情况下,这种深思熟虑的启发式方法可以比程序规则更灵活,比学习模型更有效率。与思维生成器,研究人员也考虑2种策略来独立或一起评估状态:对每个状态独立赋值;跨状态投票。 - -### 2.4 搜索算法 - -最后根据树的结构,使用插件化的方式使用不同的搜索算法。 - -(1) 算法1——广度优先搜索(`BFS`),每一步维护一组最有希望的状态。 -(2) 算法2——深度优先搜索(`DFS`),首先探索最有希望的状态,直到达到最终的输出 $t > T$,或者状态评估器认为不可能从当前的$s\left(V\left(p_{\theta},\{s\}\right)(s) \leq v_{t h}\right)$为阈值$v_{th}$解决问题。在这两种情况下,`DFS`都会回溯到 $s$ 的父状态以继续探索。 - -![图2.2 搜索算法](/assets/images/prompt/ToT2.png =700x) - -由上,LLM通过自我评估和有意识的决策,来实现启发式搜索的方法是新颖的。 - -## 3 实验 - -![图3.1 实验设置](/assets/images/prompt/ToT3.png =550x) - -为此,团队提出了三个任务用于测试——即使是最先进的语言模型GPT-4,在标准的IO提示或思维链(CoT)提示下,都是非常富有挑战的。 - -![图3.2 实验结果](/assets/images/prompt/ToT4.png =7000x) - -`IO`,`CoT`和`CoT-SC`提示方法在这几项任务上的表现不佳,成功率仅为 $7.3\%$,$4.0\%$和$9.0\%$。相比之下,`ToT`在广度为 `b = 1` 时已经达到了 $45\%$ 的成功率,而在 `b = 5` 时达到了 $74\%$。同时还考虑了 `IO/CoT` 的预测设置,通过使用最佳的 $k$ 个样本($1 \le k \le 100$)来计算成功率,`CoT`比`IO`扩展得更好,最佳的100个`CoT`样本达到了$49\%$的成功率,但仍然比在`ToT`中探索更多节点($b>1$)要差。 - +--- +author: lx +icon: wand-magic-sparkles +date: 2023-06-05 +shortTitle: "Tree-of-Thought: 思维树" +category: + - 提示技术 +tag: + - 推理 + - LLM + - CoT + - ToT +--- + +# Tree-of-Thought: 思维树 + +[该文](https://mp.weixin.qq.com/s/aI4Ltwmm-YXcpT9aiJDdRQ)介绍了 `Tree-of-Thought: 思维树` 框架,由普林斯顿和谷歌DeepMind联合提出的全新「思维树」框架,让GPT-4可以自己提案、评估和决策,推理能力最高可提升1750%。 + + + + + +::: tip +项目地址:https://github.com/kyegomez/tree-of-thoughts +::: + +思维树可以让 `LLM`: +(1)自己给出**多条不同的推理路径** +(2)分别进行评估后,决定下一步的行动方案 +(3)在必要时向前或向后**追溯**,以便实现进行**全局**的决策 +论文实验结果显示,`ToT` 显著提高了 `LLM` 在三个新任务(24点游戏,创意写作,迷你填字游戏)中的问题解决能力。比如,在24点游戏中,`GPT-4` 只解决了 $4\%$ 的任务,但 `ToT` 方法的成功率达到了 $74\%$。 + +--- + +## 1 让LLM反复思考 + +用于生成文本的大语言模型 `GPT`、`PaLM`,现已经证明能够执行各种广泛的任务。所有这些模型取得进步的基础仍是最初用于生成文本的 **自回归机制**,以从左到右的方式一个接一个地进行 `token`级的决策。 + +这样一个简单的机制能否足以建立一个通向**解决通用问题的语言模型**?如果不是,哪些问题会挑战当前的范式,真正的替代机制应该是什么? + +关于**人类认知**的文献中对于**双重过程**模型的研究表明,人类有两种决策模式: +(1)系统1 - 快速、自动、无意识模式。 +(2)系统2 - 缓慢、深思熟虑、有意识模式。 + +语言模型简单关联 `token` 级选择可以让人联想到系统1,因此这种能力可能会从系统2规划过程中增强。系统1可以让 `LLM` 保持和探索当前选择的多种替代方案,而不仅仅是选择一个,而系统2评估其当前状态,并积极地预见、回溯以做出更全局的决策。 + +这个观点突出了现有使用LLM解决通用问题方法的2个主要缺点: +(1)局部来看,`LLM` 没有探索思维过程中的不同延续——树的分支。 +(2)总体来看,`LLM` 不包含任何类型的计划、前瞻或回溯,来帮助评估这些不同的选择。 +为了解决这些问题,研究者提出了用语言模型解决通用问题的思维树框架(ToT),让 `LLM` 可以探索多种思维推理路径。 + +## 2 ToT四步法 + +现有的方法,如 `IO`、`CoT`、`CoT-SC`,通过采样连续的语言序列进行问题解决。而 `ToT` 主动维护了一个思维树。每个矩形框代表一个思维,并且每个思维都是一个连贯的语言序列,作为解决问题的中间步骤。 + +![图2.1 推理框架比较](/assets/images/prompt/ToT1.png =550x) + +`ToT` 将任何问题定义为在树上进行搜索,其中每个节点都是一个状态 $s=\left[x, z_{1 \cdots i}\right]$,表示到目前为止输入和思维序列的部分解。`ToT` 执行一个具体任务时需要回答4个问题: +(1)如何将中间过程分解为思维步骤; +(2)如何从每个状态生成潜在的想法; +(3)如何启发性地评估状态; +(4)使用什么搜索算法。 + +### 2.1 思维分解 + +`CoT` 在没有明确分解的情况下连贯抽样思维,而 `ToT` 利用问题的属性来设计和分解中间的思维步骤。 + +根据不同的问题,一个想法可以是几个单词(填字游戏) ,一条方程式(24点) ,或者一整段写作计划(创意写作)。 + +一个想法应该足够小,以便 `LLM` 能够产生有意义、多样化的样本。但一个想法也应该大,足以让 `LLM` 能够评估其解决问题的前景。 + +### 2.2 思维生成器 + +给定树状态 $s=\left[x, z_{1 \cdots i}\right]$,通过2种策略来为下一个思维步骤生成 $k$ 个候选者。 + +(1)从一个CoT提示采样思维,$z^{(j)} \sim p_{\theta}^{C o T}\left(z_{i+1} \mid s\right)=p_{\theta}^{C o T}\left(z_{i+1} \mid x, z_{1\cdots i}\right)(j=1\cdots k)$,在思维空间丰富(比如每个想法都是一个段落),并且导致多样性时,效果更好。 + +(2)使用 `proposal prompt` 按顺序提出想法,$z^{(j)} \sim p_{\theta}^{C o T}\left(z_{i+1} \mid s\right)=p_{\theta}^{C o T}\left(z_{i+1} \mid x, z_{1\cdots i}\right)(j=1\cdots k)$,这在思维空间受限制(比如每个思维只是一个词或一行)时效果更好,因此在同一上下文中提出不同的想法可以避免重复。 + +### 2.3 状态求值器 + +给定不同状态的前沿,状态评估器评估它们解决问题的进展,作为搜索算法的启发式算法,以确定哪些状态需要继续探索,以及以何种顺序探索。 + +虽然启发式算法是解决搜索问题的标准方法,但它们通常是编程的(DeepBlue)或学习的(AlphaGo)。这里,研究者提出了第三种选择,通过LLM有意识地推理状态。 + +在适用的情况下,这种深思熟虑的启发式方法可以比程序规则更灵活,比学习模型更有效率。与思维生成器,研究人员也考虑2种策略来独立或一起评估状态:对每个状态独立赋值;跨状态投票。 + +### 2.4 搜索算法 + +最后根据树的结构,使用插件化的方式使用不同的搜索算法。 + +(1) 算法1——广度优先搜索(`BFS`),每一步维护一组最有希望的状态。 +(2) 算法2——深度优先搜索(`DFS`),首先探索最有希望的状态,直到达到最终的输出 $t > T$,或者状态评估器认为不可能从当前的$s\left(V\left(p_{\theta},\{s\}\right)(s) \leq v_{t h}\right)$为阈值$v_{th}$解决问题。在这两种情况下,`DFS`都会回溯到 $s$ 的父状态以继续探索。 + +![图2.2 搜索算法](/assets/images/prompt/ToT2.png =700x) + +由上,LLM通过自我评估和有意识的决策,来实现启发式搜索的方法是新颖的。 + +## 3 实验 + +![图3.1 实验设置](/assets/images/prompt/ToT3.png =550x) + +为此,团队提出了三个任务用于测试——即使是最先进的语言模型GPT-4,在标准的IO提示或思维链(CoT)提示下,都是非常富有挑战的。 + +![图3.2 实验结果](/assets/images/prompt/ToT4.png =7000x) + +`IO`,`CoT`和`CoT-SC`提示方法在这几项任务上的表现不佳,成功率仅为 $7.3\%$,$4.0\%$和$9.0\%$。相比之下,`ToT`在广度为 `b = 1` 时已经达到了 $45\%$ 的成功率,而在 `b = 5` 时达到了 $74\%$。同时还考虑了 `IO/CoT` 的预测设置,通过使用最佳的 $k$ 个样本($1 \le k \le 100$)来计算成功率,`CoT`比`IO`扩展得更好,最佳的100个`CoT`样本达到了$49\%$的成功率,但仍然比在`ToT`中探索更多节点($b>1$)要差。 + diff --git a/src/zh/posts/prompt/thor.md b/src/zh/posts/reasoning/thor.md similarity index 100% rename from src/zh/posts/prompt/thor.md rename to src/zh/posts/reasoning/thor.md diff --git a/src/zh/posts/token/README.md b/src/zh/posts/token/README.md index 0474cb950..c47ca698a 100644 --- a/src/zh/posts/token/README.md +++ b/src/zh/posts/token/README.md @@ -1,5 +1,5 @@ --- -title: Token +title: Token、分词 icon: puzzle-piece index: false article: false