【AI4Code】《InferCode: Self-Supervised Learning of Code Representations by Predicting Subtrees》ICSE‘21

InferCode是一种自监督学习方法,通过预测代码的抽象语法树(AST)子树来学习代码表示。它不依赖任何标签,可用于代码聚类、克隆检测、跨语言代码搜索等任务。通过将AST转换为二叉树并使用TBCNN编码,InferCode能够学习到代码的表示,并通过识别和预测子树来捕获代码结构。
摘要由CSDN通过智能技术生成

《InferCode: Self-Supervised Learning of Code Representations by Predicting Subtrees》 ICSE 2021

致力于自监督的训练出代码的表征,不利用任何标签。

提出InferCode,利用自监督学习从代码的抽象语法树(AST)中学习代码的表示,通过预测AST中的子树构造训练标签,而子树结构是可以在构造AST过程中自动生成的。基于的假设是:相似的代码片段的AST包含相似的子树,比如两种写法的冒泡排序代码,包含大量相似代码结构:

在这里插入图片描述

InferCode的无监督的下游任务有代码聚类、克隆检测以及跨语言代码搜索;有监督的迁移学习有代码分类和代码推荐。

方法

概述

在这里插入图片描述

InferCode与Doc2vec类似,将AST视为文档,子树作为文档中的单词。给定AST集合 { T 1 , T 2 , … , T n } \left\{T_{1}, T_{2}, \ldots, T_{n\}}\right. { T1,T2,,Tn} T i T_i Ti的所有子树集合 { … , T i j , … } \left\{\ldots, T_{i j}, \ldots\right\} { ,Tij,},将 T i T_i Ti T i j T_{ij} Tij表示为D维向量,考虑子树 T i j T_{ij} Tij 出现在 T i T_i Ti 上下文中,最大化对数损失: ∑ j log ⁡ P r ( T i j ∣ T i ) \sum_{j} \log P_{r}\left(T_{i j} \mid T_{i}\right) jlog

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值