首页> 中国专利> 一种基于混合分类技术的大众贡献审阅自动标注方法

一种基于混合分类技术的大众贡献审阅自动标注方法

摘要

本发明公开了一种基于混合分类技术的大众贡献审阅自动标注方法,其涉及软件协同开发领域。该方法包括:首先对GitHub平台数据进行采集,所收集的数据主要包括大众合并请求和其他开发者对这些大众合并请求的审阅评论;然后选取GitHub经典的项目进行人工分析,结合领域相关研究定义完善的类别体系;然后随机采样一部分pull‑request和其对应的所有审阅评论,利用在线标记平台通过多人协同的方式进行人工标注;最后利用人工标记的数据集训练基于混合分类技术的标注模型,再利用训练所得模型对未标记审阅评论进行自动化标注。本发明能够提升人工代码审查的自动化水平,降低人工成本,提高大众贡献汇聚效率。

著录项

  • 公开/公告号CN107291902A

    专利类型发明专利

  • 公开/公告日2017-10-24

    原文格式PDF

  • 申请/专利权人 中国人民解放军国防科学技术大学;

    申请/专利号CN201710484791.3

  • 申请日2017-06-23

  • 分类号G06F17/30(20060101);G06F11/36(20060101);G06F9/44(20060101);

  • 代理机构11429 北京中济纬天专利代理有限公司;

  • 代理人陆薇薇

  • 地址 410073 湖南省长沙市开福区德雅路109号

  • 入库时间 2023-06-19 03:34:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-05-08

    授权

    授权

  • 2017-11-24

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20170623

    实质审查的生效

  • 2017-10-24

    公开

    公开

说明书

技术领域

本发明涉及软件协同开发领域,尤其涉及一种基于混合分类技术的大众贡献审阅自动标注方法。

背景技术

开源软件技术经过数十年的蓬勃发展,已经在全球性软件工程领域占据了主导地位,其应用范围已经覆盖了操作系统、云计算、物联网、大数据等互联网时代所有的关键领域。开源软件极大地加速了企业的创新速度、降低了运维成本、缩短了新产品的上市时间。开源软件技术已成为软件持续创新的重要动力。

随着Web 2.0的兴起,开源社区逐渐地吸纳了一些社交网络的相关技术,开源软件创作活动的开放性与协作性进一步加强,逐渐形成了基于大众参与的社交化编程模式(Social Coding)。在社交化的开源社区中(如Github、Trustie),所有参与者都处于一个完全开放的开发环境,参与者们互相之间能及时地了解到其他人的动态,社区内任何一个公开项目的发展轨迹对所有开发者都是可见的。GitHub社区从2008年上线,其用户数每年以指数级增长。截止到2016年4月,GitHub托管了超过3500万个开源软件代码库,吸引了超过1400万个软件开发者。无论是项目数量还是参与人数,GitHub都远远超过了传统的开源社区,甚至传统社区的总和。大规模的用户和外围贡献者成为了开源生态的新兴主体,展现出了前所未有的生产力。开源运动进入到了前所未有的火热时期,大众化协同开发已是开源软件创新的源动力。

在软件协同开发方面,尤其是代码管理方面,版本控制系统无疑起到了至关重要的作用。以Git为代表的新一代分布式版本控制系统一经问世就被广泛地应用,这些工具实现了真正意义上的分布式协同开发,提高了开发效率。基于Git,GitHub开创了一种全新的围绕合并请求(即Pull-Request)的分布式协同开发模式。这种全新的软件协同开发模型大大降低了外围开发者进入项目的门槛,任何开发者都可以自由地向任何一个感兴趣的软件项目贡献代码,因此Pull-request在GitHub社区得到了广泛的应用。自2010年Pull-request开发技术被提出后,短短六年时间内GitHub社区已经产生了6600多万的Pull-request,并且近些年的增长趋势越来越迅猛,可以看出Pull-based开发模式在协同开发社区中被广泛使用。

GitHub社区在Pull-based的开发模式下集成了轻量级的代码审阅流程。在GitHub上,基于Pull-request的贡献具体过程如图1所示。

