基于两阶段模型对易混淆类别进行分类的方法技术

技术编号:39567543 阅读:6 留言:0更新日期:2023-12-03 19:18
一种基于两阶段模型对易混淆类别进行分类的方法,技术方案是构建由预处理模块

【技术实现步骤摘要】
基于两阶段模型对易混淆类别进行分类的方法


[0001]本专利技术涉及软件工程领域相关分类任务的易混淆分类问题,具体涉及一种基于两阶段模型对易混淆类别进行分类的方法


技术介绍

[0002]分类任务是计算机领域的一个研究热点,涵盖了计算机视觉

语音识别

自然语言处理等多个领域

在软件工程领域,分类任务同样非常普遍,例如脆弱性检测

软件需求分类

代码作者归属和算法分类等

随着深度神经网络和数据挖掘等技术的快速发展,自动化分类方法在软件工程领域得到了广泛的应用

例如,基于
LSTM(
见文献“Longshort

term memory”,
1997
,长短期记忆
)

BERT(
见文献“Bert:Pre

training of deepbidirectional transformers for language understanding”,
2018

Bert
:用于语言理解的深度双向转换预训练模型
)
等深度学习模型的分类方法,利用深度神经网络强大的表征能力和学习能力,能够更好地处理复杂的软件工程数据,挖掘出更深层次的特征和模式,从而实现更准确的分类

[0003]自动化分类方法的应用使得软件工程领域能够更高效地进行软件开发

测试和维护工作

准确的分类结果能够帮助开发人员更好地理解和分析软件系统的特征和行为,从而提高软件质量和性能

此外,自动化分类方法在软件工程领域的决策制定和问题解决中也起到重要的辅助作用,为开发人员和工程团队提供有价值的信息和指导

因此,在软件工程领域相关的分类任务中,使用自动化方法对数据进行分类具有广阔的前景和潜在的益处

[0004]然而,尽管自动化分类方法在软件工程相关的分类任务中取得了成功,仍然存在一些不被期望的分类错误

通过对软件工程领域中这些错误分类案例进行分析,可以发现,当两个类别具有类层次上的相似特征时,分类模型很容易将这些类别的样本错分,导致高错分概率,降低分类准确性

本领域将分类模型表现出的这种行为称为易混淆错误,对应的两个类别称为易混淆类别,两个类别具有的相似特征称为易混淆特征

易混淆特征的存在使得易混淆类别中的样本很容易被分类模型错误分类

[0005]针对软件工程领域相关分类任务的分类错误问题,现有技术主要采用基于分类模型的自动化分类方法来解决

基于分类模型的自动化分类方法包括两类:第一类方法,基于对抗训练来提高模型的鲁棒性,以降低分类错误

例如,
Papernot
等人在
SP2016
上发表的“Distillation as a Defense to Adversaria Perturbations Against Deep NeuralNetworks(
蒸馏作为对抗深度神经网络的对抗性扰动的防御
)”中提出了防御蒸馏,该方法在不改变模型结构并且尽可能小的影响模型准确率的前提下,有效抵御对抗性样本
(
见文献“Explaining and harnessing adversarial examples”,
2014
,解释和利用对抗性样本
)
的攻击
。Gu
等人在
ICLR2018
上发表的“Towards Deep Learning Models Resistant toAdversarial Attacks(
对抗性攻击的深度学习模型
)”中提出了深度收缩网络
DCN
,这是一种端到端训练过程的模型,该模型使用分层收缩惩罚和平滑度惩罚项,通过平滑模型输
出的机制来提高深度神经网络对于对抗样本的鲁棒性

[0006]第二类方法,通过数据增强和微调技术以提高分类准确性

例如,
Mia
等人在
ASE2022
上发表的“Data Augmentation for Improving Emotion Recognition in SoftwareEngineering Communication(
数据增强技术在软件工程通信中的应用
)”中提出并实现了三种数据增强技术,分别是无约束

词汇和极性,用于提升分类系统的准确性

作者基于目前最优的情感分类模型
SEntiMoji
进行实验
(
称为
SEntiMoji
方法
)(
见文献“SEntiMoji:An Emoji

Powered Learning Approach for Sentiment Analysis in SoftwareEngineering”,
2019

SEntiMoji
:软件工程中情绪分析的表情包学习方法
)
,结果显示,通过极性策略增强的数据在
SEntiMoji
方法上表现最优,分类准确性得到了提升
。Devlin
等人在
2018
年发表的“BERT:Pre

training of Deep Bidirectional Transformers forLanguage Understanding(BERT
:语言理解深度双向变换器的预训练模型
)”中提出并实现了一种预训练模型

