CN112835585A - 一种基于抽象语法树的程序理解方法及系统 - Google Patents
一种基于抽象语法树的程序理解方法及系统 Download PDFInfo
- Publication number
- CN112835585A CN112835585A CN202110096711.3A CN202110096711A CN112835585A CN 112835585 A CN112835585 A CN 112835585A CN 202110096711 A CN202110096711 A CN 202110096711A CN 112835585 A CN112835585 A CN 112835585A
- Authority
- CN
- China
- Prior art keywords
- program
- path
- syntax tree
- nodes
- understanding
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 239000013598 vector Substances 0.000 claims abstract description 52
- 238000012549 training Methods 0.000 claims abstract description 39
- 239000013604 expression vector Substances 0.000 claims abstract description 12
- 230000000873 masking effect Effects 0.000 claims description 7
- 230000008569 process Effects 0.000 claims description 7
- 238000003860 storage Methods 0.000 claims description 6
- 238000000605 extraction Methods 0.000 claims description 3
- 238000013528 artificial neural network Methods 0.000 abstract description 5
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 9
- 238000004590 computer program Methods 0.000 description 7
- 239000012634 fragment Substances 0.000 description 4
- 239000011159 matrix material Substances 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000010606 normalization Methods 0.000 description 3
- 230000004913 activation Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000009826 distribution Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000007373 indentation Methods 0.000 description 2
- 238000003062 neural network model Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000001537 neural effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Biophysics (AREA)
- Evolutionary Computation (AREA)
- General Health & Medical Sciences (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Biomedical Technology (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本公开公开的一种基于抽象语法树的程序理解方法及系统,包括:获取程序代码;将程序代码生成语法树;提取每个语法树根结点到终端结点的路径;根据屏蔽策略遮蔽路径中结点后形成路径表示向量;根据屏蔽策略遮蔽程序代码中部分节点后形成词向量序列;将路径表示向量集合和词向量序列输入程序理解模型中完成预训练任务,获取训练好的用于程序理解的程序理解模型。充分提取了程序代码中的语法结构信息和语义信息,缓解深度神经网络训练中对标注数据依赖过重的问题,提高程序理解的效率和准确率。
Description
技术领域
本发明涉及程序理解技术领域,尤其涉及一种基于抽象语法树的程序理解方法及系统。
背景技术
本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。
程序理解是软件工程中的关键活动,也一直是软件工程领域的研究热点,它在软件开发、复用、测试及维护等任务中,都要发挥着重要作用。
程序结构上的复杂性是程序理解的面临的挑战。结构性是程序的重要特性,程序的语义也依赖不同语法结构的程序语句和表达式的组合来体现。例如,程序在语法结构上可以分解为顺序、分支与循环三种基本语法结构的组合,其功能也由这些基本的语法结构的组合来体现。因此要完成程序理解任务,必须对程序的结构信息进行充分的提取和抽象。
虽然神经网络模型在程序理解中已经取得了成功,但发明人认为,现有的进行程序分解的神经模型在训练时,依赖标注数据集,但是目前程序理解的标注数据集规模都比较小,而深度神经网络模型通常有大量的参数,较小的训练数据集会导致过拟合的出现,这限制了程序理解更好地表现。
发明内容
本公开为了解决上述问题,提出了一种基于抽象语法树的程序理解方法及系统,充分提取了程序代码中的语法结构信息和语义信息,缓解深度神经网络训练中对标注数据依赖过重的问题,提高程序理解的效率和准确率。
为实现上述目的,本公开采用如下技术方案:
第一方面,提出了一种基于抽象语法树的程序理解方法,包括:
获取程序代码;
将程序代码生成语法树;
提取每个语法树根结点到终端结点的路径;
根据屏蔽策略遮蔽路径中部分结点后形成路径表示向量;
根据屏蔽策略遮蔽程序代码中部分节点后形成词向量序列;
将路径表示向量和词向量序列输入程序理解模型中完成预训练任务,获取训练好的用于程序理解的程序理解模型。
第二方面,提出了一种基于抽象语法树的程序理解系统,包括:
程序代码获取模块,用于获取程序代码;
语法树生成模块,用于将程序代码生成语法树;
路径提取模块,用于提取每个语法树根结点到终端结点的路径;
路径表示向量生成模块,用于根据屏蔽策略遮蔽路径中部分结点后形成路径表示向量;
词向量序列生成模块,用于根据屏蔽策略遮蔽程序代码中部分节点后形成词向量序列;
模型训练模块,用于将路径表示向量和词向量序列输入程序理解模型中完成预训练任务,获取训练好的用于程序理解的程序理解模型。
第三方面,提出了一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成一种基于抽象语法树的程序理解方法所述的步骤。
第四方面,提出了一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成一种基于抽象语法树的程序理解方法所述的步骤。
与现有技术相比,本公开的有益效果为:
1、本公开提出了针对AST的混合预训练目标路径掩码语言建模(Path MaskedLanguage Modeling,PMLM)和结点顺序预测(Node Order Prediction,NOP),PMLM针对AST路径设计了一种新型的遮蔽策略,从而能联合训练编码器-解码器以提高生成任务的表现。NOP使模型注意到AST路径上的结点约束关系,以便更多代码结构特征可以被提取。
2、本公开在超大型代码数据集上进行训练,提供了一个基于编码器-解码器结构的预训练模型,该模型可以被微调后直接用于面向程序理解的下游任务,以提高其准确率。
3、本公开解决了神经网络方法在进行程序理解时容易受到数据规模限制的缺点,能够使得训练需要的标注数据更少,并大大提高程序理解下游任务的训练速度。
本发明附加方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
构成本申请的一部分的说明书附图用来提供对本申请的进一步理解,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。
图1为本公开实施例1公开的基于抽象语法树的代码表示预训练任务流程示意图,其中深灰色表示该结点(或词)被遮蔽,v5与v6结点交换了位置;
图2为本公开实施例1公开的Transformer结构示意图;
图3为本公开实施例1所述的代码片段生成AST示意图;
图4为本公开实施例1所述的代码片段处理示意图。
具体实施方式:
下面结合附图与实施例对本公开作进一步说明。
应该指出,以下详细说明都是例示性的,旨在对本申请提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本申请所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本申请的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
在本公开中,术语如“上”、“下”、“左”、“右”、“前”、“后”、“竖直”、“水平”、“侧”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,只是为了便于叙述本公开各部件或元件结构关系而确定的关系词,并非特指本公开中任一部件或元件,不能理解为对本公开的限制。
本公开中,术语如“固接”、“相连”、“连接”等应做广义理解,表示可以是固定连接,也可以是一体地连接或可拆卸连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的相关科研或技术人员,可以根据具体情况确定上述术语在本公开中的具体含义,不能理解为对本公开的限制。
实施例1
在该实施例中,公开了一种基于抽象语法树的程序理解方法,包括:
获取程序代码;
将程序代码生成语法树;
提取每个语法树根结点到终端结点的路径;
根据屏蔽策略遮蔽路径中部分结点后形成路径表示向量;
根据屏蔽策略遮蔽程序代码中部分节点后形成词向量序列;
将路径表示向量和词向量序列输入程序理解模型中完成预训练任务,获取训练好的用于程序理解的程序理解模型。
进一步的,程序理解模型采用Transformer的编解码器结构,去掉解码器端的位置编码,并添加二分类器进行预测,其中编码器读入AST路径的集合并生成AST的表示,解码器利用该表示推测出AST对应的代码片段。
进一步的,对解码器的输出处理为:使用“INDENT”和“DEDENT”表示程序代码的开始和结束;使用“NEWLINE”代表程序代码换行;使用“_”代表程序代码中的空格;删除程序代码中的注释。
进一步的,程序理解模型训练时,训练损失为二分类交叉熵损失与多分类交叉熵之和。
进一步的,每个路径为一个结点序列。
进一步的,根据屏蔽策略遮蔽路径中部分节点,将路径中各结点表示为向量,对向量进行拼接后,形成路径表示向量。
进一步的,根据屏蔽策略遮蔽程序代码中部分节点后形成词向量序列的具体过程为:
将程序代码中与路径中被遮蔽的结点对应的结点保留;
将程序代码中其余结点遮蔽;
获取程序代码中各结点的词向量,形成词向量序列。
结合图1-4对本实施例公开的一种基于抽象语法树的程序理解方法中模型的训练过程进行详细说明。
如图1所示,本实施例公开的模型的训练过程包括:
采用大规模的、无标注的代码数据集,将其中的每一个代码片段转化为一个抽象语法树(Abstract Syntax Tree,AST),提取每个AST根结点到终端结点的路径,将AST中的值结点和代码片段中的所有词会通过字节对编码划分成子词。
按照路径掩码语言建模(Path Masked Language Modeling,PMLM)和结点顺序预测(Node Order Prediction,NOP)两个预训练任务的要求对AST和代码片段进行处理,表示成路径向量集合和对应的路径表示向量。
对代码片段进行处理,使用“INDENT”和“DEDENT”代替缩进,表示代码片段的开始和结束;使用“NEWLINE”代表代码片段换行;在代码片段中空格被替换为“_”;同时从训练数据中删除代码片段中的注释,将AST对应的处理好的代码片段做为程序理解模型中解码器的输出。
程序理解模型采用类似Transformer的编解码器结构,但去掉解码器端位置编码,并添加一个二分类器用于完成结点顺序预测(NOP)任务。将路径向量集合中的向量合并,然后通过全连接层表示成固定维度的向量作为模型编码器的输入,将对应的代码片段向量作为模型解码器的输入;
按照PMLM和NOP两个预训练任务对模型进行训练,从而获取训练好的用于程序理解的程序理解模型。
将代码数据集中的每一个代码片段转化为一个AST,提取每个AST根结点到终端结点的路径,AST中的值结点和代码片段中的所有词会通过字节对编码划分成子词。具体为:
(1)如图2所示,将代码片段转化为AST,AST树的结点分为两类,一类是类型结点,如”argument”,”Eptr”,使用符号v表示,另一类是值结点,即代码中的词,如“sys_path”,”join_path”,这类结点几乎都为终端结点,使用符号x表示。我们使用根结点到终端结点的路径表示AST,A={p1,p2,…,pn},其中n为一个AST包含的路径数量。每条路径都为结点序列,其中m为路径的长度。此外,每个代码片段被分割为词序列x1,x2,…,xL,其中L为代码片段的长度,所有结点都表示成实值向量。
(2)利用字节对编码从语料库中学习AST中的值结点和代码片段中的所有词中频次最高的子词,对词进行切分,比如‘third_pirty’可能切分成’third‘,’_‘,’pirty‘,然后把频次最高的子词收集起来形成一个字典然后用于模型的训练。
我们使用构成每个词的所有子词的向量相加表示这个完整的词:
其中Es为子词的向量表示。
按照PMLM和NOP预训练任务对AST及其对应代码片段进行一定的处理,具体的处理步骤如下:
(1)按照PMLM的规则对AST的值结点和代码片段的部分词进行屏蔽,步骤如下:
(1-1)对AST路径中的部分值结点进行屏蔽,根据概率{qi}i=1…N的分布对路径上的结点进行采样,其中:
其中i表示当前结点的层次,N为该路径上最大结点层次,减去N是为了防止数值溢出。
(1-2)在解码器端,对代码片段中的词进行遮蔽,我们保留mA中的值结点,而遮蔽掉代码片段中的其他结点。如此在进行下一个词预测的时候,PMLM能够强制解码器依赖于AST的特征表示,而非代码片段中之前的词。
Cmasked=REPLACE(C,mC,[mask])
(2)按照NOP的规则以0.5的概率决定是否随机交换Amasked中路径某些结点的位置,得到路径集合Aexchange,将其作为编码器的输入,然后训练模型来区分AST中路径结点顺序是否正确,如图1所示我们交换了x5结点和x6结点的位置。
在进入程序理解模型的编码器之前,需做如下运算:
为表示路径,我们合并路径上的各结点向量,然后应用全连接层压缩向量的维度:
其中Wpath为权重。路径的表示向量通过全连接层后,应用层归一化,得到路径表示向量集合XAST。
对代码片段进行处理,使用“INDENT”和“DEDENT”代替缩进,表示代码片段的开始和结束;使用“NEWLINE”代表换行;在代码片段中空格被替换为“_”;同时从训练数据中删除代码片段中的注释,处理结果如图4所示,将AST对应的处理好的代码片段作为程序理解模型中解码器的输出。
如图2所示,程序理解模型采用Transformer的编解码器结构,但去掉解码器端位置编码,并添加一个二分类器用于完成结点顺序预测任务。
编码器包括多头注意力机制、残差连接、层归一化和前馈网络,将XAST作为编码器的输入,运算过程具体包括:
首先通过多头注意力机制,多头注意力拥有三个隐藏层,分别是查询矩阵Q、键矩阵K和值矩阵V,它们的值等于XAST;计算每个head:
对headi进行拼接,得到增强器的输出,即:
依次执行残差连接和层归一化,具体为:
残差连接:
层归一化:
其中,α,β分别是可学习的拉伸参数和可学习的偏移参数;∈是为了防止除0。
通过编码器的最后一层前馈网络即可得到编码器的输出,前馈网络由GeLU激活函数及其两侧的线性变换组成。
解码器的第一层为多头注意,其中,KE和VE都来自编码器,Q为前一时间步的输出,输出值Z将被输入到第二层;第二层与第一层结构相同,但KR和VR来自编码器,即代码片段的向量序列与中间向量进行注意力机制计算,最后输入至前馈网络中得到当前时间步的输出,继续将目标代码的下一词作为解码器的输入,得到下一时间步的输出,重复此过程,直到生成结束标志或者达到输出序列的最大长度。
通过PMLM和NOP预训练目标对程序理解模型进行训练,具体包括:
将编码器的输出通过全连接层,采用sigmoid损失函数将输出转换为0-1之间的概率分布,最后按照下式计算二分类交叉熵损失:
loss1=-(yt*log(yp)+(1-yt)log(1-yp))
其中yt为真实标签,yp为编码器的输出。
将解码器的每一时间步的输出依次通过全连接层、Softmax函数后得到目标代码词,最后按照下式计算多分类交叉熵损失:
其中k表示共有k个标签值,第i个样本预测为第k个标签的概率为pi,,N表示样本总数。
最后总的损失为以上两个损失值之和,即loss1+loss2。
程序理解模型训练完成后,将训练好的程序理解模型用于对程序代码的程序理解。在本实施例中,针对的编程语言为Java语言和Python语言,也可以拓展到其他语言。
本公开通过在已有数据本身上面开展假定任务进行表示学习,充分提取程序语言中的语法结构信息和语义信息,并缓解深度神经网络训练中对标注数据依赖过重的问题,从而使得训练需要的标注数据更少,而且能够起到加速训练的作用。
本公开提出了针对AST的混合预训练目标路径掩码语言建模(Path MaskedLanguage Modeling,PMLM)和结点顺序预测(Node Order Prediction,NOP),PMLM针对AST路径设计了一种新型的遮蔽策略,从而能联合训练编码器-解码器以提高生成任务的表现。NOP使模型注意到AST路径上的结点约束关系,以便更多代码结构特征可以被提取。
本公开在超大型代码数据集上进行训练,提供了一个基于编码器-解码器结构的预训练模型,该模型可以被微调后广泛用于面向程序理解的下游任务,以提高其准确率。
本公开解决了神经网络方法在进行程序理解时容易受到数据规模限制的缺点,能够使得训练需要的标注数据更少,并大大提高程序理解下游任务的训练速度。
实施例2
在该实施例中,公开了一种基于抽象语法树的程序理解系统,包括:
程序代码获取模块,用于获取程序代码;
语法树生成模块,用于将程序代码生成语法树;
路径提取模块,用于提取每个语法树根结点到终端结点的路径;
路径表示向量生成模块,用于根据屏蔽策略遮蔽路径中部分结点后形成路径表示向量;
词向量序列生成模块,用于从根据屏蔽策略遮蔽程序代码中部分节点后形成词向量序列;
模型训练模块,用于将路径表示向量和词向量序列输入程序理解模型中进行预训练,获取训练好的用于程序理解的程序理解模型。
实施例3
在该实施例中,公开了一种电子设备,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成实施例1公开的一种基于抽象语法树的程序理解方法所述的步骤。
实施例4
在该实施例中,公开了一种计算机可读存储介质,用于存储计算机指令,所述计算机指令被处理器执行时,完成实施例1公开的一种基于抽象语法树的程序理解方法所述的步骤。
以上仅为本申请的优选实施例而已,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
Claims (10)
1.一种基于抽象语法树的程序理解方法,其特征在于,包括:
获取程序代码;
将程序代码生成语法树;
提取每个语法树根结点到终端结点的路径;
根据屏蔽策略遮蔽路径中部分结点后形成路径表示向量;
根据屏蔽策略遮蔽程序代码中部分节点后形成词向量序列;
将路径表示向量和词向量序列输入程序理解模型中完成预训练任务,获取训练好的用于程序理解的程序理解模型。
2.如权利要求1所述的一种基于抽象语法树的程序理解方法,其特征在于,程序理解模型采用Transformer的编解码器结构,去掉解码器端的位置编码,并添加二分类器进行预测,其中编码器读入AST路径的集合并生成AST的表示,解码器利用该表示推测出AST对应的代码片段。
3.如权利要求2所述的一种基于抽象语法树的程序理解方法,其特征在于,对解码器的输出处理为:使用“INDENT”和“DEDENT”表示程序代码的开始和结束;使用“NEWLINE”代表程序代码换行;使用“_”代表程序代码中的空格;删除程序代码中的注释。
4.如权利要求2所述的一种基于抽象语法树的程序理解方法,其特征在于,程序理解模型训练时,训练损失为二分类交叉熵损失与多分类交叉熵之和。
5.如权利要求1所述的一种基于抽象语法树的程序理解方法,其特征在于,每个路径为一个结点序列。
6.如权利要求1所述的一种基于抽象语法树的程序理解方法,其特征在于,根据屏蔽策略遮蔽路径中部分节点,将路径中各结点表示为向量,对向量进行拼接后,形成路径表示向量。
7.如权利要求6所述的一种基于抽象语法树的程序理解方法,其特征在于,根据屏蔽策略遮蔽程序代码中部分节点后形成词向量序列的具体过程为:
将程序代码中与路径中被遮蔽的结点对应的结点保留;
将程序代码中其余结点遮蔽;
获取程序代码中各结点的词向量,形成词向量序列。
8.一种基于抽象语法树的程序理解系统,其特征在于,包括:
一种基于抽象语法树的程序理解系统,包括:
程序代码获取模块,用于获取程序代码;
语法树生成模块,用于将程序代码生成语法树;
路径提取模块,用于提取每个语法树根结点到终端结点的路径;
路径表示向量生成模块,用于根据屏蔽策略遮蔽路径中部分结点后形成路径表示向量;
词向量序列生成模块,用于根据屏蔽策略遮蔽程序代码中部分节点后形成词向量序列;
模型训练模块,用于将路径表示向量和词向量序列输入程序理解模型中进行预训练,获取训练好的用于程序理解的程序理解模型。
9.一种电子设备,其特征在于,包括存储器和处理器以及存储在存储器上并在处理器上运行的计算机指令,所述计算机指令被处理器运行时,完成权利要求1-7任一项所述的一种基于抽象语法树的程序理解方法的步骤。
10.一种计算机可读存储介质,其特征在于,用于存储计算机指令,所述计算机指令被处理器执行时,完成权利要求1-7任一项所述的一种基于抽象语法树的程序理解方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110096711.3A CN112835585A (zh) | 2021-01-25 | 2021-01-25 | 一种基于抽象语法树的程序理解方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110096711.3A CN112835585A (zh) | 2021-01-25 | 2021-01-25 | 一种基于抽象语法树的程序理解方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112835585A true CN112835585A (zh) | 2021-05-25 |
Family
ID=75931283
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110096711.3A Pending CN112835585A (zh) | 2021-01-25 | 2021-01-25 | 一种基于抽象语法树的程序理解方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112835585A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385178A (zh) * | 2021-12-14 | 2022-04-22 | 厦门大学 | 基于抽象语法树结构信息增强的代码生成方法 |
CN114924741A (zh) * | 2022-05-10 | 2022-08-19 | 南京航空航天大学 | 一种基于结构特征和序列特征的代码补全方法 |
CN115268867A (zh) * | 2022-07-26 | 2022-11-01 | 中国海洋大学 | 一种抽象语法树裁剪方法 |
CN116151132A (zh) * | 2023-04-19 | 2023-05-23 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种编程学习场景的智能代码补全方法、系统及储存介质 |
CN117272989A (zh) * | 2023-11-21 | 2023-12-22 | 浙江无端科技股份有限公司 | 基于字符编码压缩的屏蔽词识别方法、装置、设备及介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110489555A (zh) * | 2019-08-21 | 2019-11-22 | 创新工场(广州)人工智能研究有限公司 | 一种结合类词信息的语言模型预训练方法 |
CN111459491A (zh) * | 2020-03-17 | 2020-07-28 | 南京航空航天大学 | 一种基于树形神经网络的代码推荐方法 |
CN112035165A (zh) * | 2020-08-26 | 2020-12-04 | 山谷网安科技股份有限公司 | 基于同构网络的代码克隆检测方法及系统 |
-
2021
- 2021-01-25 CN CN202110096711.3A patent/CN112835585A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110489555A (zh) * | 2019-08-21 | 2019-11-22 | 创新工场(广州)人工智能研究有限公司 | 一种结合类词信息的语言模型预训练方法 |
CN111459491A (zh) * | 2020-03-17 | 2020-07-28 | 南京航空航天大学 | 一种基于树形神经网络的代码推荐方法 |
CN112035165A (zh) * | 2020-08-26 | 2020-12-04 | 山谷网安科技股份有限公司 | 基于同构网络的代码克隆检测方法及系统 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385178A (zh) * | 2021-12-14 | 2022-04-22 | 厦门大学 | 基于抽象语法树结构信息增强的代码生成方法 |
CN114924741A (zh) * | 2022-05-10 | 2022-08-19 | 南京航空航天大学 | 一种基于结构特征和序列特征的代码补全方法 |
CN115268867A (zh) * | 2022-07-26 | 2022-11-01 | 中国海洋大学 | 一种抽象语法树裁剪方法 |
CN115268867B (zh) * | 2022-07-26 | 2023-04-07 | 中国海洋大学 | 一种抽象语法树裁剪方法 |
CN116151132A (zh) * | 2023-04-19 | 2023-05-23 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种编程学习场景的智能代码补全方法、系统及储存介质 |
CN116151132B (zh) * | 2023-04-19 | 2023-07-18 | 合肥综合性国家科学中心人工智能研究院(安徽省人工智能实验室) | 一种编程学习场景的智能代码补全方法、系统及储存介质 |
CN117272989A (zh) * | 2023-11-21 | 2023-12-22 | 浙江无端科技股份有限公司 | 基于字符编码压缩的屏蔽词识别方法、装置、设备及介质 |
CN117272989B (zh) * | 2023-11-21 | 2024-02-06 | 浙江无端科技股份有限公司 | 基于字符编码压缩的屏蔽词识别方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112835585A (zh) | 一种基于抽象语法树的程序理解方法及系统 | |
CN107632981B (zh) | 一种引入源语组块信息编码的神经机器翻译方法 | |
CN107967262A (zh) | 一种神经网络蒙汉机器翻译方法 | |
CN110688394A (zh) | 面向新型供电城轨列车大数据运维的nl生成sql方法 | |
CN111209749A (zh) | 一种将深度学习应用于中文分词的方法 | |
CN113761893B (zh) | 一种基于模式预训练的关系抽取方法 | |
CN112632996A (zh) | 一种基于对比学习的实体关系三元组抽取方法 | |
CN115964459B (zh) | 基于食品安全认知图谱的多跳推理问答方法及系统 | |
CN114579699A (zh) | 预训练语言模型的训练方法以及装置 | |
CN113657123A (zh) | 基于目标模板指导和关系头编码的蒙语方面级情感分析方法 | |
CN115048141A (zh) | 一种基于图引导的Transformer模型代码注释自动生成方法 | |
CN117573084B (zh) | 一种基于逐层融合抽象语法树的代码补全方法 | |
CN113177113A (zh) | 任务型对话模型预训练方法、装置、设备及存储介质 | |
CN112580370A (zh) | 一种融合语义知识的蒙汉神经机器翻译方法 | |
CN114548090B (zh) | 基于卷积神经网络和改进级联标注的快速关系抽取方法 | |
CN115826988A (zh) | 一种基于数据流分析和注意力机制的Java方法注释即时自动更新方法 | |
CN115114930A (zh) | 一种基于序列到森林的非连续实体识别方法 | |
Wang et al. | The performance of improved XLNet on text classification | |
CN113887249A (zh) | 一种基于依存句法信息和Transformer模型的蒙汉神经机器翻译方法 | |
CN113568969A (zh) | 信息抽取方法、装置、设备以及计算机可读存储介质 | |
CN110955768A (zh) | 一种基于句法分析的问答系统答案生成方法 | |
CN117634473B (zh) | 一种融入源信息的语法纠错早停多轮解码方法和系统 | |
CN112884354B (zh) | 一种字词双维度的化妆品安全监管领域事件信息抽取方法 | |
Cui et al. | A Comprehensive Survey on Text Filling Algorithms: A Research Review | |
CN117436459B (zh) | 一种动词加动词的语义关系识别方法和装置 |
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 |