首先,对于感兴趣的项目,外围开发者在本地“克隆”中心代码库的镜像仓库;基于该镜像代码库,外围开发者可以独立地在本地完成自己的代码创作;当镜像仓库中的所有代码编写完成时,贡献者可以向中心代码库发送合并请求(Pull-request),将完整的代码变更以对比的形式展现给项目的核心管理者,同时贡献者还需要对他所提交的Pull-request提供介绍性的文本信息;核心人员为确保中心库的代码质量,会对提交的合并请求进行测试,他们有些通过在本地实际部署查看运行结果,有些则是借助自动持续集成工具(CI)生成测试报告,这些测试结果是审阅者进行审阅的一项重要参考依据;综合考虑一个合并请求的代码更改、描述信息、测试结果等信息,核心开发者对其进行质量审查。为了减少项目管理者的工作量,GitHub社区把代码人工审阅的任务通过众包的模式开放给大众,除了项目的核心开发人员,其它的社区成员(非核心开发者,也非Pull-request的提交者)都有权限参与到贡献的讨论与完善过程中。对于一个Pull-request,审阅者的审查关注点是很多样的。Pull-request要解决的bug是否真的存在、贡献者想要添加的新功能是否符合真实需求、代码变更里是否包含缺陷以及代码风格是否与项目的规范保持了一致性都是常见的审查点。此外,为了营造良好的协同开发的氛围,核心开发者还会和贡献者进行一些社交性的互动,以感谢或者鼓励外围开发者的贡献;一位或多位核心开发者综合考虑代码审阅结果,对提交的Pull-request的合并与否做出裁定。如果该Pull-request通过审查,则镜像仓库中的新代码和完整的提交记录将被合并到中心代码库中。反之,该合并请求将被拒绝,即中心代码库不会发生任何变化。

从Pull-request的审阅过程我们可以发现,代码审查是协同开发过程中至关重要的环节,它保证了只有高质量的代码变更才能进入到主版本库中。因此,对审阅评论的深度研究是优化其它代码审查任务(如代码审阅人推荐、pull-request优先级确定)的关键一环。对审阅评论的自动标注能够提升人工代码审查的自动化水平,降低人工成本;与此同时,还能帮助核心开发者更好地组织代码审阅过程,使得大众贡献的质量能够持续优化,提高大众贡献汇聚效率。

发明内容

为实现上述目的,本发明提供一种基于混合分类技术的大众贡献审阅自动标注方法,包括如下步骤:

S1、对GitHub平台数据进行采集,所采集的数据包括大众合并请求(Pull-request)和其他开发者对所述大众合并请求(Pull-request)的审阅评论;

S2、选取GitHub经典的项目进行人工分析,结合领域相关研究级定义两级的审阅评论分类体系;

S3、随机采样一部分大众合并请求(Pull-request)和其对应的所有审阅评论,利用在线标记平台通过多人协同的方式进行人工标注,形成数据集;

S4、利用人工标记的数据集训练基于混合分类技术的标注模型,然后利用训练所得标注模型对未标记评审评论进行自动化标注。

作为本发明技术方案的进一步改进,所述步骤S1中,具体采用分布式数据采集系统对GitHub平台数据进行采集,该分布式数据采集系统首先获得感兴趣的项目的数据列表,然后再根据列表信息去抓取详细数据信息。

作为本发明技术方案的进一步改进,所述分布式数据采集系统采用分布式爬取模式,将数据列表信息抽取得到的数据项统一放到一个待爬取队列中,该待爬取队列基于Redis实现;

爬取集群中的爬取服务器各自从该待爬取队列中取出详细数据的URL,然后通过GitHub的官方数据访问接口下载详细的数据信息,从Github爬取的原始数据中抽取目标字段形成结构化数据;并创建token池,每次抓取过程都随机选取一个token进行认证。

作为本发明技术方案的进一步改进,所述步骤S2包括:

S2.1、选取GitHub流行项目进行调研,在人工调研时,对每一个审阅评论,对其标注一段简短的表示其含义的文本信息,完成所有的审阅评论的标注;

