CN115408056A - 一种基于信息检索和神经网络的代码摘要自动生成方法 - Google Patents

一种基于信息检索和神经网络的代码摘要自动生成方法 Download PDF

Info

Publication number
CN115408056A
CN115408056A CN202211333019.9A CN202211333019A CN115408056A CN 115408056 A CN115408056 A CN 115408056A CN 202211333019 A CN202211333019 A CN 202211333019A CN 115408056 A CN115408056 A CN 115408056A
Authority
CN
China
Prior art keywords
code
word
abstract
vector
codebert
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.)
Pending
Application number
CN202211333019.9A
Other languages
English (en)
Inventor
路云峰
张愈博
刘艳芳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beihang University
Original Assignee
Beihang University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beihang University filed Critical Beihang University
Priority to CN202211333019.9A priority Critical patent/CN115408056A/zh
Publication of CN115408056A publication Critical patent/CN115408056A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/3331Query processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • G06F40/216Parsing using statistical methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/258Heading extraction; Automatic titling; Numbering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/30Semantic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/40Processing or translation of natural language
    • G06F40/58Use of machine translation, e.g. for multi-lingual retrieval, for server-side translation for client devices or for real-time translation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • General Health & Medical Sciences (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Library & Information Science (AREA)
  • Probability & Statistics with Applications (AREA)
  • Machine Translation (AREA)

Abstract

本发明公开了一种基于信息检索和神经网络的代码摘要自动生成方法,该方法包括:构建包含源代码和对应的自然语言注释的训练集,使用CodeBERT模型进行训练;将训练集中的所有代码段解析为抽象语法树AST,并转换为AST单词序列,利用训练好的CodeBERT模型将源代码片段编码为单词级向量,进行池化操作将单词级向量压缩为片段级向量;给定一段待摘要代码,从数据库进行检索,获得最相似结构代码和最相似语义代码;将待摘要代码、以及检索出的最相似结构代码和最相似语义代码输入到训练后的CodeBERT模型中,使用混合网络不断融合输出产生最终的摘要;通过该方法可以提高代码摘要生成中的低频词命中率,准确地产生摘要。

Description

一种基于信息检索和神经网络的代码摘要自动生成方法
技术领域
本发明涉及计算机代码摘要技术领域,特别涉及一种基于信息检索和神经网络的代码摘要自动生成方法。
背景技术
在软件工程领域,当工程师遇到规模较大或复杂的软件***时,通常很难快速地检查源代码。根据调查显示,软件工程师花在理解源代码上的时间占整个开发时间的59%。为了解决这一问题,人们提出了代码摘要。通过自动生成代码摘要的方式来帮助软件工程师快速理解代码功能,他们就可以将宝贵的精力集中在程序开发上,以提高开发效率。
早在十年前,信息检索(IR)技术就被引入到代码摘要领域,即参考检索到的相似代码片段的注释,对某一特定代码片段生成摘要。例如,将源代码的每个函数视为一个文档,然后根据从源代码中检索到的术语派生出新的注释。这种基于IR技术的代码摘要的性能在很大程度上取决于代码数据库的规模和质量。
近年来,基于端到端神经机器翻译(NMT)的研究逐渐成为了代码自动摘要的主流方法,例如利用LSTM和注意力机制,或利用端到端NMT框架自动生成代码摘要。考虑到将源代码作为纯文本处理可能会失去其结构和语法信息,设计了一种基于结构的遍历(SBT)来保留抽象语法树(AST)的序列唯一性,而不是纯代码序列。
基于IR方法擅长利用代码的信息或相应的注释,而基于NMT的方法通过构建语言模型生成摘要。尽管后者近年来已成为主流研究方法,但是它主要关注高频词,而在一定程度上忽略了低频词。并且,NMT模型在处理自然语言翻译中不常见的n-gram方面很弱,而增加数据集的大小并不能解决这个问题。
因此,如何提高代码摘要生成中的低频词命中率,准确地产生摘要,已成为本领域技术人员亟需解决的技术问题。
发明内容
鉴于上述技术问题,本发明提供至少解决上述部分技术问题的一种基于信息检索和神经网络的代码摘要自动生成方法,通过该方法可以提高代码摘要生成中的低频词命中率,准确地产生摘要。
为实现上述目的,本发明采取的技术方案为:
本发明提供一种基于信息检索和神经网络的代码摘要自动生成方法,该方法包括以下步骤:
S1、构建包含源代码和对应的自然语言注释的训练集,使用CodeBERT模型作为一个自编码器的方式进行训练;
S2、将所述训练集中的所有代码段解析为抽象语法树AST,通过前序遍历将其转换为AST单词序列,并基于所述AST单词序列建立结构信息数据库;
S3、利用训练好的CodeBERT模型将源代码片段编码为单词级向量,进行池化操作将单词级向量压缩为片段级向量,并基于所述片段级向量建立语义信息数据库;
S4、给定一段待摘要代码,视其为一个查询,从所述结构信息数据库和所述语义信息数据库进行检索,获得对应的最相似结构代码和最相似语义代码;
S5、将所述待摘要代码、以及检索出的最相似结构代码、最相似语义代码三个代码片段输入到训练后的CodeBERT模型中,使用混合网络不断融合输出产生最终的摘要。
进一步地,所述步骤S1中,所述CodeBERT模型为具有注意力机制的编码器-解码器模型,其中编码器部分与RoBERTa-base相同,解码器具有6层transformer,每层transformer有12个多头注意力和一个768维的隐藏层向量。
进一步地,所述步骤S3中,所述利用训练好的CodeBERT模型将源代码片段编码为单词级向量具体为:
给定一个源代码片段c,通过CodeBERT模型的编码器对其进行编码并生成一个单词级向量的向量列表
Figure 427185DEST_PATH_IMAGE001
,其中t代表源代码片段c中单词对应的词向量,R代表域,n是源代码片段c中的单词总数,k是向量维度。
进一步地,所述步骤S3中,所述进行池化操作将单词级向量压缩为片段级向量,计算公式为:
Figure 284283DEST_PATH_IMAGE002
其中,
Figure 775307DEST_PATH_IMAGE003
是片段级向量
Figure 692447DEST_PATH_IMAGE004
的第
Figure 252611DEST_PATH_IMAGE005
个分量,t代表源代码片段c中单词对应的词向量,n是源代码片段c中的单词总数,
Figure 178978DEST_PATH_IMAGE006
Figure 524509DEST_PATH_IMAGE007
是向量维度。
进一步地,所述步骤S4中,所述从结构信息数据库和语义信息数据库进行检索具体为:
利用检索引擎Lucene的BM25相似度从所述结构信息数据库中对AST单词序列进行检索;
利用余弦相似度从所述语义信息数据库中对片段级向量的进行检索。
进一步地,所述余弦相似度的计算公式为:
Figure 878130DEST_PATH_IMAGE008
其中,
Figure 161475DEST_PATH_IMAGE009
为测试数据对应的向量表示,
Figure 157113DEST_PATH_IMAGE010
为训练集中数据的向量表示,
Figure 357150DEST_PATH_IMAGE011
Figure 616093DEST_PATH_IMAGE012
是训练集的大小;具有最高余弦分数的代码片段将作为查询结果返回。
进一步地,所述步骤S5中,所述混合网络为:
Figure 150848DEST_PATH_IMAGE013
其中,
Figure 419019DEST_PATH_IMAGE014
代表第二层线性层的权重矩阵,
Figure 473562DEST_PATH_IMAGE015
代表第一层线性层的权重矩阵,
Figure 903407DEST_PATH_IMAGE016
Figure 676190DEST_PATH_IMAGE017
Figure 498784DEST_PATH_IMAGE018
分别代表待摘要代码、以及检索出的最相似结构代码、最相似语义代码在每个时间步获得相应的隐藏状态,
Figure 142255DEST_PATH_IMAGE019
代表第一层线性层的偏置向量,
Figure 274159DEST_PATH_IMAGE020
代表第二层线性层的偏置向量。
与现有技术相比,本发明具有如下有益效果:
本发明提供的一种基于信息检索和神经网络的代码摘要自动生成方法,利用源代码的结构和语义信息来生成合适的注释,并且设计了混合网络进行信息融合生成摘要,可以提高代码摘要生成中的低频词命中率,准确地产生摘要;其性能、预测效果均优于现有技术。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制;在附图中:
图1为本发明实施例提供的一种基于信息检索和神经网络的代码摘要自动生成方法的流程图。
图2为本发明实施例提供的一种基于信息检索和神经网络的代码摘要自动生成方法流程结构示意图。
图3为本发明实施例提供的混合网络工作示意图。
图4为本发明实施例提供的生成的python代码片段摘要示例图。
具体实施方式
为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体实施方式,进一步阐述本发明。
在本申请的说明书和权利要求书及上述附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行。
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参照图1和图2所示,本发明实施例提供的一种基于信息检索和神经网络的代码摘要自动生成方法,该方法包括以下步骤:
S1、构建包含源代码和对应的自然语言注释的训练集,使用CodeBERT模型作为一个自编码器的方式进行训练;
S2、将所述训练集中的所有代码段解析为抽象语法树AST,通过前序遍历将其转换为AST单词序列,并基于所述AST单词序列建立结构信息数据库;
S3、利用训练好的CodeBERT模型将源代码片段编码为单词级向量,进行池化操作将单词级向量压缩为片段级向量,并基于所述片段级向量建立语义信息数据库;
S4、给定一段待摘要代码,视其为一个查询,从所述结构信息数据库和所述语义信息数据库进行检索,获得对应的最相似结构代码和最相似语义代码;
S5、将所述待摘要代码、以及检索出的最相似结构代码、最相似语义代码三个代码片段输入到训练后的CodeBERT模型中,使用混合网络不断融合输出产生最终的摘要。
下面分别对上述各个步骤进行详细的说明:
在上述步骤S1中,收集一个大型语料库,其中包含源代码和对应的自然语言注释,构成训练集,使用CodeBERT模型作为一个自编码器的方式进行训练;
在本实施例中,CodeBERT模型为具有注意力机制的编码器-解码器模型,在提取代码的远程依赖关系时,采用了基于Transformer的预训练CodeBERT模型来提高摘要性能。其自注意机制可以更有效地捕获代码单词之间的远程依赖关系。CodeBERT是一种用于自然语言和编程语言的双模态预训练模型,基于端到端的模型,在本实施例中,CodeBERT模型由一个编码器和一个解码器组成,其中编码器部分与RoBERTa-base完全相同,解码器具有6层transformer,每层transformer有12个多头注意力和一个768维的隐藏层向量。
在预训练时由一个混合目标函数进行优化,考虑到其同时处理自然语言和编程语言的优势,以及捕获远程依赖关系的能力,使用CodeBERT对Python和Java数据集中的训练集进行微调。
在上述步骤S2中,将训练集中的所有代码段解析为抽象语法树AST,并通过前序遍历将其转换为AST单词序列(即结构信息数据);并建立结构信息数据库;
由于AST赋予了源代码的关键结构信息,本方法可将输入的训练阶段代码解析为AST;
由于数据库的规模较大,基于树结构的相似度计算的时间复杂度是不可接受的。因此,通过前序遍历将树结构转换为单词序列,并根据这种序列结构计算相似度。
在上述步骤S3中,重用训练好的CodeBERT编码器将源代码片段编码为单词级向量,并进行池化操作压缩为片段级向量(即语义信息数据);
为了便于检索和应用,本发明实施例中,定义一种用数值向量表示的程序语义,具体方式为选择seq2seq模型CodeBERT编码器,将每个输入的每个词映射成数值向量,这种向量具有了代码语义的一些特征。通过挖掘一段程序代码中所有词对应的编码向量,虽然不能准确描述程序的执行结果,但可以比较两段程序的相似程度。具体来说,给定一个源代码片段c,通过CodeBERT模型的编码器对其进行编码并生成一个单词级向量的向量列表
Figure 268660DEST_PATH_IMAGE001
,其中t代表源代码片段c中单词对应的词向量,R代表域,n是源代码片段c中的单词总数,k是向量维度。然后我们对向量列表进行全局最大池化操作,得到语义向量
Figure 144212DEST_PATH_IMAGE021
,如下所示:
Figure 422615DEST_PATH_IMAGE022
其中
Figure 459842DEST_PATH_IMAGE023
是向量
Figure 941639DEST_PATH_IMAGE004
的第
Figure 89723DEST_PATH_IMAGE024
个分量。
在上述步骤S4中,给定一段待摘要代码,视其为一个查询,从结构信息数据库和语义信息数据库进行检索;
利用开源的搜索引擎Lucene评估文档相似度的核心算法BM25(一种词袋检索模型),实现评估查询文档和候选文档之间的相关性。在构建的结构信息数据库中查找最相似的AST,然后返回匹配的代码。
对于测试代码片段
Figure 724098DEST_PATH_IMAGE025
和训练集中的任何代码片段
Figure 197805DEST_PATH_IMAGE026
,我们计算它们的余弦相似度:
cos
Figure 901318DEST_PATH_IMAGE027
其中,
Figure 118673DEST_PATH_IMAGE028
为测试数据对应的向量表示,
Figure 856822DEST_PATH_IMAGE029
为训练集中数据的向量表示,N是训练集的大小。具有最高余弦分数的代码片段将作为查询结果返回。
在上述步骤S5中,将待摘要代码、以及检索后的最相似结构代码、最相似语义代码三个代码片段输入到训练后的CodeBERT中;以在每个时间步获得相应的隐藏状态
Figure 750697DEST_PATH_IMAGE016
,
Figure 207087DEST_PATH_IMAGE017
Figure 962553DEST_PATH_IMAGE018
;进一步地,可以获得目标词汇表上的条件概率分布来预测下一个单词。
本实施例中,用
Figure 837099DEST_PATH_IMAGE030
,
Figure 387029DEST_PATH_IMAGE031
,和
Figure 596294DEST_PATH_IMAGE032
来表示这些概率分布。
为了将它们更好的融合在一起,采用如下的混合网络:
Figure 155451DEST_PATH_IMAGE033
其中,
Figure 406476DEST_PATH_IMAGE014
代表第二层线性层的权重矩阵,
Figure 392887DEST_PATH_IMAGE015
代表第一层线性层的权重矩阵,
Figure 823868DEST_PATH_IMAGE016
Figure 937449DEST_PATH_IMAGE017
Figure 81860DEST_PATH_IMAGE018
分别代表待摘要代码、以及检索出的最相似结构代码、最相似语义代码在每个时间步获得相应的隐藏状态,
Figure 239172DEST_PATH_IMAGE034
代表第一层线性层的偏置向量,
Figure 891870DEST_PATH_IMAGE035
代表第二层线性层的偏置向量。
上述的混合网络由两个多层感知器(MLP)组成,其输入具有三个隐藏状态,并学习一个三维向量
Figure 58409DEST_PATH_IMAGE036
作为其输出。最后,根据权重
Figure 496475DEST_PATH_IMAGE037
结合条件概率生成最终分布:
Figure 824688DEST_PATH_IMAGE038
进而输出产生最终的摘要。
下面在Python和Java语言的两个大型数据集上对本方法进行实验验证;具体操作如下:
1、实验设置。
1)准备数据集。
实验中使用了Python和Java语言的两个大型数据集,它们包含的代码注释对均在10万量级。表1列出了两个数据集的详细统计数据,其中SumW表示所有评论中低频词的数量,NumW表示单词标记词汇中低频词的数量,NumS表示包含低频词的评论的数量。按照已有研究结果定义频率小于100的词称为低频词。括号内的百分比是对应项占整个数据集的比例。
表 1: 两个数据集的详细统计数据
Figure 699103DEST_PATH_IMAGE039
2)确立基准线。
为了验证本方法的有效性,将与五种最先进的代码摘要方法进行比较。它们可以分为三类:
a)基于IR的方法:隐语义索引(LSI)和向量空间模型(VSM)。
b)基于神经网络的方法:CodeNN和TL-CodeSum。
c)IR增强的神经方法:Rencos。
3)确定评价指标。
选择两个典型的自动评价指标来生成摘要:BLEU和BertScore。前者是机器翻译中最常用的自动评估指标,由于生成的摘要可能很短,且高阶n-gram的命中率可能为零,通过使用平滑的BLEU评分来解决这个问题。而后者对词汇变化不敏感,可以识别句子中的语义或语法变化,这在一定程度上克服了n-gram方法的缺点。
4)实验过程。
实验是基于Pytorch框架实现的,每个实验运行三次,并取平均结果。硬件设备选择为Ubuntu 16.04服务器,该服务器使用NVIDIA RTX 2080Ti GPU和11GB内存。
a)按照步骤S1对CodeBERT开展训练。
CodeBERT是基于端到端的模型,由一个编码器和一个解码器组成。编码器部分与RoBERTa-base完全相同,解码器是一个6层transformer,每层transformer有12个多头注意力和一个768维的隐藏层向量。
词汇表之外的单词被替换为UNK (Unknow)。为了最大限度地利用GPU内存,设置批大小(batchsize)为16,最大迭代次数为150k,并使用Adam提出的方法对所有参数进行优化,初始学习率为5e-5。束大小和词汇表长度分别设置为10和50265。对于编码器和解码器,相应地设置它们的最大长度为256和128。实验表明,在Python和Java数据集上训练CodeBERT大约需要50小时和40小时。
b)按照步骤S2、S3完成结构信息数据、语义信息数据及数据库准备工作。
c)按照步骤S4在测试阶段,给定测试集中的一段待摘要代码,视其为一个查询,从数据库中搜索两个最相似的代码片段。其中一个是利用现有的检索引擎Lucene的BM25相速度对AST单词序列进行检索,另一种是余弦相似度对片段级向量的进行检索。
d)按照步骤S5对混合网络进行训练。其中,按照公式(3)的计算权重矩阵W_mix和W_hid的维数分别为[12,2304]和[3,12]。每个解码器输入的隐藏状态大小为768。利用交叉熵损失函数和Adam优化器在每个验证集上训练10个epoch。实验表明,在Python和Java数据集上训练这个混合网络大约需要15个小时和12个小时。
5)实验结果评估。
a)源代码汇总方法性能结果比对
表2显示了实验结果。从中可以看到,本发明在两个评估指标上都取得了最好的性能,在两个数据集上,与最佳的基于神经网络的TL-CodeSum相比,在BLEU-4指标上提高了48%/27%;在两个数据集上,与基于IR的最佳方法VSM相比,BLEU的性能提高了21%/14%。
另外,对于TL-CodeSum和CodeNN这两种基于神经网络的方法,可以看到前者的性能明显优于后者。这是因为CodeNN将源代码视为纯文本,并使用token序列学习代码模式,而TL-CodeSum通过使用学习的API序列从源代码获得更多信息。从这两个指标的实验中可以看到,基于IR的方法明显比基于神经网络的方法有更好的性能,原因在于纯神经网络方法无法处理低频词。
Rencos在两个数据集上的BLEU-4评分分别为42.36/33.01和91.64/90.14,明显优于单纯基于IR和基于神经网络的方法。这主要归功于结构信息和语义信息的结合。而本发明方法引入了注意力编码器-解码器模型CodeBERT以准确地理解源代码的语义,并进一步设计了一个混合网络,以更细粒度的水平调整检索到的相似代码片段的融合权重。实验结果表明,本方法的BLEU值为43.04/34.09,BertScore值为91.88/90.94。与纯神经网络方法相比,虽然本方法需要更多的时间来建立可检索的代码库,但可以并行地执行该任务和CodeBERT训练。此外,由于使用了Lucene和混合网络,本方法平均只需要0.2秒就可以生成摘要。
表 2: 各模型表现
Figure 138175DEST_PATH_IMAGE040
b)对低频词的预测结果比对
低频词通常包含影响代码摘要准确性的关键语义信息,下面将验证本发明方法在低频词预测上的有效性。首先在测试集上生成摘要,并与标准摘要进行比较,然后统计所有正确生成的单词的频率,并记录有代表性的低频单词的命中次数。实验结果如表3和表4所示,表中的比值是本发明方法和CodeBERT的商,表示对低频词的提升程度。从表中可以看出,本发明方法在两个数据集中都比CodeBERT命中了更多的低频词,并且获得了比Rencos更高的命中率。这表明本发明方法能够有效地生成低频词,并且优于Rencos算法。而且单词出现的频率越低,本方法效果越好。这是因为CodeBERT可以很容易地预测高频词,这在高频段降低了检索源代码所带来的优势。
表 3: 预测正确的低频词数量 (Python)
Figure 414436DEST_PATH_IMAGE041
表 4: 预测正确的低频词数量 (Java)
Figure 162818DEST_PATH_IMAGE042
c)本方法的各个组件的有效性验证。
在实验设置上,进行了五组实验:①结构感知检索,以结构级检索出的代码的摘要作为最终输出;②语义感知检索,同样将检索到的语义级代码的摘要作为最终输出;③纯CodeBERT,不使用任何检索信息或融合机制;④CodeBERT+检索+句级权重,利用结构感知和语义感知检索,以及以往研究报告的句子级融合机制;⑤CodeBERT+双检索+混合网络(本发明方法),除了结构感知和语义感知检索外,还涉及到单词(token)级融合机制。实验结果如表5所示。
表5: 消融实验
Figure 524529DEST_PATH_IMAGE043
d)样例分析。
为了直观地说明本方法的有效性,如图4所示,其中显示了一个带有不同方法生成的摘要的Python代码片段,其中正确的单词被标记为加粗。
参见图4所示,可以看到,VSM成功地预测了“detect”这个低频词,LSI也输出了它的同义词“verify”。TL-CodeSum方法匹配高频单词“bytes”。这个例子有些复杂,因此要想进行适当的摘要,需要理解程序的结构和api中包含的语义信息。因此,Rencos和本方法表现更好,都涵盖了一些高频词和低频词。此外,标记“unicode”只有通过本发明方法才能正确预测。
与现有技术相比,本发明实施例提供的一种基于信息检索和神经网络的代码摘要自动生成方法,通过利用源代码的结构和语义信息来生成合适的注释。具体来说,对于结构信息,将代码片段解析为AST进行相似性计算。对于语义信息,将源代码转换为上下文语义向量,以便进一步检索。然后根据结构和语义信息设计了一种混合网络,将三个译码器的输出信息融合在一起生成摘要,可以提高代码摘要生成中的低频词命中率,准确地产生摘要;其性能、预测效果均优于现有技术。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (7)

