LEVER:根据执行结果来改进语言编码生成的高效方法

news2024/10/25 8:26:02

译者 | 赵海树
单位 | 东北大学自然语言处理实验室

1.论文介绍

基于大语言模型LLM训练从语言到编码的生成的方向取得了重要进展,基于执行结果的启发式方法以及LLM解码、样本修剪和测试用例重新排序的结合方式成为了当前最为高效的方法。但当前的许多真实世界语言不易获得测试用例,而且启发式方法不能很好的获取执行结果的一些有关正确性的关键数据(比如数据类型和数值范围)。这导致了在不使用特定的特定于任务的模型架构或提示方法的前提下,一些缺乏测试用例的语言到代码的生成效果不佳,准确度得不到保障。

LEVER的提出解决了上述问题,这是一种通过学习生成程序的执行结果来改进语言到代码生成的方法,避开了测试用例不易获取的问题并保证了关键数据的正确性,进而提高了从语言到代码的生成准确度,在低资源和弱监督环境中也产生了重要的改进。增强了Language-to-Code在多语言、多领域的现实能力。

2.作者介绍

Dragomir R. Radev 教授是耶鲁大学语言、信息和学习实验室的成员,也是该校计算机科学系的教授。Radev 教授的主要研究领域集中于自然语言处理方向,包括文本摘要、基于图的 NLP 和推断、NLP 在生物信息学中的应用、NLP 和深度学习、对话系统、跨语言信息抽取等。Redev 教授已是 ACM、ACL、AAAI和AAAS Fellow,从 2006 年至 2015 年担任 ACL 秘书长。本论文由Redev教授和他的博士学生Ansong Ni完成。

3.译者说

自从大语言模型兴起以来,LLM强大的生成能力帮助许多方向的研究取得了更好的结果。当前关键的实验结论是,虽然LLM在少数样本设置中难以达到精度,但当拥有足够多的样本时,它通常会有正确的输出。以前的工作已经表明,当样本被大规模抽取时,多数投票和测试用例的过滤可以显著提高它们的性能。之前的研究进一步证明了训练验证者并使用验证分数对数学问题的候选解决方案重新排序的有效性。与仅依赖于执行一致性和Error Pruning的方法相比,经过训练的验证器可以利用模型解决方案中丰富的语义特征,如数据类型、数值范围和变量属性,这些特征可以作为程序正确性的有力指标,LLM的引入成功解决了测试用例不足和启发性学习的问题。因此在LLM的推理和生成能力的支持下,Language-to-Code的准确率和效率将会得到可观的提升。

具体来说,针对于模型生成的多个代码结果,LEVER训练了一个基于自然语言描述、程序表层形式及其执行结果的联合表示结果来学习区分和拒绝错误程序的验证器。进而将验证概率与LLM生成概率结合起来,并将相同的执行结果边缘化,得到二者的联合概率。之后使用这个聚合概率作为重新排序分数,并输出执行到最可能结果的程序。也就是说,验证器(Verifier)的和大语言模型(LLM)的生成概率是代码生成过程中的“双保险”。多个生成结果在经过二者的评分后重新排序,最终得到最可靠的结果输出。

基于在Text-to-SQL语义解析、Table QA、数学推理和基本python编程领域的四种不同的语言到代码基准上进行的实验结果,对于三种不同代码LLM的实验结果表明,LEVER一致地提高了生成程序的执行精度。与此同时,LEVER与Code-Davinci-002相结合,在使用执行错误修剪的强基准上提高了4.6%至10.9%,并且在不使用特定于任务的模型架构或提示方法的前提下,在所有四个基准上实现了最新的结果。消融实验表明,执行结果对于验证至关重要,LEVER在低资源和弱监督环境中也产生了重要的改进。

原文链接:https://arxiv.org/pdf/2302.08468.pdf

01.背景介绍

生成式模型在近几年发展迅速,文本生成和对话聊天式的大语言模型得到了突飞猛进的发展,而代码作为文档的特殊部分,自然相应的针对性研究也有不少的进展,大模型的基础是大量的数据和训练,当投入的数据达到一定值时,结果的正确率能够得到保证,但是在现实问题中,测试用例和数据并不容易得到,尤其是在语言到代码生成的过程中,一些语种的数据本身就很少,监督训练的结果自然不尽人意,那么怎样在缺乏资源和弱监督训练的前提下,避免出现启发性学习无法捕捉到执行结果的语义特征的问题的同时,完成大模型代码生成的正确输出,就是Language-to-Code的关键。

