输入 - 输出(IO)示例的程序综合是一项长期挑战。虽然最近的作品在特定于域的语言(DSL)上表现出有限的成功,但将它们应用于现实世界的编程语言,例如C.由于复杂的语法和令牌变化,有三种主要挑战:(1)与许多DSL不同,像C如语言的程序需要首先编译,并且不会通过解释器执行; (2)程序搜索空间在编程语言的语法和语义变得更加复杂时呈指数增长; (3)收集实际计划的大规模数据集是非微不足道的。作为解决这些挑战的第一步,我们提出了Lasynth,并在限制-C域中表现出其疗效。更具体地,Lasynth学习潜在的表示,以近似于执行部分生成的程序的执行,即使它们在语法中不完整(寻址(1))。学习的执行显着提高了对现有方法的下一个令牌预测的性能,便于搜索(寻址(2))。最后,一旦接受了随机生成的地面真理计划和IO对,Lasynth可以合成更多简明的程序,类似于人为人写的代码。此外,使用这些合成程序再培训我们的模型,对于Karel和C程序合成的样本较少,表明利用学习程序合成器的承诺来提高输入 - 输出程序合成的数据集质量(寻址(3))。在评估程序执行输出是否与IO对匹配时,Lasynth达到55.2%的精度,即用数十个代币生成简单的C代码,包括环和分支,优先表现出没有执行者的现有方法约20%。
translated by 谷歌翻译
大型预先训练的语言模型可以在可以在一个可以“单通”中的任务上进行非常好,例如生成现实文本或合成计算机程序。但是,他们与需要无限的多步计算的任务斗争,例如添加整数或执行程序。令人惊讶的是,我们发现这些相同的模型能够执行复杂的多步计算 - 即使在少量射门中,当被要求执行操作“一步一步”时,表示中间计算的结果。特别是,我们通过询问它们将中间计算步骤发出到“ScratchPad”来执行变压器来执行多步计算。在一系列越来越复杂的任务范围内,从加入任意程序的执行范围,我们表明Scratchpads显着提高了语言模型执行多步计算的能力。
translated by 谷歌翻译
最近,深增强学习(DRL)方法在各种域中的任务方面取得了令人印象深刻的性能。然而,用DRL方法产生的神经网络政策不是人为可解释的,并且通常难以推广到新颖的情景。为了解决这些问题,事先作品探索学习更具可诠释和构建的概括的程序政策。然而,这些作品要么采用有限的政策表示(例如,决策树,状态机或预定义的程序模板)或需要更强的监督(例如输入/输出状态对或专家演示)。我们提出了一个框架,而是学习合成一个程序,该程序详细介绍了以灵活和表现力的方式解决任务的过程,仅来自奖励信号。为了减轻学习难以从头开始诱发所需的代理行为的难度,我们建议首先了解一个程序嵌入空间,以不传达的方式连续参加各种行为,然后搜索嵌入空间以产生程序最大化给定任务的返回。实验结果表明,所提出的框架不仅可以可靠地综合任务解决方案,而且在产生可解释和更广泛的政策的同时优于DRL和程序合成基线。我们还可以证明所提出的两级学习计划的必要性,并分析了学习计划嵌入的各种方法。
translated by 谷歌翻译
随着未来以数据为中心的决策,对数据库的无缝访问至关重要。关于创建有效的文本到SQL(Text2SQL)模型以访问数据库的数据有广泛的研究。使用自然语言是可以通过有效访问数据库(尤其是对于非技术用户)来弥合数据和结果之间差距的最佳接口之一。它将打开门,并在精通技术技能或不太熟练的查询语言的用户中引起极大的兴趣。即使提出或研究了许多基于深度学习的算法,在现实工作场景中使用自然语言来解决数据查询问题仍然非常具有挑战性。原因是在不同的研究中使用不同的数据集,这带来了其局限性和假设。同时,我们确实缺乏对这些提议的模型及其对其训练的特定数据集的局限性的彻底理解。在本文中,我们试图介绍过去几年研究的24种神经网络模型的整体概述,包括其涉及卷积神经网络,经常性神经网络,指针网络,强化学习,生成模型等的架构。我们还概述11个数据集,这些数据集被广泛用于训练Text2SQL技术的模型。我们还讨论了无缝数据查询中文本2SQL技术的未来应用可能性。
translated by 谷歌翻译
程序合成或代码生成旨在生成满足问题规范的程序。使用大规模预处理的语言模型(LMS)的最新方法显示出令人鼓舞的结果,但它们有一些关键的局限性。特别是,他们经常遵循标准监督的微调程序,仅从对自然语言问题描述和基础真相计划对培训代码生成模型。这种范式在很大程度上忽略了问题规范中的一些重要但潜在的信号,例如单位测试,因此在求解复杂的看不见的编码任务时通常会导致性能差。为了解决这些局限性,我们提出了“ Coderl”,这是通过验证的LMS和深入强化学习(RL)实现程序合成任务的新框架。具体而言,在培训期间,我们将代码生成的LM视为参与者网络,并引入批评网络,该网络经过培训,以预测生成的程序的功能正确性,并为演员提供密集的反馈信号。在推理期间,我们引入了一种新一代程序,具有关键的抽样策略,该过程允许模型根据示例单位测试和评论家分数的反馈自动重新生成程序。对于模型骨架,我们扩展了Codet5的编码器架构,具有增强的学习目标,更大的模型大小和更好的预处理数据。我们的方法不仅在具有挑战性的应用程序基准上实现了新的SOTA结果,而且还显示出强大的零弹性传输能力,并在简单的MBPP基准上具有新的SOTA结果。
translated by 谷歌翻译
源代码的最先进的神经模型倾向于在代码的生成时进行评估,并且通常在长地平任务中的产生,例如整个方法体的产生。我们建议使用静态程序分析仪的弱监督来解决这一缺陷。我们的神经统计方法允许深入的生成模型来象征地计算它已经生成的代码中的静态分析工具,长距离语义关系。在培训期间,该模型观察这些关系,并学习生成条件上的程序。考虑到包含该方法的类的剩余部分,我们将我们的方法应用于生成整个Java方法的问题。我们的实验表明,该方法显着地优于最先进的变换器和模型,明确试图在制作程序中没有基本语义错误的程序以及在句法匹配地面真理方面来学习此任务的模型。
translated by 谷歌翻译
The problem of reversing the compilation process, decompilation, is an important tool in reverse engineering of computer software. Recently, researchers have proposed using techniques from neural machine translation to automate the process in decompilation. Although such techniques hold the promise of targeting a wider range of source and assembly languages, to date they have primarily targeted C code. In this paper we argue that existing neural decompilers have achieved higher accuracy at the cost of requiring language-specific domain knowledge such as tokenizers and parsers to build an abstract syntax tree (AST) for the source language, which increases the overhead of supporting new languages. We explore a different tradeoff that, to the extent possible, treats the assembly and source languages as plain text, and show that this allows us to build a decompiler that is easily retargetable to new languages. We evaluate our prototype decompiler, Beyond The C (BTC), on Go, Fortran, OCaml, and C, and examine the impact of parameters such as tokenization and training data selection on the quality of decompilation, finding that it achieves comparable decompilation results to prior work in neural decompilation with significantly less domain knowledge. We will release our training data, trained decompilation models, and code to help encourage future research into language-agnostic decompilation.
translated by 谷歌翻译
自动数学问题解决最近引起了越来越多的关注作为长期的AI基准。在本文中,我们专注于解决几何问题,这需要全面了解文本描述,视觉图和定理知识。但是,现有方法高度依赖于手工规则,并且仅在小规模数据集上进行评估。因此,我们提出了一个几何问题应答DataSet GeoQA,其中包含4,998个几何问题,其中具有相应的注释程序,其说明了给定问题的解决过程。与另一个公开的数据集GEOS相比,GeoQA是25倍,程序注释可以为未来的明确和解释数值推理提供实际测试平台。此外,我们通过全面解析多媒体信息和产生可解释程序来引入神经几何求解器(NGS)来解决几何问题。我们进一步为NGS添加了多个自我监督的辅助任务,以增强跨模型语义表示。关于GeoQA的广泛实验验证了我们提出的NGS和辅助任务的有效性。然而,结果仍然明显低于人类性能,这为未来的研究留下了大型空间。我们的基准和代码在https://github.com/chen-judge/geoqa发布。
translated by 谷歌翻译
这项工作研究了彩色的任务,其中目的是将聋人(听力态度)社区转录到聋人的自然口语句子,以命令手语界面。以配对句子 - 光泽数据培训的先前序列到序列语言模型通常无法捕获两个不同语言之间的丰富连接,从而导致不满意的转录。我们观察到,尽管语法不同,但有效地简化了聋人通信的句子,同时与句子分享大部分词汇。这使我们能够通过执行编辑动作的集合来实现有乐化性的。单词添加,删除和复制,称为编辑程序,在他们的自然语言同行上。具体而言,我们设计了一种新的神经代理,了解综合和执行编辑程序,在句子上下文和部分编辑结果上调节的编辑程序。经过培训的代理以模仿最小的编辑程序,同时通过策略梯度更广泛地探索节目空间,以优化序列明智的转录质量。结果表明,我们的方法优于先前的光泽模型。
translated by 谷歌翻译
程序合成的目标是从示例中找到一个与给定的输入输出示例一致的计算机程序。基于大多数基于学习的方法都尝试找到一个满足所有示例的程序一次。相比之下,我们的工作考虑了一个将问题分为两个阶段的方法:(a)查找只满足一个示例的程序,(b)利用这些每个示例解决方案来产生满足所有示例的程序。我们基于多主题注意机制介绍跨聚合器神经网络模块,该机制学会组合在这些每个示例解决方案中存在的提示来合成全局解决方案。在不同长度和两个不同的实验设置下的评估显示,当鉴于同时预算时,我们的技术显着提高了PCODER的成功率[Zohar等。 AL 2018]和其他消融基线。我们工作的代码,数据和经过培训的模型可以在https://github.com/shrivastavadisha/n-peps找到。
translated by 谷歌翻译
强化学习的关键挑战是解决了长地平规划问题。最近的工作已经利用计划在这些设置中引导钢筋学习。但是,这些方法对用户施加了高手动负担,因为它们必须为每项新任务提供指导计划。部分观察到的环境进一步使编程任务复杂化,因为程序必须实现正确,理想地最佳地实现策略,处理环境的隐藏区域的所有可能配置。我们提出了一种新的方法,模型预测程序合成(MPP),它使用程序综合来自动生成指导程序。它培训了一种生成模型来预测世界的未观察到的部分,然后以鲁棒到其不确定性的方式基于来自该模型的样本来综合程序。在我们的实验中,我们表明我们的方法在一组具有挑战性的基准上显着优于非程序引导的方法,包括2D Minecraft-Inspired环境,代理商必须完成复杂的子组织序列来实现其目标,并实现类似的使用手动程序指导代理的性能。我们的结果表明,我们的方法可以在不需要用户为每项新任务提供新的指导计划的情况下获得方案引导的强化学习的好处。
translated by 谷歌翻译
由摩尔定律驱动的计算系统性能的改善已改变了社会。由于这种硬件驱动的收益放缓,对于软件开发人员而言,专注于开发过程中的性能和效率变得更加重要。尽管几项研究表明了这种提高的代码效率的潜力(例如,与硬件相比,2倍更好的世代改进),但在实践中解锁这些收益是充满挑战的。关于算法复杂性以及硬件编码模式的相互作用的推理对于普通程序员来说可能是具有挑战性的,尤其是当与围绕开发速度和多人发展的务实约束结合使用时。本文旨在解决这个问题。我们分析了Google Code JAM竞争中的大型竞争编程数据集,并发现有效的代码确实很少见,中位数和第90%的解决方案之间的运行时间差异为2倍。我们建议使用机器学习以提示的形式自动提供规范反馈,以指导程序员编写高性能代码。为了自动从数据集中学习这些提示,我们提出了一种新颖的离散变异自动编码器,其中每个离散的潜在变量代表了不同的代码编辑类别,从而提高了性能。我们表明,此方法代表代码效率的多模式空间比序列到序列基线更好地编辑,并生成更有效的解决方案的分布。
translated by 谷歌翻译
迄今为止,统计类型推理系统彻底依赖于监督的学习方法,这些方法需要艰苦的手动努力来收集和标记大量数据。大多数图灵完整的命令式语言共享相似的控制和数据流结构,这使得将知识从一种语言转移到另一种语言。在本文中,我们提出了一个跨语言转移学习框架,即柏拉图,用于统计类型推理,这使我们能够利用一种从一种语言的标签数据集中学到的先验知识并将其转移到另一种语言的数据集中,例如Python,将其转移到JavaScript,Java,Java对于JavaScript等。柏拉图由一种新颖的核心注意机制提供动力,以限制主干变压器模型的注意范围,以便模型被迫将其预测基于语言之间普遍共享的特征。此外,我们提出了语法增强功能,以增强语言域之间的特征重叠的学习。此外,柏拉图还可以通过引入跨语言扩展来用于提高常规监督类型推理的性能,这使该模型能够学习多种语言的更多一般功能。我们在两种设置下评估了柏拉图:1)在跨域方案下,目标语言数据未标记或标记部分,结果表明,柏拉图的表现优于最先进的域传输技术,例如。 ,它通过+14.6%@em,+18.6%@weighted-f1和2)在传统单语言监督场景下改善了Python的打字稿基线,Plato将python的基线改进了+4.10%@em,+1.90%@weighted em -f1引入了跨语性增强。
translated by 谷歌翻译
在本文中,我们解决了深入学习的软件漏洞自动修复问题。数据驱动漏洞修复的主要问题是已知确认漏洞的少数现有数据集仅由几千例组成。然而,培训深度学习模型通常需要数十万例的例子。在这项工作中,我们利用了错误修复任务和漏洞修复任务的直觉相关,并且可以传输来自错误修复的知识可以传输到修复漏洞。在机器学习界中,这种技术称为转移学习。在本文中,我们提出了一种修复名为Vreepair的安全漏洞的方法,该方法是基于转移学习。 vreepair首先在大型错误修复语料库上培训,然后在漏洞修复数据集上调整,这是一个较小的数量级。在我们的实验中,我们表明,仅在错误修复语料库上培训的模型可能已经修复了一些漏洞。然后,我们证明转移学习改善了修复易受攻击的C功能的能力。我们还表明,转移学习模型比具有去噪任务训练的模型更好,并在漏洞固定任务上进行微调。总而言之,本文表明,与在小型数据集上的学习相比,转移学习适用于修复C中的安全漏洞。
translated by 谷歌翻译
自动化程序维修(APR)旨在自动修复源代码中的错误。最近,随着深度学习(DL)领域的进步,神经程序修复(NPR)研究的兴起,该研究将APR作为翻译任务从Buggy Code开始,以纠正代码并采用基于编码器decoder架构的神经网络。与其他APR技术相比,NPR方法在适用性方面具有很大的优势,因为它们不需要任何规范(即测试套件)。尽管NPR一直是一个热门的研究方向,但该领域还没有任何概述。为了帮助感兴趣的读者了解现有NPR系统的体系结构,挑战和相应的解决方案,我们对本文的最新研究进行了文献综述。我们首先介绍该领域的背景知识。接下来,要理解,我们将NPR过程分解为一系列模块,并在每个模块上阐述各种设计选择。此外,我们确定了一些挑战并讨论现有解决方案的影响。最后,我们得出结论,并为未来的研究提供了一些有希望的方向。
translated by 谷歌翻译
为了将归纳推理与感知能力相结合,我们开发了神经符号程序合成的技术,其中首先将神经网络的感知输入解析为低维的可解释表示,然后由合成程序处理。我们探索了一些放松问题的技术,并共同学习所有端到端的模块,梯度下降:多任务学习;摊销推理;过度参数化;以及惩罚冗长计划的可区分策略。收集到该工具箱可提高梯度指导程序搜索的稳定性,并提出学习如何将输入视为离散抽象的方法,以及如何象征性地处理这些抽象作为程序。
translated by 谷歌翻译
Large language models have demonstrated outstanding performance on a wide range of tasks such as question answering and code generation. On a high level, given an input, a language model can be used to automatically complete the sequence in a statistically-likely way. Based on this, users prompt these models with language instructions or examples, to implement a variety of downstream tasks. Advanced prompting methods can even imply interaction between the language model, a user, and external tools such as calculators. However, to obtain state-of-the-art performance or adapt language models for specific tasks, complex task- and model-specific programs have to be implemented, which may still require ad-hoc interaction. Based on this, we present the novel idea of Language Model Programming (LMP). LMP generalizes language model prompting from pure text prompts to an intuitive combination of text prompting and scripting. Additionally, LMP allows constraints to be specified over the language model output. This enables easy adaption to many tasks, while abstracting language model internals and providing high-level semantics. To enable LMP, we implement LMQL (short for Language Model Query Language), which leverages the constraints and control flow from an LMP prompt to generate an efficient inference procedure that minimizes the number of expensive calls to the underlying language model. We show that LMQL can capture a wide range of state-of-the-art prompting methods in an intuitive way, especially facilitating interactive flows that are challenging to implement with existing high-level APIs. Our evaluation shows that we retain or increase the accuracy on several downstream tasks, while also significantly reducing the required amount of computation or cost in the case of pay-to-use APIs (13-85% cost savings).
translated by 谷歌翻译
Despite recent success in large language model (LLM) reasoning, LLMs still struggle with hierarchical multi-step reasoning like generating complex programs. In these cases, humans often start with a high-level algorithmic design and implement each part gradually. We introduce Parsel, a framework enabling automatic implementation and validation of complex algorithms with code LLMs, based on hierarchical function descriptions in natural language. Parsel can be used across domains requiring hierarchical reasoning, e.g. code synthesis, theorem proving, and robotic planning. We demonstrate Parsel's capabilities by using it to generate complex programs that cannot currently be automatically implemented from one description and backtranslating Python programs in the APPS dataset. Beyond modeling capabilities, Parsel allows problem-solving with high-level algorithmic designs, benefiting both students and professional programmers.
translated by 谷歌翻译
深度学习模型概括到分销数据很好,但扭动概括为合作方式,即结合一组学习的原语来解决更复杂的任务。以顺序到序列(SEQ2SEQ)学习,变压器通常无法预测比在训练中看到的更长示例的正确输出。本文介绍了迭代解码,SEQ2SEQ的替代方案(i)改善了PCFG和笛卡尔产品数据集中的变压器组成概括和(ii)在这些数据集中的证据中,SEQ2Seq变压器不学习未展开的迭代。在迭代解码中,训练示例被分解为变压器迭代地学习的一系列中间步骤。在推断时间下,中间输出被馈送回变压器,直到预测迭代令牌结束令牌。我们通过说明CFQ数据集中的迭代解码的一些限制来得出结论。
translated by 谷歌翻译
大多数低编码平台的用户,例如Excel和PowerApps,都以特定于域的公式语言编写程序来执行非平凡的任务。用户通常可以编写他们想要的大部分程序,但是引入了一些小错误,这些错误会产生破损的公式。这些错误既可以是句法和语义,也很难让低代码用户识别和修复,即使只能通过一些编辑解决。我们正式化了产生最后一英里维修问题等编辑的问题。为了解决这个问题,我们开发了Lamirage,这是一种最后一英里的维修发动机发电机,结合了符号和神经技术,以低代码公式语言进行最后一英里维修。 Lamirage采用语法和一组特定领域的约束/规则,它们共同近似目标语言,并使用它们来生成可以用该语言修复公式的维修引擎。为了应对本地化错误和对候选维修进行排名的挑战,Lamirage利用神经技术,而它依赖于符号方法来生成候选维修。这种组合使Lamirage可以找到满足提供的语法和约束的维修,然后选择最自然的修复。我们将Lamirage与400个Real Excel和PowerFX公式的最新神经和符号方法进行了比较,其中Lamirage的表现优于所有基线。我们释放这些基准,以鼓励在低代码域中进行后续工作。
translated by 谷歌翻译