首页 > 教程攻略 > ai资讯 >造原子弹的也来整活RAG了:RAG + Few Shot提升代码翻译效果

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

来源:互联网 时间:2026-08-22 14:01:25

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

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

今天这篇论文来自洛斯阿拉莫斯国家实验室——没错,就是那个造出世界上第一颗原子弹的地方。1943年为曼哈顿计划建立的美国顶级实验室,如今在代码翻译上玩起了RAG,真是跨界又硬核。

他们提出的思路很直接:维护一个丰富的代码翻译示例库,输入新的代码片段时,动态检索最贴切的实例,再交给大模型翻译。核心就是借助检索增强生成(RAG),把少样本学习的能力拉满,无需大规模重新训练就能适配多种翻译任务。实验覆盖了Starcoder、Llama3-70B Instruct这些开源模型,以及GPT-3.5 Turbo等商业模型,在Fortran到C++的翻译上效果显著。论文还测试了不同示例数量和嵌入模型,验证了鲁棒性。

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

1. 模型与嵌入性能

先看看零样本下各模型的表现。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. 少样本学习的显著影响

少样本学习对所有模型和嵌入策略的翻译效果提升都很明显。从单样本到三样本,进步是连续的——尤其是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配置在提升代码翻译品质上起到了关键作用——通过检索机制拉来相似代码或文档中的上下文,让模型更深入地把握源代码的结构和语义。少样本场景下,这种额外上下文尤其珍贵,恰当的示例能显著改善翻译质量。

上图用Nomic-embed嵌入模型,对比了RAG流水线中单样本与零样本的性能。数据点的颜色反映了检索到的单样本示例与查询Fortran代码的相似度,图例标注了相似度范围。整体趋势很明显:示例与查询越相似,CodeBLEU得分就越高。换用不同的检索度量时,性能也会出现显著变化。

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

在模型较量中,Mixtral-8x22B、Llama3-70B和Granite-34B在少样本场景下格外抢眼,而GPT-3.5 Turbo和GPT-4 Turbo则在零样本场景下独占鳌头。Starcoder相对较弱,尤其在零样本时CodeBLEU只有0.21,单样本的提升也不明显,可能跟它上下文长度较短有关。

Llama3、Codestral、Mixtral、Granite和CodeLlama这些模型在多项评价指标上都持续领先,尤其是CodeBLEU得分。背后的原因不难猜:它们针对代码相关任务做了专门的预训练或微调,很可能已经在丰富的代码数据上练过手,对编程语言的理解和生成自然更胜一筹。

反观Phi-3,表现就不太行了——它没有专门为代码任务优化过,尽管也接触过一些编程语言数据,但训练重心不在这上面。因此碰到Fortran到C++这种翻译任务,稳定性就打了折扣。

GPT系列模型(比如GPT-4 Turbo)在零样本下起步很高,可加进额外样本后,性能提升却有限。一个可能的原因是:GPT模型更倾向于生成可执行且语义正确的代码,而不是死磕严格对照真实翻译。所以额外示例带来的增量效益没那么大。

Starcoder的明显劣势可以归结为几个因素。首先,它本身是个较小模型,标记限制小,理解和生成复杂代码结构的能力自然受限。其次,它的训练没有充分聚焦在代码特定数据上,所以就算给足样本,性能也上不去。这提醒我们:在需要深度理解并生成代码的任务中,模型规模和训练数据的针对性才是决定性能的关键。