作者通过在大规模语料库上进行预训练,使得
BERT
模型具备了强大的表征能力
(
此方法简称
BERT
方法
)。
随后,只需利用少量带标签数据进行微调,即可在各类下游任务
(
例如分类任务
)
中获得优异的表现

这种微调过程使模型能够适应不同的下游任务,实现更优异的分类效果

[0007]然而,现有技术在解决分类任务中的易混淆分类问题上仍然存在缺陷

例如,当使用
SEntiMoji
模型对典型的软件工程数据集进行分类时,模型将类别“恐惧”错误分类为“愤怒”的概率高达
32
%,将类别“爱”错误分类为“快乐”的概率高达
36
%,远高于模型对其他类别的错误分类率

当使用...

【技术保护点】

【技术特征摘要】
1.
一种基于两阶段模型对易混淆类别进行分类的方法,其特征在于包括以下步骤:第一步,构建两阶段分类系统;两阶段分类系统由预处理模块

第一阶段分类模块

易混淆类别识别模块

边界样本筛选模块

第二阶段分类模块构成;预处理模块与第一阶段分类模块

第二阶段分类模块相连;训练时,读取第一训练集
T
或第二训练集
RR

T

{T1,T2,
···
T
m
,
···
,T
M
}
,其中
T
m
表示
T
中的第
m
条文本序列,
1≤m≤M

M

T
中的文本总数,中的文本总数,表示
T
m
的第
i
个词,
I

T
m
中词的总数;
RR

{R1,R2,
···
R
n
,
···
,R
N
}
,其中
R
n
表示
RR
中的第
n
条源代码序列,
1≤n≤N

N

RR
中的源代码总数;的源代码总数;表示
R
n
的第
i
个词,
1≤i≤I
;预处理模块利用词嵌入方法将训练集中每个词映射为词级别编码,得到训练集的词级别编码序列集合,预处理模块将训练集的词级别编码序列集合发送给第二阶段分类模块;当对用户输入的文本或源代码进行分类时,预处理模块接收用户输入的文本或源代码序列
X

X

{x1,x2,...,x
j
,...,x
J
}
,其中
x
j
表示
X
中的第
j
个词,
1≤j≤J

J

X
中的词个数,利用词嵌入方法将每个词映射为词级别编码,得到用户词级别编码序列集合
G(X)

G(X)

{G(x1),G(x2),...,G(x
j
),...,G(x
J
)}
,其中
G(x
j
)
表示
x
j
经过词嵌入方法映射后的词级别编码,预处理模块将
G(X)
发送给第一阶段分类模块

第二阶段分类模块;当需要获取易混淆类别二元组时,预处理模块读取测试集,利用词嵌入方法将测试集中每个词映射为词级别编码,得到测试集的词级别编码序列集合,预处理模块将测试集的词级别编码序列集合发送给第一阶段分类模块;第一阶段分类模块与预处理模块

易混淆类别识别模块

边界样本筛选模块相连,接收用户输入的类别表,类别表由类别名称和类别下标两个域组成;第一阶段分类模块从预处理模块接收测试集词级别编码序列集合和
G(X)
,对测试集词级别编码序列集合进行分类,得到混淆矩阵,将混淆矩阵和类别表发送给易混淆类别识别模块;第一阶段分类模块对
G(X)
进行分类,得到
X
对应用户输入的类别表中每个类别的概率集合
P

P

{p1,p2,...,p
u
,...,p
U
}
,其中
p
u
表示第一阶段分类模块预测
G(X)
属于下标
u
对应类别的概率,取最高概率对应的类别作为
X
的类别
cat1,把
P

cat1发送给边界样本筛选模块;易混淆类别识别模块与第一阶段分类模块

边界样本筛选模块相连,从第一阶段分类模块接收类别表和混淆矩阵,对混淆矩阵中所有非对角线上的数值由小到大进行排列,得到第三四分位数
Q3
,通过
Q3
计算得到判断易混淆类别的阈值,将混淆矩阵中所有非对角线元素与易混淆类别阈值进行比较,得到易混淆类别二元组序列,将易混淆类别二元组序列和类别表发送给边界样本筛选模块;边界样本筛选模块与第一阶段分类模块

易混淆类别识别模块

第二阶段分类模块相连,从第一阶段分类模块接收
P

