结合深度学习和协同过滤技术的复合标签推荐方法与流程

文档序号:21082574发布日期:2020-06-12 16:39阅读:375来源:国知局
结合深度学习和协同过滤技术的复合标签推荐方法与流程

本发明涉及软件检测技术领域,特别涉及结合深度学习和协同过滤技术的复合标签推荐方法。



背景技术:

软件信息站点(例如stackoverflow,askdifferent和askubuntu)对于软件开发人员而言越来越重要。这些站点支持开发人员在网上发布信息,以共享知识,交流新技术并进行协作。通常,这些站点的内容(例如,问题,答案,项目描述,标签等)被称为软件项目。标签是一个简短的标签,由几个单词组成,作为元数据提供给软件项目。标签对于有效地组织和分类这些站点的内容以及为开发人员简化各种操作非常有用。高质量标签应该足够简洁和准确,以概括软件项目的最重要主题。

软件信息站点使用户可以用自己的语言随意地标记他们的帖子。但是,标签的选择不仅取决于开发人员的专业知识和语言技能,还取决于其表达偏好。他们选择合适的标签并不容易。随着软件信息站点的扩展,选择合适标签的两个主要挑战是标签同义词和标签爆炸。

标签同义词描述了具有相同或相似含义的标签现象。这样的同义词标签通常具有不同的表达形式,例如首字母缩写词或完整的拼写,有连字符或没有连字符,有空格或无空格,大写或小写等。即使是被普遍认可的标签也有不同的描述,例如,一些开发人员经常把``c#”描述为``csharp”,``javascript”为``js”。标签爆炸表明不断增加的软件项目也导致了标签的急剧增长。例如,到目前为止,stackoverflow上有超过58000个标签。在这些软件信息站点上产生了如此大量的标签,不可避免地会产生噪音。软件项目的分类变得越来越差,这严重影响了用户查询的准确性和速度。

自动标签推荐技术可以通过重用现有的高质量标签来应对这些挑战。现有的自动标签推荐技术可以大致分为两大类:基于内容的方法和基于协作过滤的方法。基于内容的方法(例如fasttagrec和tagcnn)采用传统的机器学习或深度学习技术基于历史软件项目的内容来构造多标签分类器。这些方法可以通过学习软件项目和标签之间的关系来分配多个标签。基于协同过滤的方法(如tagmulrec)注重相似的历史软件项目的标签通过基于当前推荐的软件项目和历史对象之间的语义相似性定位top-n类似的对象。

基于内容的方法通常依赖于足够数量的训练样本,对于训练样本较少的标签,这种方法很难进行精确分类。而基于协同过滤的方法仅仅考虑了与当前软件项目相似的很小一部分软件项目,缺乏从全局的分析。



技术实现要素:

针对现有技术存在的上述问题,本发明的要解决的技术问题是:能准确给出软件项目标签推荐的方法。

为解决上述技术问题,本发明采用如下技术方案:结合深度学习和协同过滤技术的复合标签推荐方法,包括如下步骤:

s100:数据准备,从目标软件信息站点收集历史软件项目,并进行如下处理:

s101:对所述软件项目中提取项目描述和标签,并去除噪音,得到规范化描述和高质量标签;

s102:所有规范化描述组成语料库,对语料库中的所有单词进行特征提取,将每个单词表示为d维向量,从而得到每个单词和与该单词相对应的词向量;组成每个规范化描述的所有单词的词向量构成该规范化描述的矩阵;

s200:建立模型,分别建立tagdc-dl模型和tagdc-cf模型,将所有规范化描述的矩阵作为输入,分别输入到tagdc-dl模型和tagdc-cf模型中,分别得到所有标签的多标签可信度列表和所有标签的基于相似度的置信概率列表,然后利用一个线性加权模块得到每个标签的最终置信概率列表;

s300:标签推荐,给定一个新的软件项目,首先经过s100的预处理得到新的软件项目对应的待预测规范化描述的矩阵,将该待预测规范化描述的矩阵作为输入,输入到s200中建立的模型中,得到新的软件项目对应的所有标签的多标签可信度列表和所有标签的基于相似度的置信概率列表,然后再计算新的软件项目中每个标签的最终置信概率列表,最后通过将新的软件项目的最终置信概率列表中的概率值进行排序,概率值最大的n个标签则为推荐标签。

