一句话:提出 Type4Py,用深度相似度学习的层次神经网络在类型空间中聚类,为 Python 参数、变量与返回值推断类型。
动态语言(如 Python、JavaScript)用静态类型换取灵活性,但缺乏静态类型会导致运行时异常并削弱 IDE 支持。PEP 484 引入可选类型标注,但为现有代码补全类型既易错又费力。已有机器学习方法多基于未必可靠的人工标注类型训练与评估,限制实用性。本文提出 Type4Py,一种基于深度相似度学习的层次化神经网络:它学习在高维空间中区分相似与不相似的类型并形成聚类,再通过最近邻搜索为参数、变量与返回值推断候选类型。作者在经类型检查的数据集上训练与评估,以平均倒数排名(MRR)衡量性能。Type4Py 达到 77.1% 的 MRR,较 Typilus 和 Typewriter 分别提升 8.1% 与 16.7%,并发布了 VS Code 扩展用于 Python 类型自动补全。
Dynamic languages, such as Python and Javascript, trade static typing for developer flexibility and productivity. Lack of static typing can cause run-time exceptions and is a major factor for weak IDE support. To alleviate these issues, PEP 484 introduced optional type annotations for Python. As retrofitting types to existing code-bases is error-prone and laborious, machine learning (ML)-based approaches have been proposed to enable automatic type infer-ence based on existing, partially annotated codebases. However, previous ML-based approaches are trained and evaluated on human-provided type annotations, which might not always be sound, and hence this may limit the practicality for real-world usage. In this paper, we present TYPE4Py, a deep similarity learning-based hier-archical neural network model. It learns to discriminate between similar and dissimilar types in a high-dimensional space, which results in clusters of types. Likely types for arguments, variables, and return values can then be inferred through the nearest neigh-bor search. Unlike previous work, we trained and evaluated our model on a type-checked dataset and used mean reciprocal rank (MRR) to reflect the performance perceived by users. The obtained results show that TYPE4Py achieves an MRR of 77.1 %, which is a substantial improvement of 8.1% and 16.7% over the state-of-the-art approaches Typilus and Typewriter, respectively. Finally, to aid developers with retrofitting types, we released a Visual Stu-dio Code extension, which uses TYPE4Py to provide ML-based type auto-completion for Python.