02.LEVER算法结构

为了解决上述少资源、弱监督的问题,LEVER提出了Verifier与LLM结合的方法,通过大语言模型生成概率与验证器评分得到的联合概率作为最终输出的标准,解决了资源缺乏的同时保证了结果输出的准确。LEVER的实现简单来说可分为三步:

1)生成:基于任务输入和少量示例,从代码LLM中生成示例程序;

2)执行:与程序执行器(Executor)一起获取执行结果;

3)验证:使用学习过的验证器根据NL、program和执行结果输出程序正确的概率。

上图的Few-shot和Task Input分别为提示实例和问题输入,二者作为问题进入大语言模型得到Top-K个输出结果和相对应的概率,之后进入执行器(Executor)直接得到程序运行的结果但并不输出,由之后的验证器(Verifier)结合输出的Code和Input的比较的得到每一段代码的评分,也就是正确的概率,最后进行概率的联合计算,将LLM的生成概率和验证器的正确概率相乘得到最终的分数,输出最高分数的代码,也就是最合理的结果。

作为算法的核心,验证器(Verifier)的训练是结果输出是否准确的关键,LEVER在实验中根据不同数据集的描述得到采样预算,并从训练集上的LLM中采样来创建验证训练数据。当验证器进行学习时,通过对每个示例的所有程序样本进行平均来计算训练损失。当相同示例的程序样本批处理在一起时,有效批处理大小也将乘以样本大小。但是当样本量变大时,可能会出现无法立即适应显存的问题。因此,实验设置在每次迭代中对用于学习每个示例的程序进行下采样,而随机采样发生在训练的每个epoch的开始,故验证器可以在每个epoch看到不同的程序。

验证器(Verifier)模型选择也是实验的关键变量,本实验使用开发集来选择最佳的验证器模型。通过比较,Spider选择T5-base,WikiTQ和MBPP选择T5-large,GSM8k选择RoBERTa-large作为验证器在主要实验中使用的基础模型。

03.实验数据与基准

我们在四个Language-to-Code的数据集上进行了实验,这些数据集包括语义解析、Table QA、数学推理和基本python编程等领域,如下表所示。

  1. Spider是将自然语言问题转化为SQL查询的语义分析数据集。它带有7k并行训练数据,同时也是理想的微调生成器。
  2. WikiTableQuestions (WikiTQ)是一个表格问答数据集,通过在源表上生成和执行SQL查询来解决问题。实验使用预处理的表,并采用其带注释的SQL查询为原始弱监督数据集添加最佳程序(gold programs)。
  3. GSM8k是解决小学数学字谜问题的基准。根据之前的工作,通过从NL中的问题生成Python程序来接近这个基准,这些程序应该在执行时产生正确的答案。原始数据集只有自然语言而没有程序解决方案,因此对语言到代码的监督很弱。
  4. MBPP包含了用自然语言编写的基本Python程序。每个实例都配备了3个测试用例来检查程序的正确性。在之前的工作之后,实验使用第一个测试用例作为提示模型生成正确的函数签名的一部分,并使用所有三个用例来评估正确性。

04.Baseline:基线

LEVER将与以下使用代码LLM生成程序的基线方法进行比较。

  1. 贪心:每解码一步选择最可能的符号。
  2. 最大似然度(Maximum Likelihood, ML):从k个被抽样的程序候选中,选择生成对数概率最高的程序,通过开发集经验地确定是否使用每个数据集的归一化概率。
  3. Error Pruning + ML (EP + ML):删除执行错误的候选程序,然后选择可能性最大的方案。
  4. Error Pruning +投票(EP + Voting):对无错误程序的执行结果进行多数投票,选出投票最多的执行结果及其对应的程序。

此实验专注于与EP+ML基线进行比较,因为它是一种简单的重新排序方法,可以利用执行程序(Execution),并在不同的数据集和代码LLM中产生一致的竞争结果。

05.评价指标

根据之前的实验工作,此实验使用执行准确性作为所有数据集的主要评估指标,它将计算产生最佳执行结果或通过所有测试用例的示例百分比。

06.实验结果

实验结果的表示也是重要的一环。Spider和WikiTQ使用SQL执行的线性化结果表作为执行结果;GSM8k在执行程序后使用名为“answer”的变量的值作为执行结果;MBPP使用函数返回的类型和值(转换为字符串)。下图表分别表示了各个方法在四个数据集上的实验结果。