作为改进,所述s101得到规范化描述和高质量标签的过程如下:

s1011:设置标签出现阈值,遍历提取的历史软件项目中的所有标签:如果标签的出现次数小于或等于阈值,则该标签便为低频标签,删除所有低频标签;

如果历史软件项目中某个软件项目中的所有标签都为低频标签则删除该软件项目;

s1012:使用带有默认参数的nltk进行预处理过程,包括大小写转换,文本分词,停用词删除,词干提取和特殊标点符号删除。

作为改进,所述s102的具体过程为:利用word2vec工具包中的skip-gram模型对语料库进行特征提取,所述word2vec的输出是语料库词典,该语料库词典包括所有规范化描述的单词和与该单词相对应的词向量。

作为改进,所述s200建立所述tagdc-dl模型计算所有标签的多标签可信度列表的过程如下:

s211:单词表示学习:

设oi表示软件项目,oi.q∈rl×d表示oi对应的规范化描述的矩阵,其中l是描述的长度,而d是单词向量的大小,令xi=rd是与描述oi.d中的第i个单词相对应的d维单词向量;

首先规范化描述的矩阵oi.d=[x1,x2,……,xl]输入bi-lstm层以提取当前单词的上下文信息,bi-lstm模型提取序列信息并将上下文信息概括为隐藏状态hi,在bi-lstm中,前向lstm生成的前向上下文信息与其先前的存储单元隐藏状态和当前输入向量xi,而反向lstm生成的反向上下文信息对应于其下一个存储单元隐藏状态和当前输入向量xi,可以分别按公式(1)计算得到:

将单词的词向量及其对应的上下文信息向量hi∈r2n拼接起来,记为x′i,x′i∈rl×d如公式(2)所示:

x′i=[xi,hi](2);

s212:描述表示学习:

将规范化描述oi.d用学习加强的矩阵表示x∈rl×d=[x′1,x′2,……,x′l],并将x输入卷积层以提取本地特征,当卷积层中的卷积核滑过一个规范化描述时,可以检测到该规范化描述上不同位置的特征,采用零填充策略对每个规范化描述的边界进行建模,给定一个带有偏差项b的内核ki,根据公式(3)计算得到每个规范化描述的特征图ci:

其中,f表示relu激活函数,使用多个卷积核来获取规范化描述中的各种特征图,所有i个特征向量按公式(4)组合起来:

c=[c1,c2,……,ci](4);

采用三个并行的cnn网络,它们的卷积核窗口大小分别为1、2、3,并将卷积层三个分支的所有特征图拼接起来作为规范化描述的基本语义特征图d∈rl×3i

s213:标签概率计算:

s213a:s212生成的基本语义特征图d被输入主胶囊层以提取更高级别的特征:

当滑过基本语义特征图d时,在每个卷积核kj中执行一系列卷积运算,以输出一系列$d$维胶囊,类似于卷积层中的计算,主胶囊中的胶囊pj∈rd,可以按公式(5)计算得到:

其中,g表示非线性squash激活函数,可以将矢量输出的长度限制在0和1之间,以表示每个类别的概率,而b是偏差项;

s213b:在主胶囊层中一共含有j个卷积核时,胶囊特征图可以按公式(6)排列得到:

p=[p1,p2,……,pj](6);

s213c:在主胶囊层上执行动态路由算法以生成标签胶囊层的胶囊,其中第j个标签胶囊可以按公式(7)计算得到:

uj|i=wijui

其中,uj|i是预测向量,它可以通过将主胶囊层的输出向量ui乘以权重矩阵wij得到,cij动态路由的整个迭代过程相关的耦合系数,耦合系数cij是由softmax函数计算得到,该函数可以确保第j个胶囊的所有耦合系数之和为1;

s213d:公式(8)中定义的损失函数来指导tagdc-dl的训练过程。

