Optimizing Large Language Models for OpenAPI Code Completion

📄 arXiv: 2405.15729v2 📥 PDF

作者: Bohdan Petryshyn, Mantas Lukoševičius

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

发布日期: 2024-05-24 (更新: 2024-06-10)

备注: Update: a better quality and readability of figures, better explanation of code infilling and document splitting in training, some text polishing, making it more compact


💡 一句话要点

优化大型语言模型以提升OpenAPI代码补全性能

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

关键词: 大型语言模型 代码补全 OpenAPI 微调 提示工程

📋 核心要点

  1. 现有代码补全方案在OpenAPI等非主流格式上性能不足,无法满足日益增长的需求。
  2. 利用Code Llama,通过提示工程和微调等方法,针对性地优化OpenAPI代码补全任务。
  3. 实验表明,优化后的Code Llama模型在OpenAPI补全任务上显著优于GitHub Copilot。

📝 摘要(中文)

近年来,大型语言模型(LLMs)及其在代码生成任务中的应用显著改变了软件开发领域。尽管代码补全解决方案在主流编程语言中表现出色,但在OpenAPI定义等不太常见的格式中,其性能仍有不足。本研究评估了流行的商业代码补全工具GitHub Copilot在OpenAPI补全方面的性能,并提出了一系列针对特定任务的优化方法,利用Meta的开源模型Code Llama。研究中提出的语义感知OpenAPI补全基准用于进行一系列实验,分析各种提示工程和微调技术对Code Llama模型性能的影响。经过微调的Code Llama模型在正确性方面比GitHub Copilot提高了55.2%,而其参数量仅为商业解决方案底层Codex模型的1/25。此外,本研究还提出了一种对广泛使用的代码填充训练技术的改进,解决了模型在上下文大小小于训练时使用的大小时表现不佳的问题。数据集、基准和模型微调代码均已公开。

🔬 方法详解

问题定义:现有代码补全工具,如GitHub Copilot,在主流编程语言的代码补全任务中表现良好,但在OpenAPI定义等不太常见的格式中,性能明显下降。这主要是因为这些模型在训练数据中对OpenAPI等格式的数据覆盖不足,导致模型无法有效理解和生成OpenAPI代码。因此,需要针对OpenAPI代码补全任务进行专门的优化。

核心思路:本研究的核心思路是利用开源的大型语言模型Code Llama,通过提示工程和微调等技术,使其更好地适应OpenAPI代码补全任务。选择Code Llama的原因是其具有良好的代码生成能力,并且是开源的,方便进行定制和优化。通过针对OpenAPI语法的特点进行提示工程,可以引导模型更好地理解OpenAPI代码的结构和语义。通过在OpenAPI数据集上进行微调,可以使模型更好地学习OpenAPI代码的生成模式。

技术框架:整体框架包括以下几个主要步骤:1) 构建OpenAPI代码补全基准数据集;2) 设计提示工程策略,包括上下文选择、提示词构建等;3) 使用OpenAPI数据集对Code Llama模型进行微调;4) 在基准数据集上评估微调后的模型性能;5) 改进代码填充训练技术,提升小上下文下的模型性能。

关键创新:本研究的关键创新点在于:1) 提出了一个语义感知的OpenAPI代码补全基准,可以更全面地评估模型在OpenAPI代码补全任务上的性能;2) 提出了一种改进的代码填充训练技术,解决了模型在上下文大小小于训练时使用的大小时表现不佳的问题;3) 通过提示工程和微调,显著提升了Code Llama模型在OpenAPI代码补全任务上的性能,甚至超过了参数量更大的商业模型。

关键设计:在提示工程方面,研究者设计了多种提示策略,包括基于上下文的提示、基于语法的提示等。在微调方面,研究者使用了标准的语言模型微调方法,并针对OpenAPI代码的特点进行了一些调整。例如,研究者使用了更大的学习率和更长的训练时间,以使模型更好地学习OpenAPI代码的生成模式。此外,研究者还对代码填充训练技术进行了改进,通过调整训练数据的生成方式,使模型更好地适应小上下文的情况。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果表明,经过微调的Code Llama模型在OpenAPI代码补全任务上的正确性比GitHub Copilot提高了55.2%,尽管其参数量仅为GitHub Copilot底层Codex模型的1/25。此外,改进的代码填充训练技术有效提升了模型在小上下文下的性能。

🎯 应用场景

该研究成果可应用于智能API开发工具、自动化API文档生成、API测试等领域。通过提升OpenAPI代码补全的准确性和效率,可以显著降低API开发的成本,提高开发效率,并促进API生态系统的发展。未来,该研究可以扩展到其他领域特定语言或格式的代码补全任务中。

📄 摘要(原文)

Recent advancements in Large Language Models (LLMs) and their utilization in code generation tasks have significantly reshaped the field of software development. Despite the remarkable efficacy of code completion solutions in mainstream programming languages, their performance lags when applied to less ubiquitous formats such as OpenAPI definitions. This study evaluates the OpenAPI completion performance of GitHub Copilot, a prevalent commercial code completion tool, and proposes a set of task-specific optimizations leveraging Meta's open-source model Code Llama. A semantics-aware OpenAPI completion benchmark proposed in this research is used to perform a series of experiments through which the impact of various prompt-engineering and fine-tuning techniques on the Code Llama model's performance is analyzed. The fine-tuned Code Llama model reaches a peak correctness improvement of 55.2% over GitHub Copilot despite utilizing 25 times fewer parameters than the commercial solution's underlying Codex model. Additionally, this research proposes an enhancement to a widely used code infilling training technique, addressing the issue of underperformance when the model is prompted with context sizes smaller than those used during training. The dataset, the benchmark, and the model fine-tuning code are made publicly available.