基于深度学习的代码智能化搜索技术研究
这是一篇关于代码搜索,深度学习,知识图谱的论文, 主要内容为在如今的大数据时代,伴随着互联网的蓬勃发展,催生了海量代码,高效复用代码便成为了一项关键任务,因此代码搜索技术显得至关重要。代码搜索任务的类型大致可以分为两种,其一是通过用户输入自然语言搜索符合要求的代码片段;另一种则是通过输入代码搜索相似的代码片段。本文研究的是第一种代码搜索方法,因为通过自然语言搜索代码的场景更加广泛,需求也更加强烈。在代码搜索领域的历史发展进程中,一共经历了两个阶段。第一个阶段是通过传统的信息检索技术进行搜索,例如常见的关键词匹配;第二个阶段发生在最近几年,随着深度学习技术的盛行,以深度学习为基础的代码搜索技术应运而生,它的核心是通过构建种类不同的神经网络来对自然语言和代码进行编码,进而对二者进行匹配。虽然基于深度学习的方法比基于信息检索的方法效果更加显著,但是基于信息检索的方法显得更加简单且具有很好的解释性,因此后者并没有完全取代前者。随着深度学习的持续发展,越来越多的模型被应用在代码搜索领域。但是,目前的模型过于复杂且可解释性不够强,更加严重的是,模型对代码的编码向量过于集中,导致正例和负例的相似度区别不够显著,进而影响搜索效果。针对这些问题提出了以下解决办法:(1)通过模拟人类的学习习惯,将人类的学习方式融入到深度学习模型中。本文提出了一个叫做“伸缩学习”的概念,其包含伸张器和压缩器两个模块,前者通过多次逐段编码语料内容获得更多潜在信息,后者通过注意力机制精炼信息,在提升模型性能的同时兼具可解释性。另外,还可以通过分段窗口的形式对伸张器进行优化,进一步提升模型性能。(2)将对比学习方案结合到深度学习模型当中,让模型能够更加关注代码片段之间编码的相似性与差异性。因为在对比学习中,会将相似代码的相似度尽可能地拉近,将不同代码的相似度尽可能地拉远。于是在代码搜索的过程中,不同代码的相似度会存在较大的差异,从而使得代码片段拥有更加精准的排名。(3)融合知识图谱相关技术,结合上述方法搭建代码搜索平台。上述两种方法讨论的均为无注释情况下的代码搜索方法,该部分对于本身存在注释的代码片段引入了Lucence全文搜索引擎,它一方面能够为查询语句和注释提供相似度计算,另一方面还能在保证搜索得到的代码质量的同时缩小匹配空间从而提升搜索效率。
基于语义图的多语言代码搜索
这是一篇关于代码搜索,多语言,图神经网络,对比学习,中间表示的论文, 主要内容为随着编程语言的多样化和持续演化,为了更好的结合各编程语言的优势,一些大规模软件开始向着多语言代码开发的方向发展。多语言的代码搜索可以帮助开发人员进行多语言代码开发和维护,提高开发人员的开发效率。已知的代码搜索工作通常只针对代码的语法结构或者文本信息,并且大多数工作都是对特定编程语言进行研究,使得其无法满足多语言代码搜索的需求。上述问题通常是由于不同编程语言之间语法以及语言机制的差异所导致的,为了减少多语言之间的差异,提升多语言代码搜索准确率,本文针对多编程语言,提出了一种基于语义图的多语言代码搜索模型。该模型通过深入理解代码语义,将语义相似的代码映射到统一的语义向量空间中,从而使得模型可以克服多语言代码表现形式上的差异,更加精确地定位用户需要的代码。本文的主要工作包括:1、针对多语言代码表示形式的差异,本文提出了一种基于语义图的多语言代码表示基础模型。本文利用代码的中间表示(IR)来提取代码中的数据流和控制流,构建代码语义图来准确表示代码语义,消除多语言代码表现形式上的差异,并利用图神经网络挖掘语义图中的语义信息。并且,在构建语义图的过程中,为了克服不同编程语言在获取IR时遇到的编译问题,本文实现了一个同时支持C与Java语言的代码片段封装工具。该封装工具通过封装代码缺少的依赖,将C语言和Java语言的编译通过率分别提高到了49%与69%。2、为了进一步消除多语言代码表现形式上的差异,本文提出一种基于对比学习的代码表示增强模型。该模型采用多种方式对代码进行变异,并利用对比学习的方式使得模型可以关注于多语言代码间相似的语义特征,从而进一步提升了不同编程语言的代码表示一致性。3、本文设计了大量的实验来证明所提模型与设计的有效性。本文在3种最常用的编程语言(C,Java和Python)上,将多语言代码表示基础模型和增强模型分别与多个相关工作进行了对比。实验结果显示,本文所提出的多语言代码表示基础模型和基于对比学习的代码表示增强模型,在单语言与多语言任务上,较基线工作都表现出了明显的准确率提升。对于基础模型,其在三种单语言任务上的平均MRR达到了0.485,分别比基线模型提高了7%到31%,而在多语言任务上,基础模型比基线分别提高了41.2%和79.5%。而对于增强模型,在原来的基础上将模型在多语言任务上的表现提升了5.1%。
面向软件问答社区的代码搜索方法研究与应用
这是一篇关于代码搜索,软件仓库挖掘,自注意力网络,预训练语言模型的论文, 主要内容为近年来,随着软件工程的发展,互联网诞生了许多软件问答社区以供软件开发人员使用。这些软件问答社区中包含了数以千计的源代码可提供大量的代码解决方案,软件开发人员可以通过复用这些代码解决方案来解答开发疑惑、提升开发效率。代码搜索作为软件开发人员复用代码解决方案的常见途径,其搜索的准确性会直接影响代码复用的有效性。现有的代码搜索方法主要存在两个问题:一是缺乏高质量的应用场景语料来训练神经网络模型,大多代码搜索方法所采用的软件仓库是将开源项目中的代码注释作为查询的替代方案,然而软件开发人员为他们的软件项目写注释时不考虑检索目的,并非所有的注释都能正确映射到查询,且代码注释往往较长而自然语言查询较短,难以应用到软件问答社区这种真实的查询场景,尽管有些软件仓库是从软件问答社区进行挖掘,但是其查询代码对的数据质量无法保证。二是缺乏预训练的结构语义知识来辅助代码搜索,现有的代码搜索方法在引入预训练语言模型时通常将代码处理成自然语言文档,忽略了代码内在的句法特性对结构表征的作用,代码作为一种结构化的语言,其结构信息可加强对代码的表示和理解,代码中相同关键词的处在不同结构很可能会导致完全不同的程序含义。基于上述问题,本文做了如下工作:(1)面向软件问答社区提出了一个基于自注意力交互式网络的软件仓库挖掘模型SACode MF,其可以捕获软件问答社区中查询描述、代码片段及其文本上下文的语义,以判定代码片段是否为查询描述对应的独立代码解决方案,为基于深度学习的代码搜索方法提供高质量的查询代码对来训练神经网络模型。该模型首先基于自注意力网络提取词嵌入处理后的代码片段、代码片段上下文和查询描述的语义特征矩阵,然后通过双向注意力机制获得查询描述和代码片段交互表示,最后通过对代码片段、代码片段上下文和查询描述的语义表示进行融合来判断代码片段是否是查询描述的独立解决方案。(2)提出一种引入结构语义的代码表征预训练语言模型Stru Code ALBERT,并基于预训练语言模型Stru Code ALBERT提出一种代码搜索方法SCACS。Stru Code ALBERT的模型架构遵循ALBERT_TINY的相关研究工作,使用四层双向Transformer作为模型编码器,以掩蔽语言模型为目标任务,采用结构化处理后的查询代码对数据作为训练集对模型进行训练。SCACS则是利用Stru Code ALBERT对查询和代码片段进行语义建模来得到各自的语义向量表示,并通过向量之间余弦距离来衡量它们之间的语义相似度。此外,为了更好地对不同的程序语言进行代码搜索,还以二元分类任务对上述预训练语言模型进行特定于程序语言的模型参数微调。(3)基于本文提出的软件仓库挖掘模型SACode MF构建了面向软件问答社区的代码搜索资源库,并以本文提出的代码搜索方法SCACS为核心结合web技术设计并实现了一个代码搜索工具。该工具可以根据用户输入的自然语言查询从代码资源库中搜索出符合其描述的代码片段,为软件开发人员提供更好地代码搜索服务。本文以主流的软件问答社区Stack Overflow问答社区为例,收集了Python和SQL两种程序语言数据集,通过一系列的实验论证和结论分析,证实了本文所提出软件仓库挖掘模型SACode MF、预训练语言模型Stru Code ALBERT以及代码搜索方法SCACS的准确性和有效性。
基于深度学习的代码智能化搜索技术研究
这是一篇关于代码搜索,深度学习,知识图谱的论文, 主要内容为在如今的大数据时代,伴随着互联网的蓬勃发展,催生了海量代码,高效复用代码便成为了一项关键任务,因此代码搜索技术显得至关重要。代码搜索任务的类型大致可以分为两种,其一是通过用户输入自然语言搜索符合要求的代码片段;另一种则是通过输入代码搜索相似的代码片段。本文研究的是第一种代码搜索方法,因为通过自然语言搜索代码的场景更加广泛,需求也更加强烈。在代码搜索领域的历史发展进程中,一共经历了两个阶段。第一个阶段是通过传统的信息检索技术进行搜索,例如常见的关键词匹配;第二个阶段发生在最近几年,随着深度学习技术的盛行,以深度学习为基础的代码搜索技术应运而生,它的核心是通过构建种类不同的神经网络来对自然语言和代码进行编码,进而对二者进行匹配。虽然基于深度学习的方法比基于信息检索的方法效果更加显著,但是基于信息检索的方法显得更加简单且具有很好的解释性,因此后者并没有完全取代前者。随着深度学习的持续发展,越来越多的模型被应用在代码搜索领域。但是,目前的模型过于复杂且可解释性不够强,更加严重的是,模型对代码的编码向量过于集中,导致正例和负例的相似度区别不够显著,进而影响搜索效果。针对这些问题提出了以下解决办法:(1)通过模拟人类的学习习惯,将人类的学习方式融入到深度学习模型中。本文提出了一个叫做“伸缩学习”的概念,其包含伸张器和压缩器两个模块,前者通过多次逐段编码语料内容获得更多潜在信息,后者通过注意力机制精炼信息,在提升模型性能的同时兼具可解释性。另外,还可以通过分段窗口的形式对伸张器进行优化,进一步提升模型性能。(2)将对比学习方案结合到深度学习模型当中,让模型能够更加关注代码片段之间编码的相似性与差异性。因为在对比学习中,会将相似代码的相似度尽可能地拉近,将不同代码的相似度尽可能地拉远。于是在代码搜索的过程中,不同代码的相似度会存在较大的差异,从而使得代码片段拥有更加精准的排名。(3)融合知识图谱相关技术,结合上述方法搭建代码搜索平台。上述两种方法讨论的均为无注释情况下的代码搜索方法,该部分对于本身存在注释的代码片段引入了Lucence全文搜索引擎,它一方面能够为查询语句和注释提供相似度计算,另一方面还能在保证搜索得到的代码质量的同时缩小匹配空间从而提升搜索效率。
DeST内核代码评测及搜索系统的设计与实现
这是一篇关于建筑全性能联合仿真平台内核,在线自动评测,克隆代码,代码搜索,ActiveMQ的论文, 主要内容为随着时代的进步与互联网的迅速发展,对于建筑环境的预测和评估已经不能仅仅依靠人力与经验了,而需要专业的软件进行分析与计算。建筑全性能联合仿真平台软件是一款优秀的建筑环境分析软件,简称De ST,大量建筑专业人员通过该软件完成了建筑环境的评估。随着建筑技术的发展与更新,该平台软件的内核需要重新进行开发,用于优化以及扩展系统。De ST平台内核是由多个单位合作开发,每个开发单位负责一个模块,并且每个模块都需要大量的数据进行测试比对,仅靠人工来保障其功能正确性以及健壮性就显得很困难,因此需要一个软件来自动完成这些事情。本文主要工作是设计与实现De ST内核代码的自动评测及搜索系统,可以进行模块和集成测试,并且实现在线编程。同时,该系统提供代码搜索功能,包括克隆代码搜索以及代码片段搜索。克隆代码搜索有助于保障内核代码的可维护性,利用代码搜索功能来搜索相似代码中可能含有的相似缺陷。考虑到De ST内核代码是一个开源项目,为了之后相关人员对代码进行开发与修改,这里提供代码片段搜索功能,从而使开发人员能够更加容易地对内核代码进行了解与使用。本系统为了方便评测节点的扩展,采用评测服务分离技术,将评测服务从Web服务中独立出来,并通过Active MQ消息传递进行通信。评测服务基于Linux系统编程技术实现程序的自动编译和运行,同时进行系统资源、权限等安全相关的限制。Web服务通过SSM框架以及使用boostrap、j Query等前端技术,实现相关信息管理、结果分析、在线编程、代码搜索等功能。其中,代码搜索需要对源码进行标准化、分段等预处理操作,并且对于克隆代码还需用到数据挖掘算法进行挖掘。使用Solr搜索服务器实现索引存储和搜索操作。系统测试结果达到了预期目标,本系统为De ST内核代码的开发人员实现边开发、边测试、边维护提供了方便,减少了测试和维护成本,并且在一定程度上保障了程序的健壮性。
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码客栈网 ,原文地址:https://bishedaima.com/lunwen/53292.html