其中,tj表示第j个标签是否为当前软件项目的真实标签,当且仅当当前规范化描述选择了第j个标签时,该值为1,m+和m-是上限和下限的阈值,分别设置为0.9和0.1。|vj|是向量vj的模长,λ是固定值0.5,它可以通过减小所有类的向量的模长来停止初始学习,t表示软件信息站点中候选标签的数量,vj的模长表示分配给软件项目的每个标签的多标签置信概率;

s213e:获得每个规范化描述的所有标签的多标签可信度列表,第i个规范化描述的置信概率列表由公式(9)计算得到:

作为改进,所述s200建立所述tagdc-cf模型计算基于相似度的置信概率列表的过程如下:

s221:计算oi.d所有历史软件对应的规范化描述的矩阵之间的余弦相似度,找到与oi相似度最大的top-n个软件项目,它们的标签用于推荐oi的标签;

s222:设oi.d包含l个单词,则其规范化描述发向量表示形式di如公式(10)所示:

假设oj是另一个软件项目,并以dj作为规范化描述的向量表示,则可以通过di和dj之间的余弦相似性来度量oi和oj之间的相似性,如公式(11)所示:

s223:令ti=[t1,t2,……,tn]是oi的标签列表,其中n是候选标签的数量,在公式(12)中计算的基于相似度的置信概率列表是top-n个最相似对象的所有相似度与oi及它们自己的标签列表tj的加权和;

作为改进,所示s200得到每个标签的最终置信概率列表过程为:

将获得的所有标签的多标签可信度列表和所有标签的基于相似度的置信概率列表作为输入带入公式公式(14),得到软件项目所对应的所有标签的最终置信列表:

其中,α∈[0,1],表示多标签置信度列表对于最终置信列表的贡献权重,β∈[0,1]表示基于相似度的置信度列表对于最终置信列表的贡献权重。

tagdc-dl是一种基于内容的方法,它为标签推荐任务构建了深度学习模型多标签分类器。为了提高标签推荐的准确性,我们使用bi-lstm模型提取每个单词的上下文信息以增强其语义表达,然后使用具有多个卷积核的cnn模型进一步提取局部特征。具体来说,由于其在多标签文本分类中的优势,我们利用胶囊网络为每个标签输出多标签置信度。同时我们发现如果先前标记的软件项目在文本上与当前软件项目相似,则与相似软件项目相关联的标签也可能与当前软件项目相关。

tagdc-cf将应用软件项目之间的相似性,这是一种协作过滤技术,可以为每个标签输出基于相似性的置信度。我们将这两个模块视为互补,并且深度学习技术和协作过滤技术的结合有望改善我们模型的性能,以实现更准确的分类。

相对于现有技术,本发明至少具有如下优点:

1.本发明方法使用单词学习增强型cnn胶囊的深度学习模块(tagdc-dl)和协作过滤模块(tagdc-cf)。它从两个不同的角度分析标签推荐任务,并利用软件项目之间的语义相似性及其自身的深层语义特征来获得更准确的标签推荐。

2.将tagdc与两种最先进的基线方法fasttagrec和tagcnn进行了比较,对九种不同大小的数据集进行了比较。实验结果表明,与两种最先进的方法(fasttagrec和tagcnn)相比,该方法具有更好的性能,并且有了实质性的改进。此外,评估结果还表明,tagdc比其不完整的版本更好,这突出了将tagdc-dl和tagdc-cf结合在一起的好处

附图说明

图1为tagdc的总体工作流程。

图2为tagdc-dl是单词学习增强型cnn胶囊模块。

图3为tagdc,tagdc-dl和tagdc-cf在所有数据集上的recall@5值。

图4为tagdc,tagdc-dl和tagdc-cf在所有数据集上的recall@10值。

图5为当改变top-n的数量时试验用的五个数据集上的实验结果的趋势,图5arecall@5,图5brecall@10,图5cprecision@5,图5dprecision@10,图5ef1-score@5,图5ff1-score@10。

具体实施方式

下面结合附图对本发明作进一步详细说明。

