[代码评估-指标]CodeBLEU: a Method for Automatic Evaluation of Code Synthesis
全文总结
这篇论文提出了一种新的代码合成自动评估指标CodeBLEU。
研究背景
- 背景介绍: 这篇文章的研究背景是代码合成领域缺乏合适的评估指标。现有的评估指标如BLEU和完美准确率存在诸多不足,无法全面衡量代码的质量。
- 研究内容: 该问题的研究内容包括提出一种新的评估指标CodeBLEU,并通过实验验证其在代码合成任务中的有效性。
- 文献综述: 该问题的相关工作有:BLEU最初用于机器翻译评估,忽略了代码的语法和语义特征;完美准确率过于严格,低估了具有相同语义逻辑的不同输出;计算准确率在实际应用中通用性和实用性较弱。
核心内容
为何不采用BLEU评估? * 评估方法间的差异: 采用基于n-gram的BLEU指标来衡量机器翻译质量时会引入简洁性惩罚机制;相比之下,在编程语言解析方面使用基于n-gram的方法可能会忽略语法信息的重要作用。
- 编程语言与非编程语言间的区别: 编程语言仅包含有限数量的关键字、分层结构以及明确的操作指令;而非编程语言则拥有庞大的词汇量和灵活的操作顺序。此外,在非编程领域应用基于n-gram的方法时会忽略语法层面的关键属性。
CodeBLEU的定义 * 公式: CodeBLEU是原始BLEU、加权n-gram匹配、语法AST匹配和语义数据流匹配的加权组合。
* 组成部分: * Match_df: 语义数据流匹配,通过数据流结构衡量候选和参考代码之间的语义相似性。
* Match_ast: 语法AST匹配,通过比较候选和参考代码的子树来评估语法结构。
* BLEUweight: 加权n-gram匹配,考虑不同n-gram的权重。
* BLEU: 标准BLEU计算。
加权n-gram匹配技术 * 具体步骤: 计算候选代码与参考代码之间的n-gram重叠程度,并在关键词上给予更高的权重。
* 简短惩罚机制: 通过简短惩罚机制来防止候选代码出现过于简短的情况。
Syntax AST Matching * Algorithm Overview: The system employs a method that involves traversing the candidate and reference ASTs to identify matching substructures. This approach calculates the ratio of matched substructures relative to the total number of possible substructures. * Benefits: This method is effective in detecting semantic discrepancies, such as missing tokens or type mismatches, thereby enhancing the overall accuracy of code analysis.
语义数据分析匹配 * 计算方法: 将程序代码转换为数据流向图,其中节点代表变量,边表明变量的值来源。
- 步骤: 对应获取代码流向图,对流程中的变量进行标准化处理,并计算匹配的数据流向量在总流向量中的占比比例。
实验规划 * 目标: 将文本转化为可执行的代码并实现自动化翻译与精炼功能。
- 系统比较: 研究并比较多种代码生成机制及其性能差异。
- 数据源: 基于广泛认可的公开数据集构建训练与测试体系。
- 评测指标: 通过计算皮尔逊相关系数来衡量CodeBLEU分数与人工评价的一致性
结果与分析
- CodeBLEU的可靠性: 通过多次测试25个代码片段间的重复度计算结果表明, CodeBLEU得分之间的差异具有显著稳定性, 其方差值处于合理范围之内。
- 相关性分析: 在文本生成任务、文本到代码转换任务以及代码翻译任务三个关键阶段, CodeBLEU与人类评估系统之间的相关系数均优于传统 BLEU 指标及其完美准确率基准。
- 消融研究: 研究发现, 语法 AST 匹配策略与语义数据流匹配策略在文本生成至代码转换及代码翻译这两个主要环节中, 均显著优于传统 BLEU 指标及其完美准确率基准。
结论
该论文开发了一种新型代码合成评估指标CodeBLEU,并对其实现过程进行了详细探讨。该方法综合考量了浅层匹配、语法层面的对应关系以及语义层面的意义对应,并结合生成式模型与判别式模型的优势进行优化设计。通过实验结果表明,在文本转码至代码、代码翻译以及代码精炼等多维度任务中均展现了良好的有效性及其与人类评估结果的相关性特征。此外,在多轮对话系统开发场景下也取得了不错的效果表现
这篇论文通过阐述创新性评估标准为程序生成技术的研究构建了有效的工具体系,并在理论价值与应用价值方面均展现了显著优势
核心速览
研究背景
- 研究问题:本文旨在探讨在代码生成任务中自动化地评估代码质量的方法。现有的常用指标如BLEU score和perfect accuracy在应用中存在局限性。
- 研究难点:该问题的主要难点在于现有评价方法的局限性。具体而言,在使用BLEU时会忽略代码的关键术语、语法结构及语义关系;而perfect accuracy过于-stringent, 容易低估具有相同语义但不同输出形式的成果;此外, computational accuracy缺乏普适性和实用性, 需要在不同的编程语言及其编译环境方面进行定制。
- 相关工作:已有研究表明,在编码合成领域已有的关键指标包括A类n-gram指标(例如4-gram BLEU)、perfect accuracy以及computational accuracy。
研究方法
这篇论文提出了一种新的自动评估指标CodeBLEU,用于解决代码合成任务中的评估问题。具体来说,
CodeBLEU的概念:CodeBLEU被定义为基于原始_BLEU等技术的基础,并通过加权组合的方式融合了多种匹配方法。
CodeBLEU is composed of α multiplied by the BLEU score, β multiplied by the weighted BLEU score, γ multiplied by Matchast, and δ multiplied by Matchdf.
其中,在_BLEU_评估体系下采用标准的_BLEU_评估机制计算得出,BLEUweight_是基于对假设代码与参考代码中的令牌进行对比,并赋予不同权重以实现加权_n-gram匹配的过程;而_Matchast_则是针对语法上的抽象语法树(Abstract Syntax Tree)进行匹配的过程;最后,_Matchdf_则是对语义数据流进行分析与比较的过程

基于关键词的重要性考量而发展而来的是加权n-gram匹配。其中精度的计算方式可表示为以下公式:
该算法通过加权平均的方式计算每个候选片段的时间序列相似度分数pn. 具体而言, pn等于所有候选片段中包含位置i到i+n的时间序列片段被剪裁后的计数总和与所有候选片段中包含位置i到i+n的时间序列片段被计数总和的比值
其中n代表的是一个长度为n连续词组中的每一个元素数目
语义AST匹配 :通过分析抽象语法树(AST)来获取代码语义信息的具体流程如下:首先从候选节点中提取与参考节点相关的所有子结构;然后统计其中与目标模式完全匹配的子结构数目;最后根据统计结果生成相应的匹配报告
Matchast represents the ratio of Countclip in Tcand to the total number of Tref.
其中,“Count(Tref)”代表基于原始语法树(Reference Abstract Syntax Tree, Tref)中的全部子树数目,“Countclip(Tcand)”则衡量能够匹配到候选语法树(Candidate Abstract Syntax Tree, Tcand)中的潜在子结构数目。
代码语义相似性分析:通过从抽象语法树(AST)提取变量序列,并生成标准化的数据流图来评估代码的语义相似性得分。具体步骤包括:从AST提取变量序列、生成标准化的数据流图、对数据流节点进行标准化处理以及计算代码语义相似性得分。公式为:
匹配度表示为被引用次数统计(DF候选)除以参考文献中的出现次数统计(DF参考)。
其中用于表示
实验设计
- 数据集 :实验使用了三个代码合成任务的数据集:文本到代码(Java)、代码翻译(从Java到C#)和代码细化(Java)。文本到代码任务使用Iyer等人发布的数据集,包含100k训练样本、2k验证样本和2k测试样本。代码翻译任务使用从多个开源项目中爬取的数据集,共包含11.8k方法对,去掉重复后分为0.5k的开发集和1k的测试集。代码细化任务使用Tufano等人发布的数据集,包含小集合和中集合两个子集。
- 系统选择 :每个任务选择了3到4个标准系统进行评估。文本到代码任务包括Seq2Seq、Seq2Action+MAML1、GPT22和CodeGPT3。代码翻译任务包括PBSMT、Transformer、Transformer+CodeBERT4和Human。代码细化任务包括LSTM、Transformer、Transformer+CodeBERT4和Human。
- 人类评估 :邀请了一组由10名熟悉Java和C#的人类评委进行评估。每个输入与四个输出配对,共200对输入输出对。评委使用一个UI软件随机查看输入输出对,并按照1(非常差)到5(非常好)的评分标准为每个输出打分。
结果与分析
主要结果:在文本到代码以及相关的机器翻译过程中(即文本到代码)、自动完成(即机器翻译)以及自动化细化(即自动化处理)的过程中,在各个系统间进行了多维度的性能评估。实验结果显示,在各系统间的性能对比中发现:Code_BLEU与人类评估之间的相关性明显优于其他两个指标。

对可靠性的研究:将测试数据划分为每隔一定数量的一组(即每隔25个句子),然后分别计算每个分组中的CodeBLEU分数。实验结果表明,在不同系统之间获得的分数存在显著差异(即得分差异显著),并且这些差异落在了一个合理的范围内(即方差在合理范围内),从而证实了CodeBLEU分数的有效性(即证明了CodeBLEU得分的可靠性)。
该研究对BLEU分数、完美准确度以及Code\_BLEU分数与人类评估结果之间的皮尔逊相关系数进行了系统性的考察。研究表明,在各个测试任务中,Code\__BLEU分数与人类评估结果之间的正向关联显著高于传统BLUE指标的表现,并且,在多数测试场景下这一关联表现同样优于完美准确度指标。

消融研究

总体结论
该论文提出了一种新型的代码合成评估指标CodeBLEU, 其主要特点在于能够综合考量代码的表层匹配性、语法一致性和语义契合度。基于三个典型应用场景的实验研究, 该指标展现出显著的有效性与合理性, 并且通过对比分析证实了其相较于现有方法的优势所在。展望未来的研究, 本团队计划进一步优化语法与语义匹配评估机制, 并拓展CodeBLEU的应用范围以体现其实用价值
论文评价
优点与创新
论文采用了加权n-gram匹配方法:为不同长度的n-gram赋予特定权重后,在提升关键短语匹配得分方面取得了显著成效;这一改进有效弥补了传统BLEU算法在代码合成评估中忽视关键词重要性的缺陷。
基于抽象语法树(AST)分析代码语义:通过识别代码子树结构间的相似性特征;该方法能够精准捕捉诸如token缺失及数据类型错误等语法错误。
采用语义数据流模型:通过对代码进行语义关系建模;该系统能够量化候选代码与参考代码之间的语义相似程度;从而实现对候选代码语义正确性的精确评估。
研究构建了一个新型评价体系:将原始BLEU指标、加权n-gram匹配、语法AST匹配及语义数据流匹配进行科学融合;形成了一个综合考量多维度编码质量的新指标体系。
经过与人类评估者的相关性测试:实验结果表明该评价体系在文本到代码转换任务、自动编码任务以及细化优化任务等方面均优于传统 BLEU 指标和精确率指标。
不足与反思
该论文指出未来将深入探讨语法与语义匹配,并探索更多相关任务以体现其实用价值。
关键问题及回答
问题1: CodeBLEU 是在其定义框架内整合原始 BLEU 指数、加权 n-gram 匹配、语法 AST 匹配以及语义数据流匹配的吗?
CodeBLEU的定义如下:

该Code的BLEU值=α乘以_BLEU_加上_β_乘以_BLEUweight_加上_γ_乘以_Matchast_加上_δ_乘以_Matchdf
其中,BLEU通过标准的BLEU计算方法获得,BLEUweight是通过比较假设代码与参考代码令牌并赋予权重后得到的加权n-gram匹配度,Matchast是语法AST匹配度,Matchdf是语义数据流匹配度。具体而言,加权n-gram匹配通过对不同n-gram及关键词赋予不同权重来体现关键词的重要性;语法AST匹配通过比较候选代码与参考代码的抽象语法树(AS
T)子树来评估语法正确性;语义数据流匹配则通过构建数据流图来衡量候选代码与参考代码之间的语义相似程度。
问题2:在实验中,CodeBLEU与BLEU和完美准确度的相关性如何?
通过实验结果可以看出,在文本转码与编码翻译两项任务中进行比较分析后发现:CodeBLEU指标较传统_BLEU_指标表现出显著优势(提升幅度分别为+2.9%至+4.8%),并且相较于完美准确度指标同样具有较大的提升空间(提升幅度为+4.7%至+5.6%)。针对代码细化任务进行说明时发现:Code_BLEU 指标较传统 BLEU 指标提升幅度为+1.9%,相较于完美准确度则提升了约0.4%(即 +0.4%)。这些数据表明该方法在衡量代码质量方面具有显著优势,并且其在语法与语义匹配方面的表现同样令人瞩目
问题3:CodeBLEU的加权n-gram匹配是如何具体实现的?
加权n-gram匹配的精度计算公式为:
pn等于分子部分与分母部分的比值。其中分子部分是对候选集中每个元素应用CountClip函数后累加的结果;分母部分是对候选集中每个元素在相应位置处进行计数并累加的结果。
其中n代表n-gram序列的长度,在文本序列中从第i个字符开始延伸至第i+i^n的位置形成一个长度为n的连续序列,在候选文本与参考文本之间共同存在的最多数量的一个特定区间内,在候选文本与参考文本之间共同存在的最多数量的一个特定区间内,在候选文本与参考文本之间共同存在的最多数量的一个特定区间内,在候选文本与参考文本之间共同存在的最多数量的一个特定区间内,
\mu_{ni}则分别代表不同关键词及其对应的n-gram单元赋予各自的权重系数,并且在本文设定中,默认情况下每个关键词单元都被赋予了其他单元权重值为5倍的标准。
通过这种加权机制能够更加科学地反映各个关键信息对整体评估结果的影响程度,
从而使得整个评估指标更为准确地反映实际性能水平。

