程序的图表通常是用于代码研究的机器学习的核心要素。我们介绍了一个开源Python库Python_graphs,该图片将静态分析应用于构建适合培训机器学习模型的Python程序的图表。我们的库承认控制流图,数据流图和复合``程序图''的构建,这些图形结合了控制流,数据流,句法和词汇信息。我们介绍了图书馆的功能和局限性,进行案例研究,将图书馆应用于数百万竞争性的编程提交,并展示图书馆的机器学习研究实用程序。
translated by 谷歌翻译
在实际执行或基准测试之前预测生产代码的性能是高度挑战的。在本文中,我们提出了一个被称为TEP-GNN的预测模型,该模型表明,对于预测单位测试执行时间的特殊情况,高准确性的性能预测是可能的。 Tep-gnn使用FA-asts或流动的ASTS作为基于图的代码表示方法,并使用强大的图形神经网络(GNN)深度学习模型预测测试执行时间。我们基于从项目公共存储库中开采的922个测试文件,使用四个现实生活中的Java开源程序评估TEP-GNN。我们发现我们的方法达到了0.789的较高的Pearson相关性,表现优于基线深度学习模型。但是,我们还发现,训练有素的模型需要更多的工作来概括看不见的项目。我们的工作表明,FA-asts和GNN是预测绝对性能值的可行方法,并作为能够在执行前预测任意代码的性能的重要中介步骤。
translated by 谷歌翻译
Machine Learning for Source Code (ML4Code) is an active research field in which extensive experimentation is needed to discover how to best use source code's richly structured information. With this in mind, we introduce JEMMA, an Extensible Java Dataset for ML4Code Applications, which is a large-scale, diverse, and high-quality dataset targeted at ML4Code. Our goal with JEMMA is to lower the barrier to entry in ML4Code by providing the building blocks to experiment with source code models and tasks. JEMMA comes with a considerable amount of pre-processed information such as metadata, representations (e.g., code tokens, ASTs, graphs), and several properties (e.g., metrics, static analysis results) for 50,000 Java projects from the 50KC dataset, with over 1.2 million classes and over 8 million methods. JEMMA is also extensible allowing users to add new properties and representations to the dataset, and evaluate tasks on them. Thus, JEMMA becomes a workbench that researchers can use to experiment with novel representations and tasks operating on source code. To demonstrate the utility of the dataset, we also report results from two empirical studies on our data, ultimately showing that significant work lies ahead in the design of context-aware source code models that can reason over a broader network of source code entities in a software project, the very task that JEMMA is designed to help with.
translated by 谷歌翻译
动态类型的语言如JavaScript和Python已成为最受欢迎的使用中的使用中。重要的优势可以从动态类型的程序中的类型注释累积。逐渐键入的这种方法是由Querecript编程系统示例,允许程序员指定部分键入的程序,然后使用静态分析来推断剩余类型。然而,通常,静态类型推断的有效性受到限制,取决于程序结构和初始注释的复杂性。结果,对于可以在动态类型的程序中可以在静态预测类型中推进本领域的新​​方法的强大动机,并且该具有可接受的性能用于交互式编程环境。以前的工作表明了使用深度学习的概率类型推断的承诺。在本文中,我们通过引入一系列图形的神经网络(GNN)模型来推进过去的工作,该模型在新型流程图(TFG)表示上运行。 TFG表示输入程序的元素,作为与语法边缘和数据流边缘连接的图表节点,并且我们的GNN模型训练以预测给定输入程序的TFG中的类型标签。我们为我们的评估数据集中的100种最常见类型的GNN模型研究了不同的设计选择,并显示了我们最佳的准确性的两个GNN配置,分别实现了87.76%和86.89%的前1个精度,优于两个最密切相关的深度学习型推断从过去的工作 - 矮人的前进剂,顶级1的精度为84.62%,兰丹特精确为79.45%。此外,这两种配置的平均推理吞吐量为353.8和1,303.9文件/秒,而DeepTyper的186.7个文件/秒和LambDanet的1,050.3文件/秒。
translated by 谷歌翻译
深度学习方法的最新突破引发了人们对基于学习的错误探测器的兴趣。与传统的静态分析工具相比,这些错误检测器是直接从数据中学到的,因此更容易创建。另一方面,它们很难训练,需要大量数据,而这些数据不容易获得。在本文中,我们提出了一种称为Meta Bug检测的新方法,该方法比现有基于学习的错误探测器具有三个至关重要的优势:Bug-Type通用(即,能够捕获在培训期间完全没有观察到的错误类型),可以自我解释(即能够在没有任何外部可解释方法的情况下解释其自身的预测)和样本有效(即,比标准错误检测器所需的培训数据要少得多)。我们的广泛评估表明,我们的元错误检测器(MBD)有效地捕获了各种错误,包括NULL指针解除,阵列索引外部漏洞,文件句柄泄漏甚至是并发程序中的数据竞赛;在此过程中,MBD还大大优于几个值得注意的基线,包括Facebook推断,一种著名的静态分析工具和FICS,即最新的异常检测方法。
translated by 谷歌翻译
深度学习在各种软件工程任务中广泛使用,例如,节目分类和缺陷预测。虽然该技术消除了特征工程所需的过程,但源代码模型的构建显着影响了这些任务的性能。最近的作品主要集中在通过引入从CFG提取的上下文依赖项来补充基于AST的源代码模型。但是,所有这些都关注基本块的表示,这是上下文依赖性的基础。在本文中,我们集成了AST和CFG,并提出了一种嵌入了分层依赖项的新型源代码模型。基于此,我们还设计了一种神经网络,这取决于图表关注机制。特殊地,我们介绍了基本块的句法结构,即其对应的AST,在源代码模型中提供足够的信息并填补间隙。我们在三种实际软件工程任务中评估了该模型,并将其与其他最先进的方法进行了比较。结果表明,我们的模型可以显着提高性能。例如,与最佳性能的基线相比,我们的模型将参数的比例降低了50 \%并实现了对程序分类任务的准确性的4 \%改进。
translated by 谷歌翻译
现代深度学习框架提供嵌入在Python中的必要的急切执行编程接口,以提供生产的开发体验。但是,深度学习从业者有时需要捕获和转换程序结构以进行性能优化,可视化,分析和硬件集成。我们研究了深度学习中使用的程序捕获和转型的不同设计。通过设计典型的深度学习用例而不是长尾部,可以为程序捕获和转换创建更简单的框架。我们在Torch.fx中应用了这一原理,是一个完全在Python写入的Pytorch的程序捕获和转换库,并通过ML从业者进行高开发人员生产力优化。我们存在案例研究,展示了Torch.fx如何实现先前在Pytorch生态系统中无法访问的工作流程。
translated by 谷歌翻译
由不同类型的节点和边缘组成的学习异质图增强了均匀图技术的结果。这样的图形的一个有趣示例是代表可能的软件代码执行流的控制流图。由于此类图代表了代码的更多语义信息,因此为这些图形开发技术和工具可能对检测软件中的漏洞的可靠性非常有益。但是,现有的异质图技术仍然不足以处理复杂的图形,在处理复杂的图形中,不同类型的节点和边缘数量较大且可变。本文集中于以太坊智能合约作为由构建在控制流图和包含不同类型的节点和链接的呼叫图的异质合同图表示的软件代码样本。我们提出了曼多(Mando),这是一种新的异质图表示,以学习这种异质合同图的结构。 Mando提取自定义的Metapaths,该Metapaths在不同类型的节点及其邻居之间建立了关系连接。此外,它开发了一个多米达异构图注意网络,以学习不同类型的节点及其在异质合同图中的多层嵌入,可以更准确地捕获智能合约的代码语义,并便利两者。 - 水平和粗粒合同级别的漏洞检测。我们对大型智能合同数据集的广泛评估表明,曼多(Mando)在粗粒合同水平上改善了其他技术的脆弱性检测结果。更重要的是,它是第一种基于学习的方法,能够在细粒度的线条层面上识别漏洞,并在F1分数方面将基于代码分析的传统漏洞检测方法显着提高了11.35%至70.81%。
translated by 谷歌翻译
基于机器学习的程序分析最近显示了整合正式和概率推理对辅助软件开发的承诺。但是,在没有大型注释的语料库的情况下,培训这些分析是挑战性的。为了解决这个问题,我们呈现Buglab,一种自我监督学习的错误检测和修复方法。Buglab Co-Trains两种型号:(1)检测仪模型,用于检测和修复代码中的错误,(2)选择器模型,了解为探测器创建用于训练数据的错误代码。在2374个真实错误的测试数据集上,Buglab的Python实现在基线方法上提高了30%,并在开源软件中找到19个以前未知的错误。
translated by 谷歌翻译
代码搜索目标是根据自然语言查询检索相关的代码片段,以提高软件生产力和质量。但是,由于源代码和查询之间的语义间隙,自动代码搜索是具有挑战性的。大多数现有方法主要考虑嵌入的顺序信息,其中文本背后的结构信息不完全考虑。在本文中,我们设计了一个名为GraphsearchNet的新型神经网络框架,通过共同学习源代码和查询的富集语义来启用有效和准确的源代码搜索。具体地,我们建议将源代码和查询编码为两个图,其中双向GGNN以捕获图表的本地结构信息。此外,我们通过利用有效的多主题来增强BigGNN,以补充BigGNN错过的全球依赖。关于Java和Python数据集的广泛实验说明了GraphSearchNet优于当前最先进的工作原位。
translated by 谷歌翻译
源代码的最先进的神经模型倾向于在代码的生成时进行评估,并且通常在长地平任务中的产生,例如整个方法体的产生。我们建议使用静态程序分析仪的弱监督来解决这一缺陷。我们的神经统计方法允许深入的生成模型来象征地计算它已经生成的代码中的静态分析工具,长距离语义关系。在培训期间,该模型观察这些关系,并学习生成条件上的程序。考虑到包含该方法的类的剩余部分,我们将我们的方法应用于生成整个Java方法的问题。我们的实验表明,该方法显着地优于最先进的变换器和模型,明确试图在制作程序中没有基本语义错误的程序以及在句法匹配地面真理方面来学习此任务的模型。
translated by 谷歌翻译
回答集编程(ASP)已成为一种流行的和相当复杂的声明问题解决方法。这是由于其具有吸引力的地址解决方案的工作流程,这是可以轻松解决问题解决的方法,即使对于计算机科学外的守护者而言。与此不同,底层技术的高度复杂性使得ASP专家越来越难以将想法付诸实践。有关解决此问题,本教程旨在使用户能够构建自己的基于ASP的系统。更确切地说,我们展示了ASP系统Clingo如何用于扩展ASP和实现定制的专用系统。为此,我们提出了两个替代方案。我们从传统的AI技术开始,并展示元编程如何用于扩展ASP。这是一种相当轻的方法,依赖于Clingo的reation特征来使用ASP本身表达新功能。与此不同,本教程的主要部分使用传统的编程(在Python中)来通过其应用程序编程接口操纵Clingo。这种方法允许改变和控制ASP的整个模型 - 地面解决工作流程。 COMENT of Clingo的新应用程序课程使我们能够通过自定义类似于Clingo中的进程来绘制Clingo的基础架构。例如,我们可能会互动到程序的抽象语法树,控制各种形式的多射击求解,并为外国推论设置理论传播者。另一种横截面结构,跨越元以及应用程序编程是Clingo的中间格式,即指定底层接地器和求解器之间的界面。我们通过示例和几个非琐碎的案例研究说明了本教程的前述概念和技术。
translated by 谷歌翻译
一般计划的合成已成为遗传编程(GP)和人工智能的重要应用领域。代码构建遗传编程(CBGP)是最近引入的一般程序合成的GP方法,它利用反射和一级规格支持可能使用任意数据类型,多态性和从现有代码库中汲取的功能的程序的演变。但是,尚未报告正式描述和CBGP的彻底基准测试。在这项工作中,我们使用类型理论的算法对CBGP的方法进行形式化。特别是,我们表明,功能性编程语言和Hindley-Milner类型系统可用于使用原始CBGP纸中抽象描述的过程来发展类型安全程序。此外,与其他当代GP程序合成方法相比,我们对CBGP的该功能变体的搜索性能进行了全面分析。
translated by 谷歌翻译
从结构化数据中学习是一项核心机器学习任务。通常,此类数据表示为图,通常仅考虑(键入)节点对之间的二进制关系。对于具有高度结构化数据的许多域而言,这是一个实质性的限制。一个重要的域是源代码,基于超图的表示可以更好地捕获代码的语义丰富和结构化的性质。在这项工作中,我们提出了热量,这是一种能够代表键入和合格的超图的神经模型,在该模型中,每个Hyperede都明确地符合参与节点的贡献。它可以看作是传递神经网络和变压器的消息的概括。我们使用新型程序代表程序来评估知识库完成和错误检测和维修的热量。在这两种情况下,它都优于强大的基线,表明其力量和通用性。
translated by 谷歌翻译
高吞吐量数据处理应用的高效硬件加速器设计,例如深度神经网络,是计算机架构设计中有挑战性的任务。在这方面,高级合成(HLS)作为快速原型设计的解决方案,从应用程序计算流程的行为描述开始。这种设计空间探索(DSE)旨在识别帕累托最佳的合成配置,其穷举搜索由于设计空间维度和合成过程的禁止计算成本而往往不可行。在该框架内,我们通过提出在文献中,有效和有效地解决了设计问题图形神经网络,该神经网络共同预测了合成的行为规范的加速性能和硬件成本给出了优化指令。考虑到性能和成本估计,学习模型可用于通过引导DSE来快速接近帕累托曲线。所提出的方法优于传统的HLS驱动DSE方法,通过考虑任意长度的计算机程序和输入的不变特性。我们提出了一种新颖的混合控制和数据流图表示,可以在不同硬件加速器的规格上培训图形神经网络;该方法自然地转移到解除数据处理应用程序。此外,我们表明我们的方法实现了与常用模拟器的预测准确性相当,而无需访问HLS编译器和目标FPGA的分析模型,同时是更快的数量级。最后,通过微调来自新目标域的少量样本,可以在未开发的配置空间中解放所学习的表示。
translated by 谷歌翻译
由于大量学生参加了大规模开放的在线课程(MOOC),因此越来越多的自动化程序维修技术集中在入门编程任务(IPA)上。这种最先进的技术使用程序聚类来利用以前的正确学生实现来修复给定的新不正确提交。通常,这些维修技术使用聚类方法,因为分析了所有可用的正确学生提交以维修程序是不可行的。聚类方法使用基于几个功能的程序表示,例如抽象语法树(AST),语法,控制流和数据流。但是,在表示语义上相似的程序时,这些功能有时会变得脆弱。本文提出了InvaastCluster,这是一种用于程序群集的新方法,它利用了在几个程序执行中观察到的动态生成的程序不变性,以群群群集在语义上等效的IPA。我们的主要目的是通过其不变性及其结构通过其匿名抽象语法树来找到程序的语义结合及其结构的组合。 InvaastCluster的评估表明,在聚集一组不同的正确IPA时,建议的程序表示法优于基于语法的表示。此外,我们将InvaastCluster集成到基于最新的聚类的程序维修工具中,并在一组IPA上进行评估。我们的结果表明,InvaastCluster通过在较短的时间内修复大量学生的程序来使用基于聚类的程序维修工具使用时的当前最新设备。
translated by 谷歌翻译
构建静态呼叫图需要在健全和精度之间进行权衡。不幸的是,用于构建呼叫图的程序分析技术通常不精确。为了解决这个问题,研究人员最近提出了通过机器学习为静态分析构建的后处理呼叫图所授权的呼叫图。机器学习模型的构建是为了通过在随机森林分类器中提取结构特征来捕获呼叫图中的信息。然后,它消除了预测为误报的边缘。尽管机器学习模型显示了改进,但它们仍然受到限制,因为它们不考虑源代码语义,因此通常无法有效地区分真实和误报。在本文中,我们提出了一种新颖的呼叫图修剪技术AutoRoprouner,用于通过统计语义和结构分析消除呼叫图中的假阳性。给定一个由传统静态分析工具构建的呼叫图,AutoProuner采用基于变压器的方法来捕获呼叫者与呼叫图中每个边缘相关的呼叫者和Callee函数之间的语义关系。为此,AutoProuner微型调节模型是在大型语料库上预先训练的代码模型,以根据其语义的描述表示源代码。接下来,该模型用于从与呼叫图中的每个边缘相关的功能中提取语义特征。 AutoProuner使用这些语义功能以及从呼叫图提取的结构特征通过馈送前向神经网络分类。我们在现实世界程序的基准数据集上进行的经验评估表明,AutoProuner的表现优于最先进的基线,从而改善了F量级,在识别静态呼叫图中识别错误阳性边缘方面,高达13%。
translated by 谷歌翻译
随着研究人员和从业人员将机器学习应用于越来越多的软件工程问题,他们使用的方法变得更加复杂。许多现代方法都以抽象语法树(AST)或其扩展形式使用内部代码结构:基于路径的表示,复杂的图将AST与其他边缘结合在一起。即使可以使用不同的解析器来从代码中提取AST的过程,但选择解析器对最终模型质量的影响仍然没有研究。此外,研究人员经常省略提取特定代码表示的确切细节。在这项工作中,我们在方法名称预测任务中评估了两个模型,即Code2Seq和Treelstm,由八个不同的解析器用于Java语言。为了将数据制备的过程与不同的解析器统一,我们开发了SuperParser,这是基于Pathminer的多语言解析器 - 不合Snostic库。 SuperParser促进了适用于培训和评估ML模型的数据集的端到端创建,这些模型与源代码中的结构信息合作。我们的结果表明,不同解析器建造的树木的结构和内容各不相同。然后,我们分析这种多样性如何影响模型的质量,并表明两种模型最不合适的解析器之间的质量差距非常重要。最后,我们讨论了解析器的其他功能,研究人员和从业人员在选择解析器时应考虑这些特征,以及对模型质量的影响。 SuperParser代码可在https://doi.org/10.5281/zenodo.6366591上公开获得。我们还发布了Java-Norm,即我们用于评估模型的数据集:https://doi.org/10.5281/zenodo.6366599。
translated by 谷歌翻译
Decompilation aims to transform a low-level program language (LPL) (eg., binary file) into its functionally-equivalent high-level program language (HPL) (e.g., C/C++). It is a core technology in software security, especially in vulnerability discovery and malware analysis. In recent years, with the successful application of neural machine translation (NMT) models in natural language processing (NLP), researchers have tried to build neural decompilers by borrowing the idea of NMT. They formulate the decompilation process as a translation problem between LPL and HPL, aiming to reduce the human cost required to develop decompilation tools and improve their generalizability. However, state-of-the-art learning-based decompilers do not cope well with compiler-optimized binaries. Since real-world binaries are mostly compiler-optimized, decompilers that do not consider optimized binaries have limited practical significance. In this paper, we propose a novel learning-based approach named NeurDP, that targets compiler-optimized binaries. NeurDP uses a graph neural network (GNN) model to convert LPL to an intermediate representation (IR), which bridges the gap between source code and optimized binary. We also design an Optimized Translation Unit (OTU) to split functions into smaller code fragments for better translation performance. Evaluation results on datasets containing various types of statements show that NeurDP can decompile optimized binaries with 45.21% higher accuracy than state-of-the-art neural decompilation frameworks.
translated by 谷歌翻译
由于现实世界编程语言语法的复杂性,因此从原始源代码中的学习程序语义是具有挑战性的,并且由于难以重建长距离关系信息在程序中使用标识符暗示表示的长距离关系信息。在解决第一点时,我们将约束的Horn条款(CHC)视为程序验证问题的标准表示,提供了一种简单而编程的语言独立语法。对于第二个挑战,我们探索CHC的图表表示,并提出了一个新的关系超图神经网络(R-HYGNN)体系结构来学习程序功能。我们介绍了CHC的两个不同的图表。一个称为约束图(CG),并通过将符号及其关系分别翻译成键入节点和二进制边缘,并强调CHC的句法信息,并将其构造为抽象语法树的约束。第二个称为控制和数据流超图(CDHG),并通过表示通过三元超过的控制和数据流来强调CHC的语义信息。然后,我们提出了一种新的GNN体系结构R-HYGNN,扩展了关系图卷积网络,以处理超图。为了评估R-HYGNN从程序中提取语义信息的能力,我们使用R-HYGNN在两个图表上训练模型,以及使用CHC-COMP 2021的基准作为培训数据,在五个具有越来越多的代理任务上进行了越来越多的困难。最困难的代理任务要求该模型预测反例中的条款的出现,这是CHC的满意度。 CDHG在此任务中达到90.59%的精度。此外,R-HYGNN对由290多个条款组成的图表之一具有完美的预测。总体而言,我们的实验表明,R-HYGNN可以捕获复杂的程序功能,以实现指导验证问题。
translated by 谷歌翻译