通过分割、编码与聚合应对长代码搜索
软件工程
2024-03-27 v3
摘要
基于自然语言进行代码搜索有助于我们复用现有代码片段。得益于基于Transformer的预训练模型,代码搜索的性能已显著提升。然而,由于多头自注意力的二次复杂度,输入token长度存在限制。为在V100等标准GPU上高效训练,现有预训练代码模型(包括GraphCodeBERT、CodeBERT、RoBERTa(code))默认仅取前256个token,这使其无法表示长度超过256 token的长代码的完整信息。为应对长代码问题,我们提出了新基线SEA(Split、Encode and Aggregate,分割、编码与聚合),其将长代码分割为代码块,将这些块编码为嵌入,并聚合以得到全面的长代码表示。借助SEA,我们可直接使用基于Transformer的预训练模型对长代码建模,而无需改变其内部结构并重新预训练。我们还将SEA与稀疏Transformer方法进行比较。以GraphCodeBERT为编码器,SEA在CodeSearchNet基准上取得0.785的总体平均倒数排名分数,较GraphCodeBERT提升10.1%,证明SEA是长代码搜索的强基线。我们的源代码与实验数据见:https://github.com/fly-dragon211/SEA。
引用
@article{arxiv.2208.11271,
title = {Tackling Long Code Search with Splitting, Encoding, and Aggregating},
author = {Fan Hu and Yanlin Wang and Lun Du and Hongyu Zhang and Shi Han and Dongmei Zhang and Xirong Li},
journal= {arXiv preprint arXiv:2208.11271},
year = {2024}
}
备注
Accepted by LREC-COLING 2024