好的棋牌室_好的棋牌室用DL实现Bug自动归类:微软研究院提出DBRNN

中国围棋网2018年01月12日 12时01分55秒
62

原标题:学界 | 用DL实现Bug自动归类:微软研究院提出DBRNN-A

选自arXiv

机器之心编译

参与:黄小天、刘晓坤


自动 bug 归类算法可以被形式化为分类任务,其中主要挑战在于 bug 描述通常包含噪声。在这项研究中,作者提出了一种新型 bug 报告表征算法 DBRNN-A,能无监督地学习长词序列的句法和语义特征,以及语境表征。他们主要使用了未修复的 bug 报告,而过去的研究都没有重视这一点。此外,作者还开源了整个数据集、具体的数据集划分以及源代码,使得该研究可复现。

在通常的过程中,终端用户在系统上工作时遇到 bug(也称为问题或缺陷),并在 bug 追踪系统中报告这一问题 [8]。图 1 展示了谷歌 Chromium 项目中(bug ID: 638277)报告的一个 bug 示例截图。bug 报告通常包含一个 bug 总结和一个涉及再现步骤的详细描述。已修复状态的 bug 同样包含修复 bug 并被称为其所有者的开发者。bug 归类的过程包含多个步骤,其中第一步主要是分配 bug 到其中一个更可能解决这一 bug 的开发者。因此,在该研究的其余部分中,bug 归类指的是为开发者分配 bug 报告的任务 [1]。

在大规模系统中,随着大量 bug 不断出现,人工分析和归类 bug 就变的异常费力。人工归类 bug 通常根据 bug 报告的内容而进行,主要包含总结和描述。尽管额外的输入源已在文献中被探索,比如来自 github[3] 的开发者分析,并且利用了组件信息 [5],绝大部分研究努力已聚焦在利用 bug 报告内容进行归类 [2] [14] [27] [28] [29] [32] [33]。通过 bug 报告内容,自动 bug 归类可以转化为一个分类问题,并把 bug 标题和描述映射到其中一个开发者(分类标签)。然而,bug 报告内容包含带噪声的文本信息,比如代码片段和堆栈跟踪细节,如图 1 所示。处理这些非结构和噪音数据是分类器学习中的一个主要挑战。

图 1:谷歌 Chromium 项目中 bug 报告的一个截图(bug ID: 638277)。

图 2:来自谷歌 Chromium bug 库中的 bug 报告,被用作标注模板以训练分类器。

研究贡献

从长文本(例如 bug 报告描述)中按单词顺序学习语义表征是很有挑战性的研究问题。因此,作者提出了一种深度学习技术,能以无监督的方式从 bug 报告内容中学习简明的固定长度的表征,即该表征可以直接通过学习数据得到,而不需要手动特征工程。作者尝试解决的问题如下:

最近,基于 RNN 的深度学习算法革新了词序列表征的概念,并在很多应用中(例如语言建模和机器翻译)做出了很有潜在价值的突破。Lam 等人 [17] 使用 DNN 结合 rSVM 以学习源代码和 bug 报告之间的普遍关系,并用于有效的 bug 定位。White 等人 [30] 提供了一个广泛的视角,讨论了深度学习如何应用于软件库中以解决一些挑战性的问题。本项研究的主要贡献可总结为:

  • 提出了一种使用 DBRNN-A(基于注意力和 LSTM 单元的深度双向循环神经网络)的新型的 bug 报告表征方法。作者提出的深度学习算法可以在长文本中「记住」其中的语境。

  • 一个开源 bug 库中有 70% 的未归类和未解决的 bug 报告,很多文献都忽略了这一点 [14]。在本项研究中,作者提出了一种机制,能以无监督的方式利用所有未归类的 bug 学习 bug 表征。

  • 作者在实验中使用了来自三个开源 bug 库的实验数据,分别是来自 Google Chromium 的 383104 个 bug 报告、来自 Mozilla Core 的 314388 个 bug 报告,和来自 Mozilla Firefox 的 162307 个 bug 报告。由于在不同的训练-测试划分的数据集上的分类器性能是不可比较和不可复现的,因此作者开源了整个数据集、具体的数据集划分以及源代码,使得该研究可复现。

  • 作者进一步研究了提出的 bug 训练方法在交叉数据测试场景中的有效性。通过使用 Chromium 项目中的 bug 训练模型,并将模型用在 Core 和 Firefox 项目(Mozilla bug 库)中进行 bug 归类,展示了该深度学习模型的迁移学习能力。


  • 本文提出的方法

    图 4:本文提出的完整算法的重要步骤流程图。

    自动 bug 归类算法可以被形式化为一个分类任务,取 bug 标题和描述为输入,将其映射到开发者(分类标签)之一。图 4 展示了自动 bug 归类算法的主要步骤,详细解释如下:

    (1)一个 bug 语料库的总结(标题)、描述、报告时间、状态和所有者都是从一个开源 bug 追踪系统中提取出来的。

    (2)处理非结构化描述中的 URL、堆栈轨迹、十六进制代码和代码片段需要对深度学习模型进行特定的训练,因此在本研究工作中,这些内容在预处理阶段被删除了。

    (3)在语料库中出现至少 k 次的独特单词被提取为词汇表。

    (4)已归类的 bug(D2)被用于训练和测试分类器,而所有未归类/开放的 bug(D1)被用于训练深度学习模型。

    (5)使用基于注意力机制的深度双向循环神经网络学习 bug 表征,其中考虑了 bug 总结和描述,并将其组合为词 token 序列。

    (6) 将归类 bug(D2)分成训练和测试数据,并进行 10 倍交叉验证以消除训练偏差,

    (7) 使用已学习的 DB-RNN 算法提取训练 bug 报告的特征表征,

    (8) 训练监督分类器以执行作为 bug 归类过程一部分的开发者分配,

    (9) 接着使用已学习的深度学习算法提取测试 bug 的特征表征,

    (10) 通过提取的特征和已学习的分类器,可以在测试集中为每一个潜在的开发者预测概率值并计算分类准确率。

    标签:好的棋牌室,好的棋牌室官网,好的棋牌室娱乐

    本文链接:http://www.weiqi.cc/developer/123466.html 转载请注明出处