基于开源软件包依赖特征的标签推荐方法、模型及系统与流程

文档序号:19942854发布日期:2020-02-14 23:24阅读:652来源:国知局
基于开源软件包依赖特征的标签推荐方法、模型及系统与流程

本发明涉及开源软件社区领域,尤其涉及基于开源软件包依赖特征的标签推荐方法、模型及系统。



背景技术:

开源软件社区使得更多开发者能便捷地参与开源项目并为开源项目做出贡献,因此,开源软件社区极大地推动了开源软件的应用与发展。日益增多的开源项目与用户,使得在开源社区中准确快速地检索所需的开源软件变得更加困难。

github、stackoverflow以及freecode等开源软件社区开始通过标签(tag)来标记开源软件功能或特征,帮助用户精确检索开源软件。然而当前github开源软件社区只能由开发者手工给开源软件加标签,而大量的开源软件在开发者发布时并没有加入标签,导致通过标签准确查找开源软件的效率不高。

因此,设计实现一个开源软件标签推荐系统能够有效地解决上述问题,一方面为软件开发者在上传开源软件时推荐或标注符合其特征的标签,另一方面帮助用户在检索开源软件时找到满足需求却没有打标签的软件。



技术实现要素:

本发明提供了一种基于开源软件包依赖特征的标签推荐方法、模型及系统,用以解决在开源社区中准确快速地检索所需的开源软件很困难的技术问题。

为解决上述技术问题,本发明提出的技术方案为:

一种基于开源软件包依赖特征的标签推荐方法,包括以下步骤:

从软件的readme描述文本中提取长度固定的主题分布特征向量;

提取软件依赖包的标签信息,并输出为长度固定的标签独热向量;

利用神经网络对特征的整合能力,将主题分布特征向量和标签独热向量拼接组合成开源软件的特征向量,将开源软件的特征向量作为输入特征,建立基于神经网络的标签预测模型,输出预测的软件标签分布分数;

根据软件标签及其对应的软件标签分布分数,通过机器学习方法,按照软件标签分布分数的数值大小将软件标签降序排列后,对开源软件进行标签推荐或对开源软件自动加标签。

优选地,从软件的readme描述文本中提取长度固定的主题分布特征向量,包括以下步骤:

用lda模型从软件的readme描述文本中抽取readme软件描述的主题信息向量,lda模型的输入是readme描述文本和给定的主题数目,lda模型的输出是每个readme文档的主题分布特征向量。

优选地,提取软件依赖包的标签信息,并输出为长度固定的标签独热向量,包括以下步骤:

将开源软件的依赖包的标签作为软件的一部分描述特征,利用独热编码对依赖包的标签进行编码得到标签独热编码,将软件的依赖特征(标签独热编码)表示为一个向量[t1,t2,t3…,tn],其中向量中的每一位代表一个标签;

对于一个开源软件,重复以上步骤,得出开源软件的依赖包及各个依赖包的标签独热编码,对标签独热编码进行按位或运算,输出软件的依赖包的所有标签独热向量。

优选地,利用独热编码对依赖包的标签进行编码时,名称相同但是包管理器不同的标签,视为不同的标签,分别分配独热编码中不同的位。

优选地,开源软件的特征向量中还包括,编程语言特征向量,编程语言特征为,开源软件的编程语言比例的特征向量[lang1,lang2…langn],其中每一项代表当前软件中该编程语言行数所占的比例。

优选地,在拼接组合成开源软件的特征向量时,将主题分布特征向量[topic1,topic2…topicn]、标签独热向量[tag1,tag2,…tagm]以及编程语言特征向量[lang1,lang2…langq]三者进行拼接组合,形成一个一维向量[topic1,topic2…topicn,tag1,tag2,…tagm,lang1,lang2…langq]作为输入,构建全连接神经网络作为标签预测模型;标签预测模型的输出为预测的软件标签分布分数,标签预测模型训练的目标是最小化代价,其中,代价是一个损失函数,由两部分组成:其中一部分是推荐的标签与实际标签的偏差值;另一部分是正则项,用于限制模型的复杂度。