本发明提出了一种用于标签推荐任务的新型复合模型tagdc,该模型是两个模块(即tagdc-dl和tagdc-cf)的组合。该方法利用了每个软件对象描述中的信息,并结合了深度学习技术和协作过滤技术的优势。详细地,tagdc-dl通过从历史软件对象及其对应的标签中学习来构造多标签分类器。tagdc-cf是tagdc-dl的补充部分,可以通过定位与当前推荐软件对象相对应的最重要信息,从描述之间的语义相似性方面增强我们模型的有效性。在九个数据集上进行了广泛的实验,从不同方面评估了我们的tagdc。实验结果不仅表明我们的方法可以大大提高标签推荐任务的水平,而且还可以将tagdc-dl和tagdc-cf结合使用我们的方法

一种结合深度学习和协同过滤技术的复合标签推荐方法,包括如下步骤:

s100:数据准备,从目标软件信息站点收集历史软件项目,并进行如下处理:

s101:对所述软件项目中提取项目描述和标签,并去除噪音,得到规范化描述和高质量标签;这样,我们可以确保提取每个软件项目都含有带多个标签的描述;

具体地,得到规范化描述和高质量标签的过程如下:

s1011:设置标签出现阈值,遍历提取的历史软件项目中的所有标签:如果标签的出现次数小于或等于阈值,则该标签便为低频标签,删除所有低频标签;

如果历史软件项目中某个软件项目中的所有标签都为低频标签则删除该软件项目;

这样我们就得到的所有如那件项目都至少含有一个高质量标签。低频标签的主要原因有两个。一种是标签本身存在错误。另一个是标签对应于相对少见的主题,因此开发人员并未广泛认可它们。接下来,对于开发人员问答站点中的软件项目,我们将标题和正文组合为问题描述。另外,我们从正文中删除代码片段(参见图1),该正文位于特定的html元素组件(<code>……<\code>)中。

s1012:使用带有默认参数的nltk(自然语言工具包)进行预处理过程,包括大小写转换,文本分词,停用词删除,词干提取和特殊标点符号删除。在删除停用词时,我们使用英语停用词的标准词汇表。删除特殊标点符号时,我们会保留一些含有特殊符号的标签,例如“c#”,“c++”,“.net”等,这些单词中的特殊符号我们不会进行处理。最后,我们从文本中删除了无意义的孤立数字。

s102:所有规范化描述组成语料库,对语料库中的所有单词进行特征提取,将每个单词表示为d维向量,从而得到每个单词和与该单词相对应的词向量;规范化描述都是由多个词组成,在进行s102中的特征提取时,还需要进行分词,因为分词是一个非常成熟的现有技术,此处不在详述。组成每个规范化描述的所有单词的词向量构成该规范化描述的矩阵;

具体过程为:利用word2vec工具包中的skip-gram模型对语料库进行特征提取,所述word2vec的输出是语料库词典,该语料库词典包括所有规范化描述的单词和与该单词相对应的词向量。word2vec是现有的工具,此处不再赘述。

s200:建立模型,分别建立tagdc-dl模型和tagdc-cf模型,将所有规范化描述的矩阵作为输入,分别输入到tagdc-dl模型和tagdc-cf模型中,分别得到所有标签的多标签可信度列表和所有标签的基于相似度的置信概率列表,然后利用一个线性加权模块得到每个标签的最终置信概率列表;

建立所述tagdc-dl模型计算所有标签的多标签可信度列表的过程如下:

s211:单词表示学习:通过将单词向量与其周围的上下文信息相结合,可用于增强原始单词向量的语义表达能力。

设oi表示软件项目,oi.q∈rl×d表示oi对应的规范化描述的矩阵,其中l是描述的长度,而d是单词向量的大小,令xi=rd是与描述oi.d中的第i个单词相对应的d维单词向量;

首先规范化描述的矩阵oi.d=[x1,x2,……,xl]输入bi-lstm层以提取当前单词的上下文信息,bi-lstm模型提取序列信息并将上下文信息概括为隐藏状态hi,在bi-lstm中,前向lstm生成的前向上下文信息与其先前的存储单元隐藏状态和当前输入向量xi,而反向lstm生成的反向上下文信息对应于其下一个存储单元隐藏状态和当前输入向量xi,可以分别按公式(1)计算得到:bi-lstm是现有神经网络模型固定层,此处不再赘述。

