欢迎来到知嘟嘟! 联系电话:13095918853 卖家免费入驻,海量在线求购! 卖家免费入驻,海量在线求购!
知嘟嘟
我要发布
联系电话:13095918853
知嘟嘟经纪人
收藏
专利号: 2019111185076
申请人: 南通大学
专利类型:发明专利
专利状态:已下证
专利领域: 计算;推算;计数
更新日期:2024-02-23
缴费截止日期: 暂无
价格&联系人
年费信息
委托购买

摘要:

权利要求书:

1.一种基于词嵌入技术的API推荐方法,其特征在于,分为两大模块,其中一个是离线训练模块,另一个是在线推荐模块,其中,所述离线训练模块包括如下步骤:步骤1、数据收集:收集两个目标数据集,其中一部分是Java SE8 的API文档,另一部分是Stack Overflow上关于Java API的问答数据集;

步骤2、对从Stack Overflow上获取的数据进行数据处理:将数据集拆分为问题数据集和答案数据集,收集问题数据集中的所有单词建立单词库,并预处理此单词库,对单词库中的数据进行词嵌入建模,生成单词模型;建立TF‑IDF字典,对包含重要信息的单词设置高权重;

所述在线推荐模块包括如下步骤:

步骤3、通过UI界面收集开发者输入的问题,使用步骤2 得到的单词模型和TF‑IDF字典对开发者输入的问题和问题数据集进行相似度计算,得到相似度较高的候选问题列表;使用LSA模型过滤候选问题列表,排除具有语义差别的问题;

步骤4、通过LDA模型提取主题词,把主题词设置为开发者此次提问的标签提供给开发者;在数据库中找到对应的API,组成候选API列表;最后通过API文档进一步完善API推荐信息,并把API推荐信息输出到UI界面;

步骤2的具体步骤如下:

2.1)把通过步骤1得到的问答数据集中的数据分为两个部分:问题数据集和答案数据集,分别命名为DataSet_Questions和DataSet_Answers;

2.2)收集DataSet_Questions中所有的单词建立一个单词库,命名为TextCorpus,然后对处理完成的单词库进行词嵌入建模;通过使用word2vec的方法把单词库中的每一个单词转换成单词矩阵;

2.3)使用TF‑IDF值为计算单词的相似度加权;使用2.2)步骤得到的数据集TextCorpus计算出TextCorpus中的TF‑IDF值;TF‑IDF的计算又分为词频的计算和逆向文档频率的计算,其计算公式为:

其中,公式中 表示目标词 在语料 中的出现次数,而分母表示在语料 中所有单词的出现次数之和;D是数据集TextCorpus中的语料的总数; 是包含目标词 的数目;

步骤2.2)的具体步骤如下:

2.2.1)收集问题数据集中所有的单词,需要对单词做分词、删除停词和提取词根的自然语言处理;实现步骤中的三个条件,需按照以下步骤进行:

2.2.1.1)在遍历DataSet_Questions和DataSet_Answers中的数据时,首先需要对TextCorpus数据集进行分词操作,即把TextCorpus数据集中的每一句话分成n个独立的单词存储在列表当中,列表命名为List_word;

2.2.1.2)在2.2.1.1)结束之后,得到一个包含所有单词的列表,使用NTLK库中的corpus包来进行删除停词的操作,当遍历列表List_words时,判断列表中的数据是否在stopwords.words('english')当中;如果存在,则删除该停词;如果不存在,则把数据存入到一个新的列表当中,命名为List_outStopWords;

2.2.1.3)在删除停词的操作结束之后,进行提取词干的操作:对通过步骤2.2.1.2)的列表List_outStopWords再次进行遍历,通过对列表中的每个元素进行词干提取操作,把处理过的新列表命名为List_StemmerWords;

2.2.1.4)得到List_StemmerWords列表之后,通过python内置的set ( )方法来使列表去除重复元素,在对列表中含有的特殊符号的数据进行删除,最终得到单词库KeyCorpus;

2.2.2)在收集完问题数据集中的单词后,选择CBOW算法训练问题数据集;

2.2.3)确定了使用COBW算法之后,设置向量的维度;

步骤3的具体步骤如下:

3.1)通过UI界面收集开发者在开发过程中的提问,称为Query;然后把得到的Query通过步骤2.2.1.1)、步骤2.2.1.2)和步骤2.2.1.3)分别进行分词去重、删除停词和词根转化的处理;

3.2)得到处理过的Query后,通过步骤2.2)的词嵌入模型和步骤2.3)的TF‑IDF来计算出与DataSet_Questions的相似度,并以相似度从大到小排列建立Top‑N列表,问题数量为N;

3.3)在得到Top‑N列表之后,使用LSA模型来排除与其他语义相差过大的问题项;使用LSA模型排除掉n条语义相差的问题,并把剩下的N‑n条问题列表命名为DataSet_Question40;其中,LSA模型原理的计算公式为:;

其中,是m×m阶矩阵;是半正定m×n阶对角矩阵; 是 的共轭转置矩阵;

步骤4的具体步骤如下:

4.1)使用LDA模型生成文档主题并将其处理为标签,帮助开发者更轻松地查找API;

4.2)使用步骤2.1)得到的DataSet_Answers,对DataSet_Answers做进一步处理,即从DataSet_Answers中进行数据抽取,抽取得到回答DataSet_Questions中问题的API;

4.3)使用步骤4.2)抽取得到DataSet_Questions中对应问题的API,建立关系型数据库,命名为DatabaseQA;通过数据库DatabaseQA,实现DataSet_SOAPI中DataSet_Questions和DataSet_Answers的映射,把这两个数据集联系起来,在数据库DatabaseQA中,得到某一问题中的单词,可以找到对应问题的序号和问题答案的API;

步骤4.2)的具体步骤如下:

4.2.1)对DataSet_Answers中的数据进行抽取,首先筛选出有效答案,在DataSet_SOAPI中也包含了问题项的答案项;此时判断答案项是否为空,如果是空的话,那么删除这条数据;

4.2.2)DataSet_SOAPI中的每条数据包含question属性和answer 属性,在answer后面有它的引用率,选择保留引用率排名前三的回答进行保留,其余的答案则进行删除;

4.2.3)在使用步骤4.2.2)保留了部分答案之后,使用Jsoup解析器进行API的抽取,从答案中提取所有包含标记的代码段,提取具有驼峰写法的Java类API;

步骤4.3)的具体步骤如下:

4.3.1)步骤3.3)得到DataSet_Question40之后,在步骤4.3)中得到的DatabaseQA中找到对应的40个问题的答案,解析DataSet_SOAPI中DataSet_Question40的答案的HTML数据;

4.3.2)在HTML中标签之间的部分和DataSet_Question40的回答者引用的API帮助文档的超链接中包含有API信息,提取API信息,计算API所在的问题平均相似度得到List_RankedAPI;得到的List_RankedAPI后,在数据集DataSet_SE中找到对应的API;

4.3.3)根据需要来设定出推荐API的条数。

2.根据权利要求1所述的基于词嵌入技术的API推荐方法,其特征在于,步骤1中,收集得到的数据集Java SE8 的API文档命名为DataSet_SE;

Stack Overflow上关于Java API的问答数据集从Stack Overflow上获取,命名为DataSet_SOAPI。

3.根据权利要求1所述的基于词嵌入技术的API推荐方法,其特征在于,步骤4.3.3)中,在找到了相似度较高的API之后,同时推荐下述内容给开发者来协助开发:a)Query标签;

b)API帮助文档中对该API的功能描述;

c)开发者输入问题的相关问题;

d)相关的代码段。