CN108717467A - 一种基于主题关联关系分析的开源软件推荐方法 - Google Patents
一种基于主题关联关系分析的开源软件推荐方法 Download PDFInfo
- Publication number
- CN108717467A CN108717467A CN201810580303.3A CN201810580303A CN108717467A CN 108717467 A CN108717467 A CN 108717467A CN 201810580303 A CN201810580303 A CN 201810580303A CN 108717467 A CN108717467 A CN 108717467A
- Authority
- CN
- China
- Prior art keywords
- open source
- source software
- theme
- matrix
- relationship strength
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 46
- 239000011159 matrix material Substances 0.000 claims abstract description 101
- 238000004821 distillation Methods 0.000 claims abstract description 17
- 238000000605 extraction Methods 0.000 claims abstract description 8
- 238000000354 decomposition reaction Methods 0.000 claims abstract description 6
- 239000013598 vector Substances 0.000 claims description 9
- 239000000284 extract Substances 0.000 claims description 8
- 230000014509 gene expression Effects 0.000 claims description 3
- 230000009286 beneficial effect Effects 0.000 abstract 1
- 238000013135 deep learning Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000009434 installation Methods 0.000 description 2
- RTYJTGSCYUUYAL-YCAHSCEMSA-L carbenicillin disodium Chemical compound [Na+].[Na+].N([C@H]1[C@H]2SC([C@@H](N2C1=O)C([O-])=O)(C)C)C(=O)C(C([O-])=O)C1=CC=CC=C1 RTYJTGSCYUUYAL-YCAHSCEMSA-L 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003442 weekly effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/20—Natural language analysis
- G06F40/258—Heading extraction; Automatic titling; Numbering
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供了一种基于主题关联关系分析的开源软件推荐方法。所述基于主题关联关系分析的开源软件推荐方法包括以下步骤:对开源软件的主题提取步骤:使用LDA主题模型对开源软件的项目文档进行主题提取,并用提取得到的主题特征对开源软件进行刻画;对开源软件的关系建模步骤:使用概率矩阵分解方法计算任意两个开源软件之间的关系强度,并根据计算得到的关系强度来为某个特定的开源软件做出推荐。本发明的有益效果是:所述基于主题关联关系分析的开源软件推荐方法具有高效、实用、稳定的优点,可以帮助开发人员更好地实现代码复用、快速原型构建以及寻找替代实现等。
Description
技术领域
本发明属于计算机科学技术领域,具体地涉及一种基于主题关联关系分析的开源软件推荐方法。
背景技术
随着互联网的出现和普及,开源社区也得到了极大的发展,人们围绕开源社区展开的一系列协作活动促进了开源软件的不断出现和迭代更新。开源软件的开放性和自由性,使得人们能够以较低的成本获得开源软件的源代码、得知技术细节以及学习领域知识等等。因此,在一个开源软件的开发过程中,人们通常会借助其它的一些开源软件,通过代码复用、功能添加、实现替代等操作,从而更好地对这个开源软件进行设计和开发。
在某个特定的开源软件的开发过程中,人们想要知道能够对开发过程产生帮助的开源软件具体有哪些开源软件。一个简单的方法是通过搜索,但是,想要从海量的开源软件中找到这些具体的开源软件是十分费时费力的。另外一种比搜索更好的方法是推荐,也就是为某个特定的开源软件推荐可能对其产生帮助的其它开源软件。因此,如何为某个特定的开源软件推荐可能对其产生帮助的其它开源软件也成为了一项有意义的研究工作。
发明内容
本发明的目的在于针对现有技术的缺陷或问题,提供一种基于主题关联关系分析的开源软件推荐方法。
本发明的技术方案如下:一种基于主题关联关系分析的开源软件推荐方法,其特征在于:包括以下步骤:对开源软件的主题提取步骤:使用LDA主题模型对开源软件的项目文档进行主题提取,并用提取得到的主题特征对开源软件进行刻画;对开源软件的关系建模步骤:使用概率矩阵分解方法计算任意两个开源软件之间的关系强度,并根据计算得到的关系强度来为某个特定的开源软件做出推荐。
优选地,具体包括如下步骤:
步骤1:从开源软件仓库获取需要的开源软件的数据,假设从开源软件仓库获取得到了N个开源软件的数据,这N个开源软件的集合用P表示,P={p1,p2,…,pN},其中,N为正整数,pi表示获取得到的第i个开源软件;
步骤2:获取集合P中的开源软件pi的项目文档,把集合P中所有的开源软件的项目文档组成一个语料库W;
步骤3:对由N个开源软件的项目文档组成的语料库W,使用LDA主题模型对其进行主题提取,假设LDA主题模型提取出k个主题,那么对P中的任意一个开源软件pi,使用LDA主题模型提取得到的pi的主题特征θi是一个长度为k的列向量,因此,P中N个开源软件的主题特征就构成一个k行N列的主题矩阵Θ;
步骤4:对P中的每个开源软件pi,获取pi的项目持有者提供的主题列表,如果pi的项目持有者没有提供主题列表,则为pi设置一个空的主题列表,pi的主题列表用ti表示,把P中所有的开源软件的主题列表组成一个集合T;
步骤5:对由N个开源软件的主题列表组成的集合T,对T中任意两个主题列表ti和tj,ti是开源软件pi的主题列表,tj是开源软件pj的主题列表,pi和pj之间的关系强度rij等于ti和tj的交集大小比上ti和tj的并集大小;计算得到P中每一对开源软件之间的关系强度之后,把得到的关系强度组成一个N行N列的观测矩阵O,O中第i行第j列的元素表示开源软件pi和pj之间的关系强度的观测值;
步骤6:把由LDA主题模型提取得到的主题特征组成的主题矩阵Θ和由开源软件持有者提供的主题列表计算得到的观测矩阵O输入给关系模型,则关系模型输出一个N行N列的近似矩阵E,E中第i行第j列的元素表示开源软件pi和pj之间的关系强度的预测值;
步骤7:对于P中任意两个开源软件pi和pj,如果pi和pj的持有者都提供了主题列表,则pi和pj之间的关系强度用观测值表示;如果pi和pj中至少有一个持有者未提供主题列表,则pi和pj之间的关系强度用预测值表示;
步骤8:对P中任意一个开源软件pi,按照pi与其它N-1个开源软件之间的关系强度为pi做出推荐。
优选地,所述的步骤1的具体包括如下步骤:
步骤1.1:从开源软件仓库获取需要的开源软件的数据,获取得到的每个开源软件的数据都必须包括项目文档,如果开源软件的项目持有者提供了主题列表,那么也应该获取项目持有者提供的主题列表的数据信息;
步骤1.2:对获取得到的每个开源软件的项目文档进行过滤和合并,如果开源软件没有用英文书写的项目文档,则不考虑所述开源软件;如果开源软件有多份文档,则把这些文档合并成一份文档作为相应的开源软件的项目文档;
步骤1.3:如果开源软件的项目持有者提供了一个主题列表,则获取所述的开源软件的主题列表;如果开源软件的项目持有者没有提供主题列表,则为所述开源软件设置一个空的主题列表。
优选地,所述的步骤2的具体包括如下步骤:
步骤2.1:对P中的每个开源软件pi,获取pi的项目文档,这个项目文档必须是用英文书写的;
步骤2.2:对P中的每个开源软件pi,排除pi的项目文档中常见的停词以及与软件功能无关的描述文本,其中,停词包括介词、冠词、代词等,与软件功能无关的描述文本包括软件安装指导、使用样例、致谢和许可证信息等;
步骤2.3:把P中所有的开源软件的项目文档组成一个语料库W,所述语料库W包括N个开源软件的项目文档,所述语料库W中第i份项目文档所属的开源软件是pi。
优选地,所述的步骤3的具体包括如下步骤:
步骤3.1:对由N个开源软件的项目文档组成的语料库W,使用LDA主题模型对其进行主题提取;
步骤3.2:把语料库W输入给LDA主题模型,LDA主题模型会把语料库W转换成单词集合,并会记录每份文档中出现的单词及所述单词的出现次数;
步骤3.3:设置LDA主题模型需要提取的主题数目k,所述主题数目k表示每份文档中最多只能含有k个主题;
步骤3.4:LDA主题模型输出每个主题的单词分布以及每篇文档的主题分布,LDA得到的主题用单词的概率分布表示,所述单词的概率分布中每个单词对应的分布概率表示所述单词出现在主题中的概率;每篇文档用主题的概率分布表示,所述主题的概率分布中每个主题对应的分布概率表示所述主题出现在文档中的概率;
步骤3.5:LDA提取得到的每篇文档的主题分布为所述文档所属的开源软件的主题特征,所述主题特征是一个长度为k的列向量,列向量中的第i个元素表示第i个主题出现在所述文档中的概率,也就是开源软件包含的第i个主题的概率;把P中所有的开源软件的主题特征组成一个主题矩阵Θ,Θ是k行N列的矩阵,Θ的第i列是开源软件pi的主题特征θi,其中,k、i均为正整数。
优选地,所述的步骤4的具体包括如下步骤:
步骤4.1:对P中的每个开源软件pi,如果pi的项目持有者提供了主题列表,则获取所述主题列表;如果pi的项目持有者没有提供主题列表,则为pi设置一个空的主题列表;
步骤4.2:把P中所有开源软件的主题列表组成一个集合T,T中包含N个开源软件的主题列表,主题列表是项目持有者提供的主题列表或空的主题列表。
优选地,所述的步骤5的具体包括如下步骤:
步骤5.1:对由N个开源软件的主题列表组成的集合T,对T中任意两个主题列表ti和tj,ti是开源软件pi的主题列表,tj是开源软件pj的主题列表;
步骤5.2:如果ti和tj都是项目持有者提供的主题列表,则pi和pj之间的关系强度是已知的,并且关系强度的观测值rij等于ti和tj的交集大小比上ti和tj的并集大小,即rij=(ti∩tj)/(ti∪tj);
步骤5.3:如果ti和tj中至少有一个是空的主题列表,则pi和pj之间的关系强度是未知的,需要经过关系建模对其进行预测,在预测前则把pi和pj之间的关系强度的观测值预设为0;
步骤5.4:计算得到P中每一对开源软件之间关系强度的观测值之后,把得到的关系强度的观测值组成一个观测矩阵O,观测矩阵O是一个N行N列的矩阵,O中第i行第j列的元素表示开源软件pi和pj之间的关系强度的观测值,所有关系强度的取值都在闭区间0到1中,观测矩阵O是一个对称矩阵,并且对角线上的元素全为1。
优选地,所述的步骤6的具体包括如下步骤:
步骤6.1:利用开源软件的主题特征和开源软件之间已知的关系强度对开源软件之间未知的关系强度进行预测,其中,开源软件的主题特征是步骤3得到的主题矩阵Θ,开源软件之间已知和未知的关系强度都包含在步骤5中得到的观测矩阵O中;
步骤6.2:把主题矩阵Θ和观测矩阵O输入给关系模型,这个关系模型使用概率矩阵分解方法把观测矩阵O分解成两个隐含矩阵U和V,并用主题矩阵Θ对隐含矩阵U和V进行训练,矩阵U和V的内积得到近似矩阵E,当近似矩阵收敛到某个阈值时,训练停止,此时关系模型输出最终得到的近似矩阵E;
步骤6.3:得到的近似矩阵E是一个N行N列的矩阵,矩阵E中的第i行第j列的元素是开源软件pi和pj之间关系强度的预测值。
优选地,所述的步骤7的具体包括如下步骤:
步骤7.1:对于P中任意两个开源软件pi和pj,pi和pj之间的关系强度有观测值和预测值两个数值,其中,观测值是观测矩阵O中第i行第j列的元素,预测值是近似矩阵E中第i行第j列的元素;
步骤7.2:如果pi和pj之间的关系强度是通过观测得到的,则用观测矩阵O中第i行第j列的数值表示开源软件pi和pj之间的关系强度;
步骤7.3:如果pi和pj之间的关系强度是通过预测得到的,则用近似矩阵E中第i行第j列的数值表示开源软件pi和pj之间的关系强度。
优选地,所述的步骤8的具体包括如下步骤:
步骤8.1:对P中任意一个开源软件pi,pi与其它N-1个开源软件之间的关系强度分别是ri1,…,rii-1,rii+1,…,riN;
步骤8.2:从ri1,…,rii-1,rii+1,…,riN中选出最大的m个关系强度,找到这些关系强度对应的开源软件,把这些开源软件推荐给pi,其中,m的数值根据不同需求进行设定。
本发明提供的技术方案具有如下有益效果:
所述基于主题关联关系分析的开源软件推荐方法包括对开源软件的主题提取和对开源软件的关系建模两部分。其中,对开源软件的主题提取使用LDA主题模型对开源软件的项目文档进行主题提取,并用提取得到的主题特征对开源软件进行刻画;对开源软件的关系建模使用概率矩阵分解方法计算任意两个开源软件之间的关系强度,并根据计算得到的关系强度来为某个特定的开源软件做出推荐。本发明具有高效、实用、稳定的优点,可以帮助开发人员更好地实现代码复用、快速原型构建以及寻找替代实现等等。
附图说明
图1为本发明实施例提供的基于主题关联关系分析的开源软件推荐方法的工作原理图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明中的步骤虽然用标号进行了排列,但并不用于限定步骤的先后次序,除非明确说明了步骤的次序或者某步骤的执行需要其他步骤作为基础,否则步骤的相对次序是可以调整的。可以理解,本文中所使用的术语“和/或”涉及且涵盖相关联的所列项目中的一者或一者以上的任何和所有可能的组合。
如图1所示,本发明的一种基于主题关联关系分析的开源软件推荐方法包括对开源软件的主题提取步骤和对开源软件的关系建模步骤。
其中,在对开源软件的主题提取步骤中,使用LDA主题模型对开源软件的项目文档进行主题提取,并用提取得到的主题特征对开源软件进行刻画。在对开源软件的关系建模步骤中,使用概率矩阵分解方法计算任意两个开源软件之间的关系强度,即用开源软件之间已知的关系强度和LDA主题模型提取得到的开源软件的主题特征对开源软件之间未知的关系强度进行预测,并根据计算得到的关系强度来为某个特定的开源软件做出推荐。
需要说明的是,本发明的硬件环境包括:能够正常接入广域网的路由器或交换机,以及能够正常使用的计算机。软件环境包括:JDK1.8和JRE。
具体地,本发明实施例提供的基于主题关联关系分析的开源软件推荐方法包括如下步骤:
步骤1:从开源软件仓库(如GitHub、SourceForge等)获取需要的开源软件的数据,假设从GitHub获取得到了N个开源软件的数据,这N个开源软件的集合用P表示,P={p1,p2,…,pN},其中,pi表示获取得到的第i个开源软件;
步骤2:获取集合P中的开源软件pi的项目文档,把集合P中所有的开源软件的项目文档组成一个语料库W;
步骤3:对由N个开源软件的项目文档组成的语料库W,使用LDA主题模型对其进行主题提取,假设LDA主题模型提取出k个主题,那么对P中的任意一个开源软件pi,使用LDA主题模型提取得到的pi的主题特征θi是一个长度为k的列向量,因此,P中N个开源软件的主题特征就构成一个k行N列的主题矩阵Θ;
步骤4:对P中的每个开源软件pi,获取pi的项目持有者提供的主题列表,如果pi的项目持有者没有提供主题列表,则为pi设置一个空的主题列表,pi的主题列表用ti表示,把P中所有的开源软件的主题列表组成一个集合T;
步骤5:对由N个开源软件的主题列表组成的集合T,对T中任意两个主题列表ti和tj,ti是开源软件pi的主题列表,tj是开源软件pj的主题列表,pi和pj之间的关系强度rij等于ti和tj的交集大小比上ti和tj的并集大小;计算得到P中每一对开源软件之间的关系强度之后,把得到的关系强度组成一个N行N列的观测矩阵O,O中第i行第j列的元素表示开源软件pi和pj之间的关系强度的观测值;
步骤6:把由LDA主题模型提取得到的主题特征组成的主题矩阵Θ和由开源软件持有者提供的主题列表计算得到的观测矩阵O输入给关系模型,则关系模型输出一个N行N列的近似矩阵E,E中第i行第j列的元素表示开源软件pi和pj之间的关系强度的预测值;
步骤7:对于P中任意两个开源软件pi和pj,如果pi和pj的持有者都提供了主题列表,则pi和pj之间的关系强度用观测值表示;如果pi和pj中至少有一个没有项目持有者提供的主题列表,则pi和pj之间的关系强度用预测值表示;
步骤8:对P中任意一个开源软件pi,按照pi与其它N-1个开源软件之间的关系强度为pi做出推荐,具体操作是把与pi关系强度最大的前m个不同于pi的开源软件推荐给pi,m的值通常是1、3、5、10等等。
也就是说,在应用本发明所公开的基于主题关联关系分析的开源软件推荐方法时,首先,每个开源软件都必须至少有一份英文书写的项目文档,并且这份项目文档中包含对软件功能的描述文本。然后,使用LDA主题模型对开源软件的项目文档进行主题提取,提取得到的主题特征会被用于对相应的开源软件进行刻画。接着,对所有具有项目持有者提供的主题列表的开源软件,计算得到开源软件之间已知的关系强度。最后,使用概率矩阵分解方法,用开源软件之间已知的关系强度和LDA主题模型提取得到的开源软件的主题特征对开源软件之间未知的关系强度进行预测,并用计算得到的关系强度为某个特定的开源软件做出推荐。
其中,所述的步骤1的具体包括如下步骤:
步骤1.1:从开源软件仓库获取需要的开源软件的数据,获取得到的每个开源软件的数据都必须包括项目文档,如果开源软件的项目持有者提供了主题列表,那么也应该获取项目持有者提供的主题列表的数据信息;
步骤1.2:对获取得到的每个开源软件的项目文档进行过滤和合并,如果开源软件没有用英文书写的项目文档,则不考虑所述开源软件;如果开源软件有多份文档,则把这些文档合并成一份文档作为相应的开源软件的项目文档;
步骤1.3:如果开源软件的项目持有者提供一个主题列表,则使用项目持有者提供的主题列表展示相应的开源软件;如果开源软件的项目持有者没有提供主题列表,则为所述开源软件设置一个空的主题列表。
所述的步骤2的具体包括如下步骤:
步骤2.1:对P中的每个开源软件pi,获取pi的项目文档,这个项目文档必须是用英文书写的;
步骤2.2:对P中的每个开源软件pi,排除pi的项目文档中常见的停词以及与软件功能无关的描述文本,其中,停词包括介词、冠词、代词等,与软件功能无关的描述文本包括软件安装指导、使用样例、致谢和许可证信息等;
步骤2.3:把P中所有的开源软件的项目文档组成一个语料库W,所述语料库W包括N个开源软件的项目文档,所述语料库W中第i份项目文档所属的开源软件是pi。
所述的步骤3的具体包括如下步骤:
步骤3.1:对由N个开源软件的项目文档组成的语料库W,使用LDA主题模型对其进行主题提取;
步骤3.2:把语料库W输入给LDA主题模型,LDA主题模型会把语料库W转换成单词集合,并会记录每份文档中出现的单词及所述单词的出现次数;
步骤3.3:设置LDA主题模型需要提取的主题数目k,所述主题数目k表示每份文档中最多只能含有k个主题;
步骤3.4:LDA主题模型输出每个主题的单词分布以及每篇文档的主题分布,LDA得到的主题用单词的概率分布表示,所述单词的概率分布中每个单词对应的分布概率表示所述单词出现在主题中的概率;每篇文档用主题的概率分布表示,所述主题的概率分布中每个主题对应的分布概率表示所述主题出现在文档中的概率;
步骤3.5:LDA提取得到的每篇文档的主题分布为所述文档所属的开源软件的主题特征,所述主题特征是一个长度为k的列向量,列向量中的第i个元素表示第i个主题出现在所述文档中的概率,也就是开源软件包含的第i个主题的概率;把P中所有的开源软件的主题特征组成一个主题矩阵Θ,Θ是k行N列的矩阵,Θ的第i列是开源软件pi的主题特征θi,其中,k、i均为正整数。
所述的步骤4的具体包括如下步骤:
步骤4.1:对P中的每个开源软件pi,如果pi的项目持有者提供主题列表,则获取所述主题列表;如果pi的项目持有者没有提供主题列表,则为pi设置一个空的主题列表;
步骤4.2:把P中所有开源软件的主题列表组成一个集合T,T中包含N个开源软件的主题列表,主题列表是项目持有者提供的主题列表或空的主题列表。
所述的步骤5的具体包括如下步骤:
步骤5.1:对由N个开源软件的主题列表组成的集合T,对T中任意两个主题列表ti和tj,ti是开源软件pi的主题列表,tj是开源软件pj的主题列表;
步骤5.2:如果ti和tj都是项目持有者提供的主题列表,则pi和pj之间的关系强度是已知的,并且关系强度的观测值rij等于ti和tj的交集大小比上ti和tj的并集大小,即rij=(ti∩tj)/(ti∪tj);
步骤5.3:如果ti和tj中至少有一个是空的主题列表,则pi和pj之间的关系强度是未知的,需要经过关系建模对其进行预测,在预测前则把pi和pj之间的关系强度的观测值预设为0;
步骤5.4:计算得到P中每一对开源软件之间关系强度的观测值之后,把得到的关系强度的观测值组成一个观测矩阵O,观测矩阵O是一个N行N列的矩阵,O中第i行第j列的元素表示开源软件pi和pj之间的关系强度的观测值,所有关系强度的取值都在闭区间0到1中,观测矩阵O是一个对称矩阵,并且对角线上的元素全为1。
所述的步骤6的具体包括如下步骤:
步骤6.1:利用开源软件的主题特征和开源软件之间已知的关系强度对开源软件之间未知的关系强度进行预测,其中,开源软件的主题特征是步骤3得到的主题矩阵Θ,开源软件之间已知和未知的关系强度都包含在步骤5中得到的观测矩阵O中;
步骤6.2:把主题矩阵Θ和观测矩阵O输入给关系模型,这个关系模型为使用概率矩阵分解方法把观测矩阵O分解成两个隐含矩阵U和V,并用主题矩阵Θ对隐含矩阵U和V进行训练,矩阵U和V的内积得到近似矩阵E,当近似矩阵收敛到某个阈值时,训练停止,此时关系模型输出最终得到的近似矩阵E;
步骤6.3:得到的近似矩阵E是一个N行N列的矩阵,矩阵E中的第i行第j列的元素是开源软件pi和pj之间关系强度的预测值。
所述的步骤7的具体包括如下步骤:
步骤7.1:对于P中任意两个开源软件pi和pj,pi和pj之间的关系强度有观测值和预测值两个数值,其中,观测值是观测矩阵O中第i行第j列的元素,预测值是近似矩阵E中第i行第j列的元素;
步骤7.2:如果pi和pj之间的关系强度是通过观测得到的,则用观测矩阵O中第i行第j列的数值表示开源软件pi和pj之间的关系强度;
步骤7.3:如果pi和pj之间的关系强度是通过预测得到的,则用近似矩阵E中第i行第j列的数值表示开源软件pi和pj之间的关系强度。
所述的步骤8的具体包括如下步骤:
步骤8.1:对P中任意一个开源软件pi,pi与其它N-1个开源软件之间的关系强度分别是ri1,…,rii-1,rii+1,…,riN;
步骤8.2:从ri1,…,rii-1,rii+1,…,riN中选出最大的m个关系强度,找到这些关系强度对应的开源软件,把这些开源软件推荐给pi,其中,m的数值根据不同需求进行设定。
本发明的一个典型应用场景是为某个特定的开源软件寻找更优的替代实现。例如:对于某个依赖于深度学习方法库的开源应用软件,可以以每天、每周、每月的频率为这个应用软件推荐新的深度学习方法库,如果推荐的某个新的深度学习方法库比当前使用的深度学习方法库具有更多的方法或者更优的性能,那么就可以把这个新的深度学习方法库作为依赖导入到这个应用软件中,而去除或者保留原来的深度学习方法库。基于主题相关程度为开源软件做出推荐,能够在软件开发过程中更好的实现代码复用、功能添加、实现优化等操作,从而为开源软件的开发过程提供帮助。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
Claims (10)
1.一种基于主题关联关系分析的开源软件推荐方法,其特征在于:包括以下步骤:
对开源软件的主题提取步骤:使用LDA主题模型对开源软件的项目文档进行主题提取,并用提取得到的主题特征对开源软件进行刻画;
对开源软件的关系建模步骤:使用概率矩阵分解方法计算任意两个开源软件之间的关系强度,并根据计算得到的关系强度来为某个特定的开源软件做出推荐。
2.根据权利要求1所述的一种基于主题关联关系分析的开源软件推荐方法,其特征在于,具体包括如下步骤:
步骤1:从开源软件仓库获取需要的开源软件的数据,假设从开源软件仓库获取得到了N个开源软件的数据,这N个开源软件的集合用P表示,P={p1,p2,…,pN},其中,N为正整数,pi表示获取得到的第i个开源软件;
步骤2:获取集合P中的开源软件pi的项目文档,把集合P中所有的开源软件的项目文档组成一个语料库W;
步骤3:对由N个开源软件的项目文档组成的语料库W,使用LDA主题模型对其进行主题提取,假设LDA主题模型提取出k个主题,那么对P中的任意一个开源软件pi,使用LDA主题模型提取得到的pi的主题特征θi是一个长度为k的列向量,因此,P中N个开源软件的主题特征就构成一个k行N列的主题矩阵Θ;
步骤4:对P中的每个开源软件pi,获取pi的项目持有者提供的主题列表,如果pi的项目持有者没有提供主题列表,则为pi设置一个空的主题列表,pi的主题列表用ti表示,把P中所有的开源软件的主题列表组成一个集合T;
步骤5:对由N个开源软件的主题列表组成的集合T,对T中任意两个主题列表ti和tj,ti是开源软件pi的主题列表,tj是开源软件pj的主题列表,pi和pj之间的关系强度rij等于ti和tj的交集大小比上ti和tj的并集大小;计算得到P中每一对开源软件之间的关系强度之后,把得到的关系强度组成一个N行N列的观测矩阵O,O中第i行第j列的元素表示开源软件pi和pj之间的关系强度的观测值;
步骤6:把由LDA主题模型提取得到的主题特征组成的主题矩阵Θ和由开源软件持有者提供的主题列表计算得到的观测矩阵O输入给关系模型,则关系模型输出一个N行N列的近似矩阵E,E中第i行第j列的元素表示开源软件pi和pj之间的关系强度的预测值;
步骤7:对于P中任意两个开源软件pi和pj,如果pi和pj的持有者都提供了主题列表,则pi和pj之间的关系强度用观测值表示;如果pi和pj中至少有一个持有者未提供主题列表,则pi和pj之间的关系强度用预测值表示;
步骤8:对P中任意一个开源软件pi,按照pi与其它N-1个开源软件之间的关系强度为pi做出推荐。
3.根据权利要求2所述的一种基于主题关联关系分析的开源软件推荐方法,其特征在于,所述的步骤1的具体包括如下步骤:
步骤1.1:从开源软件仓库获取需要的开源软件的数据,获取得到的每个开源软件的数据都必须包括项目文档,如果开源软件的项目持有者提供了主题列表,那么也应该获取项目持有者提供的主题列表的数据信息;
步骤1.2:对获取得到的每个开源软件的项目文档进行过滤和合并,如果开源软件没有用英文书写的项目文档,则不考虑所述开源软件;如果开源软件有多份文档,则把这些文档合并成一份文档作为相应的开源软件的项目文档;
步骤1.3:如果开源软件的项目持有者提供一个主题列表,则使用项目持有者提供的主题列表展示相应的开源软件;如果开源软件的项目持有者没有提供主题列表,则为所述开源软件设置一个空的主题列表。
4.根据权利要求2所述的一种基于主题关联关系分析的开源软件推荐方法,其特征在于,所述的步骤2的具体包括如下步骤:
步骤2.1:对P中的每个开源软件pi,获取pi的项目文档,这个项目文档必须是用英文书写的;
步骤2.2:对P中的每个开源软件pi,排除pi的项目文档中常见的停词以及与软件功能无关的描述文本,其中,停词包括介词、冠词、代词等,与软件功能无关的描述文本包括软件安装指导、使用样例、致谢和许可证信息等;
步骤2.3:把P中所有的开源软件的项目文档组成一个语料库W,所述语料库W包括N个开源软件的项目文档,所述语料库W中第i份项目文档所属的开源软件是pi。
5.根据权利要求2所述的一种基于主题关联关系分析的开源软件推荐方法,其特征在于,所述的步骤3的具体包括如下步骤:
步骤3.1:对由N个开源软件的项目文档组成的语料库W,使用LDA主题模型对其进行主题提取;
步骤3.2:把语料库W输入给LDA主题模型,LDA主题模型会把语料库W转换成单词集合,并会记录每份文档中出现的单词及所述单词的出现次数;
步骤3.3:设置LDA主题模型需要提取的主题数目k,所述主题数目k表示每份文档中最多只能含有k个主题;
步骤3.4:LDA主题模型输出每个主题的单词分布以及每篇文档的主题分布,LDA得到的主题用单词的概率分布表示,所述单词的概率分布中每个单词对应的分布概率表示所述单词出现在主题中的概率;每篇文档用主题的概率分布表示,所述主题的概率分布中每个主题对应的分布概率表示所述主题出现在文档中的概率;
步骤3.5:LDA提取得到的每篇文档的主题分布为所述文档所属的开源软件的主题特征,所述主题特征是一个长度为k的列向量,列向量中的第i个元素表示第i个主题出现在所述文档中的概率,也就是开源软件包含的第i个主题的概率;把P中所有的开源软件的主题特征组成一个主题矩阵Θ,Θ是k行N列的矩阵,Θ的第i列是开源软件pi的主题特征θi,其中,k、i均为正整数。
6.根据权利要求2所述的一种基于主题关联关系分析的开源软件推荐方法,其特征在于,所述的步骤4的具体包括如下步骤:
步骤4.1:对P中的每个开源软件pi,如果pi的项目持有者提供了主题列表,则获取所述主题列表;如果pi的项目持有者没有提供主题列表,则为pi设置一个空的主题列表;
步骤4.2:把P中所有开源软件的主题列表组成一个集合T,T中包含N个开源软件的主题列表,主题列表是项目持有者提供的主题列表或空的主题列表。
7.根据权利要求2所述的一种基于主题关联关系分析的开源软件推荐方法,其特征在于,所述的步骤5的具体包括如下步骤:
步骤5.1:对由N个开源软件的主题列表组成的集合T,对T中任意两个主题列表ti和tj,ti是开源软件pi的主题列表,tj是开源软件pj的主题列表;
步骤5.2:如果ti和tj都是项目持有者提供的主题列表,则pi和pj之间的关系强度是已知的,并且关系强度的观测值rij等于ti和tj的交集大小比上ti和tj的并集大小,即rij=(ti∩tj)/(ti∪tj);
步骤5.3:如果ti和tj中至少有一个是空的主题列表,则pi和pj之间的关系强度是未知的,需要经过关系建模对其进行预测,在预测前则把pi和pj之间的关系强度的观测值预设为0;
步骤5.4:计算得到P中每一对开源软件之间关系强度的观测值之后,把得到的关系强度的观测值组成一个观测矩阵O,观测矩阵O是一个N行N列的矩阵,O中第i行第j列的元素表示开源软件pi和pj之间的关系强度的观测值,所有关系强度的取值都在闭区间0到1中,观测矩阵O是一个对称矩阵,并且对角线上的元素全为1。
8.根据权利要求2所述的一种基于主题关联关系分析的开源软件推荐方法,其特征在于,所述的步骤6的具体包括如下步骤:
步骤6.1:利用开源软件的主题特征和开源软件之间已知的关系强度对开源软件之间未知的关系强度进行预测,其中,开源软件的主题特征是步骤3得到的主题矩阵Θ,开源软件之间已知和未知的关系强度都包含在步骤5中得到的观测矩阵O中;
步骤6.2:把主题矩阵Θ和观测矩阵O输入给关系模型,这个关系模型使用概率矩阵分解方法把观测矩阵O分解成两个隐含矩阵U和V,并用主题矩阵Θ对隐含矩阵U和V进行训练,矩阵U和V的内积得到近似矩阵E,当近似矩阵收敛到某个阈值时,训练停止,此时关系模型输出最终得到的近似矩阵E;
步骤6.3:得到的近似矩阵E是一个N行N列的矩阵,矩阵E中的第i行第j列的元素是开源软件pi和pj之间关系强度的预测值。
9.根据权利要求2所述的一种基于主题关联关系分析的开源软件推荐方法,其特征在于,所述的步骤7的具体包括如下步骤:
步骤7.1:对于P中任意两个开源软件pi和pj,pi和pj之间的关系强度有观测值和预测值两个数值,其中,观测值是观测矩阵O中第i行第j列的元素,预测值是近似矩阵E中第i行第j列的元素;
步骤7.2:如果pi和pj之间的关系强度是通过观测得到的,则用观测矩阵O中第i行第j列的数值表示开源软件pi和pj之间的关系强度;
步骤7.3:如果pi和pj之间的关系强度是通过预测得到的,则用近似矩阵E中第i行第j列的数值表示开源软件pi和pj之间的关系强度。
10.根据权利要求2所述的一种基于主题关联关系分析的开源软件推荐方法,其特征在于,所述的步骤8的具体包括如下步骤:
步骤8.1:对P中任意一个开源软件pi,pi与其它N-1个开源软件之间的关系强度分别是ri1,…,rii-1,rii+1,…,riN;
步骤8.2:从ri1,…,rii-1,rii+1,…,riN中选出最大的m个关系强度,找到这些关系强度对应的开源软件,把这些开源软件推荐给pi,其中,m的数值根据不同需求进行设定。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810580303.3A CN108717467B (zh) | 2018-06-07 | 2018-06-07 | 一种基于主题关联关系分析的开源软件推荐方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810580303.3A CN108717467B (zh) | 2018-06-07 | 2018-06-07 | 一种基于主题关联关系分析的开源软件推荐方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108717467A true CN108717467A (zh) | 2018-10-30 |
CN108717467B CN108717467B (zh) | 2021-09-28 |
Family
ID=63912775
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810580303.3A Active CN108717467B (zh) | 2018-06-07 | 2018-06-07 | 一种基于主题关联关系分析的开源软件推荐方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108717467B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102760149A (zh) * | 2012-04-05 | 2012-10-31 | 中国人民解放军国防科学技术大学 | 开源软件主题自动标注方法 |
CN106095776A (zh) * | 2016-05-25 | 2016-11-09 | 中山大学 | 一种对用户进行主题挖掘和应用推荐的方法 |
KR20170134191A (ko) * | 2016-05-26 | 2017-12-06 | 연세대학교 원주산학협력단 | 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템 |
-
2018
- 2018-06-07 CN CN201810580303.3A patent/CN108717467B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102760149A (zh) * | 2012-04-05 | 2012-10-31 | 中国人民解放军国防科学技术大学 | 开源软件主题自动标注方法 |
CN106095776A (zh) * | 2016-05-25 | 2016-11-09 | 中山大学 | 一种对用户进行主题挖掘和应用推荐的方法 |
KR20170134191A (ko) * | 2016-05-26 | 2017-12-06 | 연세대학교 원주산학협력단 | 페이지랭크와 토픽 모델링을 이용한 소프트웨어 도메인 토픽 추출 시스템 |
Non-Patent Citations (2)
Title |
---|
褚征等: "基于LDA主题模型的移动应用相似度构建方法", 《计算机应用》 * |
邸亮等: "LDA模型在微博用户推荐中的应用", 《计算机工程》 * |
Also Published As
Publication number | Publication date |
---|---|
CN108717467B (zh) | 2021-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110633409B (zh) | 一种融合规则与深度学习的汽车新闻事件抽取方法 | |
CN110991645B (zh) | 一种基于知识模型的自适应学习方法、系统及存储介质 | |
CN102902700B (zh) | 基于在线增量演化主题模型的软件自动分类方法 | |
CN108932342A (zh) | 一种语义匹配的方法、模型的学习方法及服务器 | |
Cai et al. | nCoder+: a semantic tool for improving recall of nCoder coding | |
CN107301199A (zh) | 一种数据标签生成方法和装置 | |
CN104487936A (zh) | 用于对来自应用程序数据文件的信息进行计算机辅助消费的方法和系统 | |
CN111274790A (zh) | 基于句法依存图的篇章级事件嵌入方法及装置 | |
CN111222318A (zh) | 基于双通道双向lstm-crf网络的触发词识别方法 | |
CN112686025A (zh) | 一种基于自由文本的中文选择题干扰项生成方法 | |
Bao et al. | Text generation from tables | |
Li et al. | PSDVec: A toolbox for incremental and scalable word embedding | |
Xu et al. | MATINF: A jointly labeled large-scale dataset for classification, question answering and summarization | |
CN110110218A (zh) | 一种身份关联方法及终端 | |
Li et al. | Research on the strategy of E-Learning resources recommendation based on learning context | |
Nanni et al. | Semi-supervised textual analysis and historical research helping each other: Some thoughts and observations | |
Garcia | Classifications of shape grammars | |
CN115408506B (zh) | 联合语义解析和语义成分匹配的nl2sql的方法 | |
Bizzoni et al. | Some steps towards the generation of diachronic WordNets | |
Jia et al. | [Retracted] An Association Rule‐Based Multiresource Mining Method for MOOC Teaching | |
CN109871414A (zh) | 基于上下文向量图核的生物医学实体关系分类方法 | |
CN108717467A (zh) | 一种基于主题关联关系分析的开源软件推荐方法 | |
US11710168B2 (en) | System and method for scalable tag learning in e-commerce via lifelong learning | |
CN111538898B (zh) | 基于组合特征提取的Web服务包推荐方法及系统 | |
Tolmachev et al. | Automatic extraction of high-quality example sentences for word learning using a determinantal point process |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |