面向自然语言形式的基于讲义和StackOverflow的API信息检索方法与流程

文档序号:18009931发布日期:2019-06-25 23:53阅读:241来源:国知局
面向自然语言形式的基于讲义和Stack Overflow的API信息检索方法与流程

本发明属于信息检索领域.,尤其涉及一种面向自然语言形式的基于讲义和stackoverflow的api信息检索方法。



背景技术:

目前,业内常用的现有技术是这样的:

现有的方法大多基于全文检索,比如利用基于vsm的lucene全文检索引擎包,直接根据自然语言问题在文档库中进行关键词的检索和匹配,以及使用基于神经网络的word2vec词向量模型可以很好的挖掘词之间的上下文关系,因此可以先将问题和文档分别进行词向量表示,再根据两者之间的相似性返回结果。除此之外,ck方法则利用了源码中软件领域的概念知识,通过提取api图谱进行api相关文档推荐。

开发者们通常使用api来加速软件开发进程或提高软件质量。但随着api库规模的扩大和api数目的增加,开发者们往往会遇到不熟悉的api或是新的api库。此时,他们需要知道用什么api和怎样使用它们,而现实中一些学习资料和论坛比如api讲义和stackoverflow(so)能够帮助查找和使用api。前者整合了用于解释api的文字描述和代码实例,并按编程任务进行分组。后者是一个供开发者们学习和分享编程知识的问答(q&a)网站,汇集的大量问答帖可以被认为是群智的一种,作为官方文档(比如api讲义)的补充。有研究表明,api讲义能够帮助开发者们理解泛型编程环境中api的某些行为,而so中的问答帖则倾向于对特定编程环境中的api用法进行解释,将两者结合能够提供更多类型的api相关信息。

现有的方法不能为开发者们同时提供两种资料上的api相关信息检索。为了尽快的使用多种资料对api进行熟悉,开发者们不得不使用so自带的搜索引擎检索所需的api或浏览相关的问答帖人工对有用的api进行识别,或是使用先进的api讲义推荐工具(例如frapt)查找api相关的讲义片段,两个过程往往不能同步进行。这样的检索方法不仅效率不高,而且将两种资料分开处理可能导致返回的结果不相关。

另一个影响检索精度的因素是问题的质量。例如,so的搜索引擎关于某个问题会返回大量问答帖,问题中包含的api名称和关键词有助于提升问答帖的相关度。但实际应用中,开发者们有可能对能够使用什么api不了解,也不知道具体的api名称,这种情况下,他们会将与api相关的问题用自然语言描述,而so返回的问答帖和api就需要人工进一步筛选。

综上所述,现有技术存在的问题是:

(1)现有的方法不能为开发者们同时提供两种资料上的api相关信息检索。比如frapt方法只提供api讲义的推荐,或是根据stackoverflow的搜索引擎进行检索。检索方法不仅效率不高,而且将两种资料分开处理可能导致返回的结果不相关。

(2)现有的方法没有深入挖掘提问语义层的信息,基于关键字匹配的方法容易造成大量有用信息的丢失,最终导致检索精度的损失。特别是在自然语言形式下,提问可能并不直接包含api名称,直接计算问题和文档之间关键词相关度的方法如vsm只能利用了极少的文字信息。

(3)现有的方法不能构建同时包含api讲义和stackoverflow上问答帖知识项库。两种信息之间不但具有互补性,例如讲义提供了更多关于类型,功能等概念类型的信息,而stackoverflow上公布了更多关于控制流、结构和代码示例等信息,而且具有高度的异构性。已有的方法不能将信息进行融合,只能判断单一数据来源与api的相关性,构造单一的知识项库,不能为api提供更全面,准确的信息推荐。

解决上述技术问题的难度:

对于自然语言形式的提问,如何对语义层次的信息进行深入挖掘,特别是在问题中并未显示提及api名称时,仅根据提问者关于功能或其他特征的描述,得到潜在的相关api。

如何同时建立api与两种异构知识项的相关关系。由于讲义和stackoverflow网站上能够较小重叠的对api的相关问题进行解答,意味着两者融合能够为提问的开发者更丰富更全面的api相关信息,因此需要将两种信息来源的知识项作为整体,在同一个检索空间内进行推荐。

api相关信息推荐的结果往往是相关文档按照排序结果,依次进行推荐。排序策略对推荐的准确率有着不可忽视的影响,所以应考虑如何设计排序策略使其更好的刻画文档的相似程度。

解决上述技术问题的意义:

能够更好地理解开发者自然语言形式的关于api的提问,从问题中挖掘语义层次的潜在api,并将其作为连接问题与候选文档库之间相似性的重要中间项。

融合了两种api相关信息的知识项,不仅包含api讲义知识,还包含了来自stackoverflow网站上的与api相关的问答帖知识,包含这两类信息的检索空间能够考虑到多种来源上的api相关信息,对知识项进行特征提取,主成分分析,以及度量学习,能够使两者充分融合,更好的解决开发者对于api的疑问。

排序策略能够刻画问题与api,问题与知识项,api与知识项三者之间的相似度关系,通过api建立问题与知识项之间的相似度的方法,能够消除两者之间的语义鸿沟。合理的排序规则能够根据提问筛选出更加相关的知识项信息,使得相关度越高的信息排在越靠前的位置,也越早被推荐,从而提升推荐的准确率。



技术实现要素:

针对现有技术存在的问题,本发明提供了一种面向自然语言形式的基于讲义和stackoverflow的api信息检索方法。本发明基于迁移的深度度量学习同时利用api讲义和so问答帖两种不同的学习资料,不仅提高了检索准确率,还能为开发者提供多种api相关的信息。

本发明是这样实现的,

一种面向自然语言形式问题的基于讲义和stackoverflow的api相关信息检索方法包括以下步骤:

步骤一,构建api与知识项api-ki的库;api-ki库包含api与讲义段api-段对、api与问答帖api-q&a知识,并进行提取;

步骤二,对自然语言形式的提问进行分析,获取与问题相应的潜在api;

步骤三,使用相关性鉴别模型tdml对相关的api-ki对进行鉴别;

步骤四,使用步骤二的潜在api在相关的api-ki对中挑选并生成候选列表,候选列表由生成的潜在api和相关的api-ki对匹配得到,选择api与潜在api相同的相关api-ki对作为问题的候选结果。

进一步,步骤一中,从api讲义中提取api-段对包括:

对api讲义划分为多个段,每段内容紧密相关并集中于某一个主题;采用相同的分段策略,提取<href>标签中的内容来获取该段的api,将api与对应段相连结为api-段对;对于没有被<href>标签链接的api,将段打散为多个标记,并使api与每个词相匹配,从匹配的上下文中根据关键词查找api,同样生成api-段对;

从so问答帖中提取api-q&a对包括:根据问题的标签收集与api相关的问答帖;

构造正例时,挑选的问答对中所提问题包括至少三个回答且有一个被接受的回答作为最终结果;被接受的问题包含代码;将回答中的代码进行分词处理,并与该问题标签类的讲义中的各api进行匹配,得到问答帖对应的api;正例api-q&a对标记为相关。

未被接受的答案中的api由于不能很好地解决该问题,api与问答对组成api-q&a对的负例;构造负例时,收集含有未接受回答的问题;每个未接受回答的分数小于0;提取未接受回答中的api,并与问答对组成api-q&a对的负例;随机选取的负例数目和正例相同,负例api-q&a对标记为不相关。

进一步,步骤二中,先将问题转化为数个潜在的api,再用api检索相关文档;使用javadoc对自然语言问题进行分析并转化为潜在的api,具体包括:

jsoup从在线文档中提取api相应的javadoc;提取出的api规范包括api全称和api描述;

word2vec对问题、api全称、api描述三种语料进行训练,得到语料库中每个词的词向量;再分别计算各文档中向量的均值,整个文档的向量,vi表示第i个文档向量;

vq作为自然语言形式问题的向量;分别作为第i个api全称;表示vq之间的余弦相似性,表示vq之间的余弦相似性;

降序排列,选择api描述和api全名相似性排名前m的api作为初始的api候选,分别用apid和apin表示;同时出现在这两个集合中的api更有可能成为潜在的api;将api分为子集1、子集2、子集3,然后使用公式1为每个候选api打分;子集1为同时出现在apid和apin中的api,子集2为只出现在的apid中的api,子集3为只出现在apin中的api;η作为调整因子用来确保子集1的分数要比其他子集高;η为0.1;

公式(1)遵循两个规则:子集1中的api要比其他子集中的api排名高;相似度值高的api要比相似度值低的api排名更高;

对三个子集中的所有api的分数进行排序,选择m个最高的分数对应的api作为潜在api列表;m值为20。

进一步,步骤三中,基于迁移的深度度量学习方法tdml对相关的api-ki对进行鉴别包括:

为api-段对的训练集,xit为第i个带标签的api-段对样本,nt是api-ki库中api-段对的数;

为api-q&a对的训练集,包含ns的api-q&a对,其中xis为第i个带标签的api-so对样本;x=[x1,...,xi,...,xn]为api-ki对的总集合,其中x是既包含api-段对又包含api-q&a对的n个api-ki对集合,xi表示第i个带标签的api-ki对;

将xt和xs映射至共同的特征空间,同时两者的分布也会趋于相似;生成的特征空间使非线性相关系数最大化,非线性相关系数如下:

其中cov(·)表示协方差,var(·)表示自方差,(·)t表示矩阵的转置;和φ(xs)表示两个非线性映射,将xt和xs映射至非线性的特征空间中;wt和ws分别为投影方向;公式(2)使用不完全的cholesky分解计算求得的投影方向wt和ws使得和φ(xs)分别投影至相同的特征空间,并且映射后的样例和wsφ(xs)相关性最大;x′表示x映射后的新的训练样本集合,包含新的xt′即和新的xs′即wsφ(xs);

将新的训练集x′作为tdml的输入,其中tdml为一个三层的深度神经网络,包括输入层、隐藏层和输出层,对应神经节点的数量分别为d,d-1和d-3;对于输入的x′,经过前向传播,在第m层的输出为:

其中f(m)(x′)为由第m层的权重矩阵w(m)和偏差b(m)决定;为激活函数,此处为tanh函数;深度神经网络学习到所有的权重w(m)和偏差b(m);输入层设置h(0)=x′;

基于极小极大原理,tdml将同时最小化类内api-ki对的距离以及最大化类间api-ki对的距离;输出层的目标函数为:

其中g(w(m),b(m),x′)为判定项,γ(γ>0)为可调的正归一化参数;||·||f表示frobenius范数;判定项g(w(m),b(m),x′)如下:

其中若xj′为xi′的k1个类内最近邻,pij为1,否则为0;若xj′为xi′的k2个类间最近邻,qij为1,否则为0;α(α>0)作为类内耦合和类间分散的重要性平衡参数;

将公式(5)带入,将tdml方法的目标函数(4)整理为:

公式(4)通过梯度下降的方法计算最优权重矩阵w(m)和偏差b(m);此处k1、k2、α和γ经验性的设置为(27,45)、(5,10)、0.1和0.1;

根据学习到的权重矩阵w(m)和偏差b(m),鉴别相关api-ki对首先根据w(m)和b(m),计算公式(3)中f(m)(x′),然后通过公式计算xi′和xj′之间的距离,并对相关的api-ki对进行鉴别。

进一步,步骤四中,候选列表中api-ki对与所提与api相关自然语言形式问题越相关,在返回的最终列表中的排名越高;基于三种相似度评估相关的api-ki对是否与问题有关,提问与第i个可能的结果之间总相似度ci计算公式如下:

其中是问题和潜在api之间的相似度,值由公式(1)计算;表示潜在api与api-ki对的语义相似度;表示问题与api-ki对的语义相似度,值由word2vec和余弦相似度计算;

根据总的相似度ci对候选列表中的结果进行降序排序,排序后的api-ki列表将作为问题的解答返回给开发者,相似度越高的api-ki对在最终返回的列表中排名也将越高。

本发明的另一目的在于提供一种实现所述面向自然语言形式问题的基于讲义和stackoverflow的api相关信息检索方法的计算机程序。

本发明的另一目的在于提供一种终端,所述终端搭载实现所述基于讲义和stackoverflow的api相关信息检索方法的信息处理器。

本发明的另一目的在于提供一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行所述的面向自然语言形式问题的基于讲义和stackoverflow的api相关信息检索方法。

本发明的另一目的在于提供一种实现所述面向自然语言形式问题的基于讲义和stackoverflow的api相关信息检索方法的面向自然语言形式问题的基于讲义和stackoverflow的api相关信息检索系统。

