论文

SemChunk-C:C 代码的语义分割

SemChunk-C: Semantic Segmentation for C Code

上下文与知识上下文工程

摘要

由于 C 族语言复杂的语法、宏扩展和不规则的结构模式,对用 C 族语言编写的代码进行语义分割仍然是一个具有挑战性的问题。现有的分块方法,例如固定大小的窗口、启发式分割和基于语法的工具,通常无法捕获有意义的功能单元,从而限制了检索和其他下游 LLM 驱动任务的效率。在本文中,我们解决了 C 相关语言中的分块问题。首先,我们定义一组代码块类别。其次,我们训练基于 LLM 的分类器来 a)识别块边界,b)为每个块分配一个描述性功能属性(类别),这对于下游任务非常有用。通过利用 LLM 捕获代码内语义上下文的能力,我们假设灵活的块边界,允许适应每个实例的特定结构和上下文。第三,我们介绍 SemChunk-C,这是一个轻量级语言模型系列,用于对 C 相关文件(.c、.cpp、.h、.cs 等)进行语义分块。这些模型基于前四个 Ettin 编码器 [1],具有 17M、32M、68M 和 150M 参数。尽管它们的尺寸相对较小,但它们能够识别内聚的代码单元,例如数据结构、接口块和其他组件。此外,我们还展示了我们的方法在实际代码上的稳健性,包括具有挑战性的结构,例如嵌套定义和宏。我们在各种数据集上测试了我们的方法,并表明它实现了高边界精度和语义一致性,匹配或优于基于更大的面向代码的 LLM 的分块器。我们还在一些策划的基准上验证了下游任务的性能改进。