cat1,从易混淆类别识别模块接收易混淆类别二元组序列和类别表,设定再分类阈值为
ω
,将类别
cat1与易混淆类别二元组序列进行比较,若类别
cat1不属于易混淆类别二元组序列中某个二元组中的类别,则取
cat1作为
X
的类别;若类别
cat1属于易混淆类别二元组序列中某个二元组中的类别,则计算概率插值
Δ
p
;若
Δ
p>
ω
,取类别
cat1作为
X
的类别;若
Δ
p<
ω
,则将需要对
X
进行再分类的信号
flag
置为1,将
flag
发送给第二阶段分类模块;第二阶段分类模块由前馈神经网络层和线性分类层构成;前馈神经网络层与预处理模


线性分类层

边界样本筛选模块相连;训练时,前馈神经网络层从预处理模块接收训练集词级别编码序列集合,对训练集词级别编码序列集合中的每一条词级别编码进行非线性映射,得到训练集词级别编码序列集合非线性映射后的表示
Attn
,将
Attn
发送到线性分类层;当对用户输入的文本或源代码进行分类时,前馈神经网络层从边界样本筛选模块接收
flag
,从预处理模块接收
G(X)
,若信号
flag
值为1,对
G(X)
进行非线性映射,得到
G(X)
非线性映射后的表示
Attn'
,将
Attn'
发送给线性分类层;线性分类层与前馈神经网络层相连,训练时,线性分类层从前馈神经网络层接收
Attn
,对
Attn
进行线性映射,得到第一预测向量即
logits
,对
logits
进行
Softmax
操作,得到训练集中每个样本对应类别表中每个类别的概率集合
P'

P'

{p'1,p'2,...,p'
u
,...,p'
U
}
,其中
p'
u
表示第二阶段分类模型预测
T
m
属于下标
u
对应类别的概率,取最高概率对应的类别作为训练集中每个样本的类别
cat2,采用交叉损失熵函数计算损失
Loss
进行反向传播来更新模型参数;当对用户输入的文本或源代码进行分类时,线性分类层从前馈神经网络层接收
Attn'
,对
Attn'
进行线性映射,得到第二预测向量
logits'
,对
logits'
进行
Softmax
操作,得到
G(X)
对应类别表中每个类别的第二概率集合
PP'

PP'

{pp'1,pp'2,...,pp'
u
,...,pp'
U
}
,其中
pp'
u
表示第二阶段分类模型预测
X
属于下标
u
对应类别的概率,取最高概率对应的类别作为
X
的类别
cat2'
,把类别
cat2'
输出;第二步,准备训练两阶段分类系统的数据集,方法是:
2.1
采用
Polarity
数据集中的文本数据构建软件工程情感分类任务的第一训练集

第一测试集;将
Polarity
数据集中的
AA
条样本放到第一训练集,
BB
条样本放到第一测试集;
Polarity
数据集的每条样本包含一条文本和其对应的实际标签;第一训练集中的文本集合构成第一训练集集合
T
,第一训练集中的实际标签序列集合构成第一训练集实际标签序列集合
T
#
;令
T

{T1,T2,
···
T
m
,
···
,T
M
}
,其中
T
m
表示
T
中的第
m
条文本序列,其中
1≤m≤M

M

T
中的文本总数;中的文本总数;表示
T
m
的第
i
个词,
1≤i≤I
;第一测试集中的文本集合构成第一测试集集合
V

V

{V1,V2,
···
V
r
,
···
,V
R
}
,其中
V
r
表示
V
中的第
r
条文本,其中
1≤r≤R

R

V
中的文本总数,其中表示
V
r
中的第
q
个词,
1≤q≤Q

Q

V
r
中的词个数;第一测试集样本中的实际标签序列集合构成第一测试集实际标签序列集合
V
#

AA

BB
为正整数;
2.2
采用
MSR
数据集中的源代码数据构建软件工程情感分类任务的第二训练集

第二测试集;将
MSR
数据集中的
CC
条样本第二放到训练集,
DD
条样本放到第二测试集;
MSR
数据集的每条样本包含一条源代码和其对应的实际标签;第二训练集中的源代码集合构成第二训练集集合
RR
,第二训练集中的实际标签序列集合构成第二训练集实际标签序列集合
RR
#
;令
RR

{R1,R2,
···
R
n
,
···
,R
N
}
,其中
R
n
表示
RR
中的第
n
条源代码序列,
1≤n≤N

N

RR
中的源代码总数;源代码总数;表示
R
n
的第
i
个词;第二测试集中的源代码集合构成第二测试集集合
S

S

{S1,S2,
···
S
o
,
···
,S
O
}
,其中
S
o
表示
S
中的第
o
条文本,其中
1≤o≤O

O

S
中的源代码总数,中的源代码总数,其中表示
S
o
中的第
qq
个词,
1≤qq≤QQ

QQ

