Inferring Pluggable Types with Machine Learning
作者: Kazi Amanul Islam Siddiqui, Martin Kellogg
分类: cs.SE, cs.AI
发布日期: 2024-06-21 (更新: 2025-10-02)
💡 一句话要点
提出基于机器学习的类型推断方法,自动为Java代码添加类型限定符。
🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)
关键词: 类型推断 机器学习 可插拔类型系统 图神经网络 代码分析
📋 核心要点
- 可插拔类型系统依赖手动注解,阻碍其在大型遗留代码库中的应用。
- 论文提出使用机器学习自动推断类型限定符,降低人工标注成本。
- 实验表明,图Transformer网络(GTN)在类型推断任务中表现最佳,召回率达到0.89。
📝 摘要(中文)
可插拔类型系统允许程序员扩展编程语言的类型系统,以强制执行由程序员定义的语义属性。由于需要程序员手动编写类型注解,可插拔类型系统难以在遗留代码库中部署。本文研究了如何使用机器学习自动推断类型限定符。我们提出了一种新颖的表示方法,NaP-AST,它编码了最小的数据流提示,以有效地推断类型限定符。我们评估了几种用于推断类型限定符的模型架构,包括图Transformer网络、图卷积网络和大型语言模型。我们通过将这些模型应用于NullAway可插拔类型检查器的先前评估中的12个开源程序来进一步验证这些模型,从而减少了除一个未注解项目之外的所有项目的警告。我们发现GTN表现出最佳性能,召回率为0.89,精确率为0.6。此外,我们进行了一项研究,以估计训练模型获得良好性能所需的Java类数量。在我们的可行性研究中,性能在16k个类左右得到改善,并由于22k个类左右的过度拟合而恶化。
🔬 方法详解
问题定义:论文旨在解决可插拔类型系统在遗留代码库中部署困难的问题。现有方法需要程序员手动添加类型注解,这对于大型项目来说成本高昂且容易出错。因此,自动推断类型限定符成为一个重要的研究方向。
核心思路:论文的核心思路是利用机器学习模型学习代码的语义信息,从而自动预测合适的类型限定符。通过将代码表示为图结构,并结合数据流信息,模型可以更好地理解代码的上下文,从而提高类型推断的准确性。
技术框架:整体框架包括以下几个主要步骤:1) 将Java代码解析为抽象语法树(AST);2) 构建NaP-AST表示,该表示在AST的基础上添加了数据流信息;3) 使用机器学习模型(如GTN、GCN、LLM)对NaP-AST进行学习,预测每个节点对应的类型限定符;4) 将预测的类型限定符添加到代码中,并使用类型检查器进行验证。
关键创新:论文的关键创新在于提出了NaP-AST表示,它在传统的AST基础上添加了最小的数据流提示。这种表示方法能够有效地编码代码的语义信息,从而提高机器学习模型的类型推断性能。此外,论文还比较了多种机器学习模型在类型推断任务中的表现,为后续研究提供了参考。
关键设计:NaP-AST的关键设计在于如何有效地编码数据流信息。论文通过添加特殊的边来表示变量的定义和使用关系,从而使得模型能够学习到变量之间的依赖关系。在模型选择方面,论文尝试了多种图神经网络结构,包括GTN、GCN等。GTN通过学习节点之间的关系权重,能够更好地捕捉代码的语义信息,从而取得了最佳的性能。
🖼️ 关键图片
📊 实验亮点
实验结果表明,基于图Transformer网络(GTN)的模型在类型推断任务中表现最佳,召回率达到0.89,精确率为0.6。通过在12个开源项目上进行验证,该模型能够有效减少类型检查器产生的警告,证明了其在实际应用中的可行性。研究还发现,模型性能在16k个Java类左右达到最佳,并在22k个类左右出现过拟合。
🎯 应用场景
该研究成果可应用于自动化代码分析、缺陷检测和软件安全等领域。通过自动推断类型限定符,可以减少人工标注的工作量,提高代码质量和安全性。未来,该技术可以集成到IDE或CI/CD流程中,实现自动化的类型检查和代码改进。
📄 摘要(原文)
Pluggable type systems allow programmers to extend the type system of a programming language to enforce semantic properties defined by the programmer. Pluggable type systems are difficult to deploy in legacy codebases because they require programmers to write type annotations manually. This paper investigates how to use machine learning to infer type qualifiers automatically. We propose a novel representation, NaP-AST, that encodes minimal dataflow hints for the effective inference of type qualifiers. We evaluate several model architectures for inferring type qualifiers, including Graph Transformer Network, Graph Convolutional Network and Large Language Model. We further validated these models by applying them to 12 open-source programs from a prior evaluation of the NullAway pluggable typechecker, lowering warnings in all but one unannotated project. We discovered that GTN shows the best performance, with a recall of .89 and precision of 0.6. Furthermore, we conduct a study to estimate the number of Java classes needed for good performance of the trained model. For our feasibility study, performance improved around 16k classes, and deteriorated due to overfitting around 22k classes.