《COOBA: Cross-project Bug Localization via Adversarial Transfer Learning》论文笔记

论文发表在AI顶会(CCF-A):IJCAI-2020。
论文链接:https://www.ijcai.org/proceedings/2020/493

简单说一下意义:

《COOBA: Cross-project Bug Localization via Adversarial Transfer Learning》论文笔记_第1张图片

  主要任务是做一个cross project的bug location,这里所说的bug定位和我了解的不太一样,他是根据bug report来识别定位出跟这个bug report相关的code file。那么为什么要做cross project的呢?因为在项目新建立的初期,within project内并没有足够的bug-fix data拿来做有监督训练,所以要研究如何将其它项目数据(有充足的训练数据的项目)拿来训练,在新建立不久的项目上做bug location往往更符合实际要求。

简单说一下动机:

  作者是想采用某些共享训练结构将source project和target project的public information特征提取出来,采用某些私有结构分别训练提取source project和target project各自的private information。
  因为如果按照以往的within project的做法,在一个项目里训练然后直接拿去另一个项目上做预测无疑会引入project-specific的private information特征(这maybe有害)。

简单说一下模型的输入输出:

也就是一个二分类任务:
输入: bug report:自然语言, code file: 代码AST编码)
输出:有无相关性。

简单说一下使用到的技术:

《COOBA: Cross-project Bug Localization via Adversarial Transfer Learning》论文笔记_第2张图片

1.AST作为图结构
2.预训练的Glove词向量作为节点编码向量和embedding层初始化
3.Bi-LSTM
4.CNN
5.GCN
6.对抗学习:generator也就是GCN+CNN的特征提取器,discriminator是用来判断该次的数据是来自source project还是target project)

简单说一下上述结构的特色:

1.因为bug report是英文自然语言,所以设置为一个共享结构LSTM学习。
2.因为source project和target project有些公共特征那就用共享的CNN学,project-specific的私有特征用GCN学。
3.因为源项目和目标项目的数据量相差很大,所以分别搞了一个MLP来融合非共享GCN和共享CNN的特征。
4.利用对抗学习的思想来加强公共特征的提取(预测数据来自来自source project还是target project)

简单说一下训练过程:

cross project配置:
训练:source project全量数据 + 20%target project数量
测试:80%target project数量

within project配置:
论文没说,但看意思应该就是这样
训练:在source project全量数据训练
测试:在target project全量数据测试

损失函数:
在这里插入图片描述
其中:
在这里插入图片描述
在这里插入图片描述
  作者是考虑到这样一个事实,即在源项目和目标项目中,错误报告和相关的代码文件以类似的方式相关联,即所有的错误报告都描述了产品是如何被损坏的,所以LSTM提取的bug report的特征b和GCN+CNN提取的code file特征c的欧氏距离作为损失:
在这里插入图片描述

简单说一下实验部分:

算了不说了,比较简单自己看论文。
指标: Top-10 Rank 和 MAP。
对比: 一些现有的within-project 和cross project方法。

两个实验:
1.在这两个指标上对比其他模型
2.对比加了对抗学习的消融实验

简单说一下总结:

byebye~

你可能感兴趣的:(PLP,NLP,bug,location,nlp,人工智能,自然语言处理,软件工程)