《自我完善:利用自我反馈的迭代细化技术》
https://arxiv.org/pdf/2303.17651.pdf
摘要
Large language models (LLMs) 经常无法在一次尝试中生成最佳输出。受人类在修改书面文本时所表现出的迭代精炼过程的启发,
我们提出了 SELF-REFINE,一种通过迭代反馈和精炼来改进大型语言模型初始输出的方法。主要思想是使用一个语言模型生成初始输出;
然后,该语言模型对其输出提供反馈,并使用这些反馈来精炼自己,迭代进行。
SELF-REFINE 不需要任何监督训练数据、额外的训练或强化学习,而是使用单个语言模型作为生成器、精炼器和反馈提供者。
我们使用最先进的语言模型(GPT-3.5 和 GPT-4)在 7 项不同的任务上评估 SELF-REFINE,这些任务涵盖了从对话响应生成到数学推理的各个方面。在所有评估的任务中,使用 SELF-REFINE 生成的输出在人类和自动指标上的偏好程度均优于使用相同语言模型通过传统的一次性生成生成的输出,平均提高了约 20% 的绝对性能。我们的工作表明,即使是像 GPT-4 这样的最先进的语言模型,也可以通过我们简单、独立的迭代精炼方法在测试时进一步提高性能。
1. SELF-REFINE主要能做什么
1.1. 利用反馈来提高对话的质量和相关性。
图 2(a):初始输出,用户对打乒乓球感兴趣。
图 2(b):反馈,指出初始输出没有提供关于乒乓球的信息,也没有理解用户的心理状态。
图 2©:优化后的输出,更加吸引人,并且理解用户的需求和心理状态。
1.2. 利用反馈来提高代码的质量和效率。
代码优化:
图 2(d):初始代码,使用了6层嵌套循环来计算矩阵乘积。
图 2(e):反馈,指出这段代码效率低下,建议使用公式来优化。
图 2(f):优化后的代码,使用了动态规划的方法来计算矩阵乘积,大大提高了效率。
2. SELF-REFINE与其他迭代优化方法对比
以上列出了几种不同的迭代优化方法,包括以下几个方面:
- 监督方式:是否需要额外的监督数据。
- 反馈来源:反馈的来源,包括人类、强化学习奖励函数、模型本身等。
- 反馈类型:反馈的形式,包括自然语言反馈、非自然语言反馈等。
- 优化器训练方式:优化器的训练方式,包括监督学习、强化学习等。
- 优化器类型:是否需要训练一个专门的优化器。
SELF-REFINE的优势
- SELF-REFINE不需要额外训练数据或专门的优化器,只需要少量示例即可应用到不同的任务上。
- SELF-REFINE使用自然语言反馈,而其他一些方法使用非自然语言反馈或奖励函数。
- SELF-REFINE是迭代框架,与其他强化学习或监督学习方法不同。
- SELF-REFINE利用了语言模型的多任务学习能力,而其他一些方法需要训练专门的优化器。
总的来说,表 3 对比了SELF-REFINE与其他迭代优化方法,突出了SELF-REFINE的简单性、无需额外训练和适用性广泛的特点。
3. SELF-REFINE算法的描述
SELF-REFINE利用语言模型进行迭代自我反馈和优化,以提高其输出的质量。
算法包含初始生成、反馈和优化三个步骤,不断迭代直到满足停止条件。
- 初始生成:使用语言模型M生成初始输出y0。
- 反馈:将y0传递回M,生成反馈fb。
- 优化:根据fb,使用M生成优化后的输出y1。
- 迭代:重复上述步骤,直到满足停止条件。
4. SELF-REFINE算法使用的评估指标
SELF-REFINE算法使用的评估指标,包括:
- 任务特定指标:对于一些任务,使用了之前工作定义的自动化指标,如数学推理任务的解决率,代码优化任务的优化程序百分比等。
- 人类偏好:对于对话响应生成、代码可读性改进、情感反转和缩略词生成等任务,由于缺乏自动化指标,进行了盲人A/B测试,以选择更符合任务指导的输出。
- GPT-4偏好:除了人类偏好,还使用GPT-4作为人类偏好的代理,对生成的输出进行偏好评估。
- 统计置信区间:在表13中,展示了每个任务上SELF-REFINE相对于基础模型的改进,并提供了Wilson置信区间和统计显著性。
5. 主要结论
- SELF-REFINE在所有任务上都能提高基础语言模型的性能,效果明显,平均提高了约20%的绝对性能。
- 在偏好任务上,如对话响应生成、情感反转和缩略词生成,SELF-REFINE的改进尤为显著。
- 在数学推理任务上,由于错误判断的复杂性,SELF-REFINE的改进较小,但文章指出如果外部能判断当前答案是否错误,则SELF-REFINE的改进会更大。
- 在代码优化和生成任务中,SELF-REFINE也能提高基础模型Codex的性能。
- SELF-REFINE的效果在不同基础模型上基本一致,GPT-4+SELF-REFINE通常优于GPT-3.5+SELF-REFINE和ChatGPT+SELF-REFINE。
- 比较结果表明,SELF-REFINE能够帮助解锁更强大模型(如GPT-4)的潜力。
6. 例子
6.1. 对话响应生成:
初始响应: "The best way to cook pasta is to… "
反馈: “Make response relevant, engaging, safe”
优化后的响应: "Boil water, add salt, and cook pasta… "
6.2. 代码优化:
初始代码: “Nested loop for matrix product”
反馈: “Improve time complexity”
优化后的代码: “Use NumPy’s optimized matmul function”
6.3. 代码可读性改进:
初始代码: “Unclear variable names, no comments”
反馈: “Enhance variable naming; add comments”
优化后的代码: “Clear variables, meaningful comments”
6.4. 数学推理:
初始代码: “Olivia has $23, buys 5 bagels at$3 each”
反馈: “Show step-by-step solution”
优化后的代码: “Solution with detailed explanation”
6.5. 情感反转:
初始文本: "The food was fantastic… "
反馈: “Increase negative sentiment”
优化后的文本: "The food was utterly terrible… "
6.6. 缩略词生成:
初始文本: “Radio Detecting and Ranging”
反馈: “be context relevant; easy pronunciation”
优化后的文本: “RADAR”
6.7. 约束生成:
初始文本: “During our beach vacation…”
反馈: “Include keywords; maintain coherence”
优化后的文本: “During our beach vacation was filled with relaxation”
7. 如何应用?
7.1. 如何将SELF-REFINE应用于我的特定写作场景?
- 您的写作目标是什么? 您希望 SELF-REFINE 帮助您达到什么特定的写作目标?
- 您写作的主题或领域是什么? SELF-REFINE 适用于各种主题,了解您的主题可以帮助确定最适合的提示和反馈。
- 您希望在哪些方面改进您的写作? 例如,您希望改进语言的流畅性、逻辑性、创意性还是其他方面?
- 您是否有特定的写作限制或要求? 例如,您需要满足特定的字数限制或格式要求。
- 您是否有一个初步的写作草稿? 如果有的话,您可以分享给我,这样我可以更好地理解您的写作风格和内容,并提供更具体的建议。
7.2. 如何使用SELF-REFINE来提升文章的逻辑性?
- 初始生成:首先,使用您的语言模型生成文章的初步草稿。
- 设计反馈机制:
- 逻辑连贯性:设计一个反馈机制来评估文章的逻辑连贯性。这可能包括检查文章中的论点是否合理、论据是否充分以及论点和论据之间的联系是否紧密。
- 逻辑错误:识别文章中的逻辑错误,例如不一致、循环论证、无效论证等。
- 逻辑清晰性:确保文章的逻辑结构清晰,读者可以轻松理解作者的思路。
- 迭代反馈与精炼:
- 反馈生成:使用同一语言模型为初步草稿生成反馈,指出逻辑上的优点和需要改进的地方。
- 精炼:基于反馈,调整文章的结构、论点和论据,以提高逻辑性。
- 迭代:重复反馈和精炼步骤,每次都根据上一次的反馈改进文章。
- 最终评估:
- 人类评估:请其他人阅读最终版本的文章,评估其逻辑性,并与原始版本进行比较。
- 自动评估:如果可能,使用自动评估工具来量化逻辑性的改进。