字母圈brat是什么(软件缺陷知识库的特定命名实体识别)

论文摘要: 软件的Bug是在软件开发和维护过程中无法避免的问题,为了能够更有效地管理软件Bug,通常使用Bug追踪系统来记录、管理和追踪每个项目的Bug。Bug知识库蕴含的丰富信息为建立以实体为...

论文摘要:

软件的Bug是在软件开发和维护过程中无法避免的问题,为了能够更有效地管理软件Bug,通常使用Bug追踪系统来记录、管理和追踪每个项目的Bug。Bug知识库蕴含的丰富信息为建立以实体为中心的知识库提供了可能性,以有助于理解和修复软件Bug。现有的命名实体识别系统只适用于结构化、形式化、书写良好的文本,由于其语法结构清晰,拼写错误少,从而能够直接用于Bug领域的特定命名实体识别。而对于Bug数据,它们通常为无固定格式的文本,并且混合多种语言甚至程序代码、缩写和软件特定词汇。在这篇论文中,我们总结了Bug实体的特性,提出了一种面向Bug实体的分类方法,基于2个开源项目(Mozilla和Eclipse)构建了一个基准数据集。在此基础上,我们利用条件随机场(CRF)模型和词嵌入技术,提出一种Bug特定的命名实体识别方法,称之为BNER,我们使用一个实证研究评估了BNER方法的准确度,结果显示我们构建的基准数据集能够适应于Bug特定的命名实体识别任务,并且BNER方法在交叉项目的命名实体识别任务上行之有效。

字母圈brat是什么(软件缺陷知识库的特定命名实体识别)

研究背景:

(1) Bug知识库的Bug数据

如今Bug追踪系统被广泛用于软件项目中存储和管理Bug数据,如Bugzilla,随着软件项目的开发,这些Bug追踪系统已经累积了大量的Bug数据。截止到2017年12月,Bugzilla系统中光Mozilla和Eclipse就已经分别有734000和2604000篇Bug报告。Bug报告通常包含:标题、描述、评论、附件、重要性、报告者、委派者(即修复者)等其他多个特征。其中,标题是Bug的简要描述,而描述则是Bug的详细信息。评论包含了对于该Bug报告的自由讨论记录。为保证实体分类的准确性,我们仅研究Bug报告中根本原因可识别的已修复Bug及其相关的提交记录。我们从Mozilla和Eclipse中分别随机采样了4000篇Bug报告和400篇报告,并且抽取其中的标题、描述、评论、产品和组件等特征用于构建我们的数据集。我们人工地尝识别这些采样后的Bug报告,发现了以下问题:

a) 标题和描述通常使用"when","where","what","how"等词;

b) 大部分命名实体识别方法能够处理高质量的文本,即结构化、形式化、书写形式良好的文本,而Bug数据缺乏上述特征,反而混合了多种语言、程序代码、缩写等,导致传统命名实体识别方法在此类数据上的识别困难。

(c) 随着软件的发展,开始出现更多在移动端的Bug,并且出现了大量移动端词汇,所以我们新增一类Bug为“移动端通用类”。

(d) 此外,在Bug的发现过程中,通常包含许多测试代码,因此我们将该类实体也统一分为“测试通用类”

(2) Bug分类

在软件Bug知识库中,有很多不同类型的Bug,一些追踪系统出于不同的目的提供了Bug的分类方法。经过调研发现,已有的Bug分类方法不能直接用于Bug实体的分类任务。组件是定位软件Bug的常用属性,其对于每个Bug报告都是唯一的,并且在Bug追踪系统中,该属性还被用于检索Bug。因此,在人工的实体标注过程中,该属性是有效的参考信息,为适应于不同类型的软件,我们将组件属性分为以下7个类别:

· 核心类:核心方法的实现错误,如循环错误和变量错误;

· 界面类:界面显示错误;

· 网络类:网络环境和网络通信问题;

· I/O类:输入输出处理错误;

· 驱动类:设备驱动问题;

· 文件系统类:文件系统差异问题,如exFAT和写时拷贝的问题;

· 硬件类:硬件架构问题。

(3) 条件随机场(CRF)

