NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模
人工智能 (AI) 融入编程生态系统彻底改变了该领域,并在代码翻译方面取得了特别重大的进展。本文的目的是讨论一系列先前的研究,并分析直接从这些基础研究中获得的结果。
需要强调的是,这里提出的结论不仅限于这些发现的简单汇编;它们代表了从引用的研究中提取的数据与作者进行的原始研究之间的融合。这种方法产生了丰富的综合,将现有知识与新观点相结合,并为人工智能辅助代码翻译领域做出了重大贡献。
对于这项研究,选择了在代码转换任务中表现出更大潜力的大型语言模型 (LLM)。这一选择的目的是回答主要研究问题 (RQ),探索 LLM 在代码翻译中的有效性,了解翻译错误的性质,并研究缓解这些困难的潜在解决方案。
代码翻译旨在将源代码从一种编程语言 (PL) 转换为另一种编程语言 (PL)。鉴于大型语言模型 (LLM) 在代码合成方面的良好能力,研究人员正在积极探索其自动化代码翻译的潜力。
了解 LLM 的局限性对于推进基于 LLM 的代码翻译至关重要。为此,正在进行大规模研究,以调查 LLM(包括一般 LLM 和代码 LLM)在不同语言对(包括 C、C++、Go、Java 和 Python)之间翻译代码的能力。
1、通用 LLM
通用 LLM 是在大量文本信息数据集上预先训练的模型,涵盖自然语言和编程代码。它们旨在应用于广泛的任务。引用的研究和论文侧重于最先进的通用 LLM,其容量高达 200 亿个参数,如 Hugging Face 的 Open LLM 排行榜上所列,包括 GPT-4、Llama2、TB-Airoboros 和 TB-Vicuna 等模型。它们代表了多种高度通用的 AI 模型。
2、代码 LLM
代码 LLM 的开发目的明确:促进和自动化与编程直接相关的任务。引用的研究和论文侧重于三个最具创新性和最近发布的代码 LLM:CodeGen、StarCoder 和 CodeGeeX,它们代表了 AI 在编码任务方面的专业化最新成果。
3、LLM 在代码翻译中的有效性
除了 GPT-4 和 StarCoder,其他所有模型的表现都不尽人意。
每个代码翻译样本的平均测试次数与不成功的翻译之间存在很强的相关性(所有模型的相关系数 (r) 范围为 0.64 到 0.85)。也就是说,现有的测试集越严格,就越能评估翻译是否保留了功能。
在这项研究 中,在所有列出的 LLM 中执行了 43,379 次翻译,并根据代码样本提供的测试来衡量成功率。
该研究还强调了 LLM 在实际项目和精心设计的基准之间的表现形成鲜明对比。GPT-4 在实际项目中的成功率为 8.1%,而其他模型根本没有成功。
代码翻译以及其他涉及 LLM 的任务中经常遇到的挑战之一是上下文窗口的限制。一项详细研究(可在此处获得)调查了更广泛的输入上下文对语言模型性能的影响。
当关键信息被重新定位时,它们的有效性会明显下降,这表明模型很难在如此大的数据范围内有效管理信息。当重要信息位于广泛上下文的中心时,这个问题会更加严重。这一现象强调,仅仅扩展输入上下文不足以规避这些 LLM 处理限制。
尽管 GPT-4 与其他模型相比表现出更优异的绝对性能,但当相关信息位于输入上下文的中心部分时,其性能仍然会下降。
4、了解基于 LLM 的代码翻译中的错误
大多数 LLM 在代码翻译任务中都举步维艰,即使使用精心设计的基准测试,其成功率也有限,在实际项目中的表现甚至更差。
下图显示了此实验针对每个模型的结果,这些结果针对所有编程语言 (LP) 进行了累积。
从这些结果中,我们观察到大多数不成功的翻译都会导致编译错误(77.8%,这表明通用和代码 LLM 都难以理解代码的语法。
第二个最常见的影响是功能错误,表明代码在语法上是正确的,并且无一例外地执行,但没有保留源语言中实现的功能。
结果还强调了AI驱动的代码翻译中的几个关键挑战:
- 输入解析:很大一部分错误(18.1%)源于 LLM 无法准确解析输入。
- 数据类型选择:正确选择目标语言中的数据类型至关重要,占所有错误的 11.5%。
- 语法复制:LLM 可能无法充分复制源语言的语法,导致 2.4% 的情况出现错误。
- 句法和语义差距:大约 30.5% 的错误是由于源语言和目标语言之间的不兼容造成的,其中 24.3% 的错误是由于违反了目标语言(语言范式)。
- 逻辑和依赖性错误:代码逻辑问题和缺少依赖关系(尤其是导入)占错误的 24.2%。
- API 调用翻译:在语言之间替换 API 调用可能会引入错误,这表明找到等效 API 的复杂性。
- 现实世界的复杂性:现实世界的代码带来了额外的翻译挑战,例如处理方法重载和注释等高级功能,而这些功能在基准测试中并不存在。
- 语言特征:翻译的成功率受到源语言和目标语言特定特征的强烈影响,例如类型系统和对元编程的支持。
这些发现强调了代码翻译的复杂性,以及 LLM 需要更好地理解不同编程语言的句法和语义细微差别,以提高翻译的准确性。
5、缓解挑战和困难的潜在解决方案
在代码翻译方面,开源和闭源 LLM 都有很大改进空间。对于闭源代码模型(例如 GPT-4),用例(真实世界项目)的日益复杂要求提示策略(为语言模型提供输入文本,指导其产生特定类型的响应的行为)有所改进。
一个有前途的研究方向可能涉及创建相互建设性的提示,这些提示遵循连贯和合乎逻辑的信息流,并且可以包含相关的辅助信息,例如变量声明或函数签名,以在翻译后保持完整性和一致性。
对于开源 LLM,提高性能可能涉及微调,其中不同的专门模型经过精心训练以解决翻译过程的不同方面(特别是与本文中检查的错误类别相关的方面)。通过利用精确和微调的 LLM 的力量,每个 LLM 都专注于代码翻译中固有挑战的独特子集,可以获得更全面的理解。
6、结束语
尽管当代的大规模语言模型 (LLM) 既包括通用平台,也包括专门用于代码的平台,在自动化代码翻译方面面临着巨大的挑战,尤其是面对现实世界软件项目固有的复杂性时,但它们尚未达到企业环境所要求的忠实和高质量代码转换的效率水平。
然而,随着深度学习模型的不断进步,人们预计在不久的将来,LLM 的能力将得到增强,以克服当前的障碍,提供更强大、更准确、更经济可行的代码转换。
显然需要进行更多的研究,而该领域的增长潜力表明,重大变化可能会改变软件开发实践。
原文链接:Efficiency of AI in Code Translation
BimAnt翻译整理,转载请标明出处