一种基于神经网络的众包软件开发者推荐方法与流程

文档序号:16325190发布日期:2018-12-19 05:53阅读:308来源:国知局
一种基于神经网络的众包软件开发者推荐方法与流程
本发明涉及智能推荐方领域,尤其涉及一种基于神经网络的众包软件开发者推荐方法。
背景技术
众包软件开发是众包技术在软件开发领域的应用。软件需求方根据功能或者特性将复杂软件进行模块切分后将全部或者部分软件模块以众包开发任务的形式外包出去,让大众开发者去完成这些任务。现在业界出现了不少众包软件开发平台,比如topcoder、kaggle等,其中最大的平台是topcoder。topcoder平台10多年来一直引领着众包软件开发的潮流,并拥有超过100万的用户。典型的众包软件开发流程包括:软件需求方在众包平台发布软件开发任务;用户(开发者)选择合适的任务进行注册;注册开发者者提交相应的工作;最后根据评审规则确定开发者得分选择获胜者。根据数据统计,23%的任务注册用户不会提交任何工作,这种极高的放弃率会导致任务失败。如何尽可能早地选择潜在的获胜者,即将可靠性高的人推荐出来从而提升软件开发效率和保障软件质量,是众包软件开发领域中的重要问题。现有技术中,在处理众包软件开发者推荐时主要从两个角度切入:(1)基于已经过滤的用户做多标签分类,构建相应的分类器,预测最为可靠的用户。这种方法认为可靠的用户一般具有多次的获胜历史,从而将获胜次数低于一定阈值的用户进行过滤,最后保留少量开发者,并把这些开发者作为标签,采用一些任务的属性综合起来构建分类器,预测可能获胜的用户,并把他们作为可靠用户推荐给相关的开发任务。(2)基于用户状态来预测用户角色。这种方法认为用户当前的状态以及相应的历史,对他之后的行为会产生影响。用户角色可以划分为注册者,提交者和获胜者。他们基于用户当前已经注册的用户的历史数据来预测用户的提交情况,进而判断用户是否是提交者;根据已经提交了工作的用户的历史数据和提交情况来预测用户的获胜几率,进而判断用户是否为获胜者。现有技术在推荐可靠用户时,在没有任何用户状态信息时准确率不高,之前采用多标签分类的技术,top5的准确率最高不超过70%;二基于角色的预测方法,在未知用户注册状态时,很难对用户是否为注册者进行预测,进而无法准确地预测后续状态。现在的技术方案都仅能针对大数据集进行分析建模,缺乏对小数据集的研究。由于多标签分类需要大量的数据才能训练出一个非常完美的模型,从而限制了这种方法在数据量不足时的应用。此外,基于用户角色的数据角色预测方法,需要使用用户的历史数据,小数据集上的用户历史显然太少,这导致我们难以训练模型。现有技术缺乏对于冷启动问题的解决。多标签形式的分类问题,基本假设中认为只有注册次数高于一定阈值时才是可靠的,那些获胜历史少的用户都被过滤,这导致对于一些缺少获胜历史的用户难以进行推荐。而基于用户角色的预测,依旧需要大量的用户历史数据才能训练分类器,对于那些缺乏相应历史的用户,则无法处理。技术实现要素:本发明针对众包软件开发者推荐的问题,提出了一种基于神经网络的众包软件开发者推荐方法,从而保证软件质量和开发效率。本发明解决众包软件开发者推荐中的三个问题:(1)众包任务的历史数据量不足,难以准确建模;(2)众包软件开发过程中用户注册、提交等状态不明确致使推荐范围受限的问题;(3)用户缺乏历史数据导致的冷启动问题。本发明提出了一种基于神经网络的众包软件开发者推荐方法,所述方法中的模型总体包含三个主要组件,注册行为预测器,提交行为预测器,获胜预测器。这三者分别可以预测用户的相应行为,提交预测器训练基于用户已经注册后的情况,获胜者预测器训练基于用户已经提交后的情况,注册者预测器预测器训练时则没有任何先决条件。三个预测器的输入均为处理后的任务开发者特征向量,然后内部算法可以计算出相应的注册概率,提交概率和获胜概率。首先初始化获胜概率为1。针对这个初始化的获胜者预测出的获胜概率p,注册者和提交者预测器会相继对预测出的注册概率和提交概率不在前人为设定的阈值的用户的获胜概率进行修改,直接把获胜概率置为0,并且此时直接结束模型对该输入的预测行为。对于所述三个组件,采用元模型进行构建,基础学习模型使用extrees,xgboost,以及深度神经网络dnn三个算法,并使用元学习方法进行算法的选择。附图说明图1为本发明的整体处理过程;图2为一实施例对于采用迁移学习的方法进行处理过程;图3为本发明的任务特征处理过程;图4为本发明的数据预处理流程。具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。本发明提出一种基于神经网络的众包软件开发者推荐方法,如图1所示,进行推荐时,所述方法中包含三个主要组件:注册行为预测器,提交行为预测器,获胜行为预测器。这三者分别可以预测用户的相应行为,提交行为预测器基于用户已经注册后的情况进行预测,而获胜者预测是基于用户已经提交后的情况进行预测,注册者预测器预测没有任何先决条件。针对获胜者预测出的获胜概率p,注册者和提交者预测器会相继对预测出的注册概率和提交概率不在前百分之top_r,top_s的用户的获胜概率进行修改,所述r,s为0到1的阈值,可以人为设定,直接把获胜概率p置为0,并且此时直接结束模型对该输入的预测行为。对于这三个组件,采用元模型进行构建,基础学习模型使用extrees,xgboost,以及深度神经网络dnn三个算法,并依据原学习方法进行分析算法选择。在针对小数据集情况模型表现不佳的问题,采用迁移学习的方法进行处理,具体如图2所示。首先需要寻找开数据集用户交互较多的数据集对,使用cr参数完成,所述cr参数表示连个数据集间相同用户的数目占相应数据集总用户数目的比例。然后将那些与某个小数据集a的cr值高的数据集上的模型作为邻居模型存储起来,在预测小数据集的某个软件开发任务时,寻找邻居数据集上相似的任务用并用邻居模型预测,然后将预测结果和在本数据集上的预测结果依据相似度加权求和,推荐相应的用户。个别大数据集由于用户数目特别多,直接进行推荐预测存在困难,本发明采用数据聚类,但是模型训练阶段使用整个数据集的模式来融合协同过滤的信息。如图3所示为整个推荐模式流程图。其中code,assembly,和first2finish是本发明构建模型时采用的topcoder中的三个大数据集例子,本发明既保证了模型学习到足够的知识,同时又能降低模型预测时的难度。首先采用聚类算法,针对数据集里的任务信息进行聚类,保证每个子类中的任务平均数量不超过给定阈值(推荐500到1500左右适宜),此过程中构建出针对特定数据集的聚类模型。然后针对每一个数据集,将在其上训练好的模型应用到聚类后的子类数据集进行预测。需要注意的是,在进行聚类时,仅使用(剔除时间信息后的)任务特征向量,目的是为了将内容相近的任务聚类到子数据集里;而训练预测器模型时则使用包含用户和任务特征的特征向量。这种设计方案既保证了模型从大数据集中学习到足够的知识,同时又由于每个子类数据集中用户数量较少而提高模型推荐用户时的准确率。任务数据集(challengedata)由用户特征和任务特征两部分共同构成,分别抽取对用户注册、提交、获胜等影响较大的特征。用户特征采用用户历史行为和技能等特征维度进行构建,其中用户特征如表1和表2所示,主要反映用户的可靠性。任务特征采用如表3所示,主要反映当前特征的内容和要求,以及和用户的匹配程度等。表1表示了用户的三种历史行为,以及之前的表现历史;表2表示了于用户可靠性相关的三类特征。表3则是对影响用户行为的任务相关特征进行了构建,此外还针对用户技能任务需求进行了匹配度计算md,md为用户包含的任务所需技能占所有任务所需技能的百分比,也计入了特征维度。表1历史数据类型具体内容(在一个给定时间点之前)注册历史注册频率和距离上次的注册天数提交历史提交频率和距离上次提交的天数获胜历史获胜频率和距离上次获胜的天数表现历史上次任务的得分和排名表2用户特征描述技能针对最长获胜者拥有的技能使用独热编码会员年龄自从用户注册topcoder平台算起的天数历史数据表1表3特征特征描述编程语言对出现的所有编程语言使用独热编码技术需求对最常见技术使用独热编码任务需求文本描述使用lda主题模型编码文本发布时间任务发布距今的天数任务持续时间任务发布到提交截止之间的天数任务难度引用文献中的定义在构建完特征之后,分别使用注册状态,提交状态和是否获胜对每一条记录进行标记,作为后续训练的标签。此外,由于样本不均衡现象很明显,所以后续又采用了重新采样方法对此进行了处理。整个数据预处理流程如图4所示。首先针对任务数据的集合,构建这个任务集合里所有任务的特征,同时将参与过这个集合里的任务的用户放到一个用户集合里。然后对每一个任务,构建相应用户集合里所有用户的特征信息,并基于该任务特征与用户特征构建任务数据向量,同时给予此用户在这个任务中的注册、提交、获胜信息赋予这个特征向量三个独立的二分类标签。由于95%以上的情况下,每个任务的参与人数占用户集合大小不超过10%,所以在模型训练阶段需要使用重新采样技术均衡正负样本比例,不能对测试数据集或需要预测的数据集进行重采样。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1