将单词的词向量及其对应的上下文信息向量hi∈r2n拼接起来,记为x′i,就能够获取更加准确而全面的单词表示形式x′i,x′i∈rl×d如公式(2)所示:

x′i=[xi,hi](2);

s212:描述表示学习:我们在每个描述上使用卷积层中的卷积核来提取局部特征并生成特征图。

将规范化描述oi.d用学习加强的矩阵表示x∈rl×d=[x′1,x′2,……,x′l],并将x输入卷积层以提取本地特征,当卷积层中的卷积核滑过一个规范化描述时,可以检测到该规范化描述上不同位置的特征,采用零填充策略对每个规范化描述的边界进行建模,给定一个带有偏差项b的内核ki,根据公式(3)计算得到每个规范化描述的特征图ci:

其中,f表示relu激活函数,使用多个卷积核来获取规范化描述中的各种特征图,所有i个特征向量按公式(4)组合起来:

c=[c1,c2,……,ci](4);

采用三个并行的cnn网络,它们的卷积核窗口大小分别为1、2、3,并将卷积层三个分支的所有特征图拼接起来作为规范化描述的基本语义特征图d∈rl×3i;cnn网络是现有网络,是本领域公知常识,为节约篇幅,此处不再赘述。

s213:标签概率计算:通过基于胶囊网络计算每个标签类别的模长,我们可以获得每个软件项目的多标签置信度列表,然后将几个具有最高置信度概率的适当标签分配给当前软件项目。

近来,具有动态路由的胶囊网络在文本表示领域取得了可喜的成就。胶囊包含一组局部不变的神经元,这些神经元可有效识别高级特征中的空间关系,并通过将其转换为向量输出而不是标量输出来进一步在更宽的空间中表示这些特征。因此,我们在卷积层之后使用胶囊网络模型。

主胶囊层本质上是卷积胶囊层,它可以汇总生成的高级特征的细节。

s213a:s212生成的基本语义特征图d被输入主胶囊层以提取更高级别的特征:

当滑过基本语义特征图d时,在每个卷积核kj中执行一系列卷积运算,以输出一系列$d$维胶囊,类似于卷积层中的计算,主胶囊中的胶囊pj∈rd,可以按公式(5)计算得到:

其中,g表示非线性squash激活函数,可以将矢量输出的长度限制在0和1之间,以表示每个类别的概率,而b是偏差项;

s213b:在主胶囊层中一共含有j个卷积核时,胶囊特征图可以按公式(6)排列得到:

p=[p1,p2,……,pj](6);

s213c:在主胶囊层上执行动态路由算法以生成标签胶囊层的胶囊,其中第j个标签胶囊可以按公式(7)计算得到:

uj|i=wijui

其中,uj|i是预测向量,它可以通过将主胶囊层的输出向量ui乘以权重矩阵wij得到,cij动态路由的整个迭代过程相关的耦合系数,通常,耦合系数表示相邻层中的两个胶囊之间的连接强度,为从主胶囊层的第i个胶囊到标签胶囊层的第j个胶囊的对数先验概率。耦合系数cij是由softmax函数计算得到,该函数可以确保第j个胶囊的所有耦合系数之和为1;

s213d:如图2所示,最终标签胶囊层接受主胶囊层中所有胶囊的输出向量,并最终生成t个标签胶囊以便通过上述动态路由进行分类,其中t表示软件信息站点中候选标签的数量,vj的模长表示分配给软件项目的每个标签的多标签置信概率,我们注意到所有标签胶囊的长度之和不等于1,因此胶囊网络具有同时识别多个类别的能力,这适合于我们的标签推荐任务。

公式(8)中定义的损失函数来指导tagdc-dl的训练过程。