1.一种基于信息检索和神经网络的代码摘要自动生成方法,其特征在于,该方法包括以下步骤:
S1、构建包含源代码和对应的自然语言注释的训练集,使用CodeBERT模型作为一个自编码器的方式进行训练;
S2、将所述训练集中的所有代码段解析为抽象语法树AST,通过前序遍历将其转换为AST单词序列,并基于所述AST单词序列建立结构信息数据库;
S3、利用训练好的CodeBERT模型将源代码片段编码为单词级向量,进行池化操作将单词级向量压缩为片段级向量,并基于所述片段级向量建立语义信息数据库;
S4、给定一段待摘要代码,视其为一个查询,从所述结构信息数据库和所述语义信息数据库进行检索,获得对应的最相似结构代码和最相似语义代码;
S5、将所述待摘要代码、以及检索出的最相似结构代码、最相似语义代码三个代码片段输入到训练后的CodeBERT模型中,使用混合网络不断融合输出产生最终的摘要。
2.根据权利要求1所述的一种基于信息检索和神经网络的代码摘要自动生成方法,其特征在于,所述步骤S1中,所述CodeBERT模型为具有注意力机制的编码器-解码器模型,其中编码器部分与RoBERTa-base相同,解码器具有6层transformer,每层transformer有12个多头注意力和一个768维的隐藏层向量。
3.根据权利要求2所述的一种基于信息检索和神经网络的代码摘要自动生成方法,其特征在于,所述步骤S3中,所述利用训练好的CodeBERT模型将源代码片段编码为单词级向量具体为:
给定一个源代码片段c,通过CodeBERT模型的编码器对其进行编码并生成一个单词级向量的向量列表
Figure 265499DEST_PATH_IMAGE001
,其中t代表源代码片段c中单词对应的词向量,R代表域,n是源代码片段c中的单词总数,k是向量维度。
4.根据权利要求3所述的一种基于信息检索和神经网络的代码摘要自动生成方法,其特征在于,所述步骤S3中,所述进行池化操作将单词级向量压缩为片段级向量,计算公式为:
Figure 182640DEST_PATH_IMAGE002
其中,
Figure 634481DEST_PATH_IMAGE003
是片段级向量
Figure 29690DEST_PATH_IMAGE004
的第
Figure 375221DEST_PATH_IMAGE005
个分量,t代表源代码片段c中单词对应的词向量,n是源代码片段c中的单词总数,
Figure 197683DEST_PATH_IMAGE006
Figure 136820DEST_PATH_IMAGE007
是向量维度。
5.根据权利要求1所述的一种基于信息检索和神经网络的代码摘要自动生成方法,其特征在于,所述步骤S4中,所述从结构信息数据库和语义信息数据库进行检索具体为:
利用检索引擎Lucene的BM25相似度从所述结构信息数据库中对AST单词序列进行检索;
利用余弦相似度从所述语义信息数据库中对片段级向量的进行检索。
6.根据权利要求5所述的一种基于信息检索和神经网络的代码摘要自动生成方法,其特征在于,所述余弦相似度的计算公式为:
Figure 335721DEST_PATH_IMAGE008
其中,
Figure 535758DEST_PATH_IMAGE009
为测试数据对应的向量表示,
Figure 529122DEST_PATH_IMAGE010
为训练集中数据的向量表示,
Figure 955555DEST_PATH_IMAGE011
,N是训练集的大小;具有最高余弦分数的代码片段将作为查询结果返回。
7.根据权利要求1所述的一种基于信息检索和神经网络的代码摘要自动生成方法,其特征在于,所述步骤S5中,所述混合网络为:
Figure 885126DEST_PATH_IMAGE014
其中,W mix 代表第二层线性层的权重矩阵,W hid 代表第一层线性层的权重矩阵,H test ,H str H sem 分别代表待摘要代码、以及检索出的最相似结构代码和最相似语义代码在每个时间步获得相应的隐藏状态,b hid 代表第一层线性层的偏置向量,b mix 代表第二层线性层的偏置向量。
CN202211333019.9A 2022-10-28 2022-10-28 一种基于信息检索和神经网络的代码摘要自动生成方法 Pending CN115408056A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202211333019.9A CN115408056A (zh) 2022-10-28 2022-10-28 一种基于信息检索和神经网络的代码摘要自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202211333019.9A CN115408056A (zh) 2022-10-28 2022-10-28 一种基于信息检索和神经网络的代码摘要自动生成方法

