A Comparative Study of DSL Code Generation: Fine-Tuning vs. Optimized Retrieval Augmentation

📄 arXiv: 2407.02742v1 📥 PDF

作者: Nastaran Bassamzadeh, Chhaya Methani

分类: cs.SE, cs.AI, cs.CL

发布日期: 2024-07-03

备注: 8 pages, 1 figure


💡 一句话要点

优化检索增强生成,提升领域特定语言代码生成效果,媲美微调模型。

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 领域特定语言 代码生成 检索增强生成 大型语言模型 微调

📋 核心要点

  1. 大型语言模型在领域特定语言代码生成中,对自定义函数名称的处理存在幻觉和语法错误问题,且难以适应函数名称的频繁更新。
  2. 论文提出优化检索增强生成(RAG)策略,通过检索相关API信息来辅助LLM生成代码,从而减少幻觉和语法错误。
  3. 实验结果表明,优化的RAG模型在代码相似性上可与微调模型媲美,并在编译率上略有优势,尤其适用于处理未见过的API。

📝 摘要(中文)

近年来,随着大型语言模型(LLMs)的出现,自然语言到代码生成取得了显著进展。虽然通用语言(如C、C++和Python)的生成能力得到了显著提高,但LLMs在领域特定语言(DSLs)中处理自定义函数名称时仍面临挑战。这导致更高的幻觉率和语法错误,特别是对于具有大量自定义函数名称的DSLs。此外,函数名称的不断更新也增加了LLMs保持最新状态的难度。本文提出使用检索增强生成(RAG)与LLMs结合进行DSL生成的优化策略,并进行了消融研究以比较这些策略。我们生成了一个包含DSL的训练和测试数据集,用于表示大约700个公共领域API中的自动化任务。我们使用训练数据集对Codex模型进行了针对此DSL的微调。结果表明,微调模型在代码相似性指标上得分最高。通过我们的RAG优化,我们在相似性指标上达到了与微调模型相当的水平。然而,编译率表明,两种模型仍然经常出现语法错误,基于RAG的方法略好2个百分点。相反,RAG模型的API名称幻觉率落后1个百分点,API参数键的幻觉率落后2个百分点。我们得出结论,优化的RAG模型可以匹配微调模型的质量,并为新的、未见过的API提供优势。

🔬 方法详解

问题定义:论文旨在解决大型语言模型(LLMs)在领域特定语言(DSL)代码生成中,由于自定义函数名称和频繁更新导致的幻觉和语法错误问题。现有方法,如直接使用LLMs或微调LLMs,难以有效处理DSL中大量的自定义函数名称和持续更新的API,导致代码质量下降。

核心思路:论文的核心思路是利用检索增强生成(RAG)框架,通过检索与自然语言描述相关的API文档或代码片段,为LLM提供更准确的上下文信息,从而减少幻觉和语法错误。这种方法避免了对LLM进行大规模的重新训练,使其能够更好地适应新的或未见过的API。

技术框架:整体框架包含以下主要模块:1) 检索模块:根据自然语言描述,从API文档或代码库中检索相关的API信息。2) 增强模块:将检索到的API信息与原始的自然语言描述进行融合,形成增强的输入。3) 生成模块:使用LLM(如Codex)基于增强的输入生成DSL代码。4) 评估模块:评估生成的代码的相似性、编译率和幻觉率。

关键创新:论文的关键创新在于对RAG框架的优化,使其能够更好地适应DSL代码生成任务。具体的优化策略包括:1) 优化检索策略,提高检索的准确性和召回率。2) 设计有效的增强策略,将检索到的API信息与自然语言描述进行融合,避免信息过载或噪声干扰。3) 针对DSL的特点,调整LLM的生成策略,提高代码的语法正确性和语义一致性。

关键设计:论文使用Codex模型作为LLM,并使用特定的DSL数据集进行训练和测试。关键设计包括:1) 数据集的构建,包含大量的API信息和对应的自然语言描述。2) 检索模块的实现,可能涉及向量数据库和相似度计算方法。3) 增强模块的实现,可能涉及prompt工程和信息融合技术。4) 评估指标的选择,包括代码相似性、编译率和幻觉率。

🖼️ 关键图片

fig_0

📊 实验亮点

实验结果表明,优化的RAG模型在代码相似性指标上达到了与微调Codex模型相当的水平。虽然微调模型在代码相似性上略胜一筹,但RAG模型在编译率上表现更好,减少了语法错误。此外,RAG模型在处理未见过的API时具有优势,能够更好地适应新的API信息。

🎯 应用场景

该研究成果可应用于自动化脚本生成、智能家居控制、机器人编程等领域。通过自然语言描述,用户可以快速生成特定领域的代码,降低编程门槛,提高开发效率。该方法尤其适用于API频繁更新的场景,能够减少维护成本,并为新API提供快速支持。

📄 摘要(原文)

Natural Language to Code Generation has made significant progress in recent years with the advent of Large Language Models(LLMs). While generation for general-purpose languages like C, C++, and Python has improved significantly, LLMs struggle with custom function names in Domain Specific Languages or DSLs. This leads to higher hallucination rates and syntax errors, specially for DSLs having a high number of custom function names. Additionally, constant updates to function names add to the challenge as LLMs need to stay up-to-date. In this paper, we present optimizations for using Retrieval Augmented Generation (or RAG) with LLMs for DSL generation along with an ablation study comparing these strategies. We generated a train as well as test dataset with a DSL to represent automation tasks across roughly 700 APIs in public domain. We used the training dataset to fine-tune a Codex model for this DSL. Our results showed that the fine-tuned model scored the best on code similarity metric. With our RAG optimizations, we achieved parity for similarity metric. The compilation rate, however, showed that both the models still got the syntax wrong many times, with RAG-based method being 2 pts better. Conversely, hallucination rate for RAG model lagged by 1 pt for API names and by 2 pts for API parameter keys. We conclude that an optimized RAG model can match the quality of fine-tuned models and offer advantages for new, unseen APIs.