优选地,软件依赖包的标签信息,通过以下步骤得到:

从软件项目的文件中获取依赖配置文件;构建依赖配置文件解析器解析依赖配置文件,获得软件项目依赖的包,从包托管服务网站获取依赖包的标签信息。

本发明还提供一种基于开源软件包依赖特征的deptagrec模型,包括:

基于lda的软件描述信息主题抽取模块,用于从软件的readme描述文本中提取长度固定的主题分布特征向量;

基于软件依赖关系的标签依赖网络抽取与表示模块,用于提取软件依赖包的标签信息,并输出为长度固定的标签独热向量;

基于神经网络的标签推荐整合模块,用于利用神经网络对特征的整合能力,将主题分布特征向量和标签独热向量拼接组合成开源软件的特征向量,将开源软件的特征向量作为输入特征,建立基于神经网络的标签预测模型,输出预测的软件标签分布分数;还用于根据软件标签及其对应的软件标签分布分数,通过机器学习方法,对开源软件进行标签推荐或对开源软件自动加标签。

本发明还提供一种计算机系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一方法的步骤。

本发明具有以下有益效果:

本发明的基于开源软件包依赖特征的标签推荐方法、模型及系统,通过结合开源软件的包依赖信息和readme软件描述信息(以及在优选方案中的软件编程语言),构建了开源软件特征提取模型,利用全连接神经网络预测标签。实验结果表明将包依赖信息引入软件特征的deptagrec方法在我们提供的github开源软件数据集上取得了良好的性能表现。

除了上面所描述的目的、特征和优点之外,本发明还有其它的目的、特征和优点。下面将参照附图,对本发明作进一步详细的说明。

附图说明

构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明优选实施例的本发明的基于开源软件包依赖特征的标签推荐方法的流程示意图;

图2是本发明优选实施例的本发明的基于开源软件包依赖特征的deptagrec模型的结构示意图。

具体实施方式

以下结合附图对本发明的实施例进行详细说明,但是本发明可以由权利要求限定和覆盖的多种不同方式实施。

开源软件的宗旨就是鼓励软件开发者共享自己的代码与模块,通过使用他人所共享的高质量包(package)来提高软件开发效率,开源软件社区中包的依赖关系甚至都形成了复杂的关系网络。不同的软件使用了相同的软件包或者具有相似的包依赖关系,反映出这些软件之间存在潜在的关系,可能利用的技术或方法相似,可能实现的部分功能接近等。因此,利用开源软件所依赖的包的结构信息与readme描述文本信息,有助于预测软件主题或推荐软件标签。本发明是一种通过分析软件包依赖关系与readme描述文本信息,利用神经网络进行标签推荐的方法deptagrec,要点在于引入开源软件项目之间的依赖信息,用于标签推荐,进而提供一种基于软件描述信息与依赖信息的lda与神经网络的标签推荐方法。

参见图1,本发明的基于开源软件包依赖特征的标签推荐方法,包括以下步骤:

从软件的readme描述文本中提取长度固定的主题分布特征向量;

提取软件依赖包的标签信息,并输出为长度固定的标签独热向量;

将主题分布特征向量和标签独热向量拼接组合成开源软件的特征向量,利用神经网络对特征的整合能力,将开源软件的特征向量作为输入特征,建立基于神经网络的标签预测模型,输出预测的软件标签分布分数(即软件标签分布概率);

根据软件标签及其对应的软件标签分布分数,通过机器学习方法,按照软件标签分布分数的数值大小将软件标签降序排列后,对开源软件的进行标签推荐或对开源软件自动加标签。

通过结合开源软件的包依赖信息和readme软件描述信息,构建了开源软件特征提取模型,利用神经网络预测标签。实验结果表明将包依赖信息引入软件特征的deptagrec方法在我们提供的github开源软件数据集上取得了良好的性能表现。

实际实施时,以上的方法还能进行以下的扩充或应用,以下实施例中的技术特征都能相互组合,实施例仅作为示例,不作为对技术特征的正常组合限制。

