Paper Daily Note


2019/3/29


  1. Supervised Deep Features for Software Functional Clone Detection by Exploiting Lexical and Syntactical Information in Source Code

一篇ICJAR2017的nju lambda的工作。首先还是批判clone detection的前人工作都是hand-crafted features,而作者formulate该问题为一个hash问题的监督学习。作者先说了他们做的是4种克隆检测中最复杂的那种:语法不相似但功能类似的(又diss了一下前人因为只consider lexcial similarity所以只能做前两种)然后主要architecture是一个基于AST的改进版LSTM和一个hashing layer,把code映射到一个metric是hamming distance的空间上。看这篇paper主要是了解一下这个用AST cpature structure信息(ps:里面有一篇引用说auto encoder在source code上的无监督学习,mark一下)

  1. DYNAMIC NEURAL PROGRAM EMBEDDINGS FOR PROGRAM REPAIR

一篇ICLR2018的UCD的工作。作者上来就是批判了基于syntactic特征的token sequence或AST表示方法。作者表态了,code具有well-defined semantics,你们这些syntax-based的工作太naive,因此提出一个从execution traces中学习到semantic program embedding。基于的是程序的动态的执行序列,insight很好,非常creative的工作。模型的细节还要再看下。

  1. LEARNING TO REPRESENT PROGRAMS WITH GRAPHS

还是ICLR2018,Microsoft的工作。用数据流和type hierarchies,作者认为insight是这种来他们验证的task其实有点意思,有两个:VARNAMEING和VARUSE。前者类似根据使用usage猜变量名(?),后者类似代码完形填空。表示数据流图的设定比较巧妙。model是门控图神经网络(gated graph NN)。task是识别同学们提交的代码中的各种常见错误,在他们公司的C#数据集上训练后效果吊打了token/AST的方法。


2019/3/30


忙,只看了0.5篇…

  1. Deep Learning Code Fragments for Code Clone Detection

昨天cue到的一个2016年ASE的auto-encoder的工作。立场比较高,读起来有点费劲,明天有可能的话继续看。作者一上来在introduction里就说了,我们discard在identifier这种在clone detection里的domain information,颇有种自废武功、不破不立的感觉。他解释说在不同应用领域有不同的pattern(yield unique pattern)。然后主要方法是去识别源代码中的discriminative特征。将AST树->Full Binary Trees->Olive Tree。最后在这颗树上再一堆骚操作比拓扑结构做inference。


2019/3/31


没看,瞅了一点点unet和unet++


2019/4/1


  1. Graph Neural Networks: A Review of Methods and Applications
    虽然是一篇survey paper,但是第一次看这个图网络的paper还是很激动(膜拜)的。比较科普、读起来比较舒畅。GNN的两个motivation: 一、CNN能够分离多维局部化的空间特征并形成可解释的表征。CNN的 局部连接、共享权重和多层 的三个key都可以generalize到图。不过困难在于从CNN到图转化时会从欧式空间转化成非欧式空间。二、graph embedding. 然后又说了GN值得研究的fundamental原因:1. CNN/RNN不能处理图因为它们按照次序处理结点,但是图没有顺序。而为了present一个图,我们需要遍历所有可能的词序作为CNN/RNN的输入,这里面有很多冗余计算。解决的方法是处理每个结点忽略次序。2.图里面的边代表着两个点的依赖关系,GNN可以利用这一点。3.GNN探索去从非结构化数据里生成图对于高阶AI是一个强有力工具。之后说了图type: 有向、Heterogeneous和带权。然后有非常长的段落介绍了Propagation的类型,各种模型介绍一下。之后开始说训练方法,包括GraphSAGE用Neighbor Aggregate可以生成unseen nodes的embedding,FastGCN通过重要性采样。之后介绍了几个frameworks,将不同的模型集成到一个框架中(这部分没看)然后就是应用,包括三个scenario:1)结构化的,例如物理啊化学啊知识图谱啊。2)关系结构不明确的,例如图(分类分割、视觉问答等等,提到了zero-shot learning与few-shot learning)、文本(分类机翻关系抽取blabla) 这一小部分可以mark一下再看看。3)其它例如生成模型、组合优化等等。最后就是GNN的问题:shallow structure(网络一般不超过三层)、动态图、scalability。

2019/4/3


  1. DeViSE: A Deep Visual-Semantic Embedding Model

Google的一篇经典的paper。之前看过,现在再细看一下。问题的背景是,当物体种类很多的时候,图像识别系统很难去分类。作者的remedy是去leverage其它来源的数据,比如测试集的数据。作者证明该模型可以在1000个类的ImageNet上达到SOTA效果,此外还可以在数千个测试集中没有的种类中做预测。作者在introduction里指出当前的visual recognition systems的问题是将所有的labels看成是不相连和不相关的,导致不能将已经训练的label的语义特征transfer到未见过的label。在Previous Work这一节,作者主要cite了三个前人工作,说一下最后一个:当前的impressive的zero-shot方法依赖label的语义信息,比如会用到每一个类的descriptive properties,而他们的方法不用。模型是这样的,平行地先执行这两个:1. 预训练一个简单的language model(在wikipedia的corpus上) 2. 预训练一个SOTA的图像分类网络。然后construct一个深度的visual-semantic的模型来预测图像label文本的向量表示。见下图非常清晰的architecture。loss是dot-product的相似度的hinge ranking loss(用了L2-loss效果差)。最后说一下这篇paper的意义影响深远,它对于现在火热的zero-shot/few-shot learning有很大的指导意义。虽然idea不复杂,但这种水准高的paper真是读得让人如沐春风orz


  1. 在标benchmark的时候发现了部分数据缺失的问题,就是作为三个训练特征之一的特征,有一个在test数据上没有这个数据,后面再想办法吧。2. 下次不在打球后吃晚饭了,7点去操场然后10点打完才出去吃了麻辣烫,现在还毫无睡意…

