先决条件预测的重要性超乎你的想象:一种有效的基于树结构的代码生成方法
CODE2SEQ是一种利用编程语言的语法结构更好地对源代码进行编码的方法,其利用组成路径的集合将代码片段表示为其抽象语法树(AST),使用注意力机制来选择相关路径来解码,该方法在两种编程语言和四个数据集上的两个任务中表现出卓越的性能,并超过了针对编程语言的先前模型以及最先进的NMT模型。
Aug, 2018
使用基于子树检索的方法来生成程序源代码。通过动态规划的句子相似性评分方法检索与输入句子相似的句子,提取建立相应抽象语法树的动作序列的n-gram,并增加导致检索到的n-gram动作子树出现在预测代码中的动作的概率。在两个代码生成任务中,ReCode方法提高了高达2.6 BLEU的性能。
Aug, 2018
该研究探讨了使用神经机器翻译模型进行源代码自动生成文档的机器翻译任务,并阐述了抽象语法树在源码的机器学习研究中的重要性和 Tree-LSTM 方法的局限性,并提出了一种新方法 Multi-way Tree-LSTM 来应对此问题,对比现有技术取得更好的结果。
Jun, 2019
该研究报告介绍了一种新方法——结构化语言建模(SLM),利用编程语言的严格语法将代码片段建模为树来实现任意代码完成,该方法可以生成任意编程语言的任意代码,在生成Java和C#代码方面,效果显著优于现有技术。
Sep, 2019
本文提出了一种基于树结构的神经架构(TreeGen)来生成编程语言代码,该模型使用了Transformer的注意力机制解决了长依赖问题,并引入了一种新颖的AST阅读器(encoder)将语法规则和AST结构整合到网络中。在Python基准测试、ATIS和GEO语义解析基准测试中,TreeGen的性能优于之前的最先进方法4.5个百分点,同时在ATIS(89.1%)和GEO(89.6%)的神经网络方法中实现了最佳精度。
Nov, 2019
本文提出了一种基于分块的抽象语法树分裂方法(BASTS),利用AST的丰富树形语法结构来改进代码摘要,将其分为块并为每个代码块生成分裂AST,利用基于树的LSTM和Transformer生成高质量的代码摘要,实验证明该方法在各种评估指标上显著优于现有方法。
Mar, 2021
本文提出 TreeBERT,一个基于树结构的预训练模型,用于改进编程语言相关的生成任务。TreeBERT 采用一系列组合路径和节点位置嵌入来表示代码对应的 AST,并通过基于树掩码语言模型 (TMLM) 和节点排序预测 (NOP) 的混合目标进行训练。在多项编程语言数据集上进行的预训练实验结果表明,TreeBERT 在代码摘要和代码文档生成任务中优于其他预训练模型和业界最优模型。此外,TreeBERT 在跨编程语言应用时也表现出色。
May, 2021
本文介绍了一种 AstBERT 模型,该模型基于预训练的编程语言模型,使用抽象语法树从语义和句法两方面来更好地理解金融代码,通过 Alipay 代码库中大量的 Java 和 Python 代码进行训练,并通过代码解析器将抽象语法树信息整合进模型中,最终,在代码问答、代码克隆检测和代码优化三个任务中获得了良好的性能。
Jan, 2022
本文提出了一种基于PDA的代码生成方法,将PDA机构建成模块并设计算法对序列模型生成进行限制,最终构建了一种名为CodePAD的代码生成框架,它可以利用PDA的状态传递信息辅助本来基于序列的深度学习模型进行更好的学习,实验显示CodePAD在四个数据集上均可以达到100%的文法正确率,并且相较于基础模型在三个数据集上有着15%至17%的BLEU分数提升。
Nov, 2022
从非技术描述生成完整程序的挑战在代码合成领域是个令人难以开启的问题,本研究提出了NoviCode,一种新颖的自然语言编程任务,通过接收API和新手非程序员的自然语言描述作为输入,生成可执行程序作为输出,并通过基于功能执行的测试套件来评估模型的有效性。研究发现,NoviCode是一个具有挑战性的代码合成任务,传统的端到端文本到代码模型在生成复杂代码时表现不佳,而一种新颖的方法是将自然语言表达与代码的组合层次结构对齐,极大地提升了模型在此任务中的性能。
Jul, 2024