实施例1:

参见图1,本实施例的基于开源软件包依赖特征的标签推荐方法,包括以下步骤:

s1:从软件的readme描述文本中提取长度固定的主题分布特征向量[topic1,topic2…topicn];将不定长的文本信息转换为主题分布特征向量,优选通过如下步骤得到:

用lda模型从软件的readme描述文本中抽取readme软件描述的主题信息向量(根据分词与词频进行抽取,可采用现有的通用lda模型),lda模型的输入是readme描述文本和给定的主题数目,lda模型的输出是每个readme文档的主题分布特征向量。

lda主题模型可以将文档集中每篇文档的主题按照概率分布的形式给出,其将文档看成由一组词构成的一个集合,词与词之间没有顺序或先后关系。一个文档可以包含多个主题,文档中每个词都由其中的一个主题生成。lda主题模型的文档生成过程可以看作模型的一种概率取样过程。

s2:提取软件依赖包的标签信息,并输出为长度固定的标签独热向量[tag1,tag2,…tagm]。步骤如下:将开源软件的依赖包的标签作为软件的一部分描述特征,利用独热编码对依赖包的标签进行编码得到标签独热编码,将软件的依赖特征表示为一个向量[t1,t2,t3…,tn](n为软件依赖包标签数量,由数据集中的依赖标签数量得出,n根据文档本身的长度以及用户实际目的来进行合理取值,例如,当用户实际目的是找到核心词时,n取值尽量小,例如取值为5),其中向量中的每一位代表一个标签。若依赖包具有该标签,则该位为1,否则为0,此处我们不考虑该标签出现的次数。例如:我们假设依赖包的标签一共只有3种,则软件依赖标签的独热编码长度为3,例如[1,0,1]代表依赖包具有第一个和第三个标签,而不具有第二个标签。

其中,软件依赖包的标签信息的获取,优选通过从软件项目的文件中获取依赖配置文件;构建依赖配置文件解析器解析依赖配置文件,获得软件项目依赖的包,从包托管服务网站获取依赖包的标签信息。本实施例中,利用独热编码对依赖包的标签进行编码时,名称相同但是包管理器不同的标签,例如:php语言的composer包管理器下依赖包的标签“web”与npm包管理器下依赖包的标签“web”,我们将其看作两个不同的标签,分别分配独热编码中不同的位。

对于一个开源软件,重复以上步骤,得出开源软件的依赖包及各个依赖包的标签独热编码,对标签独热编码进行按位或运算,输出软件的依赖包的所有标签独热向量。

s3:获取编程语言特征,编程语言特征为开源软件的编程语言比例的特征向量[lang1,lang2…langq],其中每一项代表当前软件中该编程语言行数所占的比例。

s4:将主题分布特征向量[topic1,topic2…topicn]、标签独热向量[tag1,tag2,…tagm]以及编程语言特征向量[lang1,lang2…langq]三者进行拼接组合,形成一个一维向量[topic1,topic2…topicn,tag1,tag2,…tagm,lang1,lang2…langq]作为输入(n,m,q分别为对应向量的长度,拼接组合时,三者的排列次序不限定),构建全连接神经网络作为标签预测模型;标签预测模型的输出为预测的软件标签分布分数,标签预测模型训练的目标是通过最小化代价函数得出最优的输出,其中定义的代价函数的值越小越优(其中,本实施例中的代价是一个损失函数,由两部分组成:其中一部分是推荐的标签与实际标签的偏差值(模型损失函数);另一部分是正则项(模型正则化项),用于限制模型的复杂度。),优选使用adam算法作为我们的全连接神经网络优化算法。全连接神经网络包含输入层、隐藏层、输出层,其中输入层和输出层只有一层,隐藏层可以包含一层或多层。除了输入层以外,每一层的所有神经元都与上一层的所有神经元相连,所以叫全连接神经网络。

s5:根据软件标签以及对应的软件标签分布分数,通过机器学习方法,对开源软件进行标签推荐或对开源软件自动加标签。