2019/4/4


  1. GATED GRAPH SEQUENCE NEURAL NETWORKS
    当时还在UofT读master的作者在微软剑桥研究院实习时做的工作,ICLR2016. 作者指明starting point是之前的GNN的工作,他们在该工作基础上修改了取使用gated recurrent单元和新的优化技巧。相比于纯依赖序列的模型(例如LSTM)更灵活。图特征的学习包括两个settings: 1) 学习输入图的表示 2)学习内部状态的表征。2更重要因为我们想要图结构问题的输出不是单独的分类问题。在这些例子中,挑战在于如何学习已经生成的部分输出序列的特征。GNN映射图到输出通过两个步骤:一是有一个处理步骤计算每一个节点的节点表示;二是一个输出模型映射点表征和相应的标签到一个输出Ov。…实验阶段是bAbI和图算法学习的任务上做的…中间细节明天继续看

2019/4/9


  1. DeepAM: Migrate APIs with Multi-modal Sequence to Sequence Learning
    hkust的guxd的icjai2017的paper. task是API migration,可以理解为从代码迁移(例如把一段Java代码转化到CSharp代码)引发出来的一个支线任务。目前的代码迁移的工具主要存在的问题是依赖双语项目,即要求数据集的代码本身是bilingual的,而bilingual projects本身是sparse availability的。举了一个例子,作者分析的2008-2014年的GitHub上的11K个java项目,只有15个有CSshape版本。然后主要做法是:挖掘对,然后用seq2seq进行embed这个API到一个定长向量来反应自然语言描述的语义信息,于是把源语言的API和目标语言的API joint embed到同一个空间去,距离越近的表示越相似,最后通过一个SMT技术phrase-to-phrase翻译映射来选择最终的pairs。里面有一段很有意思,作者在Method部分定义这个问题的时候,说到我们要学习的是一个correlation f:As -> At,即将源语言的API到目标语言的API的一个映射,但是呢这两者是heterogeneous的,不好直接去求这个f。于是,他们的insight是“third party translation”,即既然As和At的关系不好学习是吧,在词汇和使用模式的意义上说,他们都可以映射到高维的用户目标(high-level user intents)也就是自然语言描述,因此我们给这两者找到了一个桥梁d代表一个单词序列(emmm看到的第一反应是真鸡贼这也可以自圆其说)接着作者说其实啊这个formulate就是joint embedding的思想blala。OK fine. 总之是篇很好的文章啦

2019/4/11


1.Learning unified features from natural and programming languages for locating buggy source code
最近看的一些paper有几个引用了这篇,就看了看,ps话说这是第一次看到周大佬挂名的paper。主要就是用CNN做特征提取。 ​


2019/4/15


  1. code2vec: Learning Distributed Representations of Code
    一篇以色列某不认识的组织和FAIR的POPL2019的paper(文章特别长,每个部分都写的极为详细)目标是学习代码的embedding,也就是代表代码片段的continuous vector,最终可以应用到很多程序语言相关的任务中。主要贡献是能够集成任意代码到一个固定大小、可以捕获其语义的向量。实验验证的task是semantic labeling of code snippets,也就是在code上面进行标注最可能相关的tag. 然后他们索性就直接根据代码主体来预测方法名。模型的主要idea是在一个代码片段中分离出句法的不同路径(如图一),然后用a bag of distributed vector representations来表示,并使用一个attention机制来计算这些路径向量的加权值从而最终产生一个单个向量。总模型图如图三。其中路径提取是通过构造代码的AST并遍历AST的篇,并且AST的边的宽度代表attention程度(如图二) 在evaluation部分,计算指数包括准确率、召回率、F1 score,接着和不同的方法(CNN/LSTM+attention,Path+CRFs)对比、在短方法和长方法上测试证明robustness、在小的数据上做实验、跑每一个组成部分说明作用,甚至还有一个部分介绍模型的可解释性、画了几张图。在最后贴一下他们的demo网站:http://code2vec.org

《Paper Daily Note》
《Paper Daily Note》
《Paper Daily Note》


2019/4/20


  1. CODE2SEQ: GENERATING SEQUENCES FROM STRUCTURED REPRESENTATIONS OF CODE
    ICLR2019,还是之前看的以色列(勘误,之前竟然写成了伊朗)机构的工作。直接的方法就是把该问题frame成一个机器翻译问题。source是代码中的tokens,target是相应的语言模型,并且在code captioning and documentation benchmarks上取得了SOTA效果(尽管输入序列特别长)作者们提出了一个替代的方法,使用语法上的结构信息去encode代码。将一个给定的代码片段看成是AST的一系列组成路径,每一个路径都用双向LSTM压缩成一个固定大小的向量。在decoding过程中,应用attention机制来对于不同的路径向量进行加权求出每一个输出的token。在code sumarization和code captioning上(如图一)验证了有效性。
    这篇工作和他们的code2vec基本差不多,可以理解为NMT的变种:即encoder不用flat sequence of tokens作为输入,而是每一个AST路径的向量表示(因为一个代码片段有任意多个路径,作者sample了其中的k个)AST路径的第一个节点和最后一个节点是代表着某token的叶节点。每个路径的表示分为encode_path和encode_token两个部分。encode_path就是那个双向LSTM求embedding,encode_token就是把token split成subtoken后的emebdding(我个人喜欢叫这个过程就去驼峰)然后将encode_path和encode_tokenconcat起来再接一个全连接。decoder和attention就是基本那一套。模型图如图2.

《Paper Daily Note》
《Paper Daily Note》

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注