著录项信息
专利名称 | 基于在线增量演化主题模型的软件自动分类方法 |
申请号 | CN201210097171.1 | 申请日期 | 2012-04-05 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2013-01-30 | 公开/公告号 | CN102902700A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 中国人民解放军国防科学技术大学 | 申请人地址 | 湖南省长沙市开福区砚瓦池正街47号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 中国人民解放军国防科学技术大学 | 当前权利人 | 中国人民解放军国防科学技术大学 |
发明人 | 尹刚;王怀民;朱沿旭;余跃;史殿习;李翔;王涛;袁霖 |
代理机构 | 北京安博达知识产权代理有限公司 | 代理人 | 徐国文 |
摘要
一种基于在线增量演化主题模型的软件自动分类方法,包括获取软件相关文本,以预定时间片进行分组和预处理;生成在线演化主题模型的概率模型,针对以时间片分组的项目描述文本,计算最优主题个数,增量式计算当前时间片内项目描述文本的主题词汇分布和主题文本分布;获取未知分类主题的文本d,根据主题词汇分布和主题文本分布计算文本d从属的n个主题的主题词汇分布,所述文本d分类到相应的主题中基于词汇表和基于词汇本体查询,为主题自动添加语义标签,最终完成软件项目的分类。能够及时发现开源社区出现的新主题,并对软件项目进行自动分类,方便软件开发者依据软件主题搜索需要的开源软件项目,从而提高软件开发的效率,提高开源社区质量和保障。
基于在线增量演化主题模型的软件自动分类方法\n技术领域\n[0001] 本发明涉及软件自动分类技术领域,尤其涉及一种基于在线增量演化主题模型的软件自动分类方法,该方法通过在线增量式的建立开源社区软件文本流的主题模型,自动挖掘软件文本流中隐含的主题,并将每一个开源软件文本分配到挖掘得到的主题中,然后对该主题自动添加相应的语义标签,从而实现开源软件的自动分类。\n背景技术\n[0002] 开源软件(又称开放源代码软件)是一种源代码可以任意获取的计算机软件。开源软件通常是按照某种许可证协议发布的,许可证协议可以保障软件用户自由使用及接触源代码的权利,用户可以遵照许可证协议自行修改、复制以及再分发开源软件。开源社区又称为开放源代码社区,是根据相应的开源软件许可证协议公布源代码的平台,当前最典型的开源社区是基于Web的托管网站,例如Sourcefbrge.net。通常开源社区中提供了较为完善的用于辅助开源软件开发的基础设施(代码库、邮件列表和错误追踪系统等),开源社区的参与者利用基础设施建立开源软件项目,并在社区中通过协同开发的方式完成软件代码的编制、测试和发布,最终形成具有特定功能并能下载使用的软件程序。开源社区中除了包含丰富的源代码之外,还包含大量的软件文本,比如开发过程文本(需求、设计文档)、邮件通信记录、软件测试报告和软件描述文本等等。\n[0003] 随着开源软件及其应用的飞速发展,互联网中开源社区已经形成了规模巨大、种类丰富的开源软件。为了有效的管理和组织海量的软件资源,方便用户搜索,通常将软件按照功能、运行平台、编程语言、开发状态、软件许可证等维度进行分类,其中最主要的就是按照功能分类,通常分类按照层次结构组织,每个类属称为一个主题,每个主题反映了软件功能应用的领域,在此我们将这种主题的层次结构称为软件主题分类本体(taxonomy)。用户通过浏览主题分类本体,可以从指定的分类中进一步查找自己需要的软件。软件主题分类本体对于浏览式的软件搜索是至关重要的。\n[0004] 软件主题分类本体是由各软件社区的组织者制定的,每个软件提交者根据软件的功能参照主题分类本体为软件选择最合适的一个或多个主题。为了选择每一个适合软件的主题,软件提交者需要浏览整个软件分类本体,这通常会使他们感到不方便,很多提交者可能会由于缺乏耐心而放弃选择主题,或者直接选择无主题;另外,由于分类本体的局限性,提交者很有可能在主题分类本体中找不到适合自己软件的主题。所以通过人工的方式为软件项目选择主题,开销将是巨大的,如何为软件进行自动分类成为了极具挑战的问题。\n[0005] 现有的软件自动分类方法通常利用软件文本(比如代码、注释、开发过程文本、开发日志、网页等等)来表征软件,通过文本分类和挖掘领域的技术对软件文本进行自动分类,从而间接实现对软件的自动分类。现有的软件自动分类方法主要基于主题挖掘技术,通过建立软件文本主题模型,将软件文本集合按照主题进行聚类,聚类的结果是每个软件文本自动归属于某个聚类主题,从而达到软件自动分类的目标,这类方法最主要的局限有两个:(1)聚类主题通常都只是用特征关键词列表表示,而没有使用语义类标来标注这些聚类,要判断一个主题的语义需要人工判断,目前也有研究提出了标注方法,但是需要利用非软件领域的第三方词汇本体比如wordnet,增加了复杂度,效果并不理想;(2)开源社区的软件文本集合通常都是以很快的速度增长,大量新词汇的出现增长和消亡的演化规律决定了文本主题也是随时间演化的,那么如果按照静态的主题发现方法,就会生成错误的软件分类,所以需要动态挖掘文本主题在线演化的规律。比如,通过分析ceForge社区在2003年和2011年关于Internet主题的分类本体(taxonomy),发现由于社区主题的演化,相对于\n03年的分类本体,2011年的本体新增了很多项,如blogging、wiki等,这些项是社区的设计者根据社区内项目主题的变化,人为修改增加的。(3)开源社区中的软件文本集合是庞大的,同时主题挖掘技术的开销是巨大的,如果利用主题挖掘技术对开源社区的所有文本进行挖掘是不现实的,所以需要提供一种更高效的分类方法。\n[0006] LDA(潜式狄利克雷分布Latent Dirichlet Allocation)主题模型是D.M.Blei在\n2003年提出的一种产生式的(Generative)概率主题模型(Probabilistic Topic Model),它是在潜在语义分析LSA(Latent Semantic Analysis)模型的基础上发展而来的。LDA模型的基本假设是文本是主题的混合,其中主题是词空间上的分布。LDA模型是一种文本的生成模型,它描述了用来生成文本的概率过程(probabilistic procedure)。Gibbs抽样方法是针对扩展的LDA模型的参数推理方法,扩展的LDA模型是在原始的LDA模型基础上使用参数β控制的狄利克雷先验分布作为主题词汇分布,扩展后的主题概率模型为主要由两个参数控制参数α和β,其中α代表主题文本分布θ的参数,β代表主题词汇分布φ的参数,详细可参考文献([1]Griffiths T.,Steyvers M..Finding Scientific Topics[C].Proceedings Of The National Academy Of Sciences,2004,101(Suppl 1):\n5228.[2]Griffiths T..Gibbs Sampling In the Generative Model of Latent Dirichlet Allocation[M].Standford University:http://www-psych.stanford.edu/~gruffydd/cogsci02/1.)。其中,φ和θ为Gibbs抽样方法的结果,利用输出结果φ可以清楚地了解每一个词汇在给定主题中的分布概率;利用输出结果θ可以了解每一个文本在每个主题中的分布概率。将分布概率最高(或者分布概率按照大小排序靠前的k个主题)的主题作为文本的类属,可以实现对文本进行分类的目的。LDA模型的Gibbs抽样方法的输入是文本集合C和主题个数T,输出就是φ和θ。\n[0007] 通常互联网中的文本集合是随着时间的推移而不断增长的,这些文本集合都表现为在线的文本流,新文本的不断涌现导致新词汇的出现,新词汇往往经历着发展、流行和消亡的演化周期,这将导致文本集合的主题会随着时间发生演化,挖掘在线文本流的主题演化规律是正确分析文本类属的关键。Qi He等人给出了在线主题演化的问题描述:对于文本集合C,按照时间片(time slice)将文本流划分为一个一个的片段(本文中用时间片直接表示文本流片段),即 (其中n表示时间片的个数),利用基于LDA模型的\nGibbs抽样方法分别对每一个时间片中的文本集合进行主题挖掘,得到输出结果φ(t)和θ(t)。φ(t)和θ(t)分别表示时间片t中发生的文本流C(t)中的T(t)个主题的主题词汇分布和主题文本分布。现有的在线文本流主题挖掘技术是分析时间片t的主题分布与时间片t-1的主题分布之间的演化关系,利用上一时间片的计算结果φ(t-1)和θ(t-1)推算当前时间片的φ(t)和θ(t)结果。传统的基于相邻时间片的演化主题模型只能反映前一个时间片对后一个时间片的影响,不能反映历史时间片的对当前时间片的影响。\n[0008] 对于开源社区中的软件文本流来说,仅仅了解当前时间片内语料的主题(新增主题)是不够的,因为:(1)开源软件文本通常会随着软件项目的演化而不断更改,因此任何提交到系统中的文本都会是重要的语料,不能仅仅研究一个时间片内的语料,而是应该研究某个时刻之前的所有时间片的历史语料;(2)语料的变化很可能导致开源软件类属的改变,如果一直按照演化前的主题分布来对软件文本进行分类必将导致分类的错误,所以每一时刻之前的整个历史语料是必要的。基于以上两方面原因,需要一种适合开源社区的在线增量演化主题模型,模型中每个时间片中词汇的主题分布是依赖于所有历史时间片中的词汇主题分布,而不是仅仅依赖于上一个时间片中的词汇主题分布,所有历史时间片的词汇主题分布作为当前时间片主题分布的先验。\n[0009] 另外,现有技术认为文本流的每个时间片中的隐含主题个数是恒定的,即在挖掘每个时间片的文本集合时,将主题个数都设置为相同的数值。然而,由于软件文本发布时间的无规律性,每个时间片中包含文本的数目以及词汇种类不是均匀分布的,意味着每个时间片中隐含的主题也应该是有差异的,这种差异表现为:每个时间片中隐含主题的个数不同;每个时间片中隐含主题的种类不同。所以,需要一种能够处理上述差异的主题挖掘方法,从而对海量的、经历过长时间积累的开源软件进行快速自动分类。\n发明内容\n[0010] 本发明的目的在于针对现有技术的不足,提出一种基于在线增量演化主题模型的软件自动分类方法。\n[0011] 步骤1获取软件相关文本,所述软件相关文本包括开源软件的项目名称、项目主题标签、项目描述文本以及项目创建时间,如果所述项目主题标签为空,则将其设置为未标注,以预定时间片进行分组和预处理;\n[0012] 进一步地,所述以预定时间片进行分组进一步包括:根据所述项目创建时间将所有项目描述文本按照时间升序排列,并按照时间片Δt为单位将所有项目描述文本分组,对每个分组的软件相关文本进行预处理;\n[0013] 进一步地,所述预处理包括:通过词根提取将所述项目主题标签转换为其词根,并将相同词根的标签合并,删除标签数小于预定数目的项目,针对所述项目主题标签生成预设主题词汇表;将项目描述文本转换为单词包。\n[0014] 步骤2基于扩展LDA模型,生成在线演化主题模型的概率模型,针对预处理后的以时间片分组的项目描述文本,计算最优主题个数,在最优主题个数的基础上依据所述在线演化主题模型的概率模型增量式计算当前时间片内项目描述文本的主题词汇分布和主题文本分布,所述主题词汇分布和所述主题文本分布可使用矩阵表示。\n[0015] 进一步地,所述生成在线演化主题模型的概率模型的步骤进一步包括:以步骤1中各个分组的项目名称、项目描述文本为输入,通过吉布斯抽样过程对输入数据进行训练,生成文本流中的聚类主题及主题数目,所述聚类主题是指将项目描述文本中的词汇进行分类,有相同特征的词汇聚集到一起而形成的集合,集合中的词汇称为核心词汇。\n[0016] 进一步地,所述在线演化主题模型的概率模型中使用先验概率参数 所述先验概率参数表示文本集合Cts中的词汇出现之前抽样词汇在主题k中出现的概率,是当前文本集合Cts进行抽样的先验。\n[0017] 进一步地,所述最优主题个数的步骤包括,使用Kullback-Leibler距离衡量两个主题词汇分布的相对差距,其计算公式如下:\n[0018] \n[0019] 其中zp和zq表示两个主题,每个主题用一个概率向量表示,向量的第i个分量和 表示第i个词汇属于主题zp和zq的概率,W表示两个主题共有词汇数目,\nKL(zp||zq)的数值越大表示两个主题越不相似,当KL(zp||zq)=0的时候表示两个主题完全相同,如果这个值小于一个阈值,则认为两个主题是相似或者相同主题并进行合并。\n[0020] 进一步地,所述增量式计算是指每次计算一个时间片内项目描述文本的主题分布,然后利用已经计算得到的之前的历史时间片的主题分布参数来估计当前所有文本的主题分布。\n[0021] 步骤3获取未知分类主题的文本d,根据步骤2中生成的所有时间片的主题词汇分布和主题文本分布计算所述文本d从属的n个主题的主题词汇分布,并选择排序靠前的若干个主题作为所述文本d的文本主题,从而将所述文本d分类到相应的主题中。\n[0022] 进一步地,步骤3还包括下列步骤:查找所述未知分类主题的文本d从\n(d)\n属的时间片ts,计算所述文本d在最优化主题个数 中的分布概率θ (ts),将\n按照概率从大到小的顺序排列,取概率排序靠前的n个主题t1,\nt2,...,tn作为所述文本d的分类主题位置。\n[0023] 步骤4基于词汇表和基于词汇本体查询的方法,为主题自动添加语义标签,其中所述词汇表基于步骤1中爬取到的所有软件项目对应的已标注预设主题标签构建,所述词汇本体进行没有匹配到任何预设标签的聚类主题中核心词汇的上位概念的查询。\n[0024] 进一步地,步骤4中基于词汇表为主题自动添加语义标签的步骤进一步包括:获取由项目主题标签构建的预设主题词汇表,依据标签与项目描述文本的对应关系找出所有已经由用户标注主题的项目描述文本,将相同主题的项目描述文本整合成一个文本,经过整合项目文本后,每个预设主题对应一个文本;\n[0025] 使用开源搜索引擎为整合后的项目文本建立索引,然后利用生成在线增量演化主题模型的概率模型过程中产生的聚类主题的核心词汇的词组作为查询匹配项目文本,最终按照匹配的分值对项目文本排序,选取排名靠前的预设主题名称作为聚类主题的标签。\n[0026] 进一步地,步骤4中基于词汇本体查询为主题自动添加语义标签的步骤包括:对于没有匹配任何预设标签的聚类主题,在词汇本体中查询聚类主题核心词汇的上位概念,选择覆盖最多核心词汇的上位概念作为该主题的标签,所述上位概念是指外延更广的词汇或者短语,在语义上可以很好地表征其包含的词汇。\n[0027] 采用本发明可以达到以下技术效果:\n[0028] 本方法可以发现开源社区中的新主题、得到开源社区中最优的主题个数,聚类主题及核心词汇分布,同时可以得到每个软件文本在各主题中的分布。从而对开源社区中的主题进行在线增量演化,实现软件自动分类,并为其相应的主题添加语义标签。\n[0029] 本方法适用于开源社区管理者,及时发现开源社区出现的新主题,并对软件项目进行自动分类,方便软件开发者依据软件主题搜索需要的开源软件项目,从而提高软件开发的效率,提高开源社区质量和保障。\n附图说明\n[0030] 图1为现有方法中LDA概率模型的图形表示图;\n[0031] 图2为现有方法中扩展LDA概率模型的图形表示图;\n[0032] 图3为本发明在线增量演化主题的概率模型生成的图形表示图;\n[0033] 图4为本发明中生成的聚类主题的示意图;\n[0034] 图5为本发明中对生成的主题进行自动标注的流程图;\n[0035] 图6为依据本发明的一个实施例对SourceForge在2009年时间片内对20个聚类主题进行标注的结果示意图;\n[0036] 图7为本发明的整体流程图;\n具体实施方式\n[0037] 本发明主要基于项目描述文本对开源社区中的海量开源软件进行自动分类。\n[0038] 步骤1获取软件相关文本与预处理,软件相关文本指与软件相关的一些文本信息。首先用爬虫技术和网页抽取技术从开源社区(如sourceforge.net)中获取大量(>\n100K)开源软件的项目名称、项目主题标签(如果有则获取,否则设置为未标注)、项目描述文本以及项目创建时间(即项目注册时间)。\n[0039] 实施例中,利用爬虫技术和网页抽取技术从sourceforge社区中获取2000年至\n2009年的所有项目信息,从中抽取需要的字段包括项目名称、项目注册时间、项目主题标签和项目描述,表1展示了两个例子。\n[0040] \n[0041] 表1\n[0042] 随后,根据爬取到的项目创建时间(即项目注册时间),将所有项目描述文本按照时间升序排列,并按照时间片Δt为单位将所有项目描述文本分组,其中Δt的大小通常是时间单位(日、月或者年等)的整数倍,Δt是按照开源社区项目描述文本更新的速度和需要观察主题的粒度来选定的。\n[0043] 例如,按照用户的需要和不同的开源社区情况来动态配置。假设sourceforge社区,一个年内可能出现很多(如100个)新的软件项目需要人工分类,则管理者需要一个年对所有新增软件根据项目描述文本人工进行分类和主题标注,然后重新组织软件排序情况更新社区。这时Δt可以设置为2个月,将新增项目分为5个组。此外,还可以利用统计开源社区新增的分类软件数量,通过设置阈值(如>=100)让程序自动判断是否需要分类,也可以根据管理者需求,手工设置。\n[0044] 在实施例中,为了观察近10年sorceforge的演化情况,选取了2000年-2009年的203941个软件项目,然后Δt设为1年,将根据软件注册时间进行分组。将软件文本按照软件注册的时间以年为单位分成10个时间片(2000年-2009年)的文本集合,如表1中的软件项目“a-4”被分到2003年的分组中。\n[0045] 最后,对每个分组的软件相关文本进行预处理,所述预处理包括:通过词根提取将所述项目主题标签转换为其词根,即只保留标签的词根,并将相同词根的标签合并,删除标签数小于预定数目的项目,针对所述项目主题标签生成预设主题词汇表;将项目描述文本转换为单词包。\n[0046] 实施例中,将表1的项目“a-4”进行预处理,预设主题标签处理后为:“Version Control”,所有的预设主题标签有364个。\n[0047] 项目描述文本转化为单词包具体包括:(1)删除停词,即将the,is,also等常见且不具备具体语义的停词删掉;(2)词根提取,即将一个词的不同形态转换为其词根。,并将拥有相同词根的标签进行合并。\n[0048] 实施例中,对项目“a-4”项目描述文本的处理结果为:{automation,manage,perforce,codeline,library,Perl,modules,submit,regress,default,view}。\n[0049] 至此,可以得到开源社区所有项目的名称、项目描述文本,这些文本按照时间段进行了分组并经过预处理。\n[0050] 步骤2生成在线增量演化主题模型,对当前时间片内项目描述文本的主题词汇分布和主题文本分布进行计算\n[0051] 在线增量演化主题模型的主要思想是:每个时间片中词汇的主题分布是依赖于所有历史时间片中的词汇主题分布,而不是仅仅依赖于上一个时间片中的词汇主题分布,所有历史时间片的词汇主题分布作为当前时间片主题分布的先验,通过以时间片为单位增量式的计算当前词汇主题分布。本发明是在LDA的基础上生成在线增量演化主题模型,其中所用到的符号如表2所示。\n[0052] \n[0053] 表2\n[0054] 步骤2.1,替换扩展LDA模型(即基于LDA模型的Gibbs抽样方法)中相应的参数,可以得到在线演化主题模型的概率模型,以步骤1中各个分组的项目名称、项目描述文本为输入,通过吉布斯抽样过程对输入数据进行训练,生成文本流中的聚类主题及主题数目。其中聚类主题是指将项目描述文本中的词汇进行分类,有相同特征的词汇聚集到一起而形成的集合,主题下的词汇被称为核心词汇,如图1所示。\n[0055] LDA(Latent Dirichlet Allocation)主题模型是D.M.Blei在2003年提出的一种产生式的(Genera tive)概率主题模型(Probabilistic Topic Model),它是在潜在语义分析LSA(Latent Semantic Analysis)模型的基础上发展而来的。LDA模型的基本假设是文本是主题的混合,其中主题是词空间上的分布。LDA模型是一种文本的生成模型,它描述了用来生成文本的概率过程(probabilistic procedure)。\n[0056] LDA模型定义了如下的文本生成步骤:\n[0057] 1.选择N,N服从Poisson(ξ)分布。\n[0058] 2.选择θ,θ服从Dirichlet(α)分布。\n[0059] 3.依次选择N个单词:\n[0060] a)选择主题zn,zn服从Multinomial(θ)(多项分布)。\n[0061] b)根据p(wn|zn,β)选择单词wn,p(wn|zn,β)为在zn条件下的多项分布。\n[0062] 上面的步骤中,N代表文本的长度,也就是文本包含单词的个数;θ是列向量,向量的每个分量分别代表产生每个主题的概率,α是Dirichlet分布的参数;zn代表当前j i\n选择的主题;β是一个k×V的矩阵,βij=p(w =1|z =1),也就是说β记录了某个主题条件下生成某个单词的概率。第1步以泊松分布生成每篇文本的单词个数,第2步以(d) (d)\nDirichlet分布生成每篇文本的主题分布θ ,第3(a)步根据第2步主题分布θ 选择某个主题zn,第3(b)步以概率p(wn|zn,β)生成主题zn下的单词wn。将这个过程重复M次,就产生了文本集合D,这里的M是文本总数。给定一个已知的文本集合C,可以利用C作为文本集合D的抽样样本对上述公式进行参数估计。在得到符合文本集合C潜在主题概率分布的参数α和β之后,即可计算出文本集合C的主题文本分布θ-Dirichlet(α)和主题词汇分布矩阵β。\n[0063] 扩展LDA模型是指基于LDA模型的Gibbs抽样方法对应的模型,为了便于使用Gibbs算法进行推理,Griffiths等人在原始的LDA模型基础上使用参数β控制的Dirichlet先验分布作为主题词汇分布,扩展后的主题概率模型为:\n[0064] \n[0065] φ~Dirichlet(β)\n[0066] \n[0067] θ~Dirichlet(α)\n[0068] 原有LDA模型中的主题词汇矩阵β(原有LDA模型中的β代表王题词汇矩阵,而扩展后的模型中β代表主题词汇分布φ的参数)虽然也描述了词汇在主题中的分布概率,但是每个主题中的词汇分布是唯一的,即一旦选定生成主题,那么选择生成词汇的概率(di)\n也就确定了。而扩展后的主题词汇分布φ更加灵活,以概率p(θ )选定生成主题zi后(zi) (zi)\n选定一种生成词汇分布φ ,然后再以概率p(wi/zi,φ )生成词汇wi,这个过程更加符合现实文本生成的规律。扩展模型中的φ和θ与原有LDA模型中的矩阵β和θ相对应,分别代表主题词汇分布和文本主题分布,和原有LDA模型中的矩阵β和θ相对应。\n[0069] 根据扩展LDA主题概率模型,替换相应的参数得到在线演化主题模型的概率模型为:\n[0070] \n[0071] \n[0072] \n[0073] \n[0074] 其中参数 表示文本集合Cts中的词汇出现之前抽样词汇在主题k中出现的概率,是当前文本集合Cts进行抽样的先验。因此, 本质上是所有历史时间片的词汇主题分布共同作用的结果,反映了整个文本集合的词汇主题分布情况。\n[0075] 下面描述该参数的具体计算过程:\n[0076] 第一,设每经过一个时间片Δt对文本分组进行抽样,每次抽样得到一个由抽样词汇构成的文本集合Cts,例如时间片2003年中抽样抽取了项目“a-4”的项目描述文本,此时Cts(即C2003)为:{automation,manage,perforce,codeline,library,Perl,modules,submit,regress,default,view},该文本集合中的词汇称为抽样词汇。\n[0077] 第二,然后计算Wδ×δ维演化矩阵 δ为分组总数,Wδ为当前时间片分组中词汇个数,其中每一行代表所有时间片中某个词被分配到主题k中的概率,每一列代表历史时间片中每个词汇被分配到主题k中的概率。\n[0078] 在实施例中δ为10,2003年分组抽样只有项目“a-4”,则此时间片中Wδ为项目“a-4”的单词包{automation,manage,perforce,codeline,library,Perl,modules,submit,regress,default,View}中词汇个数,即Wδ为11。此时, 为11*10维的矩阵。\n[0079] 第三,定义演化权重向量ωδ以表示每个历史时间片对当前时间片主题分布的影δ\n响。按照时间片的先后顺序定义权重向量,即离当前时间越近的时间片权重越大,ω 计算公式如下:\n[0080] \n[0081] 在实施例中,2003年时间片的分组为所有10个分组中的第四个分组,所以此分组δ\n的权重为:ω (4)=4/1+2+3+4+5+6+7+8+9+10=4/55=0.73\n[0082] 第四, 的计算公式如下:\n[0083] 经过上述处理,可以生成在线演化主题模型的概率模型。\n[0084] 步骤2.2,针对步骤1中处理后的以时间片分组的项目描述文本,计算最优主题个数\n[0085] 一个时间片的描述文档,通过Gibbs会被分配到很多主题下面,开始的主题数目就是通过对项目描述文本进行Gibbs抽样训练得到的,这些主题个数可能不是最优的。之所以需要计算最优主题个数 是因为不同时间片内包含的词汇是有差异的,词汇的差异会导致主题个数和分布的改变。这种词汇差异主要有两种情况:(1)两个时间片中的词汇相同但是出现的次数不同;(2)两个时间片中的词汇不同。首先给出新老词汇的定义。\n[0086] 定义新词汇与老词汇。对于当前时间片ts中的词汇来说,如果词汇在所有历史时间片中出现次数为0,那么称其为新词汇;否则,称其为老词汇。\n[0087] 对于第一种词汇差异来说,由于每个时间片中的词汇都是老词汇,那么如果每个时间片中包含的词汇数目相差不大,主题分布一般不会改变,主题个数也维持恒定。但是通常每个时间片中的词汇并不是均匀分布,很有可能出现某个时间片包含m个主题的词汇,而另外一个时间片包含n个主题的词汇,而m和n可能存在较大差距。对于第二种词汇差异,当前时间片引入了大量的新词汇,需要为这些词汇新建一个主题。因此当前时间片中包含的主题个数可能会因为新增主题而增加。此外,由于Gibbs抽样算法并不保证主题聚类标号的顺序,所以相邻两个时间片的主题标号映射关系并不确定。同时由于主题的演化,同一个主题的核心关键词的分布也会发生改变,这也增加了判断两个主题是否相同的难度。\n[0088] 在本发明中,通过相对熵方法或者Kullback-Leibler差异简称KL距离,它能够衡量两个概率分布的相对差距,在这里用来衡量两个主题词汇分布的相对差距,其计算公式如下:\n[0089] \n[0090] 其中zp和zq表示两个主题,每个主题用一个概率向量表示,向量的第i个分量和 表示第i个词汇属于主题zp和zq的概率,W表示两个主题共有词汇数目。\nKL(zp||zq)的数值越大表示两个主题越不相似,当KL(zp||zq)=0的时候表示两个主题完全相同。如果这个值小于一个阈值,就认为,两个主题是相似或者相同主题,然后合并。\n[0091] 经过上述处理,生成不同时间片的最优主题个数 例如实施例中,2000年至\n2009年10个时间片分组对应的最优主题个数如表3所示。\n[0092] \n 时间片 文本数 总词汇数 最优主题个数\n 2000 5327 14258 15\n 2001 9818 22501 13\n 2002 13591 28538 17\n 2003 15385 30691 15\n 2004 18924 34645 12\n 2005 21489 37831 14\n 2006 27444 45814 10\n 2007 27224 45623 36\n 2008 28361 45820 9\n 2009 36378 52970 14\n[0093] 表3\n[0094] 步骤2.3,基于在线演化主题模型的概率模型,在最优化主题个数的基础上增量式计算当时间片ts到来时,所述时间片内项目描述文本的主题词汇分布φ(ts)和主题文本分布θ(ts),所述增量式计算是指每次计算一个时间片内项目描述文本的主题分布,然后利用已经计算得到的之前的历史时间片的主题分布参数来估计当前所有文本的主题分布。\n[0095] 主题词汇分布是指,对项目描述文本处理后,生成的所有主题与核心词汇构成的集合,主题文本分布是指生成主题后,某项目描述文本在各主题中的分布状况及分布概率,该项目描述文本最终被分配在具有最大概率的主题下,主题词汇分布及主题文本分布可使用矩阵表示。\n[0096] 该步骤的具体实施过程如下所示:\n[0097] 在线增量演化主题生成模型参数估计\n[0098] 输入:常量a,b,当前时间片的文本集合Cts\n[0099] 输出:主题词汇分布φ(ts)和主题文本分布θ(ts)\n[0100] \n[0101] 1.判断ts是否等于1(是否是第一个时间片)\n[0102] 2.如果是\n[0103] 3.则将所有 赋值为b,其中k={1,2,...,T}\n[0104] 4.初始化初始化 和ω1,其中k={1,2,...,T},δ=1\n[0105] 5.如果否, 赋值为 其中k={1,2,...,T}\n[0106] 6. 赋值为a,d={1,2,...,Mts}\n[0107] 7.初始化变量φ(ts)θ(ts)为0\n[0108] 8.为Cts中所有词汇标记初始化主题分布zts\n[0109] 9.以Cts、 和 为输入进行Gibbs抽样过程,得到稳定状态时所有词汇标记的δ\n主题分布,更新 为 (第δ+1列为Cts中每个词汇被分配到主题k的概率),更新ω为ωδ+1,δ加1\n[0110] 10.计算并返回φ(ts)和θ(ts)\n[0111] 其中稳定状态是指主题词汇分布和主题文本分布稳定,即每个单词分配到一个主题下的概率不再变化或者变化在很小的一个范围上下波动,每个项目描述文本在每个主题下的概率也不再变化或者在一个很小的范围波动。\n[0112] 在第2行,在第1个时间片中,对于模型的参数进行初始化, (k=1,2,...,T)都初始化为b。在第7行通过Gibbs抽样可以计算第一个时间片中每个词汇被分配到主题k的次数,此时的演化矩阵只有1列;然后当每个时间片到来的时候,第3行利用演化矩阵计算当前的参数,同样在第7行计算每个词汇被分配到主题k的次数。第8行利用公式[0113] \n[0114] \n[0115] 计算当前时间片到来时的φ(ts)和θ(ts),公式中的参数α和β为 知在整个演化过程中并没有改变,都赋值为a。\n[0116] 在实施例中,a赋值为 为最优主题个数),b赋值为0.1。Gibbs抽\n样的迭代次数都设置为100次,主题个数的范围设定在100到400之间,因为数据集中预设主题总数为364个。执行后,获得一个时间片分组对应的软件描述文本的主题词汇分布φ(ts)和主题文本分布θ(ts),最后按照时间片循环执行算法,可以得到全部项目描述文本的主题词汇分布和主题文本分布。\n[0117] 表4展示了2009年sourceforge中203302个项目的前九个主题对应的主题词汇分布,表5为项目“a-4”的主题文本分布。\n[0118] 表4\n[0119] \n[0120] 表5\n[0121] \n[0122] 将所有时间片得到的主题词汇分布组合,我们可以得到2000年至2009年所有的软件文本主题词汇分布,表6为全部时间片里10个与Web相关的主题词汇分布。\n[0123] \n[0124] 表6\n[0125] 步骤3获取未知分类主题的文本d,根据步骤2中生成的δ个时间片的主题词汇分布φ(ts)和主题文本分布θ(ts)计算所述文本d从属的n个主题的主题词汇分布,并选择排序靠前的若干个主题作为所述文本d的文本主题,从而将所述文本d分类到相应的主题中,具体地依据下列步骤执行:查找所述未知分类主题的文本d从属的时间片ts,计算(d)\n所述文本d在最优化主题个数 中的分布概率θ (ts),将 按\n照概率从大到小的顺序排列,取概率排序靠前的n个主题t1,t1,...,tn,同时返回主题t1,t2,...,tn的主题词汇分布\n[0126] 在实施例中,项目“a-4”的项目描述文本的主题文本分布如步骤2中的表5所示,选择概率排序靠前的5个主题作为其软件文本主题,即项目“a-4”属于主题{主题7(linux,windows,......,media),主题3(JaVa,Library,......,oriented),主题\n1(project,http,......,microsoft),主题5(Files,File,......,view),主题2(Data,Tool,......,store)}。\n[0127] 至此,可以将一个未知分类主题的文本d自动分类到相关的主题中,这些主题被称为聚类主题,但是这些主题是用核心关键词集合来表示,每个主题缺乏一个具有明确语义的主题标签(topic label)。当把一个文本d分类到某个主题中时,通常需要人工浏览这个主题的核心词汇才能确定这个主题的语义含义。所以需要对主题自动添加语义标签。\n[0128] 当前最主要的主题自动标注(topic automatic labeling)方法有两类:基于词汇表(topic word list)的方法和基于语料库wikipedia的方法。基于词汇表方法的主要思想是,预先给定主题标签和描述主题标签的词汇列表,然后比较聚类主题核心词汇集合和预设主题标签词汇列表的相似度,当相似度大于阈值时,表明该聚类主题应该标注该主题标签,比如给出了与软件分功能属性相关的6个主题标签(Maintainability,Functionality,Portability,Efficiency,Usability和Reliability)以及他们的词汇列表。基于wikipedia方法的主要思想是利用wikipedia选择或者生成词汇或词组作为聚类主题标签,比如分析聚类主题核心词汇之间的关系,选择其中最有代表性的词汇或者词组作为该主题的标签,如某个聚类主题的核心词汇集合为{space,nasa,moon},那么space就是其中最有代表性的词汇,原因是在wikipedia的文章中,只要出现了earth、moon、nasa和mission,那么很大概率也会出现space,即条件概率P(space|{moon,nasa})要大于P(moon|{space,nasa})和P(nasa|{space,moon})。可以利用聚类主题核心词汇在wikipedia中查找相关文章,然后利用这些文章的标题生成适合聚类主题的标签。\n[0129] 基于词汇表方法的好处是高效,不足之处是对于由新词汇构成的聚类主题来说,由于新词汇与标签词汇表中的词汇不匹配,导致无法用现有预设的标签来标注聚类主题;\n基于wikipedia方法的优点是灵活,能够为由新词汇构成的聚类主题生成合适的标签,它的缺点是复杂度高,而且对于语义丰富的文章来说,文章题目作为聚类主题的标签来说太宽泛,并不能够准确的表述其语义,比如某篇文章的题目叫“软件的发展”,此文可以涵盖软件开发、使用等等各个方面,用它来作为软件开发主题的标签显然不合适。所以,需要进一步为每个主题自动分配一个语义标签以最终完成对软件项目的分类。\n[0130] 基于上述分析,本发明提出了一种结合基于词汇表和基于词汇本体查询的方法为主题自动添加语义标签,如图5所示,其中所述词汇表基于步骤1中爬取到的所有软件项目对应的已标注预设主题标签构建,所述词汇本体进行没有匹配到任何预设标签的聚类主题中核心词汇的上位概念的查询。\n[0131] 步骤4首先构建预设主题词汇表,步骤1中爬取到所有的软件项目对应有预设主题标签,这些标签是由用户标注的,从中找出所有已经由用户标主题的项目描述文本,将相同主题的项目描述文本整合成一个文本。经过整合项目文本后,每个预设主题对应一个文本。在实施例中,按照2003年SourceForge的预设主题本体来整合文本,最终会得到185个主题文本。\n[0132] 接着,使用开源搜索引擎Lucene为这185个主题文本建立索引,然后利用步骤2中得到的聚类主题的核心词汇的词组作为Query查询匹配185个预设主题文本,最终按照匹配的分值会对185个文本排序,选取排名前5的预设主题名称作为聚类主题的标签。\n[0133] 最后,对于没有匹配任何预设标签的聚类主题,在词汇本体(比如wordnet、freebase和微软的Probase等)中查询聚类主题核心词汇的上位概念(hypernym \nconcept),选择覆盖最多核心词汇的上位概念作为该主题的标签。上位概念是指外延更广的词汇或者短语,在此对其稍作扩充,如定义所示,上位概念在语义上可以很好地表征其包含的词汇。\n[0134] 定义上位概念。给定两个词汇或者短语A和B,如果B是A的一个实例(isa),或者B是描述A的属性,那么称A是B的上位概念。\n[0135] 词汇本体主要由三种对象和对象之间的关系构成。三种对象主要包括:概念(concept)、属性(attribute)和实例(entity)。对象之间的关系主要包括:isa、包含等。\n通常聚类主题的核心词汇都是属于某个语义概念的属性或者是某个语义概念的实例,比如聚类主题7,通过其核心词汇来判断应该是属于操作系统类属的,其中的Linux、windows等都是操作系统的实例,而desktop、interface和program等都是操作系统的属性。\n[0136] 在实施例中,可以得到2009时间片20个聚类主题的标注结果如图6所示。例如主题19对应的核心词汇{Players,CD Playing,Conversion,Display,Home Theater PC}通过查询,它们都是预设主题标签Multimedia的子类,那么主题19最终被分配的标签为“Multimedia”。比如主题4在索引中没有合适的匹配标签,原因是其对应的核心词汇{http,net,href,www,bookmarking,social,blog,network,wiki,info,asp,repository,download,information,part,home}中的“bookmarking、social、blog、network、wiki”等新词汇在2003的文本集合中还没有出现,所以需要查询词汇本体来生成标签,在词汇本体wordnet中的查询结果是“social media”,因为“bookmar king、social、blog、network、wiki”的上位概念都“social media”。所以,主题4的标签为“social media”。\n[0137] 至此,就完成了对软件文本的主题分类和主题语义标签自动标注。\n[0138] 整体方案流程图如图7所示。\n[0139] 最后所应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |