【论文精读-代码生成】结构化思维链提示在代码生成中的应用
创作时间:
作者:
@小白创作中心
【论文精读-代码生成】结构化思维链提示在代码生成中的应用
引用
CSDN
1.
https://blog.csdn.net/qq_43510916/article/details/136977357
动机
源代码包含丰富的结构信息,任何代码都可以由三种程序结构(即序列、分支和循环结构)组成。直观地说,结构化的中间推理步骤造就了结构化的源代码。因此,我们要求 LLM 使用程序结构构建 CoT,得到 SCoT。然后,LLMs 根据 SCoT 生成最终代码。与 CoT prompting 相比,SCoT prompting 明确约束 LLMs 从源代码的角度思考如何解决需求,进一步提高了 LLMs 在代码生成中的性能。
做了什么
- 本文提出一种结构化思维链(SCoT),利用程序结构来构建中间推理步骤。
- 提出了一种用于代码生成的SCoT提示技术。它提示大型语言模型首先生成一个SCoT,然后实现代码。
- 在三个基准上进行了广泛的实验。定性和定量实验表明,SCoT prompting明显优于SOTA基线(e.g., 思维链提示)。
- 讨论了不同程序结构的贡献和SCoT prompting的健壮性。
怎么做的
- SCoT提示流程:
- 编写示例二元组<requirement, SCoT>,要求这些例子涵盖了三个基本的程序结构和输入输出结构。再提出一个新需求,送入llm。我们希望llm从示例中学习并为新需求生成一个SCoT。
- 生成一个SCoT后,设计第二个用于生成最终代码的prompt:需求和对应的SCoT。提示以三个示例<requirement, SCoT, code>开始,要求LLM从示例中学习,并根据需求和SCoT生成一个新程序。
- 编写示例二元组<requirement, SCoT>,要求这些例子涵盖了三个基本的程序结构和输入输出结构。再提出一个新需求,送入llm。我们希望llm从示例中学习并为新需求生成一个SCoT。
- 相关工作[25]发现生成模型可能会受到误差累积的负面影响。类似地,在SCoT prompting中,生成的SCoT可能包含噪声(e.g., 错误或遗漏步骤)。这些噪声将进一步对代码实现产生负面影响。本文利用两种方法来缓解误差累积:
- 要求llm再次检查SCoT并修复可能的噪音,允许llm自适应地引用SCoT并滤除噪声。
- 人类开发人员可以首先检查生成的SCoT并修复可能的错误。然后,使用SCoT生成代码。(人机交互)
实验设计
评价方法
- 实验数据集:
- HumanEval[7]是一个Python函数级代码生成基准测试,包含164个手写编程问题。每个编程问题由一个英语要求、一个函数签名和几个测试用例组成,平均每个问题有7.7个测试用例。由于HumanEval不包含训练数据,因此在HumanEval中重用了MBPP的示例。
- MBPP[2]是一个Python函数级代码生成基准测试。它包含974个编程问题,涉及简单的数值操作或标准库的基本使用。每个问题包含一个英语要求、一个函数签名和三个用于检查函数的手动编写的测试用例。
- MBCPP[1]是一个C++函数级代码生成基准测试。它由848个通过众包收集的编程问题组成。每个问题包含一个英文描述、一个函数签名和三个用于检查函数正确性的测试用例。
- 评价指标:无偏Pass@k
- Pass@k:给定一个需求,允许代码生成模型生成k个程序。如果生成的程序中任意一个通过了所有测试用例,那么这个需求就得到了解决。我们通过Pass@k计算已解决需求在总需求中的百分比。对于Pass@k,值越高越好。在我们的实验中,k被设置为1、3和5,因为我们认为开发人员在现实场景中主要使用Top-5输出。
- 无偏Pass@k:之前的工作发现标准通过@𝑘具有高方差,并提出了无偏Pass@𝑘。我们遵循之前的工作,并采用无偏Pass@𝑘。具体来说,我们为每个需求生成𝑛 ≥ 𝑘个程序(在本文中,我们使用𝑛 = 20, 𝑘 ∈ [1, 3, 5]),计算解决需求的数量𝑐,并计算无偏通过:
- 之前的代码生成研究使用基于文本相似性的度量(e.g., BLEU)。这些指标最初是为自然语言生成而设计的,在衡量程序的正确性方面很差。因此,我们在实验中省略了这些指标。
基线方法
SCoT prompting是一种新的代码生成提示技术,有三个基线可用于评估比较:
- 零样本提示:直接将需求提供给llm,而没有示例。然后从LLMs的输出中提取生成的程序。
- 小样本提示:随机选择几个<需求,代码>对作为示例。给定一个需求,它将示例和需求连接在一起,形成一个提示。然后,提示被输入到llm中,llm预测一个新程序。
- 思维链(CoT)提示[35]:是少样本提示的变体。CoT提示生成一个由< requirement、CoT、code >三元组组成的特殊提示作为示例。CoT是自然语言推理的几个中间步骤。
LLM选择
现有的llm可以分为两类:standard language models 和 instruction-tuned models。对于每个类别,我们选择一个具有代表性的模型作为base model:Codex 和 ChatGPT。
采样设置
baselines:
- 为每个需求生成20个程序,temperature参数设置为0.8。采样使用nucleus sampling,top-p参数设置为0.95。zeroshot prompting和 few-shot prompting的最大生成长度为300个token;CoT的最大生成长度为600个token,因为是CoT提示需要生成中间的推理步骤和代码。
SCoT prompting:
- 我们根据要求从llm中采样20个SCoT,temperature参数设置为0.8,top-p参数设置为0.95,生成的最大长度为300个token。
- 然后对于每个SCoT,用LLM生成相应的程序,temperature参数设置为0,最大生成长度为300 token,每个需求生成20个代码。两步的总生成长度与CoT提示相同,为600个token。
讨论
- SCoT vs. 伪代码:SCoT与伪代码类似,SCoT实现中间步骤是更好的选择,因为SCoT会自然地将代码生成分解为两个步骤。LLMs首先专注于探索不同的解决方案,然后以标准化的方式实现具体代码。
- SCoT prompting vs. Rank Techniques:两种技术侧重点不同,具有互补性。ChatGPT的性能可以通过添加CodeT和SCoT prompting不断提高。
未来工作
源代码可以用树表示(e.g., 抽象语法树),可以设计一种基于树的提示技术,它使用llm来生成树。
热门推荐
从案例看P/E估值法:科技股投资的双刃剑
从叛逆少女到优雅公主:《公主日记》中的成长之路
日产汽车陷入破产危机,高管:我们还有12到14个月的时间生存下去
日产汽车破产危机折射日本汽车工业困境
本田日产合并未被业界看好 日本车企抱团难救亡
【中草药科普】每天认识一味中草药-蛤蟆草
怀庆地黄:千年药用历史,多重药理功效
高纯度鱼油,真的能降甘油三酯吗?
冬季护心,鱼油该如何科学服用?
工厂班组风气如何管理
湿热体质饮食全攻略:清热利湿是关键
《哪吒2》定档春节,导演饺子再创辉煌?
中国书协副主席刘艺:草书大家的德艺人生
“电击取精”谣言致大熊猫专家遭网暴,四川公安打掉4个犯罪团伙
专家遭网暴凸显治理困境,新规出台强化平台责任
四部门发文治理网络暴力,专家解析其心理成因与应对之道
中医食疗,高血压患者的福音?
两位主任医师详解:坐骨神经痛的饮食注意事项
冬至前夕细雨至,洗净尘嚣见宁静
冬雨夜,书卷香:古诗中的冬日静谧
解码坐骨神经痛的密码!冷热敷?电疗?总有一款适合你
如何預防坐骨神經痛?醫師傳授5原則+4動作舒緩疼痛
秦观《春日》:轻雷细雨后的庭院诗画
让PPT“动”起来:一文掌握动作按钮使用技巧
一文详解PPT动作按钮:从入门到实战
双十一品牌赞助大战:谁最会玩?
外贸贡献GDP增长17.1%,国际贸易成中国经济增长新引擎
寒假手抄报设计大赛:色彩与构图技巧大揭秘
沪深300自由现金流指数发布,历史年化收益率达14.8%
A股分红总额首破2.2万亿元,高股息率投资正当时