其中,tj表示第j个标签是否为当前软件项目的真实标签,当且仅当当前规范化描述选择了第j个标签时,该值为1,m+和m-是上限和下限的阈值,分别设置为0.9和0.1。|vj|是向量vj的模长,λ是固定值0.5,它可以通过减小所有类的向量的模长来停止初始学习,t表示软件信息站点中候选标签的数量,vj的模长表示分配给软件项目的每个标签的多标签置信概率;

s213e:获得每个规范化描述的所有标签的多标签可信度列表,第i个规范化描述的置信概率列表由公式(9)计算得到:

所述tagdc-cf模型计算基于相似度的置信概率列表的过程如下:

s221:计算oi.d所有历史软件对应的规范化描述的矩阵之间的余弦相似度,找到与oi相似度最大的top-n个软件项目,它们的标签用于推荐oi的标签;由于不同的描述通常包含不同数量的单词,因此,为了衡量软件项目之间的相似性,我们对矩阵中所有单词的词向量进行平均值计算,以确保每个描述的形状都一致。

s222:设oi.d包含l个单词,则其规范化描述发向量表示形式di如公式(10)所示:

假设oj是另一个软件项目,并以dj作为规范化描述的向量表示,则可以通过di和dj之间的余弦相似性来度量oi和oj之间的相似性,如公式(11)所示:

s223:令ti=[t1,t2,……,tn]是oi的标签列表,其中n是候选标签的数量,在公式(12)中计算的基于相似度的置信概率列表是top-n个最相似对象的所有相似度与oi及它们自己的标签列表tj的加权和;

例如,假设dp和dq是最类似于di的top-2软件项目,与di的余弦相似度为0.3和0.2,并且tp=[1,1,0]和tq=[1,0,1]分别是它们对应的标签列表。基于公式,di的基于相似度的置信概率列表的计算过程如下:

所示s200得到每个标签的最终置信概率列表过程为:

将获得的所有标签的多标签可信度列表和所有标签的基于相似度的置信概率列表作为输入带入公式公式(14),得到软件项目所对应的所有标签的最终置信列表:

其中,α∈[0,1],表示多标签置信度列表对于最终置信列表的贡献权重,β∈[0,1]表示基于相似度的置信度列表对于最终置信列表的贡献权重。

s300:标签推荐,给定一个新的软件项目,首先经过s100的预处理得到新的软件项目对应的待预测规范化描述的矩阵,将该待预测规范化描述的矩阵作为输入,输入到s200中建立的模型中,得到新的软件项目对应的所有标签的多标签可信度列表和所有标签的基于相似度的置信概率列表,然后再计算新的软件项目中每个标签的最终置信概率列表,最后通过将新的软件项目的最终置信概率列表中的概率值进行排序,概率值最大的n个标签则为推荐标签。

本发明方法有效性分析试验:

实验设置

通过对9个数据集进行实验来评估tagdc的有效性:一个大型数据集stackoverflow@large,三个中型数据集askubuntu,unix和severfault,五个小型数据集stackoverflow@small,databaseadministarator,freecode,coderview和wordpress。其中,stackoverflow@small包含从2008年7月1日到2008年12月10日发布的软件项目,而stackoverflow@large选择在2014年7月1日之前发布的软件项目。对于其他七个网站,我们收集2016年12月31日之前发布的内容。对于每个数据集,我们根据80%-10%-10%的比率将这些数据集随机分为训练集,验证集和测试集。

表1

如前所述,首先删除低频标签和软件项目。对于三个中型和五个小型信息站点,如果它们的所有标签出现的次数少于50次,我们将删除这些软件项目。对于大型站点,如果它们的所有标签出现的次数少于10000次,则我们将其删除。表1列出了十个数据集的统计信息。第4列和第5列列出了在删除低频软件项目和标签之后剩余的软件项目和标签的数量。

显然,参数设置会影响标签推荐的准确性。对于tagdc-cf,我们考虑与当前对象相似的top-n个软件项目,默认情况下n的值设置为50。对于tagdc-dl模块,我们将所有数据集的最大描述长度设置为100。对于五个小规模站点和三个中等规模站点,将单词嵌入向量维度设置为200维,对于大型站点将单词嵌入向量维度设置为300维。我们用mini-batch进行训练,并把它们的值根据软件信息站点的大小进行设置,stackoverflow@large设置为1000,其他站点设置为400。我们使用adam优化算法,将初始学习率设置为0.001,衰减系数设置为0.1,并且采用了早停策略来及时停止训练以防止过拟合。具体来说,每一层的网络参数设置如下:

