代码生成大语言模型的性能与可解释性分析:基于Rosetta Code数据集的跨语言翻译研究

【字体: 时间:2025年09月16日 来源:Neurocomputing 6.5

编辑推荐:

  本研究针对大语言模型(LLM)在代码生成任务中的可靠性和可解释性挑战,系统评估了15个开源LLM在代码翻译任务中的表现。研究人员采用Rosetta Code数据集,通过CodeBLEU、chrF、METEOR等量化指标和Feature Ablation、Shapley Value Sampling等可解释性技术,发现DeepSeek-Coder-V2和Yi-Coder等模型在语法正确性和代码质量方面表现优异,同时揭示了LLM对特定提示组件的敏感性。该研究为开源代码生成LLM的能力与局限提供了定量和定性见解,对模型选择和理解LLM生成代码具有重要指导意义。

  

随着大型语言模型(LLM)越来越多地集成到软件开发工作流程中,理解它们在真实开发场景中的可靠性、错误模式和可解释性变得至关重要。传统代码翻译工具依赖既定语法规则进行转换,虽然在直接任务中提供速度和可预测性,但在细微语境中效果较差。相比之下,结合人工智能的方法利用LLM的语境理解能力,能够实现更准确和适应性更强的翻译。

当前研究存在明显空白:现有研究主要关注竞争性编程问题或标准库使用的功能正确性,对不同编程范式或特定软件开发任务(如代码转换)中LLM所犯错误类型缺乏深入洞察。研究通常评估专有的黑盒模型(如Codex),使得广大研究和开发社区难以复现发现、理解内部机制或贡献改进。缺乏对LLM如何处理多种编程语言和不同任务类型(如在受控环境中直接代码翻译与从高级需求生成代码)的系统评估,这使得跨语言比较变得困难。

为了解决这些问题,San Jose State University应用数据科学系的Vishnu S. Pendyala和Neha B. Thakur开展了一项深入研究,论文发表在《Neurocomputing》上。研究人员评估了15个开源LLM在代码翻译任务中的表现,重点关注两个关键选择标准:指令微调且参数量少于100亿的模型,以及与高效部署框架兼容的模型。

研究采用了多项关键技术方法:使用Rosetta Code数据集构建包含7种编程语言(C、C++、Golang、Java、JavaScript、Python和Rust)的17个日常编程任务的强大翻译数据集;采用4位量化技术显著减少内存使用并加速推理;使用CodeBLEU、chrF、METEOR和BLEU等指标测量翻译准确性;开发补充指标评估代码可提取性和语法正确性;计算无偏Pass@k指标评估LLM生成代码的功能正确性;应用Feature Ablation和Shapley Value Sampling等先进技术理解LLM的解释能力。

4.4.1. 结果

研究发现,代码正确率(CCR)随着LLM参数数量的增加而提高。所有LLM都紧密遵循提示指令,所有模型的代码提取率(CER)几乎都达到1.0。DeepSeek Coder V2是一个混合专家模型,拥有24亿活跃参数和157亿总参数,是最好的LLM,CCR为0.840395,Pass@1为0.684873。而StableCode的CCR为0.213783,Pass@1为0.196078,是表现最差的LLM。参数量接近90亿的Yi-Coder和CodeGeeX4是次优模型,CCR接近0.8,Pass@1分数非常接近0.65。

4.5.1. 结果

基于翻译指标的总结发现,平均而言,所有LLM的表现非常相似。仅使用翻译度量不足以区分LLM,但可能有效区分Rosetta Code任务。逻辑运算任务(用红线表示)很容易被LLM翻译,并且与Rosetta Code的参考翻译密切匹配。其METEOR度量的KDE图完全不同,峰值接近0.9,而其他任务的峰值低于0.8。

5.2. 结果

从总结的可解释性热图中发现,翻译代码的可解释性分数随着源代码行号的增加而减少。事实上,可解释性分数下降得如此之多,以至于后面的源代码行往往对所有语言的翻译代码概率产生负面影响。这种效应在特征消融和Shapley值采样中都观察到。源代码行与翻译代码行之间的交互模式是稀疏的,当它们代表相同的编程概念(如循环、表达式和逻辑流)时,显示出很强的可解释性分数。

6.2. 结果

在编译和检查LLM在首次传递中给出错误代码的后续代码后,结果显示,研究的总体CCR增加了0.1019。换句话说,在Rosetta Code数据集的3963个翻译任务中,LLM通过要求LLM解释错误然后修正错误,能够修正大约25%的错误。因此,通过错误反馈提示LLM,Rosetta Code任务的CCR提高了10%。Qwen2.5-Coder(两种规模)和DeepSeek Coder的CCR改善最大,而Stable Code、DeepSeek-Coder-V2和Yi-Coder(较小规模)的CCR改善最小。

研究发现,CCR和Pass@1的改善在不同目标编程语言之间并不均匀分布。一些目标编程语言从后续提示中受益更多。事实上,系统编程语言如Rust、Go和C在后续提示后CCR和Pass@1改善最大。这些语言在开发社区中以在编译期间具有详细的错误消息而闻名,这有助于LLM在代码中进行更正。像JavaScript和Python这样的语言,它们不被编译,依赖语法检查器在执行前识别错误,在后续后只有轻微的CCR和Pass@1收益。

研究结论表明,大型语言模型在代码翻译任务中表现出色,且其性能随着模型规模的增大而提高。通过可解释性技术,研究人员能够深入理解LLM如何处理代码翻译任务,发现初始源代码行和任务描述对翻译代码的影响最大。这些初始行提供了足够的上下文,使LLM能够生成准确的翻译,而后面的行影响较小。

更重要的是,当LLM生成的代码出现错误时,LLM能够解析编译器和检查器的错误反馈,并用自然语言表达错误。分析LLM提供的这些解释和更正,揭示了常见的语言特定错误,如C中缺少头文件或Java中缺少分号。提示工程在从LLM获取可用代码方面也起着关键作用。迭代提示等技术提高了LLM生成代码的质量。

这项研究的重要意义在于它为开源代码生成LLM的能力和局限性提供了宝贵的定量和定性见解。研究结果表明,通过适当的提示技术和错误反馈机制,LLM不仅能够生成高质量的代码翻译,还能够理解和修正自己的错误,这大大增强了它们在软件开发中的实用性和可靠性。此外,研究提供的可解释性分析方法为理解和改进LLM的代码生成过程提供了新的途径,对未来的研究和应用具有重要的指导意义。

相关新闻
生物通微信公众号
微信
新浪微博
  • 急聘职位
  • 高薪职位

知名企业招聘

热点排行

    今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

    版权所有 生物通

    Copyright© eBiotrade.com, All Rights Reserved

    联系信箱:

    粤ICP备09063491号