本发明专利技术公开了一种基于深度强化学习的实时Bug分派方法,包括:对初始的bug数据进行预处理,使用深度强化学习DQN算法,将缺陷报告修复任务分派给合适的开发者:初始化循环神经网络参数,初始化所有状态动作对的价值Q;将缺陷报告的文本信息和修复者活跃度信息向量化并作为状态S的初始特征向量;将初始特征向量输入到神经网络Q,通过神经网络Q的前向传播输出每个动作a
A real-time bug dispatch method based on deep reinforcement learning
【技术实现步骤摘要】
一种基于深度强化学习的实时Bug分派方法
本专利技术涉及缺陷报告指派
,尤其涉及一种基于深度强化学习的实时Bug分派方法。
技术介绍
随着互联网的迅速发展和软件开发技术的成熟,越来越容易产生大量的软件bug。传统的依赖人工进行浏览和分析软件,并且进行bug修复的方法无法适应大规模的bug数据。人工进行bug分派是一项十分耗时耗力的事情。在这一问题下,基于机器学习的自动bug分派技术应运而生。缺陷报告的自动分配,是数据分析中的一个经典任务,由于解决该问题具有较大的复杂性和挑战,所以一直都是研究者关注的热点。关注缺陷报告的哪些信息,开发者和缺陷报告之间存在怎样的关系时,能高质量的完成缺陷报告的修复都是我们需要考虑的问题。文献[1]中Lee等人首次尝试使用神经网络进行bug分派,他们用卷积神经网络(CNN)和词嵌入(wordembedding)技术建立了一个自动分类器。实验结果表明,使用所有开发者数据训练的CNN模型,表现要比人工分类的要好得多。文献[2]中Mani等人提出了DBRNN-A算法,算法提出使用双向循环神经网络(BidirectionalRecurrentNeuralNetworks,BiRNN)的一种变体,长短期记忆单元(LongShort-TermMemory,LSTM)来处理序列化的文本特征。文献[3]中席等人创造性的提出了开发者活跃度的概念。他们一方面利用双向循环网络加最大池化方法提取bug报告的文本特征,另一方面利用单向循环网络提取特定时刻的开发者活跃度特征,并融合两者,利用已修复的bug报告进行监督学习。由于文献[3]中的方法同时考虑到了文本信息和开发者活跃度信息,因此我们参考文献[3]中的方法来进行缺陷报告指派。上述文献[1]中的方法通过使用卷积神经网络对开发者数据进行训练,虽然其模型效果比人工分类好的多,但仍存在一定的问题,考虑的信息比较单一,未考虑缺陷报告的相关信息。上述文献[2]中的方法通过使用长短记忆单元来处理序列化的文本特征,获取到了缺陷报告中的前后联系以及整体信息,未将开发者与缺陷报告之间的某种关系进行分析。上述文献[3]中的方法创造性的提出了开发者活跃度的概念,不仅对缺陷报告的相关特征进行提取,还引入开发者活跃度,即开发者参与修复缺陷报告的次数。可以算是对上述两篇文献的总结。但是,该方法是基于offline的缺陷报告分派方法,对于新产生的缺陷报告无法使用已经训练好的模型进行缺陷报告的修复指派,当每次产生新的缺陷报告时,都将重新训练模型,从而导致成本增加,因此有必要考虑一种online的模型来进行实时的缺陷报告分派。
技术实现思路
根据现有技术存在的问题,本专利技术公开了一种基于深度强化学习的实时Bug分派方法,具体包括如下步骤:对初始的bug数据进行预处理,预处理过程包括删除无效开发者修复的bug、删除低效开发者修复的bug、统计并过滤高频和低频词、从而提取bug报告的文本信息,并根据每个bug报告对应的真实开发者,对一段时间内具有相同产品和组件的bug报告进行汇总,获取每个bug报告的开发者活跃度信息;使用深度强化学习DQN算法,将缺陷报告修复任务分派给合适的开发者:初始化循环神经网络参数w1,w2,基于w1,w2初始化所有状态动作对的价值Q;将缺陷报告的文本信息和修复者活跃度信息向量化并作为状态S的初始特征向量;将初始特征向量输入到神经网络Q,通过神经网络Q的前向传播输出每个动作at对应的Q值,根据策略π选择对应的动作;在状态S执行当前动作at得到新的状态s'、奖励R以及是否终止状态的标志flag;将{st,at,Rt,s′t,flag}五元组放入经验回放池D中,更新当前状态s=s';从经验回放池D中随机采样m个样本{st,at,Rt,s′t,flag},t=1,2,...,m,通过深度多语义特征融合方法计算当前期望目标值Q:使用均方误差计算损失函数,并通过神经网络Q反向传播更新参数,重复执行以上步骤,直至参数趋于收敛。进一步的,所述采用深度多语义特征融合方法计算当前期望目标值Q时:使用深度学习中的双向RNN向量表示文本信息,使用深度学习中的单向RNN向量表示开发者信息;对于缺陷修复任务,tf表示该缺陷修复任务的文本高层特征,af表示当前的开发人员参与度高层特征,则开发人员d得分函数可通过以下公式计算得出:Score(tf,af,d)=Wd(tfΘaf)+bd其中,Θ表示高层特征之间的融合方式,Wd是开发者d对应的一组权重向量,bd是开发者d对应的偏置值,将融合后的高层特征经过softmax层归一化操作进行自训练,得到在工作量分配不均情况下的缺陷修复任务分派给开发者的概率:其中神经网络Q的损失函数为:其中ω表示神经网络中的参数,r表示奖惩值,学习参数γ为满足0≤γ<1的常数,Q(s,a)表示当前缺陷报告s选择修复者a的Q值,Q(s',a')表示下一缺陷报告s'选择修复者a'的Q值。由于采用了上述技术方案,本专利技术提供的一种基于深度强化学习的实时Bug分派方法,本方法通过对缺陷报告修复分派问题进行建模,明确其目标函数、状态,动作等各要素定义,并采用强化学习算法(DQN算法)将缺陷修复任务分派给开发者,相比offline的训练模型,由于该算法每更新一次参数就需要重新采样,所以可以动态的对新产生的缺陷报告进行分派,实现了随来随分派的online功能。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术方法的流程图。具体实施方式为使本专利技术的技术方案和优点更加清楚,下面结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚完整的描述:如图1所示的一种基于深度强化学习的实时Bug分派方法,具体包括如下步骤:S1:对初始的bug数据进行预处理,预处理过程包括删除无效开发者修复的bug、删除低效开发者修复的bug、统计并过滤高频和低频词、从而提取bug报告的文本信息,获取开发者活跃度信息。其中预处理过程包括如下方式:S11:删除无效开发者修复的bug,即当bug的修复者为['unassigned','issues','needsconfirm','swneedsconfirm','nobody','webmaster','inbox']其中之一时,被认为是无效开发者,将其对应的bug删除。S12:删除低效开发者修复的bug,即当开发者修复的bug数小于阈值时,为低效开发者,否则为高效开发者。S13:统计并过滤高频和低频词,即当词汇在文本信息中出现的次数太少或者太多时,该词汇被称为是噪音词,本文档来自技高网...
【技术保护点】
1.一种基于深度强化学习的实时Bug分派方法,其特征在于包括:/n对初始的bug数据进行预处理,预处理过程包括删除无效开发者修复的bug、删除低效开发者修复的bug、统计并过滤高频和低频词、从而提取bug报告的文本信息,并根据每个bug报告对应的真实开发者,对一段时间内具有相同产品和组件的bug报告进行汇总,获取每个bug报告的开发者活跃度信息;/n使用深度强化学习DQN算法,将缺陷报告修复任务分派给合适的开发者:初始化循环神经网络参数w
【技术特征摘要】
1.一种基于深度强化学习的实时Bug分派方法,其特征在于包括:
对初始的bug数据进行预处理,预处理过程包括删除无效开发者修复的bug、删除低效开发者修复的bug、统计并过滤高频和低频词、从而提取bug报告的文本信息,并根据每个bug报告对应的真实开发者,对一段时间内具有相同产品和组件的bug报告进行汇总,获取每个bug报告的开发者活跃度信息;
使用深度强化学习DQN算法,将缺陷报告修复任务分派给合适的开发者:初始化循环神经网络参数w1,w2,基于w1,w2初始化所有状态动作对的价值Q;
将缺陷报告的文本信息和修复者活跃度信息向量化并作为状态S的初始特征向量;
将初始特征向量输入到神经网络Q,通过神经网络Q的前向传播输出每个动作at对应的Q值,根据策略π选择对应的动作;
在状态S执行当前动作at得到新的状态s'、奖励R以及是否终止状态的标志flag;
将{st,at,Rt,s′t,flag}五元组放入经验回放池D中,更新当前状态s=s';
从经验回放池D中随机采样m个样本{st,at,Rt,s′t,flag},t=1,2,...,m,通过深度多语义特征融合方法计算当前期望目标值Q:
使用均方...
【专利技术属性】
技术研发人员:陈荣,张佳丽,
申请(专利权)人:大连海事大学,
类型:发明
国别省市:辽宁;21
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。