CN112732570A - 一种基于上下文环境的依恋情结代码味道检测方法 - Google Patents
一种基于上下文环境的依恋情结代码味道检测方法 Download PDFInfo
- Publication number
- CN112732570A CN112732570A CN202110007180.6A CN202110007180A CN112732570A CN 112732570 A CN112732570 A CN 112732570A CN 202110007180 A CN202110007180 A CN 202110007180A CN 112732570 A CN112732570 A CN 112732570A
- Authority
- CN
- China
- Prior art keywords
- code
- name
- context
- function
- output
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- 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
- G06N3/044—Recurrent networks, e.g. Hopfield networks
-
- 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
- G06N3/045—Combinations of networks
-
- 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)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Artificial Intelligence (AREA)
- Mathematical Physics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于上下文环境的依恋情结代码味道检测方法,属于计算机软件重构技术领域,解决了代码味道检测领域传统方法的度量局限性太大以及机器学习方法对信息的利用率不够的技术问题。本方法能够自动地提取代码中的特征信息,将提取出的特征信息与检测结果自动匹配,减少了人工设计规则的时间和人力成本。利用了更深更广的文本信息,充分挖掘某些蕴含于代码坏味中的隐含特征,克服了数值化度量值的局限性。在训练时,利用卷积神经网络和自注意力机制结合方法,能给提取出文本信息中蕴含的更深层次的语义特征,并且基于更多样化的神经网络,完成对函数和类之间关联信息的提取,并提高了检测的精准率和查全率。
Description
技术领域
本发明涉及一种依恋情结代码味道检测方法,具体涉及一种基于上下文环境的依恋情结代码味道检测方法,属于计算机软件重构技术领域。
背景技术
代码味道是一种由于编程不规范导致的代码中的潜在性问题,一般也会被称作反模式、难闻的气味、设计缺陷等。代码味道的存在会导致软件的质量很差,并且在可维护性方面产生很大的负面影响。包含代码味道的软件很可能会随着持续的修改和增强而质量变得越来越差,这使维护工作产生了很大的风险,并且使维护成本远远高于普通的占比。但是代码味道不是一种技术性错误,也不会影响软件的正常运行。基于这种特征,开发者们对代码味道的定义很难完全一致。
为了准确地定义某种存在于代码中的非技术性错误,Beck and Fowler提出了22种关于代码味道的定义。依恋情结是一种比较常见的代码味道,其定义为“moreinterested in a class other than the one it actually is in”。这种代码味道的一种特征为该方法调用其所在类中元素的次数远小于其他某类,这代表其是一个放错位置的方法,如果不把这个方法放置到正确的位置,那么软件的耦合度和内聚度都会受到很大影响。
软件重构,是指在不影响外部行为的前提下通过对软件内部结构进行调整来消除代码味道。进行软件重构的关键一步,是确定在哪里应用重构。为了检测依恋情结,目前,有许多种方法被提出来,包括依赖度量值的传统方法、度量值和文本信息结合的机器学习方法等。
然而,现有的传统方法和深度学习方法,都只关注类和方法之间的交互特征,这导致这些方法本身存在一些缺陷。许多传统方法依赖于一种可以衡量方法和类之间亲密度的度量值,依据此度量值来判断依恋情结是否存在。这个度量值通常由几个集合进行交集、并集计算得来,这些集合通常包括方法的一些元素和类的一些元素,但是,完全依靠人工去制定一个可以选择出最优集合的机制是非常难的。并且,在进行交集、并集计算时只关注到了显式的调用特征,一些可以反应隐含调用关系特征的元素被忽略掉了。
深度学习技术,目前已经被广泛应用于不同领域,并表现出了良好的效果,如自然语言处理、软件工程。所以,深度学习方法也被尝试应用于代码味道检测领域。现有的基于深度学习的代码味道检测方法,大都以传统度量值和文本信息作为输入,利用神经网络去提取文本信息的内部特征以及文本信息与传统度量值之间的交互特征,最终预测这个方法是“smelly”or“not smelly”。但是,这种方法依旧没有解决传统度量值的缺陷问题,对文本信息的利用率也非常有限。除此之外,将文本信息和传统度量值作为两种类型的输入,也限制了两者之间深层次交互信息的提取。
发明内容
本发明的目的是为了克服现有技术的缺陷,为了解决代码味道检测领域传统方法的度量局限性太大以及机器学习方法对信息的利用率不够的技术问题,创造性地提出一种基于上下文环境的依恋情结代码味道检测方法。
本发明是通过以下技术方案实现的。
一种基于上下文环境的依恋情结代码味道检测方法,包括模型训练部分和模型测试部分。
其中,模型训练包括:代码上下文信息表示A、函数及类关联特征提取B和代码味道分类C;模型测试包括代码上下文信息表示D、函数及类关联特征提取 E和代码味道分类F。
代码上下文信息表示A和代码上下文信息表示D是基于注意力机制和卷积神经网络的上下文信息表示;
函数及类关联特征提取B和函数及类关联特征提取E是基于卷积神经网络的函数及类关联特征提取;
代码味道分类C和代码味道分类F是基于多层感知机的代码味道分类。
其中,代码上下文信息表示A和代码上下文信息表示D的操作为:基于注意力机制和卷积神经网络,对被检测的代码上下文进行特征表示并进行语义特征提取。具体方法为:
步骤1:将检测的代码函数解构为三部分,第一个部分包括返回值和参数类型,第二个部分包括内部调用的方法名字及内部调用的属性名字,第三部分为函数名字。通过这种解构方式,将上下文环境元素引入特征依恋检测。
具体地:
将被检测的代码函数的返回值和参数类型,作为一个上下文信息元组拼接在一起,用符号Method_context表示。同时,将被检测的代码函数内部调用的方法的名字及内部调用的属性的名字作为一个内容元组拼接在一起,用符号 Method_content表示。最后,将被检测的代码函数的名字作为一个单独的名称信息元组,用符号Method_name表示:
Method_context=<returnm,parameterm> (1)
Method_content=<method_namem,attribute_namem> (2)
Method_name=<namem> (3)
其中,returnm代表代码函数的返回值,parameterm代表代码函数的参数; method_namem代表代码函数内部调用的方法的名字,attribute_namem代表代码函数内部调用的属性的名字;namem代表代码函数的名字。
将被检测的代码函数包含类内部调用方法的上下文信息,作为包含类的上下文信息元组拼接在一起,用符号ContainClass_context表示;同时,将包含类内部的方法、属性的名字作为内容元组拼接在一起,用符号ContainClass_content 表示;最后将包含类的名字作为一个内容元组拼接在一起,用符号 ContainClass_name表示:
ContainClass_context=<returncm,parametercm> (4)
ContainClass_content=<Method_namecc,attribute_namecc> (5)
ContainClass_name=<namecc> (6)
其中。returncm代表包含类内部函数的返回值,parametercm代表包含类内部函数的参数;Method_namecc代表包含类内部函数名称,attribute_namecc代表包含类内部属性名称;namecc中代表包含类的名字。
将被检测的代码函数的目标类内部的方法的上下文信息,作为目标类的上下文信息元组拼接在一起,用符号TargetClass_context表示;同时,将目标类内部的方法、属性的名字作为内容元组拼接在一起,用符号TargetClass_content表示;最后将目标类的名字作为一个内容元组拼接在一起,用公式(9)中的符号TargetClass_name表示。
TargetClass_context=<returntm,parametertm> (7)
TargetClass_content=<Method_nametc,attribute_nametc> (8)
TargetClass_name=<nametc> (9)
其中,returntm代表目标类内部函数的返回值,parametertm代表目标内部函数的参数;Method_nametc代表目标类内部函数名称,attribute_nametc代表目标类内部属性名称;nametc中代表目标类的名字。
步骤2:结合大小写字母、数字、下划线、斜杠以及英文句号标志,对步骤 1输出的各代码标识符进行分词,再对分词后的单词序列进行处理及筛选。
经分词后,每一个代码标识符得到一个单词序列,随后对得到的单词序列进行处理及筛选。
其中,对分词后得到的单词序列进行处理及和筛选的具体方法为:
步骤2.1:若得到的单词序列中有单个的大写或小写英文字母,并且该单词无实际意义的,删除该字母。
步骤2.2:将得到的单词序列全部转换成小写。
步骤2.3:按照步骤1中的输出元组,将对应元组得到的单词序列拼接起来,得到一个长单词序列。
该长单词序列所包含的单词数为对应元组中代码标识符所分单词数的和:
Method_context=<returnm,parameterm> (10)
=concat(w1,w2,···,wn). (11)
其中,returnm、parameterm分别表示代码函数所的返回值和参数;wi为相对应的代码标识符分解出的单词,下标i的取值范围为1到n,n代表wi的数量。 concat(·)为将输入连接起来的函数,concat(w1,w2,···,wn)表示将w1,w2,··· ,wn连接起来。按照此步骤对步骤1中所有的输出元组都做相同的处理
步骤3:根据步骤2输出的Method_context,将Method_context长单词序列转换为一个包含有n个单词的长句子,将句子中的每一个单词输入到单词嵌入层将句子中每个单词转换为单词向量。其中,单词嵌入层将输入的每一个单词转换为一个数字向量,称为单词向量。单词嵌入层将每一个单词转换为单词向量,表示如式(4):
V(Method_context)=V(concat(w1,w2,···,wn))
=concat(V(w1),V(w2),···,V(wn)) (12)
其中,V(·)表示单词嵌入函数,即将输入的(·)转换为相对应的单词向量;V(wi)表示将wi转换为一个单词向量,下标i的取值范围为1到n。对经过步骤2处理的所有输出元组都做相同的处理。
优选的,单词嵌入函数为Word2vec。
公式(12)表明,将Method_context转换为单词向量等价于将Method_context 所包含的每一个wi转换为对应的单词向量V(wi),再将n个单词向量经concat(·) 函数连接起来。
步骤4:将步骤3输出的与V(Method_context)相同形式的九个单词向量输入到卷积神经网络CNN中,以提取句子中各单词间的上下文关系,并从这些关系中获得相关的语义特征,得到九个对应元组内部特征。
其中,CNN包括三种不同尺寸的过滤器,记为W2()、W3()、W4(),每种尺寸的过滤器分别有32个以确保能够充分提取输入单词间的上下文关系。
在嵌入层后的卷积层中每一个卷积操作包含大小为2*单词向量维度的过滤器32个,记为W2();3*单词向量维度的过滤器32个,记为W3();4*单词向量维度的过滤器32个,记为W4()。三个不同尺寸的过滤器分别作用于步骤3输出的嵌入表示以获取到提取出来的代码标识符的内部特征。该卷积层中尺寸大小为i*单词向量维度的过滤器经过卷积操作得到一个特征ci,通过公式(13)获得:
cij=tanh(Wi(j)·mi+bi(j)) (13)
其中,i的取值范围为2-4,j的取值范围为1-32;Wi(j)表示卷积尺寸为i*单词向量的第j个过滤器的权重矩阵;bi(j)是第j个过滤器的偏置参数;tanh(·)是一个非线性的激活函数;mi表示九个输入矩阵中的符合过滤器尺寸的单词向量。
对于同一单词矩阵,3个不同尺寸的过滤器都会提取到32个特征矩阵,应该将同一单词矩阵的96个特征矩阵转换到同一Tensor类型数据中,通过公式 (14)及(15)完成:
ci=Concat(ci1,…,ci32) (14)
outputcn_method_context=Concat(ci) (15)
其中,ci代表尺寸为i*单词向量维度的32过滤器的特征矩阵组合结果,i的取值范围为2-4;ci1表示尺寸为i*单词向量维度的第一个过滤器获得的输出特征;outputcn_method_context代表3种不同尺寸的共96个过滤器对Method_context信息矩阵的处理结果,对步骤3输出的9种信息都做相同的处理。
步骤5:将步骤4的outputcn_method_context等9个输出,输入到一个基于 CNN的自注意力机制层,输出9个代码上下文信息表示矩阵,通过这个操作将信息利用率进一步提升。
选用自注意力机制层的原因为:不是所有的被CNN层提取的特征都能平等的反应隐藏在代码中的语义特征,利用自注意力机制层可以自动选择出对代码味道检测有着重要影响的上下文信息特征。
基于CNN的自注意力机制,是在spatial和channel两个维度完成的:
outputat_method_context=aspatial(achannel outputcn_method_context) (16)
其中,outputat_method_context表示经过自注意力机制处理的Method_context数据矩阵;outputcn_method_context表示步骤4中输出的经过CNN卷积的 Method_context数据;achannel是自注意力机制在CNN层输入数据channel维度的权重,通过基于输入数据的宽和高的global max polling和global average pooling以及共享的多层感知机来完成对不同channel赋予不同的权重;aspatial是自注意力机制对已经经过channel维度处理的数据赋予spatial维度的权重,主要通过global max pooling和global average pooling及降维操作来完成对不同的 spatial赋予不同的权重。对于步骤4输出的9个信息矩阵,都需要做相同的处理,输出9个语义特征矩阵。
经过步骤1到步骤5,完成了代码上下文信息表示,即对代码的函数及类的上下文信息进行特征表示并进行语义特征提取。
函数及类关联特征提取B和函数及类关联特征提取E的操作为:利用基于 LSTM的深度学习方法,对已经被自注意力层赋予不同权重的函数及类信息进行关联特征提取。
具体地:
步骤6:对步骤5输出的9个语义特征矩阵进行拼接融合,转换成符合卷积要求的9个特征矩阵。
步骤7:将步骤6输出的9个特征矩阵进行分类,Method_name、 ContainClass_name、TargetClass_name的三个特征矩阵由同一个CNN卷积层进行处理,Method_context、ContainClass_context、TargetClass_context的三个特征矩阵由同一个CNN卷积层进行处理,Method_content、ContainClass_content、 TargetClass_content的三个特征矩阵由同一个CNN卷积层进行处理。按照以上规则将9个特征矩阵输入到CNN网络模型中,得到更深层次的语义特征矩阵。
其中,CNN中包括三个并行的卷积层,记为卷积层1、卷积层2以及卷积层3。将Method_name、ContainClass_name、TargetClass_name三个特征矩阵输入到卷积层1中,剩余6个矩阵按照前述规则分别输入到卷积层2和卷积层3。
在卷积层1中,使用64个过滤器去获得结构化输入的多维特征,每个过滤器的大小设置为3*1。卷积层2和卷积层3参数设置与卷积层1相同。
卷积层1中的每一个卷积操作包括一个过滤器Wl1(),这个过滤器作用于对应尺寸的单词向量上,提取更深层次的文本特征。卷积层1中的第i个卷积操作得到一个特征ci,通过公式(14)获得:
ci=tanh(Wl1(j)·mi+bl1(j)). (17)
其中,i的取值范围为1-64;Wl1(j)表示i个卷积操作中的第j个过滤器的权重矩阵;bl1(j)是第j个过滤器的偏置参数,其中j的取值范围为1-64;tanh(·)是一个非线性的激活函数;mi表示输入矩阵中的符合过滤器尺寸的单词向量。对卷积层2和卷积层3设置同样的参数,并且完成同样的操作。
在卷积层1中,这个过滤器应用到对应尺寸的单词向量上,从而生成一个特征匹配Cl1(i),Cl1(i)和卷积层1表示为(18)到(19):
Cl1(i)=[c1,c2,…,cn], (18)
outputl1_n=CNN1(inputn)
=[Cl1(1),Cl1(2),…,Cl1(64)]. (19)
其中,CNN1()表示卷积层1对应的卷积函数;inputn表示输入的特征矩阵,对于卷积层1来说共有三个不同的输入特征矩阵,分别是Method_name、 ContainClass_name、TargetClass_name的特征矩阵,即对应n的取值为1-3; outputl1_n表示卷积层1的输出对inputn,对于三个不同的输入特征矩阵,共有三个输出。
卷积层2和卷积层3同样执行相同的操作,输出表示为(20)到(21):
outputl2_n=CNN2(inputn)
=[Cl2(1),Cl2(2),···,Cl2(64)], (20)
outputl3_n=CNN3(inputn)
=[Cl3(1),Cl3(2),···,Cl3(64)]. (21)
其中,Cl2(i)表示卷积层2中的第i个过滤器提取的特征,i的取值范围为1-64;CNN2(·)表示卷积层2的卷积函数;inputn表示输入的特征矩阵,对于卷积层2 来说共有三个不同的输入特征矩阵,分别是Method_context、 ContainClass_context、TargetClass_context的特征矩阵,即对应n的取值为1-3; outputl2_n表示卷积层2对inputn的输出;Cl3(i)表示卷积层3中的第i个过滤器提取的特征,i的取值范围为1-64;CNN3(·)表示卷积层3的卷积函数;inputn表示输入的特征矩阵,对于卷积层3来说共有三个不同的输入特征矩阵,分别是Method_content、ContainClass_content、TargetClass_content的特征矩阵,即对应n的取值为1-3;outputl3_n表示卷积层3对inputn的输出。
步骤8:将步骤7输出的9个特征矩阵中和上下文信息相关的3个矩阵 outputl2_1、outputl2_2、outputl2_3进行压缩维度以及max_pooling操作以符合 LSTM输入要求。
步骤9:将经过步骤8操作的输出关于context矩阵输入到LSTM层,以提取输入矩阵中各单词之间的上下文关系,并从这些关系中获得函数及类之间的关联特征,输出LSTM层的隐藏层状态h。
此操作可以提取出函数及类类之间的关联特征,并且可以将函数和类的上下文信息进行隐形融合,克服了传统度量的硬融合缺陷。
其中,LSTM层使用三个门来控制LSTM单元中的状态流。对于每一个时间状态t,通过给定的单词向量V(wt)、当前的单元状态ct和隐藏层状态ht、通过先前的单元状态ct-1和隐藏层状态ht-1,基于公式(22)-(25)进行更新;
其中,t的取值范围为0-n;it、ft和ot是范围在0-1的三个激活状态;σ是logisticsigmoid激活函数,b表示运算时的偏置参数,tanh(·)是一种非线性激活函数,表示元素乘积;W表示对应隐藏层状态h的权重矩阵,Wc表示单元状态c对应的权重矩阵;ht表示时间状态t对应的隐藏层状态,ct表示时间状态t 对应的单元状态,表示时间状态t计算过程中临时的单元状态。bc表示单元状态c对应的偏置参数。
经过步骤6至步骤9的操作,完成了函数及类关联特征的提取。
所述代码味道分类,是在基于CNN神经网络和注意力机制的代码上下文信息表示和基于LSTM神经网络的函数及类关联特征提取的基础上进行的,利用多层感知机神经网络模型将提取到的深层特征包括上下文特征和关联特征与代码味道检测结果自动地匹配起来,完成分类模型的训练。
具体地:
步骤10:将步骤7中卷积层1和卷积层3输出的深度语义特征和步骤9输出的函数及类之间的关联特征在全连接层连接起来,得到多层感知机模型的输入。
步骤11:将步骤10的输出输入到多层感知机模型中,利用多层感知机模型将从文本信息中提取到的深度语义特征和函数及类之间的关联特征映射到单个输出中。
其中,多层感知机模型的输出层只有一个神经元,表示本次识别代码味道的结果,即存在代码味道或不存在代码味道,该输出层的激活函数为sigmoid函数。
步骤12:将步骤11的输出结果与数据集中的标签比较,计算 binary_cross_entropy作为训练过程的损失函数,最小化损失函数以完成代码函数味道分类器的训练。binary_cross_entropy损失函数表示为:
至此,从步骤1到步骤12,完成了模型训练。
模型训练包括代码上下文信息表示A、函数及类关联特征提取B和代码味道分类C;模型测试包括代码上下文信息表示D、函数及类关联特征提取E和代码味道分类F。
其中,步骤1到步骤5,对应模型训练中的代码上下文信息表示A;步骤6 到步骤9,对应模型训练中的函数及类关联特征提取B;步骤10到步骤12,对应模型训练中的代码味道分类C;
模型测试部分与步骤1到步骤12完全相同,其中,步骤1到步骤5,对应模型测试中的代码上下文信息表示A;步骤6到步骤9,对应模型测试中的函数及类关联特征提取B;步骤10到步骤12,对应模型训练中的代码味道分类C。
模型训练结束后,再根据步骤1到步骤12所描述的过程,完成对代码函数的代码味道检测测试,最终得到代码味道检测结果。
有益效果
本发明方法,与现有代码味道检测方法相比,具有如下优点:
1.本方法与基于启发式规则的代码味道检测方法相比,能够自动地提取代码中的特征信息,消除了人工提取特征的步骤,降低了人力成本。
2.本方法与基于启发式规则的代码味道检测方法相比,能够将提取出的特征信息与检测结果自动匹配,减少了人工设计规则的时间和人力成本。
3.本方法与基于度量的代码味道检测方法相比,利用了更深更广的文本信息,可以充分挖掘某些蕴含于代码坏味中的隐含特征,完全克服了数值化度量值的局限性。
4.本方法与传统的基于传统机器学习方法的代码味道检测方法相比,在训练时利用了卷积神经网络和自注意力机制结合的方法,能给提取出文本信息中蕴含的更深层次的语义特征,并且基于更多样化的神经网络,完成了对函数和类之间关联信息的提取,为代码味道分类提供了更有价值的全新特征。
5.本方法与基于传统机器学习的代码味道检测方法相比,提高了检测的精准率和查全率。
附图说明
图1为本发明方法的结构图。
其中,从左到右分别为数据处理模块、模型训练模块(上)及模型测试模块 (下);数据处理模块包含训练数据的生成及测试数据的生成两部分,两者区别在于测试数据生成仅依赖单个java项目并且没有进行移动数据的操作,两部分最终的输出包含函数、包含类、目标类中名称、上下文、内容共九个部分的信息;模型训练模块从左至右为输入层、嵌入层、CNN卷积上下文信息表示层、LSTM 循环关联特征抽取层及MLP全连接分类层。其中输入层的原始输入是由数据处理模块得到的代码标识符序列;嵌入层对输入层的数据进行嵌入处理;CNN卷积上下文信息层的输入是由嵌入层处理过后的信息矩阵,其主要完成对深度语义特征的抽取;LSTM循环关联特征抽取层从CNN卷积上下文信息层输出的矩阵信息抽取函数及类之间的关联特征;最后由MLP全连接分类层完成对关联特征以及深度语义特征的拼接及分类;模型测试模块即在输入层修改数据为测试数据,其余部分与模型训练流程一致,最终输出分类结果。
具体实施方式
下面结合附图和实施例对本发明方法做进一步进行详细说明。
实施例
本实例采用本发明提出的方法,建立一种基于微调和深度交互的代码味道检测系统,该检测系统采用Python开发平台,Pytorch资源库。采用来自github 上的数据生成工具MoveMethodGenerator,该工具的开源项目地址为 https://github.com/JetBrains-Research/MoveMethodGenerator。同时采用了来自 github上的软件测试工具Junit项目提供的源代码,Junit开源项目的地址为 https://github.com/junit-team/junit4。
利用数据生成工具MoveMethodGenerator将Junit项目源代码中所有函数的相关信息提取出来,用作训练集,同时抽取训练集中部分数据作为测试集。模型训练和模型测试的具体步骤如下:
其中,模型训练包括代码上下文信息表示A、函数及类关联特征提取B和代码味道分类C;模型测试包括代码上下文信息表示D、函数及类关联特征提取 E和代码味道分类F。
代码上下文信息表示A和代码上下文信息表示D是基于注意力机制和卷积神经网络的代码上下文信息表示;函数及类关联特征提取B和函数及类关联特征提取E是基于LSTM神经网络的函数及类关联特征提取;代码味道分类C和代码味道分类F是基于多层感知机的代码味道分类;
代码函数表示的操作是:
步骤1:利用数据生成工具MoveMethodGenerator对所有Junit源代码中的函数进行筛选,挑选可以完成移动操作的函数。对于挑选出的函数,提取其自身的返回值、参数类型作为上下文信息元组拼接在一起;提取其自身的名字,作为名字信息;提取其内部调用的方法的名字及内部调用的属性的名字,作为内容信息;提取函数所在类内部的函数的上下文信息拼接在一起作为包含类的上下文信息;提取函数所在类的名字,作为包含类名字信息;提取函数所在类内部的函数名称和属性名称作为内容信息;对其目标类也做相同的操作,提取出目标类的上下文信息、名字信息、内容信息。
步骤2:结合大小写字母、数字、下划线、斜杠、英文句号标志,对步骤1 输出的代码标识符元组进行分词,分词后进行大小写转换及筛选操作,得到多个单词序列。
步骤3:根据步骤2输出的单词序列,将单词序列中的每一个单词输入到单词嵌入层完成单词到单词向量的转换,转换后将其拼接起来。
步骤4:将步骤3的得到的单词向量输入到CNN层,用于提取句子中各个单词之间的上下文关系,并且从这些关系中获取到相关的语义特征。
步骤5:将步骤4得到的特征矩阵输入到自注意力机制中,以提取出与代码味道分类更相关的特征。
经过步骤1到步骤5的操作,完成了代码上下文信息表示,即对代码的函数及类的上下文信息进行特征表示并进行语义特征提取。
所述函数及类关联特征提取的操作是:利用基于LSTM的深度学习方法,对已经被自注意力层赋予不同权重的函数及类信息进行关联特征提取,具体为:
步骤6:对步骤5输出的9个语义特征矩阵进行拼接融合,转换成符合卷积要求的9个特征矩阵。
步骤7:将步骤6处理好的特征矩阵按照上下文信息、名字信息、内容信息进行分类,分别输入到3个对应的CNN神经网络中进行深层次语义特征的提取。
步骤8:将步骤7输出的特征矩阵中和上下文信息相关的3个矩阵进行压缩维度以及max_pooling操作以符合LSTM输入要求。
步骤9:将步骤8输出的上下文信息矩阵输入到LSTM层,以提取输入矩阵中各单词之间的上下文关系,并从这些关系中获得函数及类之间的关联特征,输出LSTM层的隐藏层状态h。
经过步骤6至步骤9的操作,完成了函数及类关联特征的提取;
所述代码味道分类,是在基于CNN神经网络和注意力机制的代码上下文信息表示和基于LSTM神经网络的函数及类关联特征提取的基础上进行的,利用多层感知机神经网络模型将提取到的深层特征包括上下文特征和关联特征与代码味道检测结果自动地匹配起来,完成分类模型的训练,具体为:
步骤10:将步骤7中卷积层1和卷积层3输出的深度语义特征和步骤9输出的函数及类之间的关联特征在全连接层连接起来,得到多层感知机模型的输入。
步骤11:将步骤10的输出输入到多层感知机模型中,利用多层感知机模型将从文本信息中提取到的深度语义特征和函数及类之间的关联特征映射到单个输出中。
步骤12:将步骤11的输出结果与数据集中的标签相比较,计算 binary_cross_entropy作为训练过程的损失函数,最小化损失函数以完成代码函数味道分类器的训练。
以上为本发明的模型训练部分,模型训练部分可以得到基于深度语义的代码函数味道检测模型,利用此模型能够完成对代码中的函数的代码味道检测。
本发明的使用过程与上述测试过程的步骤1-12完全相同,根据步骤1-12所描述的过程,即可完后对代码函数的代码味道检测,得到代码味道检测结果。
经过上述步骤的操作,采用本发明提出的方法得到的检索结果的召回率、准确率及F1值如表1中的第2行所示。
为说明本发明的检索效果,在同等条件下,以相同的实验数据分别采用JDeodorant工具和Deep Learning方法进行比较,得到的检索结果的召回率、准确率及F1值分别如表1中的第2行和第3行所示。
通过表1可以得出以下结论:基于上下文环境的依恋情结代码味道检测方法利用在函数和类之间的上下文信息去重新解构依恋情结坏味,并且自动地提取包括上下文信息在内的文本信息中的深度语义特征,将特征自动地映射到分类结果中,实现了比传统的机器学习的方法更高的准确率和F1值,验证了其有效性。
表1三种检测方式效果比较
Claims (3)
1.一种基于上下文环境的依恋情结代码味道检测方法,包括模型训练部分和模型测试部分;
其中,模型训练包括:代码上下文信息表示A、函数及类关联特征提取B和代码味道分类C;模型测试包括代码上下文信息表示D、函数及类关联特征提取E和代码味道分类F;
代码上下文信息表示A和代码上下文信息表示D是基于注意力机制和卷积神经网络的上下文信息表示;
函数及类关联特征提取B和函数及类关联特征提取E是基于卷积神经网络的函数及类关联特征提取;
代码味道分类C和代码味道分类F是基于多层感知机的代码味道分类;
其特征在于:
其中,代码上下文信息表示A和代码上下文信息表示D的操作为:基于注意力机制和卷积神经网络,对被检测的代码上下文进行特征表示并进行语义特征提取,具体如下:
将检测的代码函数解构为三部分,第一个部分包括返回值和参数类型,第二个部分包括内部调用的方法名字及内部调用的属性名字,第三部分为函数名字;通过这种解构方式,将上下文环境元素引入特征依恋检测;
具体地:
将被检测的代码函数的返回值和参数类型,作为一个上下文信息元组拼接在一起,用符号Method_context表示;同时,将被检测的代码函数内部调用的方法的名字及内部调用的属性的名字作为一个内容元组拼接在一起,用符号Method_content表示;最后,将被检测的代码函数的名字作为一个单独的名称信息元组,用符号Method_name表示:
Method_context=<returnm,parameterm> (1)
Method_content=<method_namem,attribute_namem> (2)
Method_name=<namem> (3)
其中,returnm代表代码函数的返回值,parameterm代表代码函数的参数;method_namem代表代码函数内部调用的方法的名字,attribute_namem代表代码函数内部调用的属性的名字;namem代表代码函数的名字;
将被检测的代码函数包含类内部调用方法的上下文信息,作为包含类的上下文信息元组拼接在一起,用符号ContainClass_context表示;同时,将包含类内部的方法、属性的名字作为内容元组拼接在一起,用符号ContainClass_content表示;最后将包含类的名字作为一个内容元组拼接在一起,用符号ContainClass_name表示:
ContainClass_context=<returncm,parametercm> (4)
ContainClass_content=<Method_namecc,attribute_namecc> (5)
ContainClass_name=<namecc> (6)
其中;returncm代表包含类内部函数的返回值,parametercm代表包含类内部函数的参数;Method_namecc代表包含类内部函数名称,attribute_namecc代表包含类内部属性名称;namecc中代表包含类的名字;
将被检测的代码函数的目标类内部的方法的上下文信息,作为目标类的上下文信息元组拼接在一起,用符号TargetClass_context表示;同时,将目标类内部的方法、属性的名字作为内容元组拼接在一起,用符号TargetClass_content表示;最后将目标类的名字作为一个内容元组拼接在一起,用符号TargetClass_name表示;
TargetClass_context=<returntm,parametertm> (7)
TargetClass_content=<Method_nametc,attribute_nametc> (8)
TargetClass_name=<nametc> (9)
其中,returntm代表目标类内部函数的返回值,parametertm代表目标内部函数的参数;Method_nametc代表目标类内部函数名称,attribute_nametc代表目标类内部属性名称;nametc中代表目标类的名字;
步骤2:结合大小写字母、数字、下划线、斜杠以及英文句号标志,对步骤1输出的各代码标识符进行分词,再对分词后的单词序列进行处理及筛选;
经分词后,每一个代码标识符得到一个单词序列,随后对得到的单词序列进行处理及筛选;
其中,对分词后得到的单词序列进行处理及和筛选的具体方法为:
步骤2.1:若得到的单词序列中有单个的大写或小写英文字母,并且该单词无实际意义的,删除该字母;
步骤2.2:将得到的单词序列全部转换成小写;
步骤2.3:按照步骤1中的输出元组,将对应元组得到的单词序列拼接起来,得到一个长单词序列;
该长单词序列所包含的单词数为对应元组中代码标识符所分单词数的和:
Method_context=<returnm,parameterm> (10)
=concat(w1,w2,…,wn). (11)
其中,returnm、parameterm分别表示代码函数所的返回值和参数;wi为相对应的代码标识符分解出的单词,下标i的取值范围为1到n,n代表wi的数量;concat(·)为将输入连接起来的函数,concat(w1,w2,…,wn)表示将w1,w2,…,wn连接起来;按照此步骤,对步骤1中所有的输出元组都做相同的处理;
步骤3:根据步骤2输出的Method_context,将Method_context长单词序列转换为一个包含有n个单词的长句子,将句子中的每一个单词输入到单词嵌入层将句子中每个单词转换为单词向量;其中,单词嵌入层将输入的每一个单词转换为一个数字向量,称为单词向量;单词嵌入层将每一个单词转换为单词向量,表示如式(4):
V(Method_context)=V(concat(w1,w2,…,wn))
=concat(V(w1),V(w2),…,V(wn)) (12)
其中,V(·)表示单词嵌入函数,即将输入的(·)转换为相对应的单词向量;V(wi)表示将wi转换为一个单词向量,下标i的取值范围为1到n;对经过步骤2处理的所有输出元组都做相同的处理;
公式(12)表明,将Method_context转换为单词向量等价于将Method_context所包含的每一个wi转换为对应的单词向量V(wi),再将n个单词向量经concat(·)函数连接起来;
步骤4:将步骤3输出的与V(Method_context)相同形式的9个单词向量输入到卷积神经网络CNN中,以提取句子中各单词间的上下文关系,并从这些关系中获得相关的语义特征,得到9个对应元组内部特征;
其中,CNN包括三种不同尺寸的过滤器,记为W2()、W3()、W4(),每种尺寸的过滤器分别有32个以确保能够充分提取输入单词间的上下文关系;
在嵌入层后的卷积层中每一个卷积操作包含大小为2*单词向量维度的过滤器32个,记为W2();3*单词向量维度的过滤器32个,记为W3();4*单词向量维度的过滤器32个,记为W4();3个不同尺寸的过滤器分别作用于步骤3输出的嵌入表示以获取到提取出来的代码标识符的内部特征;该卷积层中尺寸大小为i*单词向量维度的过滤器经过卷积操作得到一个特征ci,通过公式(13)获得:
cij=tanh(Wi(j)·mi+bi(j)) (13)
其中,i的取值范围为2-4,j的取值范围为1-32;Wi(j)表示卷积尺寸为i*单词向量的第j个过滤器的权重矩阵;bi(j)是第j个过滤器的偏置参数;tanh(·)是一个非线性的激活函数;mi表示9个输入矩阵中的符合过滤器尺寸的单词向量;
对于同一单词矩阵,3个不同尺寸的过滤器都会提取到32个特征矩阵,应该将同一单词矩阵的96个特征矩阵转换到同一Tensor类型数据中,通过公式(14)及(15)完成:
ci=Concat(ci1,…,ci32) (14)
outputcn_method_context=Concat(ci) (15)
其中,ci代表尺寸为i*单词向量维度的32过滤器的特征矩阵组合结果,i的取值范围为2-4;ci1表示尺寸为i*单词向量维度的第一个过滤器获得的输出特征;outputcn_method_context代表3种不同尺寸的共96个过滤器对Method_context信息矩阵的处理结果,对步骤3输出的9种信息都做相同的处理;
步骤5:将步骤4的outputcn_method_context等9个输出,输入到一个基于CNN的自注意力机制层,输出9个代码上下文信息表示矩阵,通过这个操作将信息利用率进一步提升;
基于CNN的自注意力机制,是在spatial和channel两个维度完成的:
outputat_method_context=aspatial(achannel outputcn_method_context) (16)
其中,outputat_method_context表示经过自注意力机制处理的Method_context数据矩阵;outputcn_method_context表示步骤4中输出的经过CNN卷积的Method_context数据;achannel是自注意力机制在CNN层输入数据channel维度的权重,通过基于输入数据的宽和高的globalmax polling和global average pooling以及共享的多层感知机来完成对不同channel赋予不同的权重;aspatial是自注意力机制对已经经过channel维度处理的数据赋予spatial维度的权重,通过global max pooling和global average pooling及降维操作来完成对不同的spatial赋予不同的权重;对于步骤4输出的9个信息矩阵,都需要做相同的处理,输出9个语义特征矩阵;
经过步骤1到步骤5,完成了代码上下文信息表示,即对代码的函数及类的上下文信息进行特征表示并进行语义特征提取;
函数及类关联特征提取B和函数及类关联特征提取E的操作为:利用基于LSTM的深度学习方法,对已经被自注意力层赋予不同权重的函数及类信息进行关联特征提取;
具体地:
步骤6:对步骤5输出的语义特征矩阵进行拼接融合,转换成符合卷积要求的9个特征矩阵;
步骤7:将步骤6输出的特征矩阵进行分类,Method_name、ContainClass_name、TargetClass_name的三个特征矩阵由同一个CNN卷积层进行处理,Method_context、ContainClass_context、TargetClass_context的三个特征矩阵由同一个CNN卷积层进行处理,Method_content、ContainClass_content、TargetClass_content的三个特征矩阵由同一个CNN卷积层进行处理;按照以上规则将特征矩阵输入到CNN网络模型中,得到更深层次的语义特征矩阵;
其中,CNN中包括三个并行的卷积层,记为卷积层1、卷积层2以及卷积层3;将Method_name、ContainClass_name、TargetClass_name三个特征矩阵输入到卷积层1中,剩余6个矩阵按照前述规则分别输入到卷积层2和卷积层3;
在卷积层1中,使用64个过滤器去获得结构化输入的多维特征,每个过滤器的大小设置为3*1;卷积层2和卷积层3参数设置与卷积层1相同;
卷积层1中的每一个卷积操作包括一个过滤器Wl1(),这个过滤器作用于对应尺寸的单词向量上,提取更深层次的文本特征;卷积层1中的第i个卷积操作得到一个特征ci,通过公式(14)获得:
ci=tanh(Wl1(j)·mi+bl1(j)). (17)
其中,i的取值范围为1-64;Wl1(j)表示i个卷积操作中的第j个过滤器的权重矩阵;bl1(j)是第j个过滤器的偏置参数,其中j的取值范围为1-64;tanh(·)是一个非线性的激活函数;mi表示输入矩阵中的符合过滤器尺寸的单词向量;对卷积层2和卷积层3设置同样的参数,并且完成同样的操作;
在卷积层1中,这个过滤器应用到对应尺寸的单词向量上,从而生成一个特征匹配Cl1(i),Cl1(i)和卷积层1表示为(18)到(19):
Cl1(i)=[c1,c2,…,cn], (18)
outputl1_n=CNN1(inputn)
=[Cl1(1),Cl1(2),…,Cl1(64)]. (19)
其中,CNN1()表示卷积层1对应的卷积函数;inputn表示输入的特征矩阵,对于卷积层1来说共有三个不同的输入特征矩阵,分别是Method_name、ContainClass_name、TargetClass_name的特征矩阵,即对应n的取值为1-3;outputl1_n表示卷积层1的输出对inputn,对于三个不同的输入特征矩阵,共有三个输出;
卷积层2和卷积层3同样执行相同的操作,输出表示为(20)到(21):
outputl2_n=CNN2(inputn)
=[Cl2(1),Cl2(2),…,Cl2(64)], (20)
outputl3_n=CNN3(inputn)
=[Cl3(1),Cl3(2),…,Cl3(64)]. (21)
其中,Cl2(i)表示卷积层2中的第i个过滤器提取的特征,i的取值范围为1-64;CNN2(·)表示卷积层2的卷积函数;inputn表示输入的特征矩阵,对于卷积层2来说共有三个不同的输入特征矩阵,分别是Method_context、ContainClass_context、TargetClass_context的特征矩阵,即对应n的取值为1-3;outputl2_n表示卷积层2对inputn的输出;Cl3(i)表示卷积层3中的第i个过滤器提取的特征,i的取值范围为1-64;CNN3(·)表示卷积层3的卷积函数;inputn表示输入的特征矩阵,对于卷积层3来说共有三个不同的输入特征矩阵,分别是Method_content、ContainClass_content、TargetClass_content的特征矩阵,即对应n的取值为1-3;outputl3_n表示卷积层3对inputn的输出;
步骤8:将步骤7输出的9个特征矩阵中和上下文信息相关的3个矩阵outputl2_1、outputl2_2、outputl2_3进行压缩维度以及max_pooling操作以符合LSTM输入要求;
步骤9:将经过步骤8操作的输出关于context矩阵输入到LSTM层,以提取输入矩阵中各单词之间的上下文关系,并从中获得函数及类之间的关联特征,输出LSTM层的隐藏层状态h;
其中,LSTM层使用三个门来控制LSTM单元中的状态流;对于每一个时间状态t,通过给定的单词向量V(wt)、当前的单元状态ct和隐藏层状态ht、通过先前的单元状态ct-1和隐藏层状态ht-1,基于公式(22)-(25)进行更新;
其中,t的取值范围为0-n;it、ft和ot是范围在0-1的三个激活状态;σ是logisticsigmoid激活函数,b表示运算时的偏置参数,tanh(·)是一种非线性激活函数,表示元素乘积;W表示对应隐藏层状态h的权重矩阵,Wc表示单元状态c对应的权重矩阵;ht表示时间状态t对应的隐藏层状态,ct表示时间状态t对应的单元状态,表示时间状态t计算过程中临时的单元状态;bc表示单元状态c对应的偏置参数;
经过步骤6至步骤9的操作,完成了函数及类关联特征的提取;
所述代码味道分类,是在基于CNN神经网络和注意力机制的代码上下文信息表示和基于LSTM神经网络的函数及类关联特征提取的基础上进行的,利用多层感知机神经网络模型将提取到的深层特征包括上下文特征和关联特征与代码味道检测结果自动地匹配起来,完成分类模型的训练;
具体地:
步骤10:将步骤7中卷积层1和卷积层3输出的深度语义特征和步骤9输出的函数及类之间的关联特征在全连接层连接起来,得到多层感知机模型的输入;
步骤11:将步骤10的输出输入到多层感知机模型中,利用多层感知机模型将从文本信息中提取到的深度语义特征和函数及类之间的关联特征映射到单个输出中;
其中,多层感知机模型的输出层只有一个神经元,表示本次识别代码味道的结果,即存在代码味道或不存在代码味道,该输出层的激活函数为sigmoid函数;
步骤12:将步骤11的输出结果与数据集中的标签比较,计算binary_cross_entropy作为训练过程的损失函数,最小化损失函数以完成代码函数味道分类器的训练;binary_cross_entropy损失函数表示为:
至此,从步骤1到步骤12,完成了模型训练。
模型训练包括代码上下文信息表示A、函数及类关联特征提取B和代码味道分类C;模型测试包括代码上下文信息表示D、函数及类关联特征提取E和代码味道分类F;
其中,步骤1到步骤5,对应模型训练中的代码上下文信息表示A;步骤6到步骤9,对应模型训练中的函数及类关联特征提取B;步骤10到步骤12,对应模型训练中的代码味道分类C;
模型测试部分与步骤1到步骤12完全相同,其中,步骤1到步骤5,对应模型测试中的代码上下文信息表示A;步骤6到步骤9,对应模型测试中的函数及类关联特征提取B;步骤10到步骤12,对应模型训练中的代码味道分类C;
模型训练结束后,再根据步骤1到步骤12所描述的过程,完成对代码函数的代码味道检测测试,最终得到代码味道检测结果。
2.如权利要求1所述的一种基于上下文环境的依恋情结代码味道检测方法,其特征在于,步骤3中,单词嵌入函数为Word2vec。
3.如权利要求1所述的一种基于上下文环境的依恋情结代码味道检测方法,其特征在于,步骤12中,N的取值范围为50000-100000。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110007180.6A CN112732570B (zh) | 2021-01-05 | 2021-01-05 | 一种基于上下文环境的依恋情结代码味道检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110007180.6A CN112732570B (zh) | 2021-01-05 | 2021-01-05 | 一种基于上下文环境的依恋情结代码味道检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112732570A true CN112732570A (zh) | 2021-04-30 |
CN112732570B CN112732570B (zh) | 2022-05-31 |
Family
ID=75591358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110007180.6A Active CN112732570B (zh) | 2021-01-05 | 2021-01-05 | 一种基于上下文环境的依恋情结代码味道检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112732570B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108664269A (zh) * | 2018-05-14 | 2018-10-16 | 北京理工大学 | 一种基于深度学习的特征依恋代码异味检测方法 |
CN110413319A (zh) * | 2019-08-01 | 2019-11-05 | 北京理工大学 | 一种基于深度语义的代码函数味道检测方法 |
CN110502277A (zh) * | 2019-08-30 | 2019-11-26 | 西安邮电大学 | 一种基于bp神经网络的代码坏味检测方法 |
US20200349052A1 (en) * | 2019-05-03 | 2020-11-05 | International Business Machines Corporation | Representing source code in vector space to detect errors |
-
2021
- 2021-01-05 CN CN202110007180.6A patent/CN112732570B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108664269A (zh) * | 2018-05-14 | 2018-10-16 | 北京理工大学 | 一种基于深度学习的特征依恋代码异味检测方法 |
US20200349052A1 (en) * | 2019-05-03 | 2020-11-05 | International Business Machines Corporation | Representing source code in vector space to detect errors |
CN110413319A (zh) * | 2019-08-01 | 2019-11-05 | 北京理工大学 | 一种基于深度语义的代码函数味道检测方法 |
CN110502277A (zh) * | 2019-08-30 | 2019-11-26 | 西安邮电大学 | 一种基于bp神经网络的代码坏味检测方法 |
Also Published As
Publication number | Publication date |
---|---|
CN112732570B (zh) | 2022-05-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110597735B (zh) | 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 | |
CN110532900B (zh) | 基于U-Net和LS-CNN的人脸表情识别方法 | |
CN109376242B (zh) | 基于循环神经网络变体和卷积神经网络的文本分类方法 | |
CN110413319B (zh) | 一种基于深度语义的代码函数味道检测方法 | |
CN110826638A (zh) | 基于重复注意力网络的零样本图像分类模型及其方法 | |
CN112884551B (zh) | 一种基于近邻用户和评论信息的商品推荐方法 | |
CN111242948B (zh) | 图像处理、模型训练方法、装置、设备和存储介质 | |
CN109753565A (zh) | 知识产权智能服务方法及系统 | |
CN112016313B (zh) | 口语化要素识别方法及装置、警情分析系统 | |
CN111462752B (zh) | 基于注意力机制、特征嵌入及bi-lstm的客户意图识别方法 | |
CN111274817A (zh) | 一种基于自然语言处理技术的智能化软件成本度量方法 | |
CN113657115A (zh) | 一种基于讽刺识别和细粒度特征融合的多模态蒙古文情感分析方法 | |
CN114647713A (zh) | 基于虚拟对抗的知识图谱问答方法、设备及存储介质 | |
CN113920379B (zh) | 一种基于知识辅助的零样本图像分类方法 | |
CN117746078B (zh) | 一种基于用户自定义类别的物体检测方法及系统 | |
CN113420117B (zh) | 一种基于多元特征融合的突发事件分类方法 | |
CN114692623A (zh) | 一种环境类网络舆情的情感分析方法 | |
CN113378024B (zh) | 一种基于深度学习面向公检法领域的相关事件识别方法 | |
Lonij et al. | Open-world visual recognition using knowledge graphs | |
CN117151222B (zh) | 领域知识引导的突发事件案例实体属性及其关系抽取方法、电子设备和存储介质 | |
CN112732570B (zh) | 一种基于上下文环境的依恋情结代码味道检测方法 | |
CN116401289A (zh) | 一种基于多源信息结合的可追溯性链接自动恢复方法 | |
CN114398076A (zh) | 一种基于深度学习的面向对象程序方法命名异味检测方法 | |
CN117521673B (zh) | 一种具备分析训练性能的自然语言处理系统 | |
CN117875322A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |