[论文解读] CodeBERTScore: Evaluating Code Generation with Pretrained Models of Code
CodeBERTScore 是一种新颖的代码生成评估指标,通过将生成的代码及其自然语言上下文整合到预训练代码模型的上下文嵌入中,扩展了 BERTScore。该指标在四种编程语言中均表现出比现有指标更高的与人类偏好和功能正确性的相关性,优于 BLEU、CodeBLEU 和基于执行的基线方法。
Since the rise of neural natural-language-to-code models (NL->Code) that can generate long expressions and statements rather than a single next-token, one of the major problems has been reliably evaluating their generated output. In this paper, we propose CodeBERTScore: an evaluation metric for code generation, which builds on BERTScore (Zhang et al., 2020). Instead of encoding only the generated tokens as in BERTScore, CodeBERTScore also encodes the natural language input preceding the generated code, thus modeling the consistency between the generated code and its given natural language context as well. We perform an extensive evaluation of CodeBERTScore across four programming languages. We find that CodeBERTScore achieves a higher correlation with human preference and with functional correctness than all existing metrics. That is, generated code that receives a higher score by CodeBERTScore is more likely to be preferred by humans, as well as to function correctly when executed. We release five language-specific pretrained models to use with our publicly available code. Our language-specific models have been downloaded more than 1,000,000 times from the Huggingface Hub. Our code and data are available at https://github.com/neulab/code-bert-score
研究动机与目标
- 为解决现有代码生成评估指标依赖词法匹配且无法捕捉语义等价性的局限性。
- 通过建模生成代码与其自然语言输入上下文之间的一致性来改进评估。
- 开发一种与人类偏好和功能正确性相关性更强于以往方法的评估指标。
- 创建一种可扩展的无监督评估方法,无需测试用例或执行过程,降低对昂贵人工标注数据集的依赖。
提出的方法
- CodeBERTScore 使用在代码上微调过的语言模型对生成代码和参考代码进行编码,包括代码前的自然语言指令或注释。
- 通过计算生成代码和参考代码标记的上下文嵌入之间的逐标记余弦相似度,捕捉超越词法匹配的语义对齐。
- 使用最佳匹配标记对计算精确率和召回率,重点在于上下文感知对齐而非精确的标记重叠。
- 将自然语言上下文整合到编码过程中,以更好地建模意图和程序语义。
- 使用多语言、语言特定的 CodeBERT 风格模型,并在代码上进行微调,支持跨语言评估。
- 该方法完全无监督,无需执行测试或人工编写测试用例,具备广泛适用性。
实验结果
研究问题
- RQ1一种将自然语言上下文纳入考量的代码生成评估指标,是否能比现有指标实现与人类偏好的更高相关性?
- RQ2通过上下文嵌入建模语义相似性,是否相比 n-gram 或 AST 基于的指标能更好地对齐功能正确性?
- RQ3与 SOTA 基线(如 BLEU、CodeBLEU 和基于执行的评估)相比,CodeBERTScore 在多种编程语言中的表现如何?
- RQ4基于预训练代码模型的指标是否能在多样化的代码生成场景中超越依赖精确词法或结构匹配的指标?
- RQ5在编码过程中包含自然语言输入在多大程度上提升了代码质量的评估效果?
主要发现
- CodeBERTScore 与人类偏好的相关性显著高于所有先前指标,包括 BLEU、CrystalBLEU、CodeBLEU 和基于执行的基线。
- 在 CodeBERTScore 中得分更高的生成代码,在执行时更可能具备功能正确性,表明其与功能正确性具有强相关性。
- 该指标在四种编程语言(Java、Python、JavaScript 和 C++)中均优于现有方法。
- 作者发布的五个语言特定的预训练模型在 HuggingFace Hub 上的下载量已超过 1,000,000 次,表明社区采纳程度高。
- CodeBERTScore 在评估非完全相同但语义等价的代码时表现优异,能正确偏好功能正确实现,而非仅语法相似但错误的实现。
- 该方法在实践中计算可行,因为每模型仅需一次前向传播,且鉴于现代机器学习流水线中 GPU 的广泛可用性,GPU 使用是合理的。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。