Semantic Source Code Segmentation using Small and Large Language Models
作者: Abdelhalim Dahou, Ansgar Scherp, Sebastian Kurten, Brigitte Mathiak, Madhu Chauhan
分类: cs.SE, cs.CL, cs.PL
发布日期: 2025-07-11
备注: 18 pages, 4 figures
💡 一句话要点
提出基于大小语言模型的语义源代码分割方法,提升低资源语言代码理解。
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 源代码分割 语言模型 低资源语言 R语言 代码理解 软件工程 语义分析
📋 核心要点
- 现有代码分割方法在处理大型代码库和低资源语言时面临挑战,手动分析效率低,句法分析难以捕捉语义信息。
- 论文提出利用大小语言模型进行源代码语义分割,探索了基于上下文的逐行分析和基于范围的分割两种方法。
- 实验结果表明,基于上下文的逐行分析更优,且微调的小型语言模型在R代码分割上表现优于大型语言模型。
📝 摘要(中文)
源代码分割是将代码划分为功能连贯的片段,这对于软件开发中的知识检索和维护至关重要。随着代码库的增长,手动和句法分析方法变得不切实际,尤其是在像R这样的低资源语言及其研究领域(例如,社会科学、心理学)中。本文介绍了一种自动化的、特定于领域的方法,用于使用大型和小型语言模型(LLM/SLM)分割研究R代码。它提出了两种新颖的方法和一个人工标注的数据集StatCodeSeg。我们探索了两种不同的方法:具有上下文的逐行分析和基于范围的片段确定。我们使用LLM和微调的SLM进行实验。为了支持我们方法的泛化性,我们还包括了来自计算机科学领域的Python代码的实验。结果表明,基于上下文的逐行分析优于基于范围的分割。使用像CodeBERT和encoder-only版本的CodeT5+这样的小型语言模型比它们的LLM对应物更好。最值得注意的是,这两个表现最佳的模型在预训练期间没有看到R代码,而只是在4,130行手动注释的代码上进行了微调。
🔬 方法详解
问题定义:论文旨在解决低资源编程语言(如R)的源代码语义分割问题。现有方法,如手动分析和基于句法的分析,在处理大型代码库时效率低下,且难以捕捉代码的深层语义信息。这阻碍了对代码的理解、维护和知识检索。
核心思路:论文的核心思路是利用预训练语言模型(特别是小型语言模型)的语义理解能力,通过微调使其适应特定领域的代码分割任务。通过学习代码的上下文信息,模型能够自动将代码分割成具有功能连贯性的片段。
技术框架:论文提出了两种主要的分割方法: 1. 基于上下文的逐行分析:逐行分析代码,利用语言模型预测每一行代码是否为一个新片段的开始。模型会考虑当前行及其上下文信息。 2. 基于范围的分割:将代码分成不同的范围,并使用语言模型评估每个范围作为独立片段的可能性。然后选择最佳的范围划分。
整体流程包括:数据收集与标注(构建StatCodeSeg数据集),模型选择(LLM和SLM),模型微调,以及分割结果评估。
关键创新:论文的关键创新在于: 1. 针对低资源语言(R)的源代码分割问题,提出了基于语言模型的自动化解决方案。 2. 探索了两种不同的分割策略(逐行分析和范围分割),并比较了它们的效果。 3. 证明了在少量标注数据上微调的小型语言模型,在特定任务上可以超越大型语言模型。
关键设计: 1. 数据集:构建了包含4,130行手动标注R代码的StatCodeSeg数据集。 2. 模型选择:实验了多种语言模型,包括LLM(如GPT系列)和SLM(如CodeBERT, CodeT5+)。 3. 微调策略:使用交叉熵损失函数对模型进行微调,目标是预测每一行代码是否为新片段的开始(逐行分析)或评估代码范围的独立性(范围分割)。 4. 评估指标:使用精确率、召回率和F1值等指标评估分割结果的质量。
🖼️ 关键图片
📊 实验亮点
实验结果表明,基于上下文的逐行分析方法优于基于范围的分割方法。更重要的是,在少量R代码数据集上微调的CodeBERT和encoder-only版本的CodeT5+等小型语言模型,其性能超过了未经微调或使用更多数据训练的大型语言模型。这表明小型语言模型在特定领域任务上具有更高的效率和潜力。
🎯 应用场景
该研究成果可应用于软件工程领域,提升代码理解、维护和重构的效率。尤其对于使用低资源语言(如R)进行科学研究的领域,可以帮助研究人员更好地管理和理解代码,促进知识共享和复用。未来可扩展到其他编程语言和领域,实现更智能化的代码管理。
📄 摘要(原文)
Source code segmentation, dividing code into functionally coherent segments, is crucial for knowledge retrieval and maintenance in software development. While enabling efficient navigation and comprehension of large codebases, manual and syntactic analysis approaches have become impractical as repositories grow, especially for low-resource languages like R and their research domains (e.g., social sciences, psychology).This paper introduces an automated, domain-specific approach for research R code segmentation using Large and Small Language Models (LLMs/SLMs). It presents two novel approaches and a human-annotated dataset, StatCodeSeg. We explore two distinct approaches: line-by-line analysis with context and range-based segment determination. We experiment with LLMs and fine-tuned SLMs. To support the generalizability of our approaches, we also include experiments on Python code from the computer science domain.Our results show that context-based line-by-line analysis is superior over range-based segmentation.Using smaller language models like CodeBERT and an encoder-only version of CodeT5+ are better than their LLM counterparts. Most notably, these two best-performing models did not see R code during pre-training versus the LLMs but were only fine-tuned on 4,130 lines of manually annotated code.