《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