Spider数据集上的执行精度

WikiTQ数据集上的执行精度

GSM8k数据集上的执行精度

MBPP数据集上的执行精度

在CodeX-Davinci模型下,LEVER与当前基线分别在四个数据集中实验的比较结果

07.总结

在本文中,我们介绍了一种名为LEVER的新型高效方法,它针对大语言模型(LLM)在代码生成任务中的应用进行了优化。LEVER通过结合验证器的分数和LLM生成编码的概率,显著提高了Language-to-Code生成过程的准确性。LEVER在Table QA、Math QA以及基础Python编程等领域取得了目前最好的成绩,在编码生成领域中提出了新的研究方向。

LEVER在低资源和弱监督环境中也显示出了改进的潜力,这对于资源受限的语言和领域尤为重要。通过这种方法,即使是在缺乏大量测试用例的情况下,也能有效地提高代码生成的准确性和效率。

LEVER在四个不同的Language-to-Code基准数据集上进行了测试,包括Spider、WikiTQ、GSM8k和MBPP。实验结果显示,LEVER在所有这些数据集上都取得了优于现有基线方法的执行精度,特别是在与CodeX-Davinci模型结合使用时,其性能提升尤为显著。

总之,LEVER为Language-to-Code领域提供了一种新的、有效的解决方案,它不仅提高了生成代码的准确性,而且也为未来在这一领域的研究和应用开辟了新的道路。随着大语言模型技术的不断进步,我们期待LEVER及其后续发展能够为编程语言的智能化带来更多的突破。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1842557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙 Web组件的生命周期(api10、11、12)

概述 开发者可以使用Web组件加载本地或者在线网页。 Web组件提供了丰富的组件生命周期回调接口,通过这些回调接口,开发者可以感知Web组件的生命周期状态变化,进行相关的业务处理。 Web组件的状态主要包括:Controller绑定到Web组…

【vue3】for循环多选框勾选必填校验

业务场景&#xff1a; 多选项必选一个&#xff0c;选了的输入框必填 <el-row :gutter"20"><el-col :span"12"><el-form-item label"捆绑终端硬件标识" prop"terminalCodeList"><el-checkbox-groupv-model"…

rmmod无法卸载驱动程序

出现问题&#xff1a; 在加载好驱动程序key_to_led_drv.ko 运行app然后使用ctrlz退出的时候&#xff0c;无法使用rmmod卸载程序 出现问题&#xff1a; 原因进程没有被杀死&#xff1a; 调试过程&#xff1a; 使用lsmod里的信息&#xff1a; used为驱动占用的计数值 当计数…

Java+ffmpeg 合并两个mp4文件

使用ffmpeg测试命令 ffmpeg -i "E:\Monitor\video_20240617_10.mp4" -i "E:\Monitor\video1_20240617_10.mp4" -filter_complex "[0:v][0:a][1:v][1:a]concatn2:v1:a1[v][a]" -map "[v]" -map "[a]" -c:v libx264 -c:a…

数据分析第十一讲:pandas应用入门(六)

pandas应用入门&#xff08;六&#xff09; 我们再来看看Index类型&#xff0c;它为Series和DataFrame对象提供了索引服务&#xff0c;有了索引我们就可以排序数据&#xff08;sort_index方法&#xff09;、对齐数据&#xff08;在运算和合并数据时非常重要&#xff09;并实现…

2024.6.16 机器学习周报

目录 引言 Abstract 文献阅读 1、题目 2、引言 3、创新点 4、匹配问题 5、SuperGlue架构 5.1、注意力图神经网络&#xff08;Attentional Graph Neural Network&#xff09; 5.2、最佳匹配层&#xff08;Optimal matching layer&#xff09; 5.3、损失 6、实验 6.…

裂变客户时代:如何打造口碑传播的良性循环?【以Notion为例】

在当今的商业环境中&#xff0c;客户裂变已经成为品牌增长的重要驱动力。裂变客户时代&#xff0c;意味着每一个满意的客户都有可能成为品牌的传播者&#xff0c;帮助品牌吸引更多的新客户。那么&#xff0c;如何在这个时代打造口碑传播的良性循环呢&#xff1f;Notion是怎么做…

Python 接口自动化测试

一、基础准备 1. 环境搭建 工欲善其事必先利其器&#xff0c;废话不多说。我们先开始搭建环境。 # 创建项目目录mkdir InterfaceTesting# 切换到项目目录下cd InterfaceTesting# 安装虚拟环境创建工具pip install virtualenv# 创建虚拟环境&#xff0c;env代表虚拟环境的名称&…