bi-lstm层:隐藏单元数目为256。

卷积层:三种卷积核的大小分别为1、2、3,卷积核数目为256,步幅为1,激活函数为relu。

主胶囊层:主胶囊的维度为16,该层的卷积核大小为(5,1),步幅为2,卷积核数目为48,激活函数为squash。

标签胶囊层:标签胶囊的维度为16。

所有实验均在带有titanv卡和12gram的keras上进行。操作系统和软件平台是ubuntu16.04,python3.6.4和keras2.1.5。

评价指标

为了验证所提出方法的有效性,我们采用了在标签推荐任务中广泛使用的三个评估指标:recall@k,precision@k和f1-score@k。k的值被设置为5和10。令t表示由n个软件项目oi(1≤i≤n)组成的测试集。使用训练好的的模型,我们最终可以为每个软件项目推荐概率最高的前k个标签并将实际标签集定义为这三个度量的定义表示如下:

recall@k表示oi的标签从推荐列表中选择而来的百分比,可以由公式(14)计算得到,测试集t中所有软件项目的平均预测召回率可以由公式(15)计算得到。

precision@k是推荐列表中真实标签的百分比,可以由公式(16)计算得到,测试集t中所有软件项目的平均预测精确度可以由公式(17)计算得到。

f1-score@k可以看作是precision@k和recall@k的调和平均值。对于oi,其f1-score@ki由公式(18)计算。测试集t的平均预测f1值可以由公式(19)定义。

结果和分析

与最新方法相比,我们提出的tagdc的效果如何?

我们将tagdc方法与两种最先进的技术(即tagcnn,fasttagrec)在9种不同大小的数据集上进行了比较(见表1)。fasttagrec是一种先进标签推荐方法,该方法采用单层神经网络来构建分类器,为软件项目分配多个标签,而tagcnn基于cnn进行标签分类,这两种方法都是基于内容的方法。为了进行比较,我们使用作者提供的这两种方法的开源代码或实验设置,在数据集上重新实现了它们表现最佳的模型。上面介绍的三个评估指标recall@k,precision@k和f1-score@k用于评估,k表示推荐标签的数量,其值根据先前的工作被设置为5和10。

表2

表2展示了三种方法的结果,其中三种方法的实验结果的最佳值以粗体形式突出显示。从总体上看,在所有六个评估指标上,在9个数据集中的6个上,所提出的方法相比tagcnn和fasttagrec均取得了更好的结果。更重要的是,对于主要评估指标recall@k,我们的方法在所有数据集中均取得了最佳结果。考虑实验结果在所有信息站点上的平均值,我们的方法相对于tagcnn在recall@5,precision@5,f1-score@5,recall@10,precision@10和f1-score@10分别提高了4.1%,1.3%,1.6%,1.7%,0.6%和0.7%。相对于fasttagrec方法在recall@5,precision@5,f1-score@5,recall@10,precision@10和f1-score@10上的提升分别为8.5%,4.1%,3.7%,7.9%,2.4%,2.7%。

此外,要确定tagdc是否相对于两种最新的基准方法实现了重大改进,我们针对所有评估指标(recall@k,precision@k,f1-score@k)根据公式(20)进行提升率计算。

tagdc-dl和tagdc-cf对tagdc有什么贡献?

图3和图4显示了我们在tagdc-dl和tagdc-cf以及完整模型tagdc上的测试结果。与tagdc-dl和tagdc-cf相比,完整模型tagdc始终比精简后的部件具有更好的性能。从结果可以看出,tagdc-dl对tagdc的性能做出了重大贡献。tagdc-cf作为tagdc-dl的补充部分,可以帮助tagdc在recall@5的基础上实现约0.2%-3.5%的提升,在recall@10的基础上实现0.3%-2.9%的提升。特别地,tagdc在freecode上的表现要比tagdc-dl好得多。