本发明的另一目的在于提供一种实现所述面向自然语言形式问题的基于讲义和stackoverflow的api相关信息检索方法的面向自然语言形式问题的基于讲义和stackoverflow的api相关信息检索网络平台。

综上所述,本发明的优点及积极效果为:

本发明该方法构造了以api相关的讲义段和so论坛上的问答帖为知识项(ki)的库,并根据自然语言形式的问题在库中进行api相关知识项的检索,后者包括自然语言问题的分析、api相关知识项(ki)的识别和api相关知识项的检索三个步骤。其中:

本发明对自然语言形式的问题从语义层次上进行分析,深度挖掘了问题中的潜在api,利用词向量模型与api全称和描述两方面匹配,能够更好地理解问题中上下词的关系,提供更加深度,有效的api相关信息搜索。

本发明设计了一种基于迁移的深度度量学习方法tdml用于ki的识别,能够同时在知识库中预测两种异源知识项与api的相关性,并通过神经网络学习样本之间的距离度量,使得相关的api-ki类尽可能靠近,不相关的api-ki类尽可能远离,既缩小了异构数据之间的鸿沟,又增加了数据本身对于相关性的鉴别性。

本发明提出的检索方法整合了api讲义和stackoverflow网站的问答信息,有效提高了检索精度,基于两种来源信息具有良好的互补性和较小的重叠性,基于排序策略的检索结果,能确保为开发者提供高效、精确的api相关知识。

本发明包含改进自然语言形式问题的分析、基于tdml的相关性鉴别和排序策略三个阶段的plan方法能够取得比最先进的检索方法更好的结果。

为了对plan与其他相关方法之间的差异性进行评估,使用威尔科克森符号秩检验计算统计显著性。当返回的api-ki对的结果数为5,10,15时,计算得到的p值都少于0.03,证明使用本发明所提plan方法能够在p@k和mrr指标上取得检索效率的提升。

附图说明

图1是本发明实施例提供的面向自然语言形式问题的基于讲义和stackoverflow的api相关信息检索方法流程图。

图2是本发明实施例提供的基准方法和发明所提plan在两个api-ki库上的平均结果图。

图3是本发明方法plan在真实场景下使用时提交问题和返回的结果列表的示例图

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

现有的方法不能为开发者们同时提供两种资料上的api相关信息检索。检索方法不仅效率不高,而且将两种资料分开处理可能导致返回的结果不相关。

现有技术检索中,so返回的问答帖和api就需要人工进一步筛选。

为解决上述技术问题,下面结合具体方案对本发明作详细描述。

如图1所示,本发明实施例提出的面向自然语言形式问题的基于讲义和stackoverflow的api相关信息检索方法包括以下步骤:

步骤1、构建api与知识项(即api-ki)的库。api-ki库包含api与讲义段(api-段对)、api与问答帖(api-q&a)两种知识,需要分别提取。

步骤2、对自然语言形式的提问进行分析,找出与问题相应的潜在api。

步骤3、使用相关性鉴别模型(tdml)对相关的api-ki对进行鉴别。由于从知识项提取出的api并不一定与知识项相关,所以在根据潜在api进行检索之前,需要挑选出api与知识项相关的对作为检索库。

步骤4、使用步骤2的潜在api在相关的api-ki对中挑选并生成候选列表,候选列表由前两个步骤分别生成的潜在api和相关的api-ki对匹配得到,选择api与潜在api相同的相关api-ki对作为问题的候选结果。

下面结合

在本发明实施例的步骤1中,从api讲义中提取api-段对。首先,为了帮助开发者高效地查找与api相关的有用信息,检索结果简洁、有用,api讲义被划分为多个段,每段内容紧密相关并集中于某一个主题。本发明方法采用分段策略,即先将讲义分为若干自然段落,再逐步将段落集中成为特定长度(100到300词)的段。由于大多数讲义遵循w3c准则,即讲义段存储在html文件中,而api通常被链接在html的<href>标签中,因此可以通过提取<href>标签中的内容来获取该段的api,进而将api与对应段相连结为api-段对。对于没有被<href>标签链接的api,则将段打散为多个标记,这里标记可以为词,并使api与每个词相匹配,然后从匹配的上下文中根据关键词(如class,interface等)查找api,同样生成api-段对。

