CN114297479B - 一种结合LDA主题模型和GloVe词向量技术的API推荐方法 - Google Patents
一种结合LDA主题模型和GloVe词向量技术的API推荐方法 Download PDFInfo
- Publication number
- CN114297479B CN114297479B CN202111543829.2A CN202111543829A CN114297479B CN 114297479 B CN114297479 B CN 114297479B CN 202111543829 A CN202111543829 A CN 202111543829A CN 114297479 B CN114297479 B CN 114297479B
- Authority
- CN
- China
- Prior art keywords
- topic
- pair
- api
- lda
- final
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种结合LDA主题模型和GloVe词向量技术的API推荐方法。本发明通过挖掘语料库中的全局统计信息,利用LDA主题模型获得单词和API的主题概率分布;同时基于语料库中的局部上下文信息,利用GloVe词向量技术生成单词和API的词向量。最后综合主题概率分布之间的相似度和词向量之间的相似度计算出单词和API之间的相关性,并根据相关性从大到小排序得到API推荐列表。本发明同时使用语料库的全局统计信息和局部上下文信息来获取语义信息,使得相似度的计算更加准确;本发明使用随机打乱策略打乱文档中的单词和API,提高单词和API出现在一个窗口中的概率,有效提高从局部上下文信息中获取语义信息的能力,提高API推荐的准确性。
Description
技术领域
本发明涉及代码搜索领域,尤其涉及一种结合LDA主题模型和GloVe词向量技术的API推荐方法。
背景技术
在软件开发中,开发者在编码实现某些特定功能时往往会使用已有的API(Application Programming Interface),然而有时候他们并不清楚使用什么API以及如何使用这些API。在这种情况下,开发者通常会使用搜索工具来检索相关的API。目前主流的搜索工具大多采用信息检索技术,如空间向量模型(Space Vector Model,SVM),将开发者的查询和API转化为单词集合,然后利用文本匹配的方式来寻找需要的API。然而,自然语言和程序语言之间的语义不匹配现象严重地影响了搜索工具的性能,从而导致返回的API大多是不相关的,而API的错误使用往往会带来大量的软件缺陷。已有的研究表明,开发人员的查询返回的前10个结果中,仅有25.7%到38.4%是真正相关的。
近年来,许多研究聚焦自然语言与API之间的语义不匹配问题,通过构建方法注释和API的配对,分析单词和API之间的关系来提升API推荐的效率。现有的方法主要分为两类:第一类是基于共现(Co-occurrence)的方法,如潜在语义分析、共现分析和语义词典分析等,其基本思想是通过构建共现矩阵分析单词和API的共现关系,即分析单词和API出现在同一个配对中的概率,从而计算出两者之间的相似度,并依据相似度进行排序,形成最终的API推荐列表。第二类,就是基于机器学习或深度学习的方法,首先利用方法注释和对应代码段的配对来训练模型,然后再利用训练好的模型来对输入的查询词匹配适合的API。其中比较有代表性的是词嵌入技术,通过将单词或API转换为低维向量来进行相关性度量。
已有研究主要利用单一信息来度量单词和API之间的语义相关性,并没有充分考虑不同种类的信息,如全局统计信息、局部上下文信息、词语序列信息等的作用。因此,很难准确地度量单词和API之间的语义相关性,从而导致推荐的API往往是不相关的。
发明内容
为了有效实现API推荐,本发明提供一种结合LDA主题模型和GloVe词向量技术的API推荐方法,通过挖掘单词和API之间的全局统计信息和局部上下文信息,有效实现单词和API之间的语义相关性评估。
本发明具体采用的技术方案如下:
步骤(1)从开源软件仓库中筛选出其中的Java文件,这些文件都以“.java”结尾;
步骤(2)从Java文件中抽取出所有的方法和对应的方法注释,并将每一个方法和对应的方法注释组成一个配对pair=<method,comment>,其中method表示方法,comment表示对应的方法注释;所有的配对组成集合P=(pair1,pair2,...pairn);
步骤(3)使用JDT工具将每一个配对pairi(i=1,2,...,n)中的方法method转化为AST,然后遍历AST得到其中method类型为实例创建和方法调用的API组成的API调用序列APISequence;
步骤(4)对每一个配对pairi中的方法注释comment进行预处理:
步骤(5)对于每一个配对pairi,将其中所包含的词项随机打乱,生成s个新的副本,随机打乱后生成的所有副本表示为集合RSpairi=(pairi 1,pairi 2,...,pairi s),其中pairi 1,pairi 2,...,pairi s均作为一个独立样本且互相为不重复的全排列;
步骤(6)将所有集合RSpairi合并组成一个语料库Q=(RSpair1,RSpair2,...,RSpairn),集合RSpairi中的所有副本均作为语料库中的文档,其数量为n*s;
步骤(7)训练LDA模型,将LDA的主题数设置为K;
步骤(8)计算任意两个词项tx和ty之间的主题相似度simtopic:
步骤(11)计算任意两个词项tx和ty之间的最终相似度simfinal:将主题相似度simtopic和词向量相似度simvector相乘得到最终相似度simfinal;
步骤(12)输入一个查询词,计算查询词和语料库中的每一个词项tj的最终相似度simfinal,并将所有词项按simfinal从大到小进行排序,最后将其中的单词去除,仅保留API作为最终的API推荐列表。
进一步的,步骤(4)对每一个配对pairi中的方法注释comment进行预处理,具体实现如下:
4-1.删除方法注释中包含的历史版本记录,该历史版本记录通常表示为“xx-xx-xx:text”,其中“xx-xx-xx”表示日期,“text”表示历史记录;
4-2.删除方法注释中包含的数字、标点、URL、源代码等噪音信息,并把所有单词转换为小写字母形式;
4-3.根据通用停用词表删除方法注释中含有的停用词;
4-4.将屈折词和派生词还原到基本形式。
进一步的,将经过步骤(4)预处理后的comment表示为precomment;经过对method和comment的处理后,每一个配对表示为pairi=<APISequence,precomment>,其中APISequence中所有的API和precomment中所有的单词统称为词项;集合P中所有配对包含的全部词项的集合表示为T=(t1,t2,...,tl),其中l表示全部词项的数量。
进一步的,步骤(7)训练LDA模型,将LDA的主题数K设置为300,具体训练步骤如下:
7-1.为每个词项tj随机赋予一个主题编号topick,将语料库Q作为LDA模型的输入;j=1,2,...,l;k=1,2,...,K;
7-2.重新扫描语料库Q;对每个词项tj和每篇文档mμ,μ=1,2,...,n*s;使用GibbsSampling对和θ(mμ,topick)采样预估,计算tj属于topick的概率以及topick属于mμ的概率,并在语料库中更新:
其中表示主题topick包含词项tj的概率,θ(mμ,topick)表示文档mμ包含主题topick的概率,表示topick主题中出现词项tj的次数,是词项tj的Dirichlet先验,表示文档mμ中出现主题topicy的次数,是主题topick的Dirichlet先验;
进一步的,步骤(8)计算任意两个词项tx和ty之间的主题相似度simtopic,具体实现如下:
8-3.将Jensen-Shannon散度转化为相似度度量指标得到词项tx和ty之间的主题相似度simtopic:
进一步的,步骤(11)计算任意两个词项tx和ty之间的最终相似度simfinal:将主题相似度simtopic和词向量相似度simvector相乘得到最终相似度simfinal:
simfinal=simtopic*simvector(7)。
本发明提出一种结合LDA主题模型和GloVe词向量技术的API推荐方法,通过挖掘全局统计信息训练LDA主题模型并使用局部上下文信息训练GloVe模型,获取单词和API之间的相关性。相比于传统的API推荐方法,本发明具有如下收益:
1、同时使用语料库的全局统计信息和局部上下文信息来获取语义信息,使得相似度的计算更加准确;
2、使用随机打乱策略打乱文档中的单词和API,提高单词和API出现在一个窗口中的概率,有效提高从局部上下文信息中获取语义信息的能力,提高API推荐的准确性。
附图说明
图1为本发明结合LDA主题模型和GloVe词向量技术的API推荐方法的流程图;
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。
数据源获取:本实验所用的原始数据集来自于开源软件仓库Github。该数据集采集了2020年1月1日到2020年6月30日Github中所有的Java项目,并且根据星数对项目进行过滤,去除了所有0星项目。每个Java项目包含一定数量的Java文件,每个Java文件中又包含一定数量的方法和对应的方法注释。本数据集最终包含26,805个Java项目,从中抽取了899,556个方法和对应的方法注释。
以下结合附图1,对本发明专利提供的一种结合LDA主题模型和GloVe词向量技术的API推荐方法进行详细说明,包括以下步骤:
步骤(1)从开源软件仓库中筛选出其中的Java文件,这些文件都以“.java”结尾;
步骤(2)从Java文件中抽取出所有的方法和对应的方法注释,并将每一个方法和对应的方法注释组成一个配对pair=<method,comment>,其中method表示方法,comment表示对应的方法注释;所有的配对组成集合P=(pair1,pair2,...pairn);
步骤(3)使用JDT工具将每一个配对pairi(i=1,2,...,n)中的方法method转化为AST,然后遍历AST得到其中method类型为实例创建和方法调用的API组成的API调用序列APISequence。
步骤(4)对每一个配对pairi中的方法注释comment进行预处理:
4-1.删除方法注释中包含的历史版本记录,该历史版本记录通常表示为“xx-xx-xx:text”,其中“xx-xx-xx”表示日期,“text”表示历史记录;
4-2.删除方法注释中包含的数字、标点、URL、源代码等噪音信息,并把所有单词转换为小写字母形式;
4-3.根据通用停用词表删除方法注释中含有的停用词;
4-4.将屈折词和派生词还原到基本形式;
将经过预处理后的comment表示为precomment;
经过对method和comment的处理后,每一个配对表示为pairi=<APISequence,precomment>,其中APISequence中所有的API和precomment中所有的单词统称为词项;集合P中所有配对包含的全部词项的集合表示为T=(t1,t2,...,tl),其中l表示全部词项的数量;
步骤(5)对于每一个配对pairi,将其中所包含的词项随机打乱,生成s个新的副本,随机打乱后生成的所有副本表示为集合RSpairi=(pairi 1,pairi 2,...,pairi s),其中pairi 1,pairi 2,...,pairi s均作为一个独立样本且互相为不重复的全排列;本发明中,将s设置为10;
步骤(6)将所有集合RSpairi合并组成一个语料库Q=(RSpair1,RSpair2,...,RSpairn),集合RSpairi中的所有副本均作为语料库中的文档,其数量为n*s;
步骤(7)训练LDA模型,将LDA的主题数K设置为300,具体训练步骤如下:
7-1.为每个词项tj(j=1,2,...,l)随机赋予一个主题编号topick(k=1,2,...,K),将语料库Q作为LDA模型的输入;
7-2.重新扫描语料库Q;对每个词项tj和每篇文档mu(μ=1,2,...,n*s),使用GibbsSampling对和θ(mμ,topick)采样预估,计算tj属于topick的概率以及topick属于mμ的概率,并在语料库中更新:
其中表示主题topick包含词项tj的概率,θ(mμ,topick)表示文档mμ包含主题topick的概率,表示topick主题中出现词项tj的次数,是词项tj的Dirichlet先验,表示文档mμ中出现主题topicy的次数,是主题topick的Dirichlet先验;
步骤(8)计算任意两个词项tx和ty之间的主题相似度simtopic:
8-3.将Jensen-Shannon散度转化为相似度度量指标得到词项tx和ty之间的主题相似度simtopic:
步骤(9)使用GloVe词嵌入技术对语料库Q中的所有的词项进行训练,得到每个词项tj的词向量本发明中,将学习曲率(learning rate)设置为0.05,词向量维度设置为300维,迭代次数设置为100代;
步骤(11)计算任意两个词项tx和ty之间的最终相似度simfinal:将主题相似度simtopic和词向量相似度simvector相乘得到最终相似度simfinal:
simfinaf=simtopic*simvector
步骤(12)输入一个查询词,计算查询词和语料库中的每一个词项tj的最终相似度simfinal,并将所有词项按simfinal从大到小进行排序,最后将其中的单词去除,仅保留API作为最终的API推荐列表。
Claims (6)
1.一种结合LDA主题模型和GloVe词向量技术的API推荐方法,其特征在于包括如下步骤:
步骤(1)从开源软件仓库中筛选出其中的Java文件,这些文件都以“.java”结尾;
步骤(2)从Java文件中抽取出所有的方法和对应的方法注释,并将每一个方法和对应的方法注释组成一个配对pair=<method,comment>,其中method表示方法,comment表示对应的方法注释;所有的配对组成集合P=(pair1,pair2,…pairn);
步骤(3)使用JDT工具将每一个配对pairi(i=1,2,…,n)中的方法method转化为AST,然后遍历AST得到其中method类型为实例创建和方法调用的API组成的API调用序列APISequence;
步骤(4)对每一个配对pairi中的方法注释comment进行预处理:
步骤(5)对于每一个配对pairi,将其中所包含的词项随机打乱,生成s个新的副本,随机打乱后生成的所有副本表示为集合RSpairi=(pairi 1,pairi 2,…,pairi s),其中pairi 1,pairi 2,…,pairi s均作为一个独立样本且互相为不重复的全排列;
步骤(6)将所有集合RSpariri合并组成一个语料库Q=(RSpair1,RSpair2,…,RSpairn),集合RSpairi中的所有副本均作为语料库中的文档,其数量为n*s;
步骤(7)训练LDA模型,将LDA的主题数设置为K;
步骤(8)计算任意两个词项tx和ty之间的主题相似度simtopic:
步骤(11)计算任意两个词项tx和ty之间的最终相似度simfinal:将主题相似度simtopic和词向量相似度simvector相乘得到最终相似度simfinal;
步骤(12)输入一个查询词,计算查询词和语料库中的每一个词项tj的最终相似度simfinal,并将所有词项按simfinal从大到小进行排序,最后将其中的单词去除,仅保留API作为最终的API推荐列表。
2.根据权利要求1所述的一种结合LDA主题模型和GloVe词向量技术的API推荐方法,其特征在于步骤(4)对每一个配对pairi中的方法注释comment进行预处理,具体实现如下:
4-1.删除方法注释中包含的历史版本记录,该历史版本记录通常表示为“xx-xx-xx:text”,其中“xx-xx-xx”表示日期,“text”表示历史记录;
4-2.删除方法注释中包含的数字、标点、URL、源代码噪音信息,并把所有单词转换为小写字母形式;
4-3.根据通用停用词表删除方法注释中含有的停用词;
4-4.将屈折词和派生词还原到基本形式。
3.根据权利要求2所述的一种结合LDA主题模型和GloVe词向量技术的API推荐方法,其特征在于步骤(4)将经过预处理后的comment表示为precomment;经过对method和comment的处理后,每一个配对表示为pairi=<APISequence,precomment>,其中APISequence中所有的API和precomment中所有的单词统称为词项;集合P中所有配对包含的全部词项的集合表示为T=(t1,t2,…,tl),其中l表示全部词项的数量。
4.根据权利要求2所述的一种结合LDA主题模型和GloVe词向量技术的API推荐方法,其特征在于步骤(7)训练LDA模型,将LDA的主题数K设置为300,具体训练步骤如下:
7-1.为每个词项tj随机赋予一个主题编号topick,将语料库Q作为LDA模型的输入;j=1,2,…,l;k=1,2,…,K;
7-2.重新扫描语料库Q;对每个词项tj和每篇文档mμ,μ=1,2,…,n*s;使用GibbsSampling对和θ(mμ,topick)采样预估,计算tj属于topick的概率以及topick属于mμ的概率,并在语料库中更新:
其中表示主题topick包含词项tj的概率,θ(mμ,topick)表示文档mμ包含主题topick的概率,表示topick主题中出现词项tj的次数,是词项tj的Dirichlet先验,表示文档mμ中出现主题topicy的次数,是主题topick的Dirichlet先验;
6.根据权利要求5所述的一种结合LDA主题模型和GloVe词向量技术的API推荐方法,其特征在于步骤(11)计算任意两个词项tx和ty之间的最终相似度simfinal:将主题相似度simtopic和词向量相似度simvector相乘得到最终相似度simfinal:
simfinal=simtopic*simvector(7)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111543829.2A CN114297479B (zh) | 2021-12-16 | 2021-12-16 | 一种结合LDA主题模型和GloVe词向量技术的API推荐方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111543829.2A CN114297479B (zh) | 2021-12-16 | 2021-12-16 | 一种结合LDA主题模型和GloVe词向量技术的API推荐方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114297479A CN114297479A (zh) | 2022-04-08 |
CN114297479B true CN114297479B (zh) | 2023-03-21 |
Family
ID=80968489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111543829.2A Active CN114297479B (zh) | 2021-12-16 | 2021-12-16 | 一种结合LDA主题模型和GloVe词向量技术的API推荐方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114297479B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110990003A (zh) * | 2019-11-15 | 2020-04-10 | 南通大学 | 一种基于词嵌入技术的api推荐方法 |
CN113343078A (zh) * | 2021-05-11 | 2021-09-03 | 浙江工业大学 | 基于主题模型聚类的Web API推荐方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9477654B2 (en) * | 2014-04-01 | 2016-10-25 | Microsoft Corporation | Convolutional latent semantic models and their applications |
-
2021
- 2021-12-16 CN CN202111543829.2A patent/CN114297479B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110990003A (zh) * | 2019-11-15 | 2020-04-10 | 南通大学 | 一种基于词嵌入技术的api推荐方法 |
CN113343078A (zh) * | 2021-05-11 | 2021-09-03 | 浙江工业大学 | 基于主题模型聚类的Web API推荐方法 |
Non-Patent Citations (2)
Title |
---|
Multi-level Semantic Representation Model for code search;Donzhen Wen等;《SEMANTIC SCHOLAR》;20201231;全文 * |
基于主题模型的Web服务聚类与发现机制;李慧;《现代图书情报技术》;20161231;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN114297479A (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107229668B (zh) | 一种基于关键词匹配的正文抽取方法 | |
CN108319668A (zh) | 生成文本摘要的方法及设备 | |
CN107102993B (zh) | 一种用户诉求分析方法和装置 | |
US11409752B1 (en) | Dimensional reduction of complex vectors in artificially intelligent solutions to compare similarity of natural language text | |
Jain et al. | Query2vec: An evaluation of NLP techniques for generalized workload analytics | |
CN110334343B (zh) | 一种合同中个人隐私信息抽取的方法和系统 | |
CN114266256A (zh) | 一种领域新词的提取方法及系统 | |
CN114491062B (zh) | 一种融合知识图谱和主题模型的短文本分类方法 | |
CN115146062A (zh) | 融合专家推荐与文本聚类的智能事件分析方法和系统 | |
Gencoglu | Deep representation learning for clustering of health tweets | |
CN112286799B (zh) | 结合句嵌入和粒子群优化算法的软件缺陷定位方法 | |
CN114297479B (zh) | 一种结合LDA主题模型和GloVe词向量技术的API推荐方法 | |
CN114879945A (zh) | 面向长尾分布特征的多样化api序列推荐方法及装置 | |
CN114491033A (zh) | 一种基于词向量和主题模型的用户兴趣模型构建的方法 | |
CN114168751A (zh) | 一种基于医学知识概念图的医学文本标签识别方法及系统 | |
CN113971403A (zh) | 一种考虑文本语义信息的实体识别方法及系统 | |
CN111859896B (zh) | 配方文档检测方法、装置、计算机可读介质及电子设备 | |
Tao et al. | Cram: Code recommendation with programming context based on self-attention mechanism | |
Fan et al. | Stop Words for Processing Software Engineering Documents: Do they Matter? | |
Rawat et al. | Detection of Fake News Using Machine Learning | |
Tudi et al. | Aspect-Based Sentiment Analysis of Racial Issues in Singapore: Enhancing Model Performance Using ChatGPT | |
CN117391071B (zh) | 一种新闻话题数据挖掘方法、装置及存储介质 | |
Zhang et al. | A semantic search framework for similar audit issue recommendation in financial industry | |
CN111339289B (zh) | 一种基于商品评论的主题模型推断方法 | |
Yang et al. | Automatic extraction of paper research methods based on multi-strategy |
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 |