S
o
中的词个数;第二测试集样本中的实际标签序列集合构成第二测试集实际标签序列集合
S
#

CC

DD
为正整数;
第三步,若需要对文本数据进行分类,转第四步;若需要对源代码数据进行分类,转第五步;第四步,预处理模块使用预处理方法,将
T
中的文本数据映射为第一训练集词级别编码序列集合
G(T)
,将
V
中的文本数据映射为第一测试集词级别编码序列集合
G(V)
,方法是:
4.1
采用词级别映射方法将
T
中的
M
条文本数据映射为
G(T)
,方法是:
4.1.1
令变量
m
=1;
4.1.2
读取
T
中的第
m
条文本
T
m
,
采用词级别编码方法对
T
m
的中进行词映射,得到
T
m
的词级别编码序列
G(T
m
)
,方法是:
4.1.2.1
令变量
i
=1;
4.1.2.2

T
m
中的第
i
个词映射为词级别编码
4.1.2.3

i

i+1
,如果
i≤I
,转
4.1.2.2
;如果
i>I
,说明
T
m
中的
I
个词都已经映射为了词级别编码,得到
T
中第
m
条文本数据的词级别编码序列条文本数据的词级别编码序列条文本数据的词级别编码序列表示
T
m
的第
i
个词,转
4.1.3

4.1.3

m

m+1
,如果
m≤M
,转
4.1.2
;如果
m>M
,说明
T

M
个文本数据都已经映射为词级别编码序列,得到
G(T)

G(T)

{G(T1),G(T2),...,G(T
m
),...,G(T
M
)}

G(T
m
)
表示
T
中第
m
条文本数据的词级别编码序列;
4.2
采用
4.1
所述词级别映射方法将
V
中的
R
条文本数据映射为第一测试集词级别编码集合
G(V)

4.3

G(T)
发送给第二阶段分类模块,将
G(V)
发送给第一阶段分类模块,转第六步;第五步,预处理模块采用第四步所述预处理方法,将
RR
中的源代码数据映射为第二训练集词级别编码序列集合
G(RR)
,将
S
中的源代码数据映射为第二测试集词级别编码序列集合
G(S)
,将
G(RR)
发送给第二阶段分类模块,将
G(S)
发送给第一阶段分类模块,转第七步;第六步,第一阶段分类模块接收用户输入的类别表,从预处理模块接收
G(V)
,采用分类方法对
G(V)
进行分类,获得第一混淆矩阵
CM
,方法是:
6.1
第一阶段分类模块接收用户输入的类别表,从预处理模块接收
G(V)
;类别表由类别名称和类别下标两个域组成,
U
是类别表中类别名称的总数;
6.2
第一阶段分类模块对
G(V)
进行分类,得到类别集合
pred

6.3
第一阶段分类模块使用
confusion_matrix
函数获得第一混淆矩阵
CM

CM

{p
11
,p
12
,...p
uu'
,...,p
UU
,}
,其中
p
uu'
表示第一阶段分类模块将下标
u
对应的类别预测为下标
u'
对应的类别的概率,
1≤u≤U

1≤u'≤U

6.4
第一阶段分类模块将
CM
和类别表发送给易混淆类别识别模块,转第八步;第七步,第一阶段分类模块接收用户输入的类别表,从预处理模块接收
G(S)
,使用第六步所述分类方法对
G(S)
进行分类,获得第二混淆矩阵
CM'
,将
CM'
和类别表发送给易混淆类别识别模块,转第九步;第八步,易混淆类别识别模块采用识别方法,使用第一混淆矩阵
CM
获得第一易混淆类别二元组序列
L
,方法为:
8.1
初始化第一易混淆类别二元组序列
L
为空;
8.2
对第一混淆矩阵
CM
中所有非对角线上的数值由小到大进行排列;
8.3
计算排列后
CM
的第三四分位数
Q3

8.4
令易混淆类别阈值
δ

2Q3

8.5
令变量
u
=1;
8.6
令变量
u'
=1;
8.7
比较
p
uu'

δ
;若
p
uu'
>
δ
,则下标
u
对应的类别和下标
u'
对应的类别是一组易混淆类别二元组,将二元组
(u
对应的类别
,u'
对应的类别
)
加入
L

8.8

u'

u'+1
,如果
u'≤U
,转
8.7
;如果
u'>U
,说明
CM
中的一行已经遍历完成,转
8.9

8.9

u

...

【专利技术属性】
技术研发人员:李姗姗李佳颖姜志杰张元良董威陈立前汪昌健马迎伟方寸谛李星沛
申请(专利权)人:中国人民解放军国防科技大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1