从so问答帖中提取api-q&a对。由于so采用标签机制,因此可以根据问题的标签收集与api相关的问答帖。例如带#jodatime标签的问题可能与java集的jodatime子集中的某个api有关。在so中,提出的问题往往是对编程任务需求的描述,被提问者接受的回答中的api被认为是该问题的一个有效解答,即问题与被接受回答组成的问答对表示一个特定编程任务下的与某个api相关的信息。从而被接受答案的代码中提取的api与该问答对组成api-q&a对的正例。

构造正例时,挑选的问答对中所提问题包括至少3个回答且有一个被接受的回答作为最终结果,这样能够保证该问题是经过充分考虑并被成功解决的;被接受的问题应包含代码,方便api提取;将回答中的代码进行分词处理,并与该问题标签类的讲义中的各api进行匹配,最后得到问答帖对应的api。正例api-q&a对标记为相关。

相应地,未被接受的答案中的api由于不能很好地解决该问题,api与问答对组成api-q&a对的负例。构造负例时,收集含有未接受回答的问题;每个未接受回答的分数必须小于0,这样才能保证低质量未接受回答的确缺少api的相关解释;与构造正例类似,提取未接受回答中的api,并与问答对组成api-q&a对的负例。随机选取的负例数目和正例相同,负例api-q&a对标记为不相关。

在本发明实施例的步骤2中,步骤2、对自然语言形式的提问进行分析,找出与问题相应的潜在api。开发者往往以自然语言的形式提出与api相关的问题,而这些自然语言形式的问题和api文档之间存在着较大的语义鸿沟,直接检索的结果往往不理想。所以需要先将问题转化为数个潜在的api,再用api检索相关文档。api作为特定的软件概念,有助于减少自然语言形式的问题与api文档之间的差异。

这里使用javadoc对自然语言问题进行分析并将它们转化为潜在的api。jsoup能够从在线文档中提取api相应的javadoc(例如jodatime的javadoc能够从jodatime的在线文档中获取)。提取出的api规范包括api全称和api描述。对问题、api全称和api描述首先使用自然语言处理中常用的方法进行预处理,即分词、去停用词和词干化。

word2vec对问题、api全称、api描述三种语料进行训练,得到语料库中每个词的词向量。再分别计算各文档中向量的均值,即整个文档的向量,vi表示第i个文档向量。

相应的,vq作为自然语言形式问题的向量。分别作为第i个api全称的和它的描述。表示vq之间的余弦相似性,表示vq之间的余弦相似性。

降序排列,选择api描述和api全名相似性排名前m的api作为初始的api候选,分别用apid和apin表示。一般同时出现在这两个集合中的api更有可能成为潜在的api。因此将api分为3个子集(子集1:同时出现在apid和apin中的api,子集2:只出现在的apid中的api,子集3:只出现在apin中的api)然后使用公式1为每个候选api打分。η作为调整因子用来确保子集1的分数要比其他子集高。这里将η设定为0.1。

公式(1)遵循了两个规则:子集1中的api要比其他子集中的api排名高。相似度值高的api要比相似度值低的api排名更高。

最后,对三个子集中的所有api的分数进行排序,选择m个最高的分数对应的api作为潜在api列表。这里m值为20。识别潜在的api能够帮助自然语言形式的问题和潜在api文档在语义上进行对应和理解,而使用word2vec则充分考虑语料上下词之间的联系,更好地表现他们在语义层面的关系。

在本发明实施例的步骤3中,步骤3、使用相关性鉴别模型(tdml)对相关的api-ki对进行鉴别。由于从知识项提取出的api并不一定与知识项相关,所以在根据潜在api进行检索之前,需要挑选出api与知识项相关的对作为检索库。

与一般的机器学习方法相比,深度度量学习能够更好的解决api-ki对是否相关这样一个二分类问题。由步骤1构造api-ki对的检索库可知,检索库中存在两种不同的api-ki对,即api-段对和api-q&a对。它们的类型、特征数量和特征向量的数量不尽相同。以jodatime为例,api-段对的特征向量的维度为17,api-q&a对的维度为21;api-段对的数量为68,而api-q&a对的数量为124等等。迁移学习则能够将两种不同类型的训练数据映射至同一空间中同时进行考虑和比较。其中文献41所述代价敏感的迁移核典型相关分析ctkcca方法在此应用场景下有出色的表现。采用23个特征度量分别对这两种待学习的数据进行特征提取,使得相关性鉴别模型能顾直接训练包含两种不同维度特征的api-ki对。