对于自然语言文本,实体是基本的信息单元,包含了文本的主要信息。命名实体识别(NER)技术便是识别实体,判断文本是否属于一个实体,并且将其划分到特定类的过程。NER过程被用于很多自然语言处理任务中,如知识图谱,QA系统和机器翻译任务。NER方法通常被分为两大类:基于规则和基于统计方法。基于规则方法主要用于识别通用实体,如人名、地名、机构名等。而基于统计的方法,则需要更大数据集,但是不需要专业知识。CRF作为最可靠的序列标注方法之一,能够很好地用于Bug特定命名实体识别任务。在我们的方法中,使用了基于马尔可夫依赖的线性链式CRF模型,CRF模型通过输入一个自然语言序列X,来预测一个状态序列Y,其中X为观测值,而Y则为隐含变量值。特定地,在我们的任务中使用了一个主流的CRF工具集:CRF -0.58。

(4) 词嵌入

词嵌入广泛用于自然语言模型和NLP的特征提取任务,其优势在于相似的词经过嵌入后仍然保持更近的距离。在我们的方法中,我们使用word2vec模型,考虑到Skip-gram模型在生僻字上的更优表现,在该论文中,我们使用Skip-gram模型来构建语义特征向量。

BNER方法:

(1) 数据集构建:

a) 构建数据集:

首先,对Bug报告进行数据预处理,即对文本进行分词、词性标注和人工标注,并构建基准数据集。由于当前没有在Bug数据上的NER,因此我们首先构建了一个基准数据集,并且抽取了Bug报告中的文本元素作为主要的NER数据来源,之后采用人工标注的方式,对Bug报告中的实体进行标注。

(b) 数据预处理

在获得Bug数据集后,便进入与训练过程,该过程使用NLTK包进行分词和词性标注任务。并且我们修改了NLTK中的正则表达式参数来更好地适配Bug特定实体所具有的联合结构的匹配。如“about:memory”便是Firefox的内置页面地址。我们没有去除停用词,因为停用词将语义链和上下文环境也同样分割。

(c) 人工实体标注

我们使用一种基于Web的标注工具:Brat,来进行人工实体标注任务。在标注过程中,使用IOB2格式,即B (begin), I (inside) and O (outside)的格式。例如"Junk characters"是一个含有两个词的实体,属于界面类。根据该标注格式,"Junk"是用B-GUI标注的首词,而"characters"则是用I-GUI标注的第二个词,B-和I-表示文本块的开始和内容部分,而其他无具体意义的实体外的词,则被标注为O-,如"the"。

根据之前的论述,整个处理过程被分为两部分:类别定义和人工标注。我们定义了Bug实体的7大类,上述类别,均通过我们实验室的老师和已毕业学生对其进行定义,其在使用Bug追踪系统和Bug知识库挖掘上都有丰富经验。此外,我们首先利用4中已有的分类方法对实体进行分类,并对不同结果的分类尽心个讨论,以确定最终确定的分类,保证Bug数据分类的质量。之后,再对实体进行人工标注,再标注过程中,参考GitHub、维基百科和官方网站等数据源,来处理难标注的实体,并且使用二次标注,当标注结果前后不一致时,则经过讨论再最终确定实体的标注结果。

(2) 特征提取

a) 文本特征

在NER系统中,文本特征是一个针对当前词的上下文窗口,在我们的工作中,我们使用CRF模型作用于不同大小窗口:±1至±5词大小。经过实验交叉验证,±1的窗口大小具有更好的实验效果。然而,我们±2到±5的窗口大小上并未发现任何明显的不同,因此,最终我们选择使用±2作为最终的窗口大小。

b) 专有词特征

在特定的领域,有特定的专有词,如公共领域的人名、地名等,为此,我们构建了一个软件领域的新专有词典。该词典通过使用GitHub Awesome Lists, Stack Overflow, Wikipedia和其他软件官方数据构建。

(c) 拼写特征

拼写特征反映了当前词的属性,在Bug报告中,有些词含有特定的结构,我们仅考虑以下几类特殊情况:是否首字母大写或全部大写,是否含有点,是否包含冒号。并且检查其后缀是否匹配软件专有词表中的格式,如识别组件,若含有数字,则检查数字是否含有特殊意义,如最大数字边界。

(d) 词嵌入特征