S2.2、在所有的审阅评论都被标注完毕后,根据它们的描述信息把其分到不同的大类小组里去;

S2.3、对其中每一类的评论继续往下拆分,分裂过程中,每一个审阅评论会属于一个或多个类别小组中,形成第一级类别体系;

S2.4、对所述初步类别体系执行进一步的分析,确认它的正确性和完整性,最后形成第二级分类体系。

作为本发明技术方案的进一步改进,所述步骤S3包括:

S3.1、构建一个在线多人标记平台,把该在线多人标记平台部署到公网上面,方便标注者能够在其最好的状态下执行标记任务;

S3.2、根据定义的分类模式,利用该在线标记多人平台标记随机选取的审阅评论。

作为本发明技术方案的进一步改进,该在线标记平台的每一个页面可以展示一个Pull-request及其审阅评论,一个Pull-request的所有评论以创建时间为序从上往下依次排列,对一个审阅评论进行标记的时候可以同时选取多个类别标签。

作为本发明技术方案的进一步改进,所述步骤S4包括:

S4.1、利用基于规则的技术和文本分类器对评论进行初步分类,得到一个概率向量,向量大小就是要分的类别个数,每一个项对应着该文本属于这个类别的概率值;

S4.2、由所述概率向量和审阅评论的其他特征值组成新的特征向量,所述其他特征值包括评论类型、文本长度和是否包含代码,该新的特征向量会被第二阶段的预测模型处理并得到一个新的概率向量,遍历这个新的概率向量,如果发现有一个项的值大于0.5,就给这个评论打上相应类别的标签,如果所有项的值都小于0.5,就选取值最大的那个项对应的类别标签;最后,每一个评论都会对应至少一个类别标签。

与现有技术相比,本发明具有以下有益效果:

1、本发明针对开源软件项目托管平台中存在的海量大众贡献审阅,提出了一种基于混合分类技术的自动标注方法。该方法对审阅评论的深度研究是优化其它代码审查任务的关键一环,能够提升人工代码审查的自动化水平,降低人工成本,帮助核心开发者更好地组织代码审阅过程,使得大众贡献的质量能够持续优化,提高大众贡献汇聚效率。

2、本发明开发了针对GitHub平台的分布式数据采集系统。根据其官方提供的API,该系统能够持续、高效地对该平台中指定项目产生的协同开发数据进行监控和采集。

3、本发明设置两级的审阅评论分类体系,该分类体系较相同领域的其他分类体系而言跟更为完善和系统。。

4、本发明构建了在线多人协同标记平台。该在线多人协同标记平台能够以更直观形象的形式展示要标注的数据,能够显著提高标注效率;同时,该在线多人协同标记平台通过一致性检验策略来确保多人协同标注的有效性。

5、本发明提出了基于混合分类技术的自动标注模型,该自动标注模型综合利用基于规则的技术和机器学习算法,能够高效率地对审阅评论进行自动化标注。

附图说明

图1为背景技术中的基于pull-request的开发过程流程图。

图2为本发明的分布式数据采集系统。

图3为本发明的基于混合技术的自动标注模型结构图。

图4为本发明的大众贡献审阅自动标注方法流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明具体实施方法提供一种基于混合分类技术的大众贡献审阅自动标注方法,如图4所示,该方法包括如下步骤:

S1、数据收集;

Github社区提供了丰富的API以访问其网站各种类型的数据,本发明的数据收集模块利用的就是其公开的官方数据访问接口。如图2所示,本发明提出了一种分布式数据采集系统,该分布式数据采集系统首先获得感兴趣的项目的数据列表,然后再根据列表信息去抓取详细数据信息。由于流行项目的开发过程数据量巨大,为了加快抓取速率,本发明采取了分布式爬取模式,数据列表信息抽取得到的数据项统一放到一个待爬取队列中,该待爬取队列基于Redis实现。爬取集群中的爬取服务器各自从该待爬取队列中取出详细数据的URL,然后通过GitHub的官方数据访问接口下载详细的数据信息。从Github爬取的原始数据都是Json格式的,本发明根据实际需要从其中抽取目标字段形成结构化数据。此外,GitHub以Token访问的形式在一定时间段上限制数据访问接口的访问次数,为此,本发明收集了一批token以创建token池,每次抓取过程都随机选取一个token进行认证,从而实现在不影响对方网站性能的情况下以较快速率进行数据采集。

