Enhancing Code Translation in Language Models with Few-Shot Learning via Retrieval-Augmented Generation

大型语言模型 (LLM) 的兴起极大地推动了代码翻译领域,实现了编程语言间的自动化转换。然而,这些模型在处理复杂任务时,因上下文理解不足而常显疲态。本文提出了一种创新方法,结合少样本学习和基于检索的技术,通过动态利用现有代码翻译库中的相关示例,指导模型进行新代码段的翻译。基于检索增强生成 (RAG) 的方法,通过实时提供的上下文示例,大幅提升了翻译质量。相较于传统微调方法,RAG 能利用现有代码库或本地代码语料库,无需大规模重新训练即可适应多样翻译任务。在包括 Starcoder、Llama3-70B Instruct 等开源模型及 GPT-3.5 Turbo 等商业模型在内的多样化数据集上进行的实验,显示了我们的方法在 Fortran 和 CPP 翻译中的显著优势。此外,我们还测试了不同数量的示例和嵌入模型,以验证方法的鲁棒性和有效性。

 https://arxiv.org/abs/2407.19619

点击公众号菜单加入大语言模型论文讨论

造原子弹的也来整活RAG了:RAG + Few Shot提升代码翻译效果_机器学习


今天这篇论文来自洛斯阿拉莫斯国家实验室,洛斯阿拉莫斯国家实验室是做什么的?很多人可能不太懂哈

洛斯阿拉莫斯国家实验室(Los Alamos National Laboratory, LANL)是美国一个重要的国家实验室,1943年为曼哈顿计划而建立,负责进行科学研究并发展了世界上第一枚原子弹 。

洛斯阿拉莫斯国家实验室在这篇论文中提出了一个RAG框架,目的是提升代码翻译任务中的少样本学习能力:维护一个丰富的代码翻译示例库,并能够根据输入的代码片段动态抓取最贴切的实例。

造原子弹的也来整活RAG了:RAG + Few Shot提升代码翻译效果_人工智能_02

上图展示了该RAG框架,框架融合了大型语言模型(LLM)与检索机制,通过动态提供的上下文案例,实现高质量的代码翻译生成。该流程可以使用不同的LLMs、嵌入模型和数据集,并调整样本数量以评估翻译效果。

1. 模型与嵌入性能

造原子弹的也来整活RAG了:RAG + Few Shot提升代码翻译效果_人工智能_03

不同模型和嵌入策略在性能上的显著差异。上表展示了零样本情境下各模型的Codebleu评分细分

GPT-4 Turbo与GPT-3.5 Turbo以0.371和0.367的CodeBLEU得分领先,在缺乏额外上下文的情况下依然能展现出色的表现。

这些模型在衡量语法准确性和数据流一致性的语法树与数据流指标上同样表现突出,展示出生成结构严谨、语义准确的代码的能力。

相较之下,Granite-34B和Llama3-70B Instruct虽然CodeBLEU得分略低(分别为0.237和0.309),却在各项指标上展现了均衡的性能,标志着它们在处理各种翻译任务时的稳健性。

而Mixtral-8x22B表现波动较大,特别是在CodeBLEU和Ngram得分上,暗示了其翻译质量的不稳定性。

在少样本任务中,Granite-34B Code Instruct、Llama3-70B Instruct和Mixtral-8x22B模型在各种嵌入类型和学习配置下均表现卓越,均取得了最高的CodeBLEU得分。

Nomic-embed和Starencoder在少样本设置中表现相当。然而,CodeBERT的表现始终不如其他两个模型。

2. 少样本学习的显著影响

造原子弹的也来整活RAG了:RAG + Few Shot提升代码翻译效果_深度学习_04

少样本学习显著提升了所有模型和嵌入策略的翻译表现。从单样本到三样本学习配置的连续进步显而易见,尤其是Granite-34B Code Instruct、Llama3-70B Instruct和Mixtral-8x22B等模型在上表中显示了显著的性能提升。

以Granite-34B Code Instruct为例,CodeBLEU得分从零样本的0.24 ± 0.09跃升至单样本设置的0.60 ± 0.27,并在双样本和三样本设置中分别进一步提升至0.54 ± 0.27和0.54 ± 0.21。

表明RAG配置在提升代码翻译品质上扮演了关键角色。RAG配置通过检索机制引入了来自相似代码片段或文档的相关上下文,更深入地把握源代码的结构与语义。在少样本学习情境下,这种附加的上下文尤为重要,恰当的示例能显著增强翻译的品质。

造原子弹的也来整活RAG了:RAG + Few Shot提升代码翻译效果_语言模型_05

上图通过Nomic-embed嵌入模型,对比了RAG流水线中单样本与零样本的性能。数据点的颜色反映了检索到的单样本示例对与查询Fortran代码的相似度,图例显示了相似度度量的强度范围。图表普遍显示,检索到的示例与查询之间的相似度越高,相应的CodeBLEU得分也越高。当改变使用的检索度量时,性能会有显著变化。

4. 大型语言模型(LLM)的效应

在众多模型的较量中,Mixtral-8x22B、Llama3-70B和Granite-34B在少样本情境下表现尤为出色,而GPT-3.5 Turbo和GPT-4 Turbo则在零样本情境下独占鳌头。

Starcoder的性能相对较弱,特别是在零样本情境下,其CodeBLEU得分仅为0.21。Starcoder在单样本情境下的提升并不显著,这可能与其较短的上下文长度有关。

llama3、Codestral、Mixtral、Granite和CodeLlama等模型,在多个评价指标上持续超越其他模型,特别是在CodeBLEU得分上。这种卓越的表现得益于它们对代码相关任务的明确预训练或微调。这些模型很可能已经在丰富的代码特定数据和任务上进行了训练,从而更好地理解和生成编程语言。

相比之下,像Phi-3这样的模型表现不佳,可能是因为它们没有专门为代码相关任务进行优化。尽管Phi3可能接受了多样化文本的训练,包括一些编程语言数据,但其训练并没有像Granite和CodeLlama那样专注于代码特定任务。因此,它们在处理Fortran到C++的翻译任务时表现不够稳定。

GPT系列模型,如GPT-4 Turbo,在零样本情境下以高初始CodeBLEU得分表现出色,但随着额外样本的增加,它们的性能提升并不显著。这种性能的停滞可能源于GPT模型更倾向于生成可执行且语义正确的代码,而非严格对照真实翻译。因此,与其他模型相比,它们从额外示例中获得的增量效益有限。

Starcoder的显著不佳表现可以归咎于几个因素。首先,Starcoder作为一个较小的模型,其标记限制较小,这限制了它理解和生成复杂代码结构的能力。其次,Starcoder的训练似乎没有充分集中在代码特定数据上,导致即使在多次样本的情况下,其性能也较低。这表明,在需要深入理解并生成代码的任务中,模型的规模和训练数据的针对性对于决定性能至关重要。


  • • 论文原文: https://arxiv.org/abs/2407.19619
  • • 获取更多最新 Arxiv 论文更新: https://github.com/HuggingAGI/HuggingArxiv!         

RAG5

RAG · 目录

上一篇亚马逊 RAG 新突破:REAPER 技术开启大型智能对话助手新境界