首页> 中国专利> 一种基于结构特征和序列特征的代码补全方法

一种基于结构特征和序列特征的代码补全方法

摘要

本发明公开了一种基于结构特征和序列特征的代码补全方法,包括预处理部分、代码部分转换和训练部分;在预处理部分,从开源平台收集源代码,将源代码转换为抽象语法树形式;采用字节对编码方式建立对应词表;代码转换部分使用扩展的注意力机制抽取代码的结构特征和序列特征;最后采用Transfomer解码器作为基本网络模型,扩展注意力机制,经过softmax层计算概率,并输出结果;本发明引入字节对编码算法为值建立词表,使得构建的语言模型的未登录词问题大大减小;此外,通过从代码的两个维度上考虑了代码的语义信息,使得代码补全的准确度提高,帮助用户得到更为准确的候选。

著录项

  • 公开/公告号CN114924741A

    专利类型发明专利

  • 公开/公告日2022-08-19

    原文格式PDF

  • 申请/专利权人 南京航空航天大学;

    申请/专利号CN202210505898.2

  • 发明设计人 黄志球;刘亚鹏;李伟湋;

    申请日2022-05-10

  • 分类号G06F8/41(2018.01);G06N3/04(2006.01);G06N3/08(2006.01);

  • 代理机构南京瑞弘专利商标事务所(普通合伙) 32249;

  • 代理人张宁馨

  • 地址 210016 江苏省南京市秦淮区御道街29号

  • 入库时间 2023-06-19 16:26:56

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-09-06

    实质审查的生效 IPC(主分类):G06F 8/41 专利申请号:2022105058982 申请日:20220510

    实质审查的生效

说明书

技术领域

本发明涉及计算机软件工程技术领域,主要涉及一种基于结构特征和序列特征的代码补全方法。

背景技术

随着软件开发规模的不断扩大,代码补全协助开发人员在软件开发中获得了越来越多的关注。它通过在集成开发环境(IDE)中对现有代码的基础上提出下一个可能的标记来加速软件开发过程。它可以成为方便的文档和开发人员的输入方法。代码补全已经成为许多代码智能任务的一个重要组成部分,在自动程序生成和软件产品的快速迭代中发挥了重要作用。

基于神经网络的代码补全模型通常将代码片段转换为源代码序列或抽象语法树(AST),或基于图,然后选择合适的神经网络来构建语言模型。

现有技术大多数关注于抽象语法树抽取特征并对部分抽象语法树进行编码来完成任务。抽象语法树不仅仅代表源代码和层次信息。它还准确地描绘了源代码中的逻辑和代码结构。这些方法关注在AST上的代码特征,但在序列信息挖掘上还不够。AST反映了代码的结构或层次,遍历的方式使得提取代码结构或节点之间的路径变得容易。树上结点可以包含任意信息,这意味着将代码片段转换为AST后有更多特征可以帮助提高模型性能。代码序列表示法是最简单、最有效的输入模型的方式,可以直接表示代码片段的语义,但是代码的结构特征还是被遗漏了。虽然不同编程语言的语法可能存在差异,例如,Java使用大括号来组织一个代码块,而Python使用缩进来使几个语句成为一个代码块,但都包含顺序、循环和选择结构。这些都是编程语言的基本组成部分,也是构建代码块的基础。序列表示将其忽略并把代码作为自然语言处理。与专注于描绘代码层次的结构特征相比,序列特征包含更多反映代码语义逻辑和过程的潜在规律性。

在为基于源代码的软件工程任务建立模型时,关键问题之一是如何对词汇进行建模,但只有少数方法考虑了未登录词问题。与自然语言不同,开发者可以用任何长度的单词组合来创建变量和函数名称,这就不可避免地导致了词表无法为新的词串编码的问题,称为未登录词。一些词在训练集中没有观察到,但在测试集中出现,这会严重降低模型的预测精度和性能。另外的方法通过保留经常出现的词来创建词表,同时用一个特殊的占位符来标记未知的词,或者引入一个缓存机制或指针网络来缓解,但并没有完全解决这个问题。

发明内容

发明目的:针对上述背景技术中存在的问题,本发明提供了一种基于结构特征和序列特征的代码补全方法,能够为神经网络模型提供更多的代码特征,使得学习效果提升以提供更加准确的候选,补全效果更好。

技术方案:为实现上述目的,本发明采用的技术方案为:

一种基于结构特征和序列特征的代码补全方法,包括以下步骤:

步骤S1、代码预处理;从开源平台收集源代码,将源代码转换为抽象语法树形式;采用字节对编码方式建立对应词表;

步骤S2、代码转换;使用扩展的注意力机制抽取代码的结构特征和序列特征;