词嵌入特征包含了实体的未标注的信息(即语义信息)并且根据周围词建模了实体的上下文信息。我们使用词嵌入方法,提取实体的句法和语法信息,它们代表了Bug报告的主要内容特征。我们使用word2vec从大量的Bug报告中训练得到词向量表示,并且使用词向量采用k-means聚类算法将词分为1024个类别,用于支持实值运算,而对于未定义的类别,采用“其他”标注。

(3) CRF学习

在我们的工作中,使用上述语言特征,基于CRF的BNER方法来训练一个机器学习模型,来识别Bug特定实体,并使用BIO格式将实体标注为上述定义的实体类别。

实证研究

(1) RQ1:我们的方法是否能够在我们的新数据集上有效地识别实体?

为进行NER任务,在BNER方法中,我们设计了上述基本特征、语义特征、专有词特征、拼写特征和嵌入特征,这些特征构成了识别Bug实体的关键元素,所以我们首先需要评估这些不同特征对于CRF方法的影响。

(2) RQ2:我们的BNER方法是否能够在交叉项目上进行有效的NER?

BNER被用来在我们的Bug知识库中识别Bug特定实体,然而,有时候我们使用BNER检索Bug时,Bug数据本身是不可靠或特征不足,这时候我们需要使用交叉项目的数据集上对BNER进行验证。所以我们需要判断是否BNER方法在交叉项目的软件Bug特定实体识别上的有效性。

我们在Mozilla和Eclipse两个项目上,构建了一个全新的数据集,并且使用人工标注的方式获取到了标签。在对模型评估时,采用了F1指标作为评估标准:

为回答RQ1,评估BNER方法在不同特征上的有效性,我们首先使用基础特征,即词和词性特征,来训练CRF模型,然后将基础特征和拼写特征和专有词特征融合再次训练,最终结合嵌入特征来训练,每次都使用10折交叉验证对模型进行模型选择和验证。

为回答RQ2,评估BNER在交叉项目数据集上的表现,我们从Mozilla和Eclipse中随机选择100条未标注的Bug报告作为测试数据。再利用已标注的数据,分别在Mozilla数据和Eclipse数据上分别训练模型,并利用测试数据测试。最后再将未标注数据混合,形成交叉项目数据集,并重新利用已标注数据重新训练CRF模型,并利用交叉项目数据集测试,来判断其结果是否相同,以评估其再交叉项目数据集上的表现。

实验结果显示,当仅使用基础特征时,BNER达到的F1值为68.29%,结合拼写特征为73.03%,结合专有词特征为80.32%,结合词向量特征为86.54%,结合词聚类特征为87.72%。数据说明,使用词嵌入特征能够有效提升有监督CRF的精确度。而当使用词聚类特征时,能够有效地提高模型的召回率。

图中显示了模型在不同项目上的不同类别上的F1值,而表中则显示了其具体的召回率及准确度值。

上述结果均证明,BNER仅使用基本特征时表现不佳,而其他特征则能够很好地提升模型的准确度,并且拼写特征能达到不错效果,特别是当实体为数字时。而使用专有词特征及词向量特征,均能提升模型性能,并且对模型新年有较大影响和提升,这便回答了RQ1的问题,说明不同的特征对模型具有不同程度的影响。

在交叉项目数据集的实验中,数据集和词嵌入都来自不同的项目,虽然所有的数据均来自于Bug报告,但仍然有很多词或实体有不同的词频,因此影响NER效果。实验数据显示,在Mozilla数据集上训练的模型,在Eclipse测试集上使用词向量特征的F1值为79.76%,使用词聚类特征为78.47%,而在Eclipse数据集上训练的模型,在Mozilla测试集上使用词向量的F1值为75.16%,而使用词聚类特征为74.71%。

从下表中可以看出,在使用词向量之后,分别能达到17%和14%的性能提升。而使用混合数据训练后,能达到7.5%的提升。

上述数据证明,BNER模型在交叉项目数据集具有良好表现。

致谢

本文由南京大学软件学院2018级硕士邹智鹏翻译转述。

感谢国家重点研发计划(2018YFB1403400)和国家自然科学基金(61690200)支持!

  • 发表于 2023-05-20 22:30
  • 阅读 ( 74 )
  • 分类:互联网

0 条评论

请先 登录 后评论
Q64789
Q64789

697 篇文章

你可能感兴趣的文章

相关问题