基于代码语句掩码注意力机制的源代码迁移模型.pdf
《基于代码语句掩码注意力机制的源代码迁移模型.pdf》由会员分享,可在线阅读,更多相关《基于代码语句掩码注意力机制的源代码迁移模型.pdf(12页珍藏版)》请在咨信网上搜索。
1、基于代码语句掩码注意力机制的源代码迁移模型徐明瑞,李征,刘勇,吴永豪(北京化工大学信息科学与技术学院,北京100029)通信作者:刘勇,E-mail:摘要:源代码迁移技术旨在将源代码从一种编程语言转换至另一种编程语言,以减轻开发人员迁移软件项目的负担.现有研究通常利用神经机器翻译(NMT)模型将源代码转换为目标代码,但这些研究忽略了代码结构特征,导致源代码迁移性能不佳.为此,本文提出了基于代码语句掩码注意力机制的源代码迁移模型 CSMAT(code-statementmaskedattentionTransformer).该模型利用 Transformer 的掩码注意力机制(maskedatt
2、entionmechanism),在编码时引导模型理解源代码语句的语法和语义以及语句间上下文特征,在译码时引导模型关注并对齐源代码语句,从而提升源代码迁移性能.本文使用真实项目数据集 CodeTrans 进行实证研究,并使用 4 个指标评估模型性能.实验结果验证了 CSMAT 的有效性,同时验证了代码语句掩码注意力机制在预训练模型的适用性.关键词:代码语句;掩码;代码迁移;机器翻译;注意力机制引用格式:徐明瑞,李征,刘勇,吴永豪.基于代码语句掩码注意力机制的源代码迁移模型.计算机系统应用,2023,32(9):7788.http:/www.c-s- Code Migration Model B
3、ased on Code-statement Masked Attention MechanismXUMing-Rui,LIZheng,LIUYong,WUYong-Hao(CollegeofInformationScienceandTechnology,BeijingUniversityofChemicalTechnology,Beijing100029,China)Abstract:Sourcecodemigrationtechniquesaredesignedtoconvertsourcecodefromoneprogramminglanguagetoanother,whichhelps
4、reducedevelopersburdeninmigratingsoftwareprojects.Existingstudiesmainlyuseneuralmachinetranslation(NMT)modelstoconvertsourcecodetotargetcode.However,thesestudiesignorethecodestructurefeatures,resultinginpoorsourcecodemigrationperformance.Therefore,thisstudyproposesasourcecodemigrationmodelbasedonaco
5、de-statementmaskedattentionTransformer(CSMAT).ThemodelusesTransformersmaskedattentionmechanismtoguidethemodeltounderstandthesyntaxandsemanticsofsourcecodestatementsandinter-statementcontextualfeatureswhenencodingandmakethemodelfocusonandalignthesourcecodestatementswhendecoding,soastoimprovemigration
6、performanceofsourcecode.Empiricalstudiesareconductedontherealprojectdataset,namelyCodeTrans,andmodelperformanceisevaluatedbyusingfourmetrics.TheexperimentalresultshavevalidatedtheeffectivenessofCSMATandtheapplicabilityofthecode-statementmaskedattentionmechanismtopre-trainedmodels.Key words:codestate
7、ment;mask;codemigration;machinetranslation;attentionmechanism1引言随着计算机软件和硬件的发展,编程语言也快速更新迭代.为了让传统平台的软件项目适应新的业务场景,开发人员需要用新的编程语言重写软件项目,这计算机系统应用ISSN1003-3254,CODENCSAOBNE-mail:ComputerSystems&Applications,2023,32(9):7788doi:10.15888/ki.csa.009217http:/www.c-s-中国科学院软件研究所版权所有.Tel:+86-10-62661041基金项目:国家自然科学
8、基金(61902015,61872026)收稿时间:2023-02-14;修改时间:2023-03-14;采用时间:2023-03-30;csa 在线出版时间:2023-06-09CNKI 网络首发时间:2023-06-12SystemConstruction系统建设77一过程称为代码迁移.然而,软件项目代码量十分庞大,不同编程语言有着不同的功能特性,这使得开发人员迁移源代码既耗时又容易出错.例如澳大利亚联邦银行花了大约 7.5 亿美元和 5 年时间将其代码库从 COBOL迁移至 Java1.为此,研究人员提出源代码迁移技术,期望将源代码从一种编程语言转换至另一种编程语言,以减轻开发人员迁移源
9、代码的负担.随着神经网络技术的发展,神经机器翻译(neuralmachinetranslation,NMT)模型在自然语言翻译任务中取得了优异的成绩2,3,促使着研究人员探索使用神经机器翻译模型迁移源代码的可能性.例如,Chen 等人4提出了基于语法树的 tree-to-tree 模型,该模型的树编码器理解源代码抽象语法树(abstractsyntaxtree,AST),带有注意力机制的树译码器模型对齐并转换源代码AST 节点为目标代码 AST 节点,进而生成目标代码 AST.Shiv 等人5采用 Transformer 模型改进了 tree-to-tree模型架构,并提出了适用于 Trans
10、former 模型的树节点位置编码方式.然而此类模型受限于语法树:一方面抽象语法树会省略部分语义节点,例如有些编程语言的抽象语法树会把“+”“”“=”等符号抽象化为“BinOpSub”节点,不能表现出源代码的语义特征6.另一方面具体语法树(concretesyntaxtree,CST)尽管能完整地表征源代码语法和语义,但是其节点多且层数深,模型难以有效地从中提取代码特征.Feng 等人7使用六种编程语言和自然语言数据集,并采用掩码语言建模任务和替换词符检测任务预训练了 Transformer 编码器模型CodeBERT,让模型通过代码文本学习语法和语义.Lu等人8提出了代码翻译任务,并将代码文
11、本作为输入,让 Transformer 和 CodeBERT 模型学习代码文本的转换规则.然而有研究表明,此类模型忽略了代码结构特征,导致模型难以理解并迁移源代码911.为了解决此问题,Guo 等人12把数据流作为模型输入,并采用数据流的边预测任务和数据流节点-代码变量对齐等任务预训练了 Transformer 编码器模型 GraphCodeBERT,旨在用数据流引导模型更好地理解源代码.从这些源代码迁移工作可以得知,目前研究通常的做法是从语法树、数据流或者模型的角度提升模型迁移源代码的性能,很少考虑到为源代码迁移任务设计理解代码结构特征的模型,导致这些模型在源代码迁移任务中的性能不佳.为了解
12、决此问题,本文提出模型可以在编码时理解源代码语句的语法和语义以及语句级别上下文特征,并在译码时关注并对齐源代码语句,进而提升迁移源代码的性能.图 1 给出了代码迁移数据集中的一组C#和 Java 代码语句关联性样例,可以发现 C#的构造函数声明语句对应 Java 的构造函数声明语句和父类构造函数调用语句,C#的赋值语句对应 Java 的赋值语句.该样例表明源代码和目标代码的语句有着语法和语义的联系.一些研究也证明了神经网络模型理解编程语言的语法和语义上的可行性.例如,Hindle 等人13验证了代码是一种比自然语言更具备规则的语言,因此代码语句可以使用语言模型来建模;Zhang 等人14通过实
13、验验证了代码语句的语法是有规则的,并且代码语句序列同样具有规则及顺序依赖关系.此外,神经机器翻译研究中常用的 Transformer 模型3有着掩码注意力机制(maskedattentionmechanism),该机制能依据掩码矩阵来引导模型关注指定的词符特征12.因此,在模型迁移源代码至目标代码时,可让掩码注意力机制引导模型对齐并转换源代码语句的语法和语义特征,提升源代码迁移的性能.public XPathRuleElement(string ruleName,int ruleIndex):base(ruleName)this.ruleIndex=ruleIndex;public XPath
14、RuleElement(String ruleName,int ruleIndex)super(ruleName);this.ruleIndex=ruleIndex;C#代码Java 代码图 1一组 C#和 Java 代码语句关联性样例基于上述讨论和研究的启发,本文在 Transformer模型基础上提出了一种基于代码语句掩码注意力机制的源代码迁移模型 CSMAT(code-statementmaskedattentionTransformer).该模型的执行流程分为 3 个步骤:首先预处理代码文本,用自定义的语句词符标识代码语句;随后,编码器在掩码矩阵的引导下,其自注意力(self-atte
15、ntion)机制能够关注到源代码语句的语法和语义以及语句间上下文特征;最后,译码器在掩码矩阵的引导下,其跨层注意力(cross-attention)机制能够关注并对齐源代码语句,进而生成目标代码.为了验证模型性能,本文基于真实项目数据集 Code-Trans 设计了源代码迁移任务,并采用 BLEU、完全匹计 算 机 系 统 应 用http:/www.c-s-2023年第32卷第9期78系统建设SystemConstruction配率、CodeBLEU 和词法正确率 4 个指标对模型输出结果进行评估.对比实验结果显示 CSMAT 在 4 个指标的分值均优于对比模型,并且消融实验验证了代码语句掩码
16、注意力机制的有效性.此外,预训练模型的改进实验验证了代码语句掩码注意力机制的适用性.本文的模型和实验结果公布在:https:/ 等人15从代码的基本类型、变量、字面量和表达式等角度提出了 Smalltalk 到 C 语言的翻译器.Bravenboer 等人16设计了程序转换规则语言Stratego 和程序转换工具集 XT.石学林等人17提出了数据流转换规则和控制流转换规则,并通过 C2J 平台将 COBOL 转换至 Java.刘静18提出了词法语法分析、语法树存储结构和翻译处理等方式实现了 Verilog至 MSVL 的转换.然而,以上方法需要开发人员提供准确且完备的代码迁移规则,使得模型的构
17、建低效且容易出错.为了解决上述问题,研究人员采用基于短语的统计机器翻译(phrase-basedstatisticalmachinetransla-tion,PBSMT)技术19自动构建模型.例如,Nguyen 等人20用分词器将代码转换成词符序列,然后基于PBSMT 技术训练了 Java 至 C#的迁移模型.但这些模型仅输入代码文本,没有考虑代码结构特征,导致模型迁移性能不佳.Karaivanov 等人21利用短语表、编程语言前缀语法规则和 API 映射规则等特征结合 PBSMT模型,设计了 C#至 Java 的迁移模型.Nguyen 等人22定义了粗粒度的语法单元模板(syntaxemes
18、)和细粒度的语义单元模板(sememes),提出了分而治之的 Java 至C#迁移模型.该模型先迁移源代码为语法单元模板,再依据该模板内的语义单元模板生成具体的目标代码.从改进的研究可以发现,基于 PBSMT 技术的源代码迁移模型需要通过人工定义规则或者构建模板的方式提升模型的迁移性能.后来,神经网络机器翻译模型取得了成功2,3,许多研究人员开始探索该技术用于源代码迁移任务的可能性.例如,Chen 等人4提出了 tree-to-tree 的抽象语法树翻译模型,该模型能将源代码抽象语法树转换至目标代码抽象语法树.Feng 等人7使用 6 种编程语言和自然语言,并采用掩码语言建模任务和替换词符检测
19、任务预训练了 Transformer 编码器模型 CodeBERT.Lu 等人8收集了代码翻译数据集 CodeTrans,并基于该数据集训练了 Transformer 和 CodeBERT 模型.该数据集可以用于评估模型迁移代码的性能.Guo 等人12在 Code-BERT 基础上采用掩码语言建模任务、数据流的边预测任务和数据流节点-代码变量对齐任务预训练代码文本、自然语言以及代码数据流,提出了 GraphCode-BERT 模型.从这些源代码迁移相关工作可知,目前研究通常从语法树、数据流或者模型的角度提升模型性能,很少考虑到为源代码迁移任务设计理解代码结构特征的模型.为此,本文在 Trans
20、former 模型的基础上提出了一种基于代码语句掩码注意力机制的源代码迁移模型CSMAT,以提升 Transformer 模型迁移源代码的性能.3模型概述本文把源代码迁移任务看作是代码序列到代码序列的转换任务.该任务可以细分为两个阶段:首先,模型的编码器理解源代码语句的语法和语义以及语句间的上下文,进而提取源代码的特征;其次,模型的译码器关注并对齐源代码语句,生成符合目标编程语言语法规则的代码.本文设计了代码语句的预处理方法,用自定义的词符标识代码语句.为了实现源代码迁移任务的两个阶段,本文在 Transformer 模型基础上提出了基于代码语句掩码注意力机制的源代码迁移模型 CSMAT,模型
21、架构如图 2 所示.本节将详细讲述预处理方法和CSMAT 模型.3.1 预处理方法不同编程语言所要求的书写格式不同,而神经网络的性能会受到不同格式代码的影响.为了统一代码格式并标识代码语句,本文提出预处理方法规范化代码文本格式,该方法分为两步:(1)格式化代码文本,统一代码格式;(2)加入语句词符,标识代码语句.为了统一代码格式,本文使用了代码格式化工具Astyle(https:/ 1给出了一组 Java 和 C#的代码片段,表中“原始代码文2023年第32卷第9期http:/www.c-s-计 算 机 系 统 应 用SystemConstruction系统建设79本”经格式化后如表中“格式化
22、文本”所示,可以发现格式化后的代码有着相同的换行样式和缩进样式.因为 Java 和 C#的缩进样式不会改变代码语义,本文删除了缩进以压缩代码文本长度.随后,本文在每行代码前加入了一个自定义的语句词符以标识该行代码语句.由于 CSMAT 模型的译码器是依据文本顺序逐个词符进行预测的神经网络模型,因此在语句前加入词符可以帮助译码器先关注并对齐源代码语句,后依据对齐的源代码语句生成目标代码.加入语句词符的代码如表 1“加入语句词符的文本”所示.代码语句完成标识以后,本文删除换行符以进一步压缩代码文本长度,并在代码文本首尾分别加入和词符以明确代码首尾位置.最后,代码文本经过CSMAT 模型分词器转换为
23、词符序列,再依据分词器的单词表索引转换为索引序列.该序列送入 CSMAT 模型后,模型开始训练并更新参数.编码器位置嵌入层词嵌入层多头注意力机制相加,层规范化点式前馈网络相加,层规范化译码器多头注意力机制相加,层规范化点式前馈网络相加,层规范化多头注意力机制相加,层规范化全连接层X=,S1,S2,S3,Y=,L1,L2,V1K1Q1V2K2Q2V3K3Q31212图 2CSMAT 模型架构图表 1一组 Java 和 C#代码片段以及预处理后的文本格式编程语言原始代码文本格式化文本加入语句词符的文本JavapublicXPath(Parserparser,Stringpath)this.pars
24、er=parser;this.path=path;elements=split(path);publicXPath(Parserparser,Stringpath)this.parser=parser;this.path=path;elements=split(path);publicXPath(Parserparser,Stringpath)this.parser=parser;this.path=path;elements=split(path);C#publicXPath(Parserparser,stringpath)this.parser=parser;this.path=path;
25、elements=Split(path);publicXPath(Parserparser,stringpath)this.parser=parser;this.path=path;elements=Split(path);publicXPath(Parserparser,stringpath)this.parser=parser;this.path=path;elements=Split(path);3.2 多头注意力机制本文提出的源代码迁移模型 CSMAT 使用了Transformer 模型.得益于 Transformer 模型多头注意力机制,模型能关注并获取同一序列或不同序列中词符之间的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 代码 语句 掩码 注意力 机制 源代码 迁移 模型
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【自信****多点】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【自信****多点】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。