CN113741886B - 一种基于图的语句级程序修复方法及系统 - Google Patents
一种基于图的语句级程序修复方法及系统 Download PDFInfo
- Publication number
- CN113741886B CN113741886B CN202110879818.5A CN202110879818A CN113741886B CN 113741886 B CN113741886 B CN 113741886B CN 202110879818 A CN202110879818 A CN 202110879818A CN 113741886 B CN113741886 B CN 113741886B
- Authority
- CN
- China
- Prior art keywords
- defect
- node
- graph
- sequence
- training
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/35—Creation or generation of source code model driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/951—Indexing; Web crawling techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/21—Design or setup of recognition systems or techniques; Extraction of features in feature space; Blind source separation
- G06F18/214—Generating training patterns; Bootstrap methods, e.g. bagging or boosting
-
- 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
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/72—Code refactoring
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Evolutionary Computation (AREA)
- Evolutionary Biology (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Bioinformatics & Computational Biology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Debugging And Monitoring (AREA)
- Machine Translation (AREA)
Abstract
本发明公开了一种基于图的语句级程序修复方法及系统,属于软件调试领域。本发明首先提取缺陷代码及补丁、规范代码以构建训练及预训练的数据集;对数据集预处理并预训练编程语言模型;利用编程语言模型进行数据嵌入,构建并训练基于Graph‑to‑Sequence架构的翻译模型;使用训练完成的翻译模型生成缺陷语句的补丁。本发明使用融合源代码多种特征的代码图表征代码,结合了预训练模型学习代码规范并加快翻译模型训练收敛速度,可以优化缺陷语句的上下文表示,使翻译模型能够更好地学习缺陷语句与正确语句之间的语法语义关联信息,从而更好地表征缺陷修复的语义,生成遵循编程语言规范的高质量修复补丁以自动化地修复缺陷程序,能够极大降低缺陷修复的成本。
Description
技术领域
本发明属于软件调试领域,特别涉及一种基于图的语句级程序修复方法及系统。
背景技术
程序缺陷的产生在软件开发过程中是不可避免的,开发人员需要花费大量的精力来修复这些缺陷。随着现代软件规模的不断变大,程序缺陷的数量以及修复难度随之增加,程序缺陷对企业造成了巨大的经济损失。为了提高软件的可靠性并降低开发成本,研究人员提出了许多自动程序修复(APR)技术来自动存在缺陷的程序。
传统的缺陷修复方法依赖专家知识,需要领域专家花费大量的精力构建修复模板或修复策略,因此不具备泛化能力。由于软件缺陷会重复出现的特性,研究人员发现缺陷修复历史可以为自动修复提供有效的指导,因此引入了深度学习模型来学习历史缺陷修复特征来指导修复。基于神经机器翻译模型(NMT)的方法是深度学习模型在APR领域的典型应用。基于NMT的方法从历史错误修复数据中自动学习程序的抽象修复模式,以捕获错误语句和修复语句之间的关联。这些模型具有很好的概括性,因为它们不依赖于编程语言,而仅与用于训练的历史数据有关。尽管基于NMT的方法相比于传统技术已有较大优势,但是这类方法仍存在不足。目前基于NMT的方法所采用的代码表示仍无法保留丰富的语法和语义信息。同时,由于倾向于将源代码表示为序列,并应用序列到序列模型来生成补丁,这类方法忽略了源代码中的隐式语义。另外,当输入序列过长时,这些模型的学习效率低下。
发明内容
发明目的:本发明的目的在于提供一种具备泛化能力强、缺陷修复特征提取能力优异、修复补丁质量高、工业应用前景良好等特点的语句级程序修复方法及系统。
技术方案:实现本发明目的的技术方案为:一种基于图的语句级程序修复方法,包括以下步骤:
步骤1,从开源社区爬取存在缺陷的代码文件及其补丁文件,构建翻译模型的训练数据集,并爬取提交修改次数小于设定阈值的方法,构建编程语言模型的预训练数据集;
步骤2,将预训练数据集中代码语句Token化,使用预训练数据集训练编程语言模型,预处理训练翻译模型的训练数据集,将其中修复后的语句Token化,基于缺陷语句及其上下文构建代码图,并利用训练完成的编程语言模型生成向量表示以符合翻译模型的输入;
步骤3,结合预训练完成的编程语言模型嵌入训练数据集中数据,通过嵌入的训练数据集训练基于Graph-to-Sequence架构的翻译模型;所述翻译模型包括图编码器和序列解码器,所述图编码器为输入的代码图添加一个超级结点视为缺陷语句的抽象表征,所述超级结点与所有与缺陷语句有关系的结点相连,所述图编码器通过聚合结点邻居信息迭代生成结点嵌入,将生成的超级结点的结点嵌入作为序列解码器的输入以生成缺陷子图对应的序列;所述序列解码器为带有注意力机制的递归神经网络,迭代生成候选Token组成Token序列;
步骤4,对于新输入的存在缺陷的程序,提取缺陷语句及其上下文,构建代码图并利用编程语言模型生成向量表示,使用训练完成的翻译模型生成补丁。
进一步地,步骤1具体过程包括:
步骤1-1,从开源社区爬取开源项目中存在缺陷的代码文件及为修复该缺陷提交的补丁文件,构建bug-fix对形成模型训练数据;从开源项目中爬取提交修改次数小于设定阈值的方法作为模型预训练数据;
步骤1-2,对于爬取的模型训练数据,选取其中仅修复单行语句的bug-fix对,保留修复语句所在的方法作为上下文,去除上下文长度大于等于设定阈值的数据;对于爬取的模型预训练数据,去除方法长度大于等于设定阈值的方法,去除重复出现的方法。
进一步地,步骤2具体过程包括:
步骤2-1,将预训练数据集中方法代码按字词分隔,利用BPE分词法将代码序列拆分并重组为以Token为单位的序列;
步骤2-2,将步骤2-1生成的Token序列输入并训练BERT模型;步骤2-3,利用BPE分词法将翻译模型的训练数据集中修复后语句拆分并重组为以Token为单位的序列;
步骤2-4,对于输入的缺陷语句及其上下文,首先通过程序切片优化缺陷语句的上下文,去除与缺陷语句语义无关的上下文,然后使用基于缺陷语句及其优化后的上下文构建代码图;
步骤2-5,使用训练完成的BERT模型为步骤2-3生成的Token序列及步骤2-4构建的代码图的结点生成向量表示。
进一步地,步骤2-4具体过程包括:
步骤2-4-1,根据缺陷语句及其上下文构建PDG,根据PDG搜索与缺陷语句有关联的上下文语句,去除与缺陷语句无关的语句,完成程序切片后的缺陷语句及其上下文语句以序列形式表示;
步骤2-4-2,将步骤2-4-1生成的代码序列转化为AST,AST中结点由使用BPE分词法处理后的词表示,根据规则使用不同类型的边连接AST树中的结点,具体包括:
(1)根据控制流规则使用ControlFlow边连接AST中存在控制流关系结点;
(2)根据数据流规则使用DataFlow边连接AST中存在数据流关系的结点;
(3)根据源代码自然顺序使用NaturalSeq边连接AST中存在上下位顺序关系的结点。
进一步地,步骤3中构建图编码器,具体包括:
步骤3-1,对于缺陷语句及其上下文对应的代码图,标记其中与缺陷语句有关系的结点,添加一个超级结点Vs与所有标记结点相连,随机初始化生成Vs的初始表示;所有标记结点和所有连接任意两个标记结点的边构成缺陷子图,超级结点Vs可以视为缺陷子图的聚合,是缺陷语句的抽象表征;
步骤3-2,对于代码图中任意结点Vi,通过结点聚合算法迭代聚合其K阶邻居结点信息并生成结点嵌入hi;
步骤3-3,对于步骤3-1添加的超级结点Vs,使用步骤3-2中结点聚合算法生成其结点嵌入hs,其结点嵌入视为子图嵌入并作为序列解码器的输入以生成缺陷子图对应的序列。
进一步地,步骤3中构建序列解码器,具体包括:
步骤3-4,获取步骤3-3中缺陷子图所有结点的向量表示(h1,h2…,hV);
步骤3-5,通过前一时刻解码器的隐向量St-1以及步骤3-4中获得的子图结点向量表示hj,利用评分函数计算每一个输入位置j与当前输出位置的关联性分数etj,其中初始时刻解码器隐向量为超级结点Vs的向量表示hs;
步骤3-6,通过步骤3-5计算得出的关联性分数etj计算注意力权重αtj以及上下文向量ct:
其中/>
其中,V为步骤3-4中获得的结点向量表示的数量;
步骤3-7,通过步骤3-6计算得出的上下文向量ct、解码器的隐向量sT-1和前一时刻解码器的输出yt-1,利用非线性激活函数计算当前时刻t状态向量St;
步骤3-8,通过步骤3-7计算得出的t时刻状态向量St、上下文向量ci和前一时刻解码器的输出yt-1,利用多层非线性函数计算当前位置的输出概率p;步骤3-9,重复步骤3-5到步骤3-8,迭代生成每个位置概率得分最高的Token直到序列终止,获得缺陷子图转换生成的Token序列。
进一步地,步骤3-2所述结点聚合算法,具体过程包括:
步骤3-2-1,对于结点v,根据边的方向将结点v的邻居结点分为前向邻居和后向邻居/>
步骤3-2-2,将结点v的前向邻居的表示聚合为一个向量/>
其中,max表示最大化运算符,Wpool为池化矩阵,σ表示非线性激活函数,b为偏移常量,k为当前邻居阶数;
步骤3-2-3,将结点v当前的特征向量的与生成的前向聚合向量/>串联并输入到一个带有σ激活函数的全连接层,通过该全连接层更新结点v的前向表示/>
步骤3-2-4,使用步骤3-2-2和步骤3-2-3处理方法,处理结点v的后向邻居更新结点v的后向表示/>
步骤3-2-5,重复步骤3-2-2到步骤3-2-4K次,K为聚合阶数,将重复K次后结点v的前向表示和后向表示串联生成结点v的最终表示。
进一步地,步骤4具体过程包括:
步骤4-1,对于新输入的存在缺陷的程序,标记其缺陷语句,并提取缺陷语句所在方法为上下文并构建代码图,完成代码图结点的嵌入;
步骤4-2,将步骤4-1生成的嵌入完成的代码图输入步骤3中所述翻译模型,使用训练完成的基于Graph-to-Sequence架构的翻译模型预测候选Token序列;
步骤4-3,使用BPE分词法还原步骤4-2所述的候选Token序列,生成候选补丁序列;
步骤4-4,使用步骤4-3生成的候选补丁序列替换源代码文件中缺陷语句,使用测试用例验证补丁正确性,输出通过测试用例的候选补丁序列作为正确补丁。
基于相同的发明构思,本发明提供的一种基于图的语句级程序修复系统,包括:
数据集提取模块,用于从开源社区爬取存在缺陷的代码文件及其补丁文件,构建翻译模型的训练数据集,并爬取提交修改次数小于设定阈值的方法,构建编程语言模型的预训练数据集;
预训练模块,用于将预训练数据集中代码语句Token化,使用预训练数据集训练编程语言模型,预处理训练翻译模型的训练数据集,将其中修复后的语句Token化,基于缺陷语句及其上下文构建代码图,并利用训练完成的编程语言模型生成向量表示以符合翻译模型的输入;
翻译模型训练模块,用于结合预训练完成的编程语言模型嵌入训练数据集中数据,通过嵌入的训练数据集训练基于Graph-to-Sequence架构的翻译模型;所述翻译模型包括图编码器和序列解码器,所述图编码器为输入的代码图添加一个超级结点视为缺陷语句的抽象表征,所述超级结点与所有与缺陷语句有关系的结点相连,所述图编码器通过聚合结点邻居信息迭代生成结点嵌入,将生成的超级结点的结点嵌入作为序列解码器的输入以生成缺陷子图对应的序列;所述序列解码器为带有注意力机制的递归神经网络,迭代生成候选Token组成Token序列;
以及,程序修复模块,用于对于新输入的存在缺陷的程序,提取缺陷语句及其上下文,构建代码图并利用编程语言模型生成向量表示,使用训练完成的翻译模型生成补丁。
基于相同的发明构思,本发明提供的一种基于图的语句级程序修复系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现所述的基于图的语句级程序修复方法。
有益效果:本发明与现有技术相比,其显著优点为:1)采用了能够建模代码复杂语法语义特征的抽象语法树、数据流图、控制流图等图形表征源代码,便于缺陷信息特征的提取;2)使用预训练编程语言模型BERT模型来生成代码的嵌入,能够代码规范并加快翻译模型训练收敛速度;3)针对缺陷语句生成修复补丁,能够避免输入序列过长导致的翻译模型效率低下问题;4)使用程序切片优化缺陷语句的上下文范围,避免过长的上下文带来的噪声问题;5)同时聚合结点的前向后向关系,能够更好地学习结点特征。6)相比于传统的Sequence-to-Sequence模型,基于Graph-to-Sequence架构的模型通过使用图编码器替代序列编码器,能够在保留代码图结构完整性的情况下学习修复模板,提升了模型泛用性。
附图说明
图1为一个实施例中基于图的语句级程序修复方法的流程图;
图2为一个实施例中程序切片效果示意图;
图3为一个实施例中代码图示意图;
图4为一个实施例中基于Graph-to-Sequence架构的翻译模型示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅用以解释本申请,并不用于限定本申请。
在一个实施例中,结合图1,本发明提出了一种基于图的语句级程序修复方法,该方法包括以下步骤:
步骤1,数据集提取。从开源社区爬取数据分别构建训练翻译模型和编程语言模型的预训练数据集;
步骤2,训练数据集预处理及编程语言模型预训练。使用预训练数据集训练编程语言模型,并预处理训练翻译模型的训练数据集以符合翻译模型的输入;
步骤3,翻译模型的构建和训练。结合预训练完成的编程语言模型嵌入训练数据集中数据,通过嵌入的训练数据集训练基于Graph-to-Sequence架构的翻译模型;
步骤4,补丁语句的生成和验证。对于预处理后的程序,使用训练完成的翻译模型生成候选补丁并根据测试用例验证补丁正确性,输出正确的补丁。
进一步地,在其中一个实施例中,步骤1所述数据集提取具体过程包括:
步骤1-1,从开源社区爬取开源项目中存在缺陷的代码文件及为修复该缺陷提交的补丁文件,构建bug-fix对形成模型训练数据;从开源项目中爬取提交修改次数较少的方法作为模型预训练数据;
步骤1-2,对爬取的数据进行数据筛选过滤。对于步骤1-1爬取的模型训练数据,选取其中仅修复单行语句的bug-fix对,保留当前修复语句所在的方法(function)作为上下文,去除上下文长度大于等于1000的数据;对于步骤1-1爬取的模型预训练数据,去除方法长度大于等于1000的方法,去除重复出现的方法;
步骤1-3,通过步骤1-2所述数据分别构建训练数据集及预训练数据集,对于训练数据集,随机选取其中80%bug-fix对作为训练集,其余20%bug-fix对作为测试集。
进一步地,在其中一个实施例中,步骤2所述数据集预处理及编程语言模型预训练,具体包括:
步骤2-1,预训练数据集预处理。将预训练数据集中方法代码按字词分隔,利用BPE(byte pair encoder)分词法将代码序列拆分并重组为以Token为单位的序列;
步骤2-2,将步骤2-1生成的Token序列输入并训练BERT模型。BERT(BidirectionalEncoder Representation from Transformers)模型是目前最常用的预训练模型之一,训练良好的BERT模型可以为输入的序列生成其对应的向量表示。将步骤2-1生成的Token序列构成的预训练数据输入开源深度学习框架TensorFlow中封装完全的BERT模型,调用API运行100epochs后完成训练,获得训练完全的BERT模型;
步骤2-3,修复后语句预处理,利用BPE分词法将修复后语句拆分并重组为以Token为单位的序列。训练数据集以bug-fix对形式存储数据,bug为存在缺陷的语句及其上下文,fix即为存在缺陷语句的修复版本;
步骤2-4,缺陷语句及其上下文处理。对于输入的缺陷语句及其上下文,首先通过程序切片优化缺陷语句的上下文,去除与缺陷语句语义无关的上下文,然后使用基于缺陷语句及其优化后的上下文构建代码图;
步骤2-5,使用训练完全的BERT模型为步骤2-3生成的Token序列及步骤2-4构建的代码图的结点生成向量表示。
采用本实施例的方案,通过BPE分词法拆分代码序列能够有效地缓解词汇表爆炸问题,同时使用预训练模型为拆分后的序列生成嵌入能够有效地提高补丁的语法规范性并加快翻译模型收敛速度。
进一步地,在其中一个实施例中,步骤2-4所述缺陷语句及其上下文处理,具体过程包括:
步骤2-4-1,程序切片。首先使用开源工具Joern根据缺陷语句及其上下文构建PDG,PDG(Program Dependence Graph)是程序间控制依赖关系和数据依赖关系的图形表示。然后根据PDG搜索与缺陷语句有关联的上下文语句,去除与缺陷语句无关的语句。完成程序切片后的缺陷语句及其上下文语句将以序列形式表示;
步骤2-4-2,构建代码图。使用开源工具Gumtree将步骤2-4-1生成的代码序列转化为AST(abstract syntax code,抽象语法树)。AST可以视为程序语法结构的图形(树形)表示,AST中结点由使用BPE分词法处理后的词表示。对于构建完成的AST树,根据规则使用不同类型的边连接AST树中的结点,具体包括:
(1)根据控制流规则使用ControlFlow边连接AST中存在控制流关系结点;
(2)根据数据流规则使用DataFlow边连接AST中存在数据流关系的结点;
(3)根据源代码自然顺序使用NaturalSeq边连接AST中存在上下位顺序关系的结点。
采用本实施例的方案,使用基于PDG的程序切片能够去除与缺陷语句语义无关的语句,有效地精简缺陷语句上下文,减少训练过程中的噪声干扰。同时使用多种代码语法语义图混合的表征,相比于传统的序列表示方法,能够保留更多的语法语义信息。
进一步地,在其中一个实施例中,步骤3中所述基于Graph-to-Sequence架构的翻译模型的构建和训练,具体包括:
所述基于Graph-to-Sequence架构的翻译模型,包括图编码器和序列解码器两部分:
(1)构建图编码器,具体包括:
步骤3-1,添加超级结点。对于步骤2-4生成的代码图,标记其中与缺陷语句有关系的结点,添加一个超级结点Vs与所有标记结点相连,随机初始化生成Vs的初始表示。所有标记结点和所有连接任意两个标记结点的边构成缺陷子图,超级结点Vs可以视为缺陷子图的聚合,是缺陷语句的抽象表征;
步骤3-2,迭代生成结点嵌入。对于代码图中任意结点Vi,通过结点聚合算法迭代聚合其K阶邻居结点信息并生成结点嵌入hi;
步骤3-3,根据结点嵌入生成子图嵌入。对于步骤3-1添加的超级结点Vs,使用步骤3-2中结点聚合算法生成其结点嵌入hs。由于Vs与缺陷语句相关结点直接相连,Vs能够捕获所有相连结点的信息,可以视为缺陷子图的表征,其结点嵌入将视为子图嵌入并作为序列解码器的输入以生成缺陷子图对应的序列;
(2)构建序列解码器,序列解码器带有注意力机制的递归神经网络,具体包括:
步骤3-4,获取步骤3-3中缺陷子图所有结点的向量表示(h1,h2…,hV);
步骤3-5,通过前一时刻解码器的隐向量St-1以及步骤3-4中获得的子图结点向量表示计算每一个输入位置j与当前输出位置的关联性,其中初始时刻解码器隐向量为超级结点Vs的向量表示hs:
etj=a(st-1,hj)
其中,a为一个评分函数,能够对输入位置j周围的输入结点和当前位置的输出匹配程度进行评分;
步骤3-6,通过步骤3-5计算得出的关联性分数etj计算注意力权重αtj以及上下文向量ct:
其中/>
其中,V为步骤3-4中获得的结点向量表示的数量;
步骤3-7,通过步骤3-6计算得出的上下文向量ct、解码器的隐向量St-1和前一时刻解码器的输出yt-1计算当前时刻t状态向量St:
st=f(st-1,yt-1,ct)
其中,f为非线性激活函数,能够组合上下文向量ct、解码器的隐向量St-1和前一时刻解码器的输出yt-1通过权重矩阵计算解码器当前时刻状态向量St;
步骤3-8,通过步骤3-7计算得出的t时刻状态向量St、上下文向量ci和前一时刻解码器的输出yt-1计算当前位置的输出概率p,其中yt为t时刻的Token输出:
p(yt∣y1,…,yt-1)=g(yt-1,st,ct)
其中,g为多层非线性函数,能够通过状态向量St、上下文向量ci和前一时刻的输出计算当前位置概率得分;
步骤3-9,重复步骤3-5到步骤3-8,迭代生成Token序列直到序列终止,获得缺陷子图转换生成成的Token序列;
上述各函数为现有函数,具体表达形式可参考Cho K,VanB,GulcehreC,et al.的论文Learning phrase representations using RNN encoder-decoder forstatistical machine translation,此处不再赘述。
(3)训练基于Graph-to-Sequence架构的翻译模型,具体包括:
步骤3-10,对于步骤3-9生成的Token序列,计算该Token序列与步骤2-3生成的fix序列计算损失值loss并根据loss使用梯度下降法更新上述图编码器和序列解码器中的参数;
步骤3-11,对于训练数据集中预处理后的每一个bug-fix对,重复步骤3-1到步骤3-10,调整上述图编码器和序列解码器中的参数,获得训练完成的基于Graph-to-Sequence架构的翻译模型。
采用本实施例的方案,使用基于Graph-to-Sequence架构的翻译模型,能够端到端地学习图结构数据到序列结构数据地转化,从而使模型具备更强的学习能力以及泛化性能。
进一步地,在其中一个实施例中,步骤3-2所述结点聚合算法,具体过程包括:
步骤3-2-1,对于结点v,根据边的方向将结点v的邻居结点分为前向邻居和后向邻居/>前向邻居/>即结点v指向的邻居结点集合,后向邻居/>即指向结点v的邻居结点集合;
步骤3-2-2,将结点v的前向邻居的表示聚合为一个向量
其中,max表示最大化运算符,Wpool为池化矩阵,σ表示非线性激活函数,b为偏移常量,k为当前邻居阶数;
步骤3-2-3,将结点v当前的特征向量的与生成的前向聚合向量/>串联并输入到一个带有σ激活函数的全连接层。通过该全连接层更新结点v的前向表示/>
步骤3-2-4,使用步骤3-2-2和步骤3-2-3处理方法,处理结点v的后向邻居更新结点v的后向表示/>
步骤3-2-5,重复步骤3-2-2到步骤3-2-4K次(K为聚合阶数)。将重复K次后结点v的前向表示和后向表示串联生成结点v的最终表示。
采用本实施例的方案,通过聚合结点前向邻居和后向邻居的特征信息,模型能够学到更好的结点表征从而强化学习效果。
进一步地,在其中一个实施例中,步骤4所述补丁语句的生成和验证,具体过程包括:
步骤4-1,缺陷程序预处理。对于新输入的存在缺陷的程序,先标记其缺陷语句,并提取缺陷语句所在方法为上下文。然后重复步骤2-4缺陷语句及其上下文处理,构建代码图。最后,重复步骤2-5,完成代码图结点的嵌入;
步骤4-2,将步骤4-1生成的嵌入完成的代码图输入步骤3中所述翻译模型,使用训练完成的基于Graph-to-Sequence架构的翻译模型预测候选Token序列;
步骤4-3,使用BPE分词法还原步骤4-2所述的候选Token序列,生成候选补丁序列;
步骤4-4,使用步骤4-3生成的候选补丁序列替换源代码文件中缺陷语句,使用测试用例验证补丁正确性,输出通过测试用例的候选补丁序列作为正确补丁。
作为一种具体示例,在其中一个实施例中,对本发明基于图的语句级程序修复方法进行进一步验证说明,包括以下内容:
1、数据集提取,从开源社区爬取开源项目中存在缺陷的代码文件及为修复该缺陷提交的补丁文件,构建bug-fix对形成模型训练数据,对爬取的数据进行数据筛选过滤,保留当前修复语句所在的方法(function)作为上下文,去除上下文长度大于等于1000的数据,并随机选取其中80%bug-fix对作为训练集,其余20%bug-fix对作为测试集。;从开源项目中爬取提交修改次数较少(少于5次可以视为规范性强的代码方法)的方法作为模型预训练数据,去除方法长度大于等于1000的方法,去除重复出现的方法,构成预训练数据集。训练集中一个样本如下表1所示,预训练数据集中一个样本如下表2所示。表中所示样本所使用编程语言为Java,在实际场景下并不限定数据集所使用编程语言。
表1训练集中某一样本
表2预训练数据集中某一样本
2、数据集预处理及编程语言模型预训练。将预训练数据集中方法代码按字词分隔,利用BPE(byte pair encoder)分词法将代码序列拆分并重组为以Token为单位的序列,并输入训练BERT模型。对于修复后语句,利用BPE分词法将修复前语句拆分并重组为以Token为单位的序列,对于输入的缺陷语句及其上下文,首先使用开源工具Joern根据缺陷语句及其上下文构建PDG,然后根据PDG搜索与缺陷语句有关联的上下文语句,去除与缺陷语句无关的语句,对于数据集中一个样本的切片效果如图2所示。然后使用基于缺陷语句及其优化后的上下文构建代码图,代码图以开源工具Gumtree生成的AST为基础,根据规则使用不同类型的边连接AST树中的结点,根据控制流规则使用ControlFlow边连接AST中存在控制流关系结点,根据数据流规则使用DataFlow边连接AST中存在数据流关系的结点,根据源代码自然顺序使用NaturalSeq边连接AST中存在上下位顺序关系的结点,根据数据集中某一方法构建的代码图如图3所示。最后,使用训练完全的BERT模型为步骤2-3生成的Token序列及步骤2-4构建的代码图的结点生成向量表示。
3、基于Graph-to-Sequence架构的翻译模型的构建和训练,如图4所示,模型的构建和训练过程如下:
所述基于Graph-to-Sequence架构的翻译模型,包括图编码器和序列解码器两部分:
步骤3-1,添加超级结点。对于步骤2-4生成的代码图,标记其中与缺陷语句有关系的结点,添加一个超级结点Vs与所有标记结点相连,随机初始化生成Vs的初始表示。所有标记结点和所有连接任意两个标记结点的边构成缺陷子图,超级结点Vs可以视为缺陷子图的聚合,是缺陷语句的抽象表征;
步骤3-2,迭代生成结点嵌入。对于代码图中任意结点Vi,通过结点聚合算法迭代聚合其K阶邻居结点信息并生成结点嵌入hi,其结点聚合算法具体过程包括:
步骤3-2-1,对于结点v,根据边的方向将结点v的邻居结点分为前向邻居和后向邻居/>前向邻居/>即结点v指向的邻居结点集合,后向邻居/>即指向结点v的邻居结点集合;
步骤3-2-2,将结点v的前向邻居的表示聚合为一个向量
其中,max表示最大化运算符,Wpool为池化矩阵,σ表示非线性激活函数,b为偏移常量,k为当前邻居阶数;
步骤3-2-3,将结点v当前的特征向量的与生成的前向聚合向量/>串联并输入到一个带有σ激活函数的全连接层。通过该全连接层更新结点v的前向表示/>
步骤3-2-4,使用步骤3-2-2和步骤3-2-3处理方法,处理结点v的后向邻居更新结点v的后向表示/>
步骤3-2-5,重复步骤3-2-2到步骤3-2-4K次(K=3)。将重复K次后结点v的前向表示和后向表示串联生成结点v的最终表示。
步骤3-3,根据结点嵌入生成子图嵌入。对于步骤3-1添加的超级结点Vs,使用步骤3-2中结点聚合算法生成其结点嵌入hs。由于Vs与缺陷语句相关结点直接相连,Vs能够捕获所有相连结点的信息,可以视为缺陷子图的表征,其结点嵌入将视为子图嵌入并作为序列解码器的输入以生成缺陷子图对应的序列;
步骤3-4,获取步骤3-3中缺陷子图所有结点的向量表示(h1,h2…,hV);
步骤3-5,通过前一时刻解码器的隐向量St-1以及步骤3-4中获得的子图结点向量表示计算每一个输入位置j与当前输出位置的关联性,其中初始时刻解码器隐向量为超级结点Vs的向量表示hs:
etj=a(st-1,hj)
其中,a为一个评分函数,能够对输入位置j周围的输入结点和当前位置的输出匹配程度进行评分;
步骤3-6,通过步骤3-5计算得出的关联性分数etj计算注意力权重αtj以及上下文向量ct:
其中/>
其中,V为步骤3-4中获得的结点向量表示的数量;
步骤3-7,通过步骤3-6计算得出的上下文向量ct、解码器的隐向量St-1和前一时刻解码器的输出yt-1计算当前时刻t状态向量St:
st=f(st-1,yt-1,Ct)
其中,f为非线性激活函数,能够组合上下文向量ct、解码器的隐向量St-1和前一时刻解码器的输出yt-1通过权重矩阵计算解码器当前时刻状态向量St;
步骤3-8,通过步骤3-7计算得出的t时刻状态向量St、上下文向量ci和前一时刻解码器的输出yt-1计算当前位置的输出概率p,其中yt为t时刻的Token输出:
p(yt∣y1,…,yt-1)=g(yt-1,st,ct)
其中,g为多层非线性函数,能够通过状态向量St、上下文向量ci和前一时刻的输出计算当前位置概率得分;
步骤3-9,重复步骤3-5到步骤3-8,迭代生成Token序列直到序列终止,获得缺陷子图转换生成成的Token序列;
步骤3-10,对于步骤3-9生成的Token序列,计算该Token序列与步骤2-3生成的fix序列计算损失值loss并根据loss使用梯度下降法更新上述图编码器和序列解码器中的参数;
步骤3-11,对于训练数据集中预处理后的每一个bug-fix对,重复步骤3-1到步骤3-10,调整上述图编码器和序列解码器中的参数,获得训练完成的基于Graph-to-Sequence架构的翻译模型。
4、补丁语句的生成和验证。对于新输入的存在缺陷的程序,先标记其缺陷语句,并提取缺陷语句所在方法为上下文。然后重复步骤2-4缺陷语句及其上下文处理,构建代码图。最后,重复步骤2-5,完成代码图结点的嵌入,然后使用BPE分词法还原候选Token序列,生成候选补丁序列,最后用生成的候选补丁序列替换源代码文件中缺陷语句,使用测试用例验证补丁正确性,输出通过测试用例的候选补丁序列作为正确补丁。
本发明使用一种融合源代码多种特征的代码图表征代码,更好地表征缺陷修复的语义,同时结合了预训练模型学习代码规范并加快翻译模型训练收敛速度,使翻译模型能够更好地学习缺陷语句与正确语句之间的语法语义关联信息,通过基于Graph-to-Sequence架构的翻译模型学习图结构的缺陷语句,能够自动而准确地生成符合语法规范的正确代码补丁,从而能够极大降低缺陷修复的成本。
基于相同的发明构思,在一个实施例中,本发明提出了一种基于图的语句级程序修复系统,包括:数据集提取模块,用于从开源社区爬取存在缺陷的代码文件及其补丁文件,构建翻译模型的训练数据集,并爬取提交修改次数小于设定阈值的方法,构建编程语言模型的预训练数据集;预训练模块,用于将预训练数据集中代码语句Token化,使用预训练数据集训练编程语言模型,预处理训练翻译模型的训练数据集,将其中修复后的语句Token化,基于缺陷语句及其上下文构建代码图,并利用训练完成的编程语言模型生成向量表示以符合翻译模型的输入;翻译模型训练模块,用于结合预训练完成的编程语言模型嵌入训练数据集中数据,通过嵌入的训练数据集训练基于Graph-to-Sequence架构的翻译模型;以及,程序修复模块,用于对于新输入的存在缺陷的程序,提取缺陷语句及其上下文,构建代码图并利用编程语言模型生成向量表示,使用训练完成的翻译模型生成补丁。各模块具体实现细节参见上述方法实施例,此处不再赘述。
基于相同的发明构思,在一个实施例中,本发明提出了一种基于图的语句级程序修复系统,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,该计算机程序被加载至处理器时实现上述实施例中的基于图的语句级程序修复方法。
以上显示和描述了本发明的基本原理、主要特征及优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (10)
1.一种基于图的语句级程序修复方法,其特征在于,所述方法包括以下步骤:
步骤1,从开源社区爬取存在缺陷的代码文件及其补丁文件,构建翻译模型的训练数据集,并爬取提交修改次数小于设定阈值的方法,构建编程语言模型的预训练数据集;
步骤2,将预训练数据集中代码语句Token化,使用预训练数据集训练编程语言模型,预处理训练翻译模型的训练数据集,将其中修复后的语句Token化,基于缺陷语句及其上下文构建代码图,并利用训练完成的编程语言模型生成向量表示以符合翻译模型的输入;
步骤3,结合预训练完成的编程语言模型嵌入训练数据集中数据,通过嵌入的训练数据集训练基于Graph-to-Sequence架构的翻译模型;所述翻译模型包括图编码器和序列解码器,所述图编码器为输入的代码图添加一个超级结点视为缺陷语句的抽象表征,所述超级结点与所有与缺陷语句有关系的结点相连,所述图编码器通过聚合结点邻居信息迭代生成结点嵌入,将生成的超级结点的结点嵌入作为序列解码器的输入以生成缺陷子图对应的序列;所述序列解码器为带有注意力机制的递归神经网络,迭代生成候选Token组成Token序列;
步骤4,对于新输入的存在缺陷的程序,提取缺陷语句及其上下文,构建代码图并利用编程语言模型生成向量表示,使用训练完成的翻译模型生成补丁。
2.根据权利要求1所述的基于图的语句级程序修复方法,其特征在于,步骤1具体过程包括:
步骤1-1,从开源社区爬取开源项目中存在缺陷的代码文件及为修复该缺陷提交的补丁文件,构建bug-fix对形成模型训练数据;从开源项目中爬取提交修改次数小于设定阈值的方法作为模型预训练数据;
步骤1-2,对于爬取的模型训练数据,选取其中仅修复单行语句的bug-fix对,保留修复语句所在的方法作为上下文,去除上下文长度大于等于设定阈值的数据;对于爬取的模型预训练数据,去除方法长度大于等于设定阈值的方法,去除重复出现的方法。
3.根据权利要求1所述的基于图的语句级程序修复方法,其特征在于,步骤2具体过程包括:
步骤2-1,将预训练数据集中方法代码按字词分隔,利用BPE分词法将代码序列拆分并重组为以Token为单位的序列;
步骤2-2,将步骤2-1生成的Token序列输入并训练BERT模型;步骤2-3,利用BPE分词法将翻译模型的训练数据集中修复后语句拆分并重组为以Token为单位的序列;
步骤2-4,对于输入的缺陷语句及其上下文,首先通过程序切片优化缺陷语句的上下文,去除与缺陷语句语义无关的上下文,然后使用基于缺陷语句及其优化后的上下文构建代码图;
步骤2-5,使用训练完成的BERT模型为步骤2-3生成的Token序列及步骤2-4构建的代码图的结点生成向量表示。
4.根据权利要求3所述的基于图的语句级程序修复方法,其特征在于,步骤2-4具体过程包括:
步骤2-4-1,根据缺陷语句及其上下文构建PDG,根据PDG搜索与缺陷语句有关联的上下文语句,去除与缺陷语句无关的语句,完成程序切片后的缺陷语句及其上下文语句以序列形式表示;
步骤2-4-2,将步骤2-4-1生成的代码序列转化为AST,AST中结点由使用BPE分词法处理后的词表示,根据规则使用不同类型的边连接AST树中的结点,具体包括:
(1)根据控制流规则使用ControlFlow边连接AST中存在控制流关系结点;
(2)根据数据流规则使用DataFlow边连接AST中存在数据流关系的结点;
(3)根据源代码自然顺序使用NaturalSeq边连接AST中存在上下位顺序关系的结点。
5.根据权利要求1所述的基于图的语句级程序修复方法,其特征在于,步骤3中构建图编码器,具体包括:
步骤3-1,对于缺陷语句及其上下文对应的代码图,标记其中与缺陷语句有关系的结点,添加一个超级结点Vs与所有标记结点相连,随机初始化生成Vs的初始表示;所有标记结点和所有连接任意两个标记结点的边构成缺陷子图,超级结点Vs可以视为缺陷子图的聚合,是缺陷语句的抽象表征;
步骤3-2,对于代码图中任意结点Vi,通过结点聚合算法迭代聚合其K阶邻居结点信息并生成结点嵌入hi;
步骤3-3,对于步骤3-1添加的超级结点Vs,使用步骤3-2中结点聚合算法生成其结点嵌入hs,其结点嵌入视为子图嵌入并作为序列解码器的输入以生成缺陷子图对应的序列。
6.根据权利要求5所述的基于图的语句级程序修复方法,其特征在于,步骤3中构建序列解码器,具体包括:
步骤3-4,获取步骤3-3中缺陷子图所有结点的向量表示(h1,h2…,hV);
步骤3-5,通过前一时刻解码器的隐向量St-1以及步骤3-4中获得的子图结点向量表示hj,利用评分函数计算每一个输入位置j与当前输出位置的关联性分数etj,其中初始时刻解码器隐向量为超级结点Vs的向量表示hs;
步骤3-6,通过步骤3-5计算得出的关联性分数etj计算注意力权重αtj以及上下文向量ct:
其中/>
其中,V为步骤3-4中获得的结点向量表示的数量;
步骤3-7,通过步骤3-6计算得出的上下文向量ct、解码器的隐向量St-1和前一时刻解码器的输出yt-1,利用非线性激活函数计算当前时刻t状态向量St;
步骤3-8,通过步骤3-7计算得出的t时刻状态向量St、上下文向量ci和前一时刻解码器的输出yt-1,利用多层非线性函数计算当前位置的输出概率p;步骤3-9,重复步骤3-5到步骤3-8,迭代生成每个位置概率得分最高的Token直到序列终止,获得缺陷子图转换生成的Token序列。
7.根据权利要求6所述的基于图的语句级程序修复方法,其特征在于,步骤3-2所述结点聚合算法,具体过程包括:
步骤3-2-1,对于结点v,根据边的方向将结点v的邻居结点分为前向邻居和后向邻居/>
步骤3-2-2,将结点v的前向邻居的表示聚合为一个向量/>
其中,max表示最大化运算符,Wpool为池化矩阵,σ表示非线性激活函数,b为偏移常量,k为当前邻居阶数;
步骤3-2-3,将结点v当前的特征向量的与生成的前向聚合向量/>串联并输入到一个带有σ激活函数的全连接层,通过该全连接层更新结点v的前向表示/>
步骤3-2-4,使用步骤3-2-2和步骤3-2-3处理方法,处理结点v的后向邻居更新结点v的后向表示/>
步骤3-2-5,重复步骤3-2-2到步骤3-2-4K次,K为聚合阶数,将重复K次后结点v的前向表示和后向表示串联生成结点v的最终表示。
8.根据权利要求1所述的基于图的语句级程序修复方法,其特征在于,步骤4具体过程包括:
步骤4-1,对于新输入的存在缺陷的程序,标记其缺陷语句,并提取缺陷语句所在方法为上下文并构建代码图,完成代码图结点的嵌入;
步骤4-2,将步骤4-1生成的嵌入完成的代码图输入步骤3中所述翻译模型,使用训练完成的基于Graph-to-Sequence架构的翻译模型预测候选Token序列;
步骤4-3,使用BPE分词法还原步骤4-2所述的候选Token序列,生成候选补丁序列;
步骤4-4,使用步骤4-3生成的候选补丁序列替换源代码文件中缺陷语句,使用测试用例验证补丁正确性,输出通过测试用例的候选补丁序列作为正确补丁。
9.一种基于图的语句级程序修复系统,其特征在于,包括:
数据集提取模块,用于从开源社区爬取存在缺陷的代码文件及其补丁文件,构建翻译模型的训练数据集,并爬取提交修改次数小于设定阈值的方法,构建编程语言模型的预训练数据集;
预训练模块,用于将预训练数据集中代码语句Token化,使用预训练数据集训练编程语言模型,预处理训练翻译模型的训练数据集,将其中修复后的语句Token化,基于缺陷语句及其上下文构建代码图,并利用训练完成的编程语言模型生成向量表示以符合翻译模型的输入;
翻译模型训练模块,用于结合预训练完成的编程语言模型嵌入训练数据集中数据,通过嵌入的训练数据集训练基于Graph-to-Sequence架构的翻译模型;所述翻译模型包括图编码器和序列解码器,所述图编码器为输入的代码图添加一个超级结点视为缺陷语句的抽象表征,所述超级结点与所有与缺陷语句有关系的结点相连,所述图编码器通过聚合结点邻居信息迭代生成结点嵌入,将生成的超级结点的结点嵌入作为序列解码器的输入以生成缺陷子图对应的序列;所述序列解码器为带有注意力机制的递归神经网络,迭代生成候选Token组成Token序列;
以及,程序修复模块,用于对于新输入的存在缺陷的程序,提取缺陷语句及其上下文,构建代码图并利用编程语言模型生成向量表示,使用训练完成的翻译模型生成补丁。
10.一种基于图的语句级程序修复系统,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述计算机程序被加载至处理器时实现根据权利要求1-8任一项所述的基于图的语句级程序修复方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110879818.5A CN113741886B (zh) | 2021-08-02 | 2021-08-02 | 一种基于图的语句级程序修复方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110879818.5A CN113741886B (zh) | 2021-08-02 | 2021-08-02 | 一种基于图的语句级程序修复方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113741886A CN113741886A (zh) | 2021-12-03 |
CN113741886B true CN113741886B (zh) | 2023-09-26 |
Family
ID=78729819
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110879818.5A Active CN113741886B (zh) | 2021-08-02 | 2021-08-02 | 一种基于图的语句级程序修复方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113741886B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115016961B (zh) * | 2022-04-27 | 2024-04-26 | 大连海事大学 | 一种基于注意力网络的代码修复方法 |
CN114816517B (zh) * | 2022-05-06 | 2024-07-16 | 哈尔滨工业大学 | 一种层次语义感知的代码表示学习方法 |
US12013884B2 (en) * | 2022-06-30 | 2024-06-18 | International Business Machines Corporation | Knowledge graph question answering with neural machine translation |
CN116484722A (zh) * | 2023-03-30 | 2023-07-25 | 河南工业大学 | 基于图神经网络的缺陷程序自动修复方法及处理装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110018820A (zh) * | 2019-04-08 | 2019-07-16 | 浙江大学滨海产业技术研究院 | 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法 |
CN112416358A (zh) * | 2020-11-20 | 2021-02-26 | 武汉大学 | 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 |
CN112463424A (zh) * | 2020-11-13 | 2021-03-09 | 扬州大学 | 一种基于图的端到端程序修复方法 |
WO2021051503A1 (zh) * | 2019-09-19 | 2021-03-25 | 平安科技(深圳)有限公司 | 基于语义表征模型的文本分类方法、装置和计算机设备 |
CN112764784A (zh) * | 2021-02-03 | 2021-05-07 | 河南工业大学 | 基于神经机器翻译的软件缺陷自动修复方法及装置 |
-
2021
- 2021-08-02 CN CN202110879818.5A patent/CN113741886B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110018820A (zh) * | 2019-04-08 | 2019-07-16 | 浙江大学滨海产业技术研究院 | 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法 |
WO2021051503A1 (zh) * | 2019-09-19 | 2021-03-25 | 平安科技(深圳)有限公司 | 基于语义表征模型的文本分类方法、装置和计算机设备 |
CN112463424A (zh) * | 2020-11-13 | 2021-03-09 | 扬州大学 | 一种基于图的端到端程序修复方法 |
CN112416358A (zh) * | 2020-11-20 | 2021-02-26 | 武汉大学 | 一种基于结构化词嵌入网络的智能合约代码缺陷检测方法 |
CN112764784A (zh) * | 2021-02-03 | 2021-05-07 | 河南工业大学 | 基于神经机器翻译的软件缺陷自动修复方法及装置 |
Non-Patent Citations (2)
Title |
---|
C/C++程序缺陷自动修复与确认方法;周风顺;王林章;李宣东;;软件学报(第05期);45-57 * |
程序自动修复:关键问题及技术;李斌;贺也平;马恒太;软件学报;第30卷(第002期);244-265 * |
Also Published As
Publication number | Publication date |
---|---|
CN113741886A (zh) | 2021-12-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113741886B (zh) | 一种基于图的语句级程序修复方法及系统 | |
CN111783100B (zh) | 基于图卷积网络对代码图表示学习的源代码漏洞检测方法 | |
CN109492113B (zh) | 一种面向软件缺陷知识的实体、关系联合抽取方法 | |
WO2021204014A1 (zh) | 一种模型训练的方法及相关装置 | |
CN112463424B (zh) | 一种基于图的端到端程序修复方法 | |
CN113868432B (zh) | 一种用于钢铁制造企业的知识图谱自动构建方法和系统 | |
CN113822054A (zh) | 基于数据增强的中文语法纠错方法及装置 | |
CN115983274B (zh) | 一种基于两阶段标签校正的噪声事件抽取方法 | |
CN113127339A (zh) | 一种Github开源平台数据的获取方法及源代码缺陷修复系统 | |
CN111858323B (zh) | 一种基于代码表示学习的即时软件缺陷预测方法 | |
CN115759254A (zh) | 基于知识增强生成式语言模型的问答方法、系统及介质 | |
CN114547619A (zh) | 一种基于树的漏洞修复系统及修复方法 | |
CN116258147A (zh) | 一种基于异构图卷积的多模态评论情感分析方法及系统 | |
CN114067233A (zh) | 一种跨模态匹配方法及系统 | |
CN114064472B (zh) | 基于代码表示的软件缺陷自动修复加速方法 | |
CN116595189A (zh) | 基于两阶段的零样本关系三元组抽取方法及系统 | |
CN116680407A (zh) | 一种知识图谱的构建方法及装置 | |
CN115080982A (zh) | 一种针对漏洞检测模型的组合对抗攻击方法 | |
CN115630304A (zh) | 一种文本抽取任务中的事件分割抽取方法及系统 | |
CN118467683B (zh) | 基于自然语言的合同文本审查方法、系统、装置及介质 | |
CN116958752B (zh) | 一种基于ipkcnn-svm的电网基建建筑归档方法、装置及设备 | |
CN115048491B (zh) | 在异构语义空间中基于假设检验的软件跨模态检索方法 | |
US20220269982A1 (en) | Machine learning pipeline skeleton instantiation | |
CN117575026B (zh) | 基于外部知识增强的大模型推理分析方法、系统及产品 | |
EP4050524A2 (en) | Machine learning pipeline skeleton instantiation |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |