利用程序执行补充信息的代码表示预训练
软件工程
2023-09-20 v1 人工智能
计算与语言
摘要
用于自然语言处理的大语言模型(LLM)已被移植到编程语言建模中以推进代码智能。尽管代码可以以文本格式表示,但其语法更为严格,以便在给定任意输入时能正确编译或解释以执行预期行为集。在此情形下,现有工作受益于语法表示,以抽象语法树、控制流图等形式更无歧义地从代码中学习。然而,目的相同的程序可有多种实现方式而呈现不同语法表示,而实现相似的程序却可能具有不同行为。尽管此类关于功能的语义在程序执行中平凡可证,但直接(尤其以无监督方式)从代码学习它们颇具挑战。因此,本文提出 FuzzPretrain,以探索由测试用例揭示的程序动态信息,并将其作为补充嵌入代码的表征特征中。测试用例借助定制模糊器获取,且仅在预训练阶段需要。FuzzPretrain 在代码搜索上相较仅以源代码或 AST 训练的对应模型分别带来超过 6%/9% 的 mAP 提升。我们广泛的实验结果表明利用程序执行学习判别性代码表征的益处。
引用
@article{arxiv.2309.09980,
title = {Code Representation Pre-training with Complements from Program Executions},
author = {Jiabo Huang and Jianyu Zhao and Yuyang Rong and Yiwen Guo and Yifeng He and Hao Chen},
journal= {arXiv preprint arXiv:2309.09980},
year = {2023}
}