步骤S3、训练部分;将收集的源代码数据经过上文描述的预处理之后转换为抽象化语法树的数据格式;将抽象语法树序列和抽取结点与结点的相对路径构成的矩阵送入模型计算;模型采用Transfomer解码器作为基本神经网络并扩展注意力机制,其中扩展内容为在计算查询Q与键K时引入新的值R,R代表了结点间的相对层次的遍历路径,以此来捕捉相对结构信息;引入新的变量

进一步地,所述步骤S1中将源代码转换为抽象语法树形式;其中每个树上结点包括结点类型和结点值两部分;当某一树上结点无结点值时,用占位符[empty]填充;为了保证语料库的数据可用,采取一系列步骤,包括去除非ASCII编码的字符、去处注释、对驼峰式和下划线式命名的变量做分词处理;接着分别为结点类型和结点值建立词表,其中采用字节对编码方式为结点值建立词表。

进一步地,所述步骤S1中采用字节对编码方式为结点值构建词表的具体方法如下:

字节对编码算法是迭代操作:首先切分语料库中的每一个词,得到单个字符添加到初始词表中;接着统计连续出现的两个字符的频率,将频率最高的字符对(t

进一步地,所述步骤S2中代码转换具体步骤包括:

步骤S2.1、基于步骤S1获取的抽象语法树形式进行转换处理,抽取抽象语法树的结构特征;考查树上的每一对结点,通过遍历的方式找到唯一路径,所有路径共同表征了所述抽象语法树的相对结构信息和层次信息;

步骤S2.2、在先序遍历后得到抽象语法树序列,考查序列上的每对结点的相对位置关系,抽取序列特征。

进一步地,所述步骤S2.1中路径表示方式如下:

UD

其中U

在神经网络计算中引入矩阵R代表UD

其中Q,K,V代表输入元素的查询、键和值向量组成的矩阵;采用softmax函数计算出决定V的表达程度的权重;为了避免QK乘积过大导致梯度消失,结果除以

进一步地,所述步骤S2.2中抽取序列特征具体方法如下:

代码序列特征表现为重复模式和规律性信息,抽取序列特征即序列上结点的相对位置编码,具体表示如下:

其中z

有益效果:

本发明提供的基于结构特征和序列特征的代码补全方法,通过挖掘代码的结构特征和序列特征增强代码语义表达能力,使得模型能学到更多的代码特征。此外,本发明还引入了字节对编码算法为结点值建立词表,使得构建的语言模型的未登录词问题大大减小。本发明从代码的两个维度上考虑了代码的语义信息,使得代码补全的准确度提高,帮助用户得到较为准确的候选。

附图说明

图1是本发明提供的基于结构特征和序列特征的代码补全方法流程图。

具体实施方式

下面结合附图对本发明作更进一步的说明。显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本实施例提供了一种基于结构特征和序列特征的代码补全方法,包括预处理部分、数据转换部分和训练部分。具体地,

步骤S1、代码预处理阶段;

相比于自然语言,编程语言具有规则限制和固定语法,因此更简单更固定。充分发挥隐藏在代码中的语义信息不能只在一种形式上处理,抽象语法树是软件工程中常见的代码表示形式,树上的结点可以包含任意信息,这使得可以表征的信息就越多。本实施例将源代码转换为抽象语法树形式;其中每个树上结点包括结点类型和结点值两部分;当某一树上结点无结点值时,用占位符[empty]填充。

为了解决构建的语言模型的未登录词问题,本实施例中采用字节对编码方式为结点值建立词表。字节对编码算法是迭代操作:首先切分语料库中的每一个词,得到单个字符添加到初始词表中;接着统计连续出现的两个字符的频率,将频率最高的字符对(t

步骤S2、代码转换阶段。使用扩展的注意力机制抽取代码的结构特征和序列特征。

步骤S2.1、基于步骤S1获取的抽象语法树形式进行转换处理,抽取抽象语法树的结构特征;考查树上的每一对结点,通过遍历的方式找到唯一路径,所有路径共同表征了所述抽象语法树的相对结构信息和层次信息;路径表示方式如下:

UD

其中U

在神经网络计算中引入矩阵R代表UD

其中Q,K,V代表输入元素的查询、键和值向量组成的矩阵;采用softmax函数计算出决定V的表达程度的权重;为了避免QK乘积过大导致梯度消失,结果除以

步骤S2.2、在先序遍历后得到抽象语法树序列,考查序列上的每对结点的相对位置关系,抽取序列特征。代码的序列特征体现了开发者的设计逻辑,在序列上表现出重复模式和规律性信息,这对理解代码语义有帮助作用。抽取序列特征即序列上结点的相对位置编码,具体表示如下:

其中z

步骤S3、训练部分;采用Transfomer解码器作为基本网络模型,并扩展注意力机制,其中扩展内容为在计算查询Q与键K时引入新的值R,R代表了结点间的相对层次的遍历路径,以此来捕捉相对结构信息;引入新的变量

以上所述仅是本发明的优选实施方式,应当指出:对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号