基于上述方法,本发明设计了基于迁移的深度度量学习方法(tdml)对相关的api-ki对进行鉴别。假设为api-段对的训练集,xit为第i个带标签的api-段对样本,nt是api-ki库中api-段对的数量。同样的为api-q&a对的训练集,包含ns的api-q&a对,其中xis为第i个带标签的api-so对样本。x=[x1,...,xi,...,xn]为api-ki对的总集合,其中x是既包含api-段对又包含api-q&a对的n个api-ki对集合,xi表示第i个带标签的api-ki对。

在ctkcca模型维度参数的基础上,将xt和xs映射至共同的特征空间,同时两者的分布也会趋于相似。生成的特征空间需要使得非线性相关系数最大化,非线性相关系数的定义如下:

其中cov(·)表示协方差,var(·)表示自方差,(·)t表示矩阵的转置。和φ(xs)表示两个非线性映射,能够将xt和xs映射至非线性的特征空间中。wt和ws分别为投影方向。例如,at和as分别为api-段对和api-q&a对的投影变换。公式(2)使用不完全的cholesky分解计算。求得的投影方向wt和ws使得和φ(xs)分别投影至相同的特征空间,并且映射后的样例和wsφ(xs)相关性最大。x′表示x映射后的新的训练样本集合,包含新的xt′即和新的xs′即wsφ(xs)。

将新的训练集x′作为tdml的输入,其中tdml为一个三层的深度神经网络,包括输入层、隐藏层和输出层,对应神经节点的数量分别为d,d-1和d-3。对于输入的x′,经过前向传播,在第m层的输出为:

其中f(m)(x′)为由第m层的权重矩阵w(m)和偏差b(m)决定。为激活函数,此处为tanh函数。最终,深度神经网络学习到所有的权重w(m)和偏差b(m)。输入层设置h(0)=x′。

基于极小极大原理,tdml将同时最小化类内api-ki对的距离(例如同属相关的api-ki对或同属不相关的api-ki对)以及最大化类间api-ki对的距离(例如相关和不相关的api-ki对)。输出层的目标函数为:

其中g(w(m),b(m),x′)为判定项,γ(γ>0)为可调的正归一化参数。||·||f表示frobenius范数。判定项g(w(m),b(m),x′)定义如下:

其中若xj′为xi′的k1个类内最近邻,pij为1,否则为0。若xj′为xi′的k2个类间最近邻,qij为1,否则为0。α(α>0)作为类内耦合和类间分散的重要性平衡参数。

将公式(5)带入,将tdml方法的目标函数(4)整理为:

公式(4)可以通过梯度下降的方法计算最优权重矩阵w(m)和偏差b(m)。此处k1、k2、α和γ经验性的设置为(27,45)、(5,10)、0.1和0.1。

根据学习到的权重矩阵w(m)和偏差b(m),鉴别相关api-ki对首先根据w(m)和b(m),计算公式(3)中f(m)(x′),然后通过公式计算xi′和xj′之间的距离,并对相关的api-ki对进行鉴别。

在本发明实施例的步骤4中,使用步骤2的潜在api在相关的api-ki对中挑选并生成候选列表,候选列表由前两个步骤分别生成的潜在api和相关的api-ki对匹配得到,选择api与潜在api相同的相关api-ki对作为问题的候选结果。

候选列表中api-ki对与所提与api相关自然语言形式问题越相关,其在返回的最终列表中的排名越高。为了评估相关的api-ki对是否与问题有关,基于三种相似度提问与第i个可能的结果之间总相似度ci计算公式如下:

其中是问题和潜在api之间的相似度,值由公式(1)计算;表示潜在api与api-ki对的语义相似度;表示问题与api-ki对的语义相似度,值由word2vec和余弦相似度计算;

最后,根据总的相似度ci对候选列表中的结果进行降序排序,排序后的api-ki列表将作为问题的解答返回给开发者,相似度越高的api-ki对在最终返回的列表中排名也将越高。