其中emc是我们提出的方法的结果,而emo是基准方法在所有评估指标方面的结果。

比较三种方法的实验结果平均值,我们的tagdc相对tagcnn在recall@5,precision@5,f1-score@5,recall@10,precision@10和f1-score@10上的改善率分别为15.7%,2.1%,3.0%,11.3%,0.8%,1.1%,相对fasttagrec在recall@5,precision@5,f1-score@5,recall@10,precision@10和f1-score@10上的改善率分别为27%,6.2%,6.6%,37.3%,3.0%和4.1%。因此,我们可以得出结论,我们的方法在所有数据集上都明显优于两种基准方法,并且具有明显的提升。这证明了在处理小型和大型软件信息站点时我们模型的适用性和有效性。

tagdc-dl的不同变体的有效性如何?

验证tagdc-dl模块中的每个组件是否对实验结果有用。我们构造了tagdc-dl的以下五个变体(如表3所示),并在最常用的数据集stackoverflow@small上评估它们对整个tagdc-dl的贡献:。

·tagdc-cb:没有单词表示学习,没有胶囊网络和边缘损失函数。

·tagdc-wcb:没有胶囊网络和边缘损失函数。

·tagdc-wccb:没有边缘损失函数。

·tagdc-ccm:没有单词表示学习。

·tagdc-dl:图3中描述的整个模块。

表3

特别是,对于前三个没有边缘损失函数的模型,我们采用具有sigmoid作为损失函数的全连接层来计算每个候选标签的独立置信概率。我们还使用二进制交叉熵来训练这三个模型。

为了直观地显示tagdc-dl的这些差异之间的差异,我们使用六个评估指标来评估性能。实验结果在表4中给出。

表4

从结果可以看出,单词表示学习,胶囊网络和边缘损失函数对于提高tagdc-dl的性能都是有用的。借助胶囊网络,tagdc-wccb的recall@5,precision@5,0.9%、1.3%,0.6%,0.6%,0.8%,0.1%和0.3%通过tagdc-wcb获得$f1-score@5$,$recall@10$,$precision@10$和$f1-score@10$。同样,tagdc-dl和tagdc-wccb之间的性能差距表明,边缘损失函数可以帮助提高1.4\%,0.6\%,0.7\%,0.5\%,0.3\%和0.2\%的性能。$recall@5$,$precision@5$,$f1-score@5$,$recall@10$,$precision@10$和$f1-score@10$。并比较了tagdc-cb和tagdc-wcb,tagdc-ccm和tagdc-dl的结果,我们可以发现单词表示学习过程也有助于达到一定程度的改进。最终,tagdc-dl的recall@5达到83.7%,recision@5$达到35.3%,f1-score@5$达到47.5%,recall@10$达到90.7%,recall@10%达到19.5%。$和31.2\%$f1-score@10$,它们都是最佳性能。这五个变化的实验结果再次证明,tagdc-dl可以从更全面的语义表达和更准确的特征提取中受益,从而获得标签推荐任务。

更改所选top-n个类似软件项目的数量对tagdc-cf的性能有什么影响?

所考虑的相似软件项目的数量对tagdc-cf的有效性具有重要影响。我们选择了五个小型数据集,包括stackoverflow@small,askdifferent,databaseadministarator,freecode,coderview和wordpress来进行这组实验。对于每个数据集,我们在其上执行tagdc-cf并将n的值从10逐渐增加到100。图5a到图5f分别描述了当改变top-n的数量时,这五个数据集上的实验结果的趋势。图5a到图5f这六个图分别描述了随着n值变化,本发明tagdc-cf方法在recall@5,recall@10,precision@5,precision@10,f1-score@5和f1-score@10这六个评价指标上的变化。

从实验结果中,我们可以看到参数n对评估结果有影响。对于所有五个数据集,随着n值的增加,就这六个评估指标而言,实验结果首先稳定增长,然后增长速度变慢。当n达到某个值时,结果开始减小,这是因为考虑到了与当前推荐对象的相似性较低的软件项目,不可避免地会引入噪声。

最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。

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