S2、定义分类体系;

以前的工作研究了审查者所面临的挑战以及合并请求所引入的问题,这些工作为学术研究者和工业领域设计人员都提供了非常有价值的指导。受他们工作的启发,本发明决定从更深入的角度去分析审阅者是如何审查一次代码贡献的,而不是仅仅从技术和非技术两种观点去区分。结合相关研究论文以及对Pull-based开发模式的多年研究,本发明选取了GitHub流行项目(Rails、JQuery、Django以及Boostrap等)进行调研。

表1审阅评论的类别体系

在人工调研时,对每一个审阅评论,本发明对其标注一段简短的表示其含义的文本信息,所有的审阅评论都被标注完毕后,开始根据它们的描述信息把其分到不同的组里去。我们先初步分为“技术实现”、“项目管理”和“社交互动”三个大类,对其中每一类的评论我们会继续往下拆分,分裂过程中,每一个审阅评论会属于一个或多个类别小组中。最后的分组情况形成了初步类别体系,对初步类别体系执行进一步的分析,确认它的正确性和完整性。最后抽象出表1所示的二级分类体系,该二级分类体系包括4个大类和11个小类。

S3、人工标记;

为了训练自动的分类算法,根据定义的分类模式,需要先用人工的方式标记随机选取的审阅评论。由于标注数据量大,是一个耗时的任务,为了提高标注效率,可以先构建一个在线多人标记平台,把该在线多人标记平台部署到公网上面,方便标注者能够在其最好的状态下执行标记任务。该在线多人标记平台的每一个页面可以展示一个Pull-request和它的审阅评论,包括Pull-reqeust的标题、描述、提交者的用户名以及它在GitHub网站上的超链接。一个Pull-request的所有评论以创建时间为序从上往下依次排列,每个审阅评论的文本信息、创建时间、评论类型(包括代码级或Pull-request级)、评论者的用户名以及角色信息也都是可见的。对一个审阅评论进行标记的时候可以同时选取多个类别标签,这是因为一条评论通常包含多个评论点。其次,还提供了一个自由文本框让用户自主填写可能没有覆盖到的评论类型。

S4、自动化评论标注;

审阅评论数据通常是短文本,仅仅使用文本挖掘技术不足以充分挖掘评论所包含的信息,因此本发明算法是多阶段的,第一阶段中主要利用文本数据,第二阶段使用其它评论相关的信息;审阅评论另一个特点就是它有很强的规则性,一些标志性词汇或者短语经常出现在特定类型的审阅评论中,因此本发明提出了综合利用基于规则的技术以及机器学习算法(SVM),基于规则的技术主要是利用正则表达式对审阅评论进行匹配。

如图3所示,在对审阅评论进行分类时,第一阶段会利用基于规则的技术和文本分类器对评论进行初步分类,得到一个概率向量,向量大小就是要分的类别个数,每一个项对应着该文本属于这个类别的概率值。第二阶段中,由第一阶段得到的概率向量和审阅评论的其他特征值组成新的特征向量,所述其他特征值包括评论类型、文本长度和是否包含代码等属性,该新的特征向量会被第二阶段的预测模型处理并得到一个新的概率向量,这个新的概率向量也表示一个审阅评论属于某个类别的概率,遍历这个新的概率向量,如果发现有一个项的值大于0.5,就给这个评论打上相应类别的标签。如果所有项的值都小于0.5,就选取值最大的那个项对应的类别标签。最后,每一个评论都会对应至少一个类别标签。

综上所述,本发明提出的基于混合分类技术的大众贡献审阅评论自动标注框架能够提升人工代码审查的自动化水平,降低人工成本,提高大众贡献汇聚效率。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素”。

管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号