Publications (1)

Publication Number Publication Date
CN115408056A true CN115408056A (zh) 2022-11-29

Family

ID=84168838

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202211333019.9A Pending CN115408056A (zh) 2022-10-28 2022-10-28 一种基于信息检索和神经网络的代码摘要自动生成方法

Country Status (1)

Country Link
CN (1) CN115408056A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117407051A (zh) * 2023-12-12 2024-01-16 武汉大学 一种基于结构位置感知的代码自动摘要方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108519890A (zh) * 2018-04-08 2018-09-11 武汉大学 一种基于自注意力机制的鲁棒性代码摘要生成方法
CN110399162A (zh) * 2019-07-09 2019-11-01 北京航空航天大学 一种源代码注释自动生成方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108519890A (zh) * 2018-04-08 2018-09-11 武汉大学 一种基于自注意力机制的鲁棒性代码摘要生成方法
CN110399162A (zh) * 2019-07-09 2019-11-01 北京航空航天大学 一种源代码注释自动生成方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117407051A (zh) * 2023-12-12 2024-01-16 武汉大学 一种基于结构位置感知的代码自动摘要方法
CN117407051B (zh) * 2023-12-12 2024-03-08 武汉大学 一种基于结构位置感知的代码自动摘要方法

Similar Documents

Publication Publication Date Title
Lin et al. Bridging textual and tabular data for cross-domain text-to-SQL semantic parsing
CN110348016B (zh) 基于句子关联注意力机制的文本摘要生成方法
CN108519890B (zh) 一种基于自注意力机制的鲁棒性代码摘要生成方法
CN111159223B (zh) 一种基于结构化嵌入的交互式代码搜索方法及装置
Lin et al. Improving code summarization with block-wise abstract syntax tree splitting
CN110472238B (zh) 基于层级交互注意力的文本摘要方法
Qin et al. A survey on text-to-sql parsing: Concepts, methods, and future directions
CN108959312A (zh) 一种多文档摘要生成的方法、装置和终端
CN113743133B (zh) 融合词粒度概率映射信息的汉越跨语言摘要方法
CN112215013B (zh) 一种基于深度学习的克隆代码语义检测方法
CN111061861B (zh) 一种基于XLNet的文本摘要自动生成方法
Newman et al. The EOS decision and length extrapolation
CN112541343A (zh) 基于词对齐的半监督对抗学习跨语言摘要生成方法
JP2005539280A (ja) 多言語データベース作成のシステムおよび方法
Li et al. Training and evaluating improved dependency-based word embeddings
Liu et al. Qatest: A uniform fuzzing framework for question answering systems
CN115437626A (zh) 一种基于自然语言的ocl语句自动生成方法和装置
CN115408056A (zh) 一种基于信息检索和神经网络的代码摘要自动生成方法
CN117453851B (zh) 基于知识图谱的文本索引增强问答方法及***
CN112380882B (zh) 一种具有误差修正功能的蒙汉神经机器翻译方法
CN114357154A (zh) 一种基于双编码指针混合网络的中文摘要生成方法
Thu et al. Myanmar news headline generation with sequence-to-sequence model
CN114648024A (zh) 基于多类型词信息引导的汉越跨语言摘要生成方法
Huang et al. Yet another combination of IR-and neural-based comment generation
De Kruijf et al. Training a Dutch (+ English) BERT model applicable for the legal domain

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20221129