参见图2,本实施例还提供一种基于开源软件包依赖特征的deptagrec模型,包括:

基于lda的软件描述信息主题抽取模块,用于从软件的readme描述文本中提取长度固定的主题分布特征向量;

基于软件依赖关系的标签依赖网络抽取与表示模块,用于提取软件依赖包的标签信息,并输出为长度固定的标签独热向量;

基于神经网络的标签推荐整合模块,利用主题分布特征向量和标签独热向量拼接组合成开源软件的特征向量作为输入特征,建立基于神经网络的标签预测模型,输出预测的软件标签分布分数;还用于根据软件标签以及对应的软件标签分布分数,通过机器学习方法,对开源软件进行标签推荐或对开源软件自动加标签。

本发明还提供一种计算机系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一方法的步骤。

以下对上述方法进行验证:

采用一个面向github平台的爬虫程序,从github平台爬到每个软件的readme描述文本(包括readme.md、readme.md、readme、readme.rst,以及readme.rst等)、标签信息以及包依赖文件(包括npm依赖文件package.json、composer依赖文件composer.json、以及pypi依赖信息文件requirements.txt、requirements和setup.py等),并保存到本地。主要收集python、javascript与php这三种语言的star数目大于100的仓库,一共收集到43595条数据。经解析和清洗后,保留出现次数达100次以上的标签,留下25467条数据和116个标签。选取三个包依赖文件npm、pypi以及composer中标签出现次数排名前100的标签,作为包依赖的标签信息。

基于上述的数据,使用以下四种基准方法,与本发明提出的基于开源软件包依赖特征的标签推荐方法(以下简称deptagrec)进行对比实验。

四种基准方法:

(a)tagcnn:基于卷积神经网络(cnn)的标签推荐方法,其结构与常用于文本分类任务的textcnn类似。

(b)tagrnn:基于循环神经网络(rnn)的标签推荐方法,循环神经网络是一种常用于自然语言处理任务中的神经网络模型,因为考虑了文本上下文的关系,在文本任务中具有良好性能表现。

(c)gru:门限循环单元网络的结构类似于循环神经网络,但结构比循环神经网络复杂,引入了重置门和更新门的门控机制,两个门共同控制单元内信息的更新策略。

(d)bigru:bigru与gru类似,但bigru是双向结构,同时考虑文本的前文信息和后文信息。

实验时,将清洗后的25467条数据集按照4:1的比例分成训练集与测试集,即训练集19100条,测试集6367条。首先在训练集上训练模型,然后在测试集上测试模型性能。对于每个仓库数据,推荐k个标签,且每个方法实验执行10次取最好成绩。

实验采用推荐算法的召回率(recall)、精确率(precision)以及综合评价指标(f1)作为评价指标。实验对比结果如表1和表2所示,表1和表2分别为k=5及k=10时,本发明的deptagrec方法与其他四种基准方法的三个性能评价指标的对比结果。

表1本发明与四种基准方法实验结果比较(k=5)

表2本发明与四种基准方法实验结果比较(k=10)

从表1和表2可以看出,当k=5时,deptagrec方法在三个性能指标上均取得最好的性能:召回率比其它方法高0.104~0.194;当k=10时,deptagrec方法在召回率上明显更优,高于其它方法0.2以上,但是精确率低于tagcnn方法。但由于标签推荐的首要目标是推荐更多的正确标签,因此召回率性能更重要,所以认为在k=10时deptagrec方法同样具有更优的性能。从实验结果可以看出deptagrec在三个性能评价指标上均有较好表现,并且在大部分指标项上优于其他方法,即本发明的deptagrec方法比现有方法具有更好的标签推荐效果。

综上可知,本发明通过结合开源软件的包依赖信息和readme软件描述信息,构建了开源软件特征提取模型,设计实现了基于神经网络的开源软件标签推荐方法(deptagrec),其实验结果表明将包依赖信息引入软件特征的deptagrec方法在上述的github开源软件数据集上取得了良好的性能表现。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1