下面结合效果对本发明作进一步描述。

首先,本发明对所提方法在关于api的自然语言形式问题的检索高效性进行了验证。

待检索的270个自然语言形式的问题都取自真实应用场景,且都为mcgill库和android库中关于api的函数功能、概念和目标的提问(例如,关于joda-time中period、interval和duration的区别)以及关于api的控制流、结构和模式(例如,怎样使用smack给多用户聊天室的所有人发送信息)的提问等等。

对比方法包括一些典型的检索方法lucene、w2v、ck和先进的检索方法sotu。

实验使用检索结果前k项的准确度p@k和mrr作为评价指标,这里k分别取5,10,20。

表1mcgill库中基准方法和plan分别在p@k和mrr上的结果

表2android库中基准方法和plan分别在p@k和mrr上的结果

表1和表2的实验结果显示,本发明所提方法plan能够在所有评价指标上都优于基准方法。特别在math和graphics库上,plan能够分别达到最优p@5值48.00%和43.33%,以及在math和graphics库上,能够达到最优mrr值71.70%和55.62%。

图2为各方法在mcgill库和android库中的平均结果。与改进后的检索方法ck相比,plan在mcgill库上,分别将p@5和mrr平均提高了16.80%(37.20%-20.40%)和13.51%(53.16%-39.66%);plan在android库上,分别将p@5和mrr平均提高了14.33%(30.17%-15.84%)和14.45%(47.79%-33.34%)。与sotu的比较结果显示,plan在mcgill库上,分别将p@5和mrr平均提高了11.33%(37.20%-25.87%)和12.21%(53.16%-40.96%);在plan在android库上,分别将p@5和mrr平均提高了8.33%(30.17%-21.84%)和9.78%(47.79%-38.01%)。

在本发明实施例中,包含改进自然语言形式问题的分析、基于tdml的相关性鉴别和排序策略三个阶段的plan方法能够取得比最先进的检索方法更好的结果。

为了对plan与其他相关方法之间的差异性进行评估,使用威尔科克森符号秩检验计算统计显著性。当返回的api-ki对的结果数为5,10,15时,计算得到的p值都少于0.03,证明使用本发明所提plan方法能够在p@k和mrr指标上取得检索效率的提升。

其次,验证本发明基于多种信息源的知识库,能够在检索性能上优于仅基于单一信息源的知识库。

分别在讲义知识项、stackoverflow问答帖知识项和包含前两种知识项的三个不同知识库上进行检索,待验证的方法仍然是本发明方法plan和其他四种对比方法lucene、w2v、ck和sotu,并用“方法”加“使用的知识库”表示,比如“plan-tu”表示基于讲义知识项库的plan方法。最后p@k和mrr作为评价指标,在mcgill库和android库上的实验结果如表3和表4所示。不同知识库被同一种方法检索后得到的评价指标的最优值加粗显示。

表3mcgill数据库上各方法基于不同知识库的p@k和mrr结果

表4android数据库上各方法基于不同知识库的p@k和mrr结果

表3和表4上的结果表明,比如与plan-tu和plan-so相比,plan方法的p@5指标在mcgill库上分别提升了13.47%(37.20%-23.73%)和9.60%(37.20%-27.60%),在android库上分别提升了15.17%(30.17%-15.00%)and4.78%(30.17%-25.39%)。同样地,plan方法的mrr指标在mcgill库上提升了9.33%(53.16%-43.84%)和7.60%(53.16%-45.57%),在android库上分别提升了16.24%(47.79%-31.55%)and4.98%(47.79%-42.80%)。

下面结合使用本发明方法plan进行api相关信息推荐的示例对本发明作进一步描述。

图3表示使用本发明方法plan进行api相关信息推荐的示例。在这个示例中,开发者提出了一个时间计算的api相关的问题,问题由自然语言表述为“howaretimescalculatedinternally”。提交后,plan会返回一个api和与其相关知识项的列表,表中的每条信息由推荐的api的名称和描述该api的知识项组成。开发者可以依次浏览每一条的内容,快速得到符合其问题的解。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用全部或部分地以计算机程序产品的形式实现,所述计算机程序产品包括一个或多个计算机指令。在计算机上加载或执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl)或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输)。所述计算机可读取存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘solidstatedisk(ssd))等。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

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