[发明专利]一种基于共同注意力表征学习的代码搜索方法有效
| 申请号: | 202010267172.0 | 申请日: | 2020-04-07 |
| 公开(公告)号: | CN111488137B | 公开(公告)日: | 2023-04-18 |
| 发明(设计)人: | 徐玲;帅鉴航;鄢萌;刘超;雷晏;徐洲;何健军;张文燕;李灿;王备 | 申请(专利权)人: | 重庆大学 |
| 主分类号: | G06F8/20 | 分类号: | G06F8/20;G06F16/903;G06N3/0464;G06N3/0442;G06N3/045;G06N3/047;G06N3/084 |
| 代理公司: | 重庆晟轩知识产权代理事务所(普通合伙) 50238 | 代理人: | 王海凤 |
| 地址: | 400044 *** | 国省代码: | 重庆;50 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 共同 注意力 表征 学习 代码 搜索 方法 | ||
本发明涉及一种基于共同注意力表征学习的代码搜索方法,包括取每个代码特征和该代码所对应的描述;分别采用三个独立的CNN神经网络嵌入方法名、词语和描述,用LSTM网络嵌入API序列得到相应的特征矩阵;然后将方法名,API序列和词语对应的特征矩阵合并为一个矩阵作为每个代码的特征矩阵;引入经神经网络学习的参数矩阵,得到用于代码和其描述的共同注意力表征;将大量相互匹配的代码和描述作为模型输入,同步更新网络参数,得到优化的模型;代码搜索预测,将相关度排在前k个的向量c所对应的代码作为推荐列表输出。该方法在MRR方面表现优异,而且本发明模型结构简单,在模型训练上的运行速度和相应速度上都很快。
技术领域
本发明涉及代码搜索技术领域,特别涉及一种基于共同注意力表征学习的代码搜索方法。
背景技术
在软件开发过程中,开发人员通常花费19%的时间搜索一些可重用的代码示例,以节省他们的开发工作。为了提高开发效率,开发人员经常从大规模开放源代码存储库(例如GitHub)中搜索和重用现有代码。
早期研究首先利用信息检索(IR)技术,例如基于Lucene的模型Koders,Krugle和Google代码搜索。但是这些模型只是将代码和搜索查询作为普通的Web搜索引擎文本,而忽略了上下文中的编程信息。为了捕获代码和查询中的编程语义,研究人员提出了许多模型。代表性模型之一是Erik等人提出的Sourcerer。将Lucene与代码结构信息集成在一起。另一个是Fei等人提出的CodeHow,它将用户查询识别为相关API,并使用扩展布尔模型执行代码搜索。
然而,上述模型未能填补代码中的编程语言和查询中的自然语言之间的语义鸿沟。为了解决这个问题,Gu等人提出了一种基于深度学习的模型,称为DeepCS。这是最先进的方法之一。DeepCS通过两个独立的LSTM(长期和短期记忆)将代码和查询嵌入到向量空间,最后将余弦相似度更高的代码返回给搜索查询。他们的实验结果表明,DeepCS的性能明显优于传统模型,包括Sourcerer和CodeHow。
尽管DeepCS相对于传统模型具有优势,但我们发现,联合嵌入并不能完全捕获代码和查询之间的语义相关性。例如,图1,DeepCS只能将查询中的单词“file”与代码中的两个API“createNewFile()”和“FileWriter()”相关联,因为它们都包含关键字“file”。但是,根据开发人员的理解,其他四个API也应与关键字“file”密切相关,包括“BufferedWriter()”,“write()”,“flush()”和“close()”。在实践中,任务(或查询)描述中使用的单词与任务相关的API之间会存在语义上的差距。因此,我们假设在没有完全理解这种语义相关性的情况下,DeepCS不太可能将预期的代码返回给开发人员的查询。
发明内容
针对现有技术存在的上述问题,本发明的要解决的技术问题是:如何提供一种可以准确有效进行代码检索的方法,该方法可以捕获代码和查询之间的依赖关系。
为解决上述技术问题,本发明采用如下技术方案:一种基于共同注意力表征学习的代
码搜索方法,包括如下步骤:
S100:取每个代码特征和该代码所对应的描述,每个代码都包含三个特征:方法名,API序列和词语;分别采用三个独立的CNN神经网络嵌入方法名、词语和描述,用LSTM网络嵌入API序列得到相应的特征矩阵;
S200:然后将方法名,API序列和词语对应的特征矩阵合并为一个矩阵作为每个代码的特征矩阵;
S300:通过引入经神经网络学习的参数矩阵,计算代码和与其对应的描述的相关矩阵,并沿着相关矩阵行和列进行最大池化操作,得到用于代码和其描述的共同注意力表征;
S400:将大量相互匹配的代码和描述作为CARLCS-CNN模型的输入,通过损失函数,采用梯度下降法同步更新所述三个独立的CNN神经网络和LSTM网络的参数,得到优化的CARLCS-CNN模型;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于重庆大学,未经重庆大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010267172.0/2.html,转载请声明来源钻瓜专利网。





