LAMBDANET: PROBABILISTIC TYPE INFERENCE USING GRAPH NEURAL NETWORKS 使用图神经网络进行概率类型推断

这篇文章提出了对于TypeScript的基于图神经网络的概率类型推断。首先使用了轻量的源码分析器生成一种程序抽象---类型依赖图,把类型变量和逻辑变量以及名字和使用信息联系起来。给定这种程序抽象图,使用一个图神经网络来传播相关类型变量之间的信息,并最终进行类型预测。我们的模型可以预测基本类型,像numberstring,以及在训练中没有遇到的用户自定义类型。

数据集:Github中收集的流行的TypeScript开源项目

INTRODUCTION

之前也有工作利用机器学习对TypeScript进行类型推断,但都有缺点:首先,推断仅限于训练期间观察到的有限类型的字典,它们不能预测用户自定义类型。其次,即使不考虑用户定义类型,这些系统的精确度相对较低,目前最先进的技术对于基本类型/库类型的精确度达到56.9%。最后,这些技术可能会产生不一致的结果,因为它们可能会为相同变量不同的位置出现的token预测不同的类型。

类型依赖图中节点表示类型变量,和带有label的超边表示它们之间的关系。与传统的类型推断一样,除了表达逻辑约束之外(如子类型关系),类型依赖图也包含涉及命名和变量使用的上下文提示。

给定类型依赖图,我们的方法使用GNN网络为每个类型变量计算向量嵌入然后使用类似于指针网络的结构进行类型预测。图神经网络本身需要处理各种超边类型,有些超边类型具有可变数量的参数,我们为这些参数定义了适当的图传播算子。我们的预测层将类型变量的向量嵌入与候选类型的向量表示进行比较,允许我们灵活处理具有未在训练期间观察到的用户自定义类型。此外,我们的模型通过构造预测一致的结果,因为它进行变量级别的预测,而不是token级别的预测.

这篇论文有以下贡献:1)我们为TypeScript提出了一种概率类型推断算法,使用深度学习从程序的类型依赖图表示进行预测。2)我们描述了一种使用GNN计算类型变量向量嵌入的技术并提出一种类似指针网络的预测方法进行用户自定义类型的预测。

MOTIVATING EXAMPLE AND PROBLEM SETTING

类型约束

Figure1中某些函数/运算符的使用对可分配给程序变量的类型有严格限制。比如,在forward函数中,变量x,y必须分配为一个支持concat操作的类型。x,y可以是类型string, array, 或Tensor,但不能是boolean,这就有了类型约束。

上下文信息

类型约束不总是有效。比如,restore函数中的network变量,类型约束要求network的类型是必须有time字段的一个类,但是许多类可能都包含这个属性(Date),然而,变量名network和类名MyNetwork的相似性提示network可能是MyNetwork类型,基于此,我们可以更进一步的利用库函数readNumber的返回值类型推断MyNetwork中time字段的类型可能是number.

类型依赖图

使用静态分析推断一组与类型推断问题相关的谓词,并使用程序类型依赖图表示这些谓词。

处理用户自定义类型

TYPE DEPENDENCY GRAPH

一个类型依赖图中节点N表示类型变量,带有标签的超边E表示节点之间的关系。在给定的TypeScript项目中,在源码的中间表示上利用静态分析,这是的我们把每一个变量和程序的子表达式联系起来,Figure 2是Figure 1的中间表达式。

 依赖图中每一个超边代表了一种关系,如表1,大体分为逻辑关系和上下文关系。前者是对类型变量施加约束,后者是从抽取的变量名,函数名和类名中编码有用信息。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值