VarCLR:基于对比学习的变量语义表示预训练
软件工程
2021-12-07 v1 计算与语言
机器学习
编程语言
摘要
变量名对于传达预期的程序行为至关重要。基于机器学习的程序分析方法使用变量名表示来完成一系列广泛任务,例如建议新变量名和缺陷检测。理想情况下,此类方法能够捕获名称之间超越句法相似性的语义关系,例如 average 与 mean 这两个名称相似这一事实。遗憾的是,先前的研究发现,即便是最好的已有表示方法也主要捕获的是关联性(两个变量是否有关联),而非相似性(它们是否实际具有相同的含义)。我们提出 VarCLR,一种用于学习变量名语义表示的新方法,它能在更严格的意义上有效捕获变量相似性。我们观察到该问题非常契合对比学习,对比学习旨在最小化显式相似输入之间的距离,同时最大化不相似输入之间的距离。这需要带标签的训练数据,因此我们构建了一个从 GitHub 编辑记录中挖掘得到的新颖弱监督变量重命名数据集。我们表明,VarCLR 使得能够将 BERT 等复杂通用语言模型有效应用于变量名表示,进而应用于变量名相似性搜索或拼写纠正等相关下游任务。VarCLR 生成的模型在 IdBench(一个明确捕获变量相似性(区别于关联性)的现有基准)上显著优于当前最优方法。最后,我们发布了所有数据、代码和预训练模型,旨在为依赖变量名的现有或未来程序分析中所用的变量表示提供即插即用的替代方案。
引用
@article{arxiv.2112.02650,
title = {VarCLR: Variable Semantic Representation Pre-training via Contrastive Learning},
author = {Qibin Chen and Jeremy Lacomis and Edward J. Schwartz and Graham Neubig and Bogdan Vasilescu and Claire Le Goues},
journal= {arXiv preprint arXiv:2112.02650},
year = {2021}
}
备注
Accepted by ICSE 2022