微信小程序学习(十):生命周期

1、应用生命周期 生命周期说明onLaunch监听小程序初始化&#xff0c;全局只会执行 1 次onShow监听小程序启动或切前台onHide监听小程序切后台 &#x1f517;应用生命周期官方文档 App({/*** 当小程序初始化完成时&#xff0c;会触发 onLaunch&#xff08;全局只触发一次&…

李宏毅深度学习03——神经网络训练不起来怎么办

视频链接 如果Optimization失败的时候&#xff0c;怎么把梯度下降做的更好&#xff1f; 只考虑这种情况&#xff0c;不考虑overfitting 局部最小值&#xff08;local minima&#xff09;和鞍点&#xff08;saddle point&#xff09; 为什么Optimization会失败&#xff1f; …

用AI帮助设计师提升工作效率?

在创意设计的世界里&#xff0c;效率往往意味着灵感与时间的完美结合。设计师们时常面临各种挑战&#xff0c;如何在保证作品质量的同时&#xff0c;又能提升工作效率&#xff1f;这不仅是设计师们思考的问题&#xff0c;也是AI技术正在积极解决的问题。那么&#xff0c;用AI帮…

Unity 工具 之 Azure 微软 【GPT4o】HttpClient 异步流式请求的简单封装

Unity 工具 之 Azure 微软 【GPT4o】HttpClient 异步流式请求的简单封装 目录 Unity 工具 之 Azure 微软 【GPT4o】HttpClient 异步流式请求的简单封装 一、简单介绍 二、实现原理 三、注意实现 四、简单效果预览 五、案例简单实现步骤 六、关键代码 一、简单介绍 Unit…

Spring系统学习 - FactoryBean和基于XML的自动装配

Factory Bean Spring的FactoryBean是一个特殊的Bean&#xff0c;用于创建其他Bean实例。FactoryBean接口定义了一个工厂Bean&#xff0c;该Bean可以用来生成其他Bean的实例。通过实现FactoryBean接口&#xff0c;开发人员可以自定义Bean的创建逻辑&#xff0c;实现更灵活的Bea…

动态竞拍与寄售模式:引领企业增长的新引擎

在当今日新月异的商业环境中&#xff0c;企业的生存与发展不仅需要卓越的产品和服务&#xff0c;更需要紧跟市场脉搏&#xff0c;勇于创新。接下来&#xff0c;我将为您详细介绍一种引领行业新风尚的商业模式——动态竞拍与寄售相结合的模式。这一模式凭借其灵活性和创新性&…

图像处理与视觉感知复习--频率域图像增强图像变换

文章目录 图像变换与信号分解正弦信号与傅里叶级数傅里叶变换离散傅里叶变换(DFT)频率域滤波 图像变换与信号分解 空间域&#xff1a;就是像素域&#xff0c;在空间域的处理是在像素级的处理&#xff0c;如像素级的叠加。 频率域&#xff1a;任何一个波形都可以分解用多个正弦…

【类型转换】C++中char、char*、int、string相互转换函数及string转不同进制数函数

参考资料&#xff1a;cplusplus官方资料strtol 函数用法 总结&#xff1a; 1、这些在做编程题处理输入数据时常用&#xff0c;需要牢记。

【CT】LeetCode手撕—23. 合并 K 个升序链表

目录 题目1- 思路2- 实现⭐23. 合并 K 个升序链表——题解思路 3- ACM 实现 题目 原题连接&#xff1a;23. 合并 K 个升序链表 1- 思路 模式识别&#xff1a;合并 K 个链表 ——> 优先队列 思路 借助优先队列&#xff0c;每次从 k 个链表中&#xff0c;各取一个元素&…

前 OpenAI 首席科学家建「安全超级智能」实验室;Meta 重组元宇宙团队丨 RTE 开发者日报 Vol.228

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

Cytoscape之操作界面介绍

Cytoscape 简介 Cytoscape是一个专注于开源网络可视化和分析的软件。软件的核心部分提供了网络显示、布局、查询等方面的基本功能。软件的核心可以通过插件架构进行扩展&#xff0c;这样就能快速地开发出新的功能。 Cytoscape 源自系统生物学&#xff0c;用于将生物分子交互网…

springboot+vue+mysql+mybatis 二手交易平台

springbootvuemysqlmybatis 二手交易平台 相关技术 javaspringbootmybatismysqlvueelementui