|
上个月介绍DSPy时就有这么一个感觉,Prompt优化领域都卷成这样了,应该很快会有和梯度相关的Prompt优化技术被发出来,并且会超越DSPy。这个周末,这个优化技术验证了我的预想。GRAD-SUM:这是一种可扩展、灵活的自动prompt优化方法,基于梯度汇总,性能超越DSPy,或许它将彻底改变prompt工程的游戏规则。
图片由xiumaodalle生成 DSPy是目前最流行的prompt优化工具之一,自今年爆火以来,各种提示词优化测试位居榜首。但GRAD-SUM实验结果的性能提升令人震撼!与DSPy的对比,来自伽利略技术公司的研究者在所有测试场景中进行了详细的对比实验,GRAD-SUM都显著优于DSPY:小学数学问题GSM8k:GRAD-SUM 0.82 vs DSPY 0.755ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.578px;margin-right: 8px;margin-bottom: 14px;margin-left: 8px;outline: 0px;font-size: 22px;line-height: 1.4;border-width: 0px;border-style: none;border-color: initial;z-index: 0;visibility: visible;max-inline-size: 100%;text-wrap: wrap;background-color: rgb(255, 255, 255);">复杂数学问题Orca Math:GRAD-SUM 0.575 vs DSPY 0.455ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.578px;margin-right: 8px;margin-bottom: 14px;margin-left: 8px;outline: 0px;font-size: 22px;line-height: 1.4;border-width: 0px;border-style: none;border-color: initial;z-index: 0;visibility: visible;max-inline-size: 100%;text-wrap: wrap;background-color: rgb(255, 255, 255);">检索问答任务Neural Bridge RAG:GRAD-SUM 0.915 vs DSPY 0.885ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.578px;margin-right: 8px;margin-bottom: 14px;margin-left: 8px;outline: 0px;font-size: 22px;line-height: 1.4;border-width: 0px;border-style: none;border-color: initial;z-index: 0;visibility: visible;max-inline-size: 100%;text-wrap: wrap;background-color: rgb(255, 255, 255);">常识推理任务HellaSwag:GRAD-SUM 0.795 vs DSPY 0.48ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.578px;margin-right: 8px;margin-bottom: 14px;margin-left: 8px;outline: 0px;font-size: 22px;line-height: 1.4;border-width: 0px;border-style: none;border-color: initial;z-index: 0;visibility: visible;max-inline-size: 100%;text-wrap: wrap;background-color: rgb(255, 255, 255);">多跳推理问答HotPot QA:GRAD-SUM 0.725 vs DSPY 0.626ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.578px;margin-right: 8px;margin-bottom: 14px;margin-left: 8px;outline: 0px;font-size: 22px;line-height: 1.4;border-width: 0px;border-style: none;border-color: initial;z-index: 0;visibility: visible;max-inline-size: 100%;text-wrap: wrap;background-color: rgb(255, 255, 255);">多领域知识测试MMLU:GRAD-SUM 0.625 vs DSPY 0.56ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.578px;margin-right: 8px;margin-bottom: 14px;margin-left: 8px;outline: 0px;font-size: 22px;line-height: 1.4;border-width: 0px;border-style: none;border-color: initial;z-index: 0;visibility: visible;max-inline-size: 100%;text-wrap: wrap;background-color: rgb(255, 255, 255);">开放域对话评估MT& Vicuna Bench:GRAD-SUM 0.95 vs DSPY 0.823ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.578px;margin-right: 8px;margin-bottom: 14px;margin-left: 8px;outline: 0px;font-size: 22px;line-height: 1.4;border-width: 0px;border-style: none;border-color: initial;z-index: 0;visibility: visible;max-inline-size: 100%;text-wrap: wrap;background-color: rgb(255, 255, 255);text-align: left;">论文题目和地址:GRAD-SUM everaging Gradient Summarization for Optimal Prompt Engineering(https://arxiv.org/abs/2407.12865v1)ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;"> ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;"> ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.578px;margin-right: 8px;margin-bottom: 14px;margin-left: 8px;outline: 0px;font-size: 22px;line-height: 1.4;border-width: 0px;border-style: none;border-color: initial;z-index: 0;visibility: visible;max-inline-size: 100%;text-wrap: wrap;background-color: rgb(255, 255, 255);">传统的prompt优化过程往往是一个耗时耗力的手动过程,需要不断生成、评估和修改prompt。虽然已经有一些自动化prompt工程的尝试,但它们要么只适用于特定任务,要么成本过高,难以大规模应用。DSPy我介绍有一段时间了,但很多朋友还是一头雾水,甚至实验过后并没有得到想要的结果。封装的模块,以及复杂的优化方法让很多人望而却步,甚至有时对中文的支持并不友好。没关系,现在有个简单一些的GRAD-SUM来了。 DSPy并非手写Prompt万能替代品,掌握这6个有效策略,能增强DSPy应用程序 GRAD-SUM的核心思想是将gradient-based优化技术与自然语言处理相结合。它不仅可以自动优化prompt,还能根据用户定义的任务描述和评估标准进行个性化调整。最令人兴奋的是,GRAD-SUM引入了一个全新的gradient summarization模块。这个模块能够有效地概括和综合多个反馈,从而生成更加通用和强大的prompt。为了验证梯度汇总模块的效果,研究团队进行了消融实验。结果显示,引入梯度汇总模块平均提升了5%的性能。这证明了该模块在提高prompt泛化能力方面的关键作用。 GRAD-SUM并不依托于封装的模块,而是用NLP领域一种叫做Beam search的优化搜索算法作为核心算法,在搜索空间保持多个“最佳”候选解,而不是仅关注单一的最优解。 GRAD-SUM的核心优势:
1. 高度灵活:适用于各种任务和场景
2. 成本效益:优化过程高效,节省时间和资源
3. 性能卓越:在多个基准测试中consistently优于现有方法 4. 易于使用:只需提供任务描述和评估标准,无需复杂设置
5.泛化能力:生成的新prompt能够更好地适应整个数据集,而不仅仅是某些特定样本。
GRAD-SUM的优化过程包含5个关键模块:生成、评估、梯度生成、梯度汇总和prompt编辑。让我们逐一探讨这些模块的工作原理。
1. 生成模块:构建基础
生成模块需要三个关键元素:数据集、prompt和用于生成输出的LLM。这个模块的作用是根据给定的prompt和数据集生成初始响应。
2. 评估模块:智能判断
评估模块接收生成的响应,并根据用户定义的评估标准进行评分。这里的一个创新点是使用LLM作为评判器,这使得GRAD-SUM能够适应各种复杂的评估场景。
3. 梯度生成模块:精准反馈
梯度生成模块分析评估结果,并为每个未达到满分的响应生成改进建议。这些建议就像是传统机器学习中的"梯度",指导着prompt的优化方向。
4. 梯度汇总模块:智慧凝练
这是GRAD-SUM最独特的创新。梯度汇总模块将所有单独的改进建议综合成一个统一的、通用的优化方向。这确保了优化后的prompt不会过度拟合某些特定样本,而是能够在整个数据集上表现良好。以往的方法,如(Pryzant
et al., 2023)提出的技术,往往是基于单个输出的反馈来生成新的prompt。这种方法容易导致生成的prompt过于特定,难以泛化到整个数据集。 5. Prompt编辑模块:精准优化
最后,prompt编辑模块根据汇总的梯度信息生成新的candidate prompts。这个过程使用了beam search技术,保留了多个潜在的优化方向,进一步提高了优化的效果。
以下是一个用GRAD-SUM技术对GSM8K数据集优化过的Prompt:
You are tasked with solving a grade school math question. Follow these detailed steps to ensure a clear and accurate solution: 1. Identify the Mathematical Operation: Beginbydetermining the typeofmath operation required(e.g., addition, subtraction, multiplication, division). Clearly state this inyour response andexplainwhy this operation isneeded forthe given question. 2.Outlinethe Thought Process: Provide a logicalandstructured approach tosolving the problem. Explainyour reasoning indetail, asifyou areteaching the concept toa student. Ensure eachstep isconnected andfollowslogically fromthe previous one, making it easy tofollow. 3.Step-by-Step Calculations: Break down the problem intosmaller, manageable steps. Showeachcalculation indetail todemonstrate how you arrive atthe solution. Includeall intermediate steps andresults tooffer a comprehensive understanding. 4.VerifyAccuracy: Afterarriving atthe solution, double-checkyour calculations andthe finalnumerical answer toensure its accuracy. Explainhow you verified the correctness ofyour answer, such asbyusinginverse operationsorchecking witha different method. 5.FinalAnswer: Presentthe finalanswer ina clearandprecise manner, ensuring it iseasy tounderstand. State explicitly that the answer has been verified foraccuracy. Here isthe question: {question}
你需要解决一个小学数学问题。请按照以下详细步骤,确保解答清晰准确: 1.确定数学运算:首先确定所需的数学运算类型(例如,加法、减法、乘法、除法)。在你的回答中明确指出这一点,并解释为什么这个问题需要这种运算。 2.概述思路:提供一个逻辑且结构化的方法来解决问题。详细解释你的推理过程,就像你在教学生这个概念一样。确保每一步都与前一步相连,逻辑清晰,易于理解。 3.步骤计算:将问题分解为较小的、可管理的步骤。详细展示每一步的计算过程,说明你是如何得出解答的。包括所有的中间步骤和结果,以提供全面的理解。 4.验证准确性:在得到答案后,重新检查你的计算和最终数值答案,以确保其准确性。解释你是如何验证答案正确性的,例如使用反向运算或通过另一种方法检查。 5.最终答案:以清晰准确的方式呈现最终答案,确保易于理解。明确指出答案已经过验证,确保准确无误。 以下是问题:{question}
最近GraphRAG大火,RAG中的提示词优化也非常重要: 假设你有这样一段RAG中的提示词,你的任务描述和评估标准是下面这样的
任务描述: 任务是在给定特定上下文的情况下回答问题,该上下文应包含答案。 评估标准: LLM 的输出是否与预期答案相符?如果模型表示没有足够的上下文来回答问题,则给它 0 分。否则,判断人类是否会将输出评为与预期答案相符。只要答案与括号中的预期答案 <EXPECTED ANSWER> 相符,围绕答案添加上下文是可以的。如果相符,则给它 1 分;如果不相符,则给它 0 分。 任务是在给定上下文的情况下回答问题,该上下文应该包含答案。
按照以下格式进行回答: 问题: ${question} 上下文: ${context} 推理:让我们逐步思考以${produce the answer}。我们... 答案:根据所提供的上下文,问题的答案是...
问题:{question} 上下文:{context} 推理:让我们逐步思考以
DSPy优化过的得分为0.885 引导模型通过上下文仔细审查问题,利用高级推理技术有效推导隐含信息,并生成全面且精细的回答,旨在增强整体理解和洞察力。
按照以下格式进行回答: 问题: ${question} 上下文: ${context} 推理:让我们逐步思考以${produce the answer}。我们... 精细回答:根据所提供的上下文,问题的答案是...
问题:{question} 上下文:{context} 推理:让我们逐步思考以
你需要根据给定的上下文回答一个问题。请按照以下详细步骤,确保你的回答具体、全面,并且完全基于所提供的上下文。 1. 仔细阅读并完全理解问题。明确问题所要求的信息。 2. 彻底分析给定的上下文。识别并提取所有直接与问题相关的信息。 3. 逻辑思考,并逐步将上下文中的相关细节与问题联系起来。清楚地解释你的推理过程,确保详细、连贯,并且直接与上下文相关。 4. 基于详细的推理过程提供最终答案,确保直接回答问题。
使用以下格式来回答: 问题: {question} 上下文: {context} 推理:让我们逐步思考以理解和找到答案。首先,识别上下文中与问题相关的具体细节。然后,逻辑地将这些细节联系起来得出答案。确保你的推理清晰、详细且连贯。 答案:基于所提供的上下文,问题的答案是 根据以上结果,您可以从细节、准确性、以及清晰度方面观察这两种优化方式的变化,得出你自己的结论。无论两种方法中的哪一种,都是优化过的,你可以拿走直接用。论文没有提供任何代码和更为详细的方法,仅仅做了细致的介绍和结果展示。探索未知,对你来讲可能也是富有挑战的事情,你也可以和我一样用流程复现论文的优化方法成为代码或在网页上与LLM交互的伪代码:
代码环境: fromopenai importOpenAI importre importtime
defoptimize_prompt(initial_prompt, task_description, evaluation_criteria): """GRAD-SUM优化流程""" current_prompts = [initial_prompt] best_score = 0 best_prompt = initial_prompt
foriteration inrange(MAX_ITERATIONS): print(f"\nIteration {iteration + 1}") all_candidates = [] forprompt incurrent_prompts: candidates = generate_candidates(prompt, task_description) all_candidates.extend(candidates)
# 评估所有候选prompts evaluated_candidates = [(candidate, evaluate_prompt(candidate, evaluation_criteria)) forcandidate inall_candidates] 你也可以这样写成伪代码用更高级的模型在网页上进行交互:
|