一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种针对日志记录的变量推荐方法

2022-07-23 05:15:30 来源:中国专利 TAG:


1.本发明涉及日志挖掘技术领域,更特别地说,是指一种针对日志记录的变量推荐方法。


背景技术:

2.参见图1所示的自动日志分析流程图中,软件运行(即运行源代码)时通过日志生成子系统产生日志(log),所述日志在日志压缩子系统中被压缩,输出压缩后日志;日志解析子系统中可以对所述日志或所述压缩后日志解析为日志模板集;最后在日志挖掘子系统中挖掘日志特征。通常来说,日志(log)由三部分组成—日志级别,静态(语境化)文本和动态内容(日志变量所记录的软件运行时状态)。一些实证研究表明,在研究的开源系统中,超过25%的日志语句更改与记录的变量相关。一方面,在日志记录语句(logging statement)里记录太多的日志变量(log variable)可能会导致性能开销以及阻止开发者放大(或聚焦)在真正的问题上。另一方面,缺少记录重要的日志变量(log variable)会增加开发人员执行许多纠正性软件维护任务的负担。例如,开发人员可能无法很好地理解影响已部署系统的问题的根本原因,因为没有统一的记录日志的日志变量(log variable)工具。这突出表明需要一种工具,可以为开发人员推荐日志变量(log variable),以帮助他们编写高质量的日志记录语句(logging statement)。参见图2所示,运行的源代码中至少存在有日志记录语句(logging statement),所述的日志记录语句中可能会存在有日志变量(log variable)。从日志(log)中表征的日志变量(log variable)来获取软件运行时的状态。
3.图是一种数据结构,可对一组对象(节点)及其关系(边)进行建模。近年来,由于图的强大的表达能力,利用机器学习分析图的研究受到越来越多的关注,也就是图可以用来表示跨越不同领域的大量的系统,包括社会科学(社交网络),自然科学(物理系统和蛋白质-蛋白质相互作用网络),知识图谱和许多其他研究领域。作为用于机器学习的独特的非欧氏(欧几里得)数据结构,图分析着重于节点分类,链接预测和聚类。图神经网络(gnn)是在图域上运行的基于深度学习的方法,它基于cnn和图嵌入来集合图结构中的信息。在标准神经网络中,依赖信息仅被视为节点的特征。但是,gnn可以通过图结构进行传播,而不必将其用作特征的一部分。由于其令人信服的性能和高解释性,gnn最近已成为一种广泛应用的图分析方法。
4.最近,大量的工作表明大型语料库上的预训练模型(ptm)可以学习通用语言表示形式,这对于下游自然语言处理(nlp)任务非常有益,并且可以避免从头开始训练新模型。第一代预训练模型旨在学习好的单词嵌入,例如skip-gram和glove。由于下游任务不再需要这些模型本身,因此它们的计算效率通常很弱。尽管这些经过预训练的嵌入可以捕获单词的语义,但是它们没有上下文,并且无法捕获上下文中的高级概念,例如歧义消除,句法结构,语义角色,复指。第二代预训练模型着重学习语境化词嵌入,例如cove,elmo,openai gpt和bert。这些学好的模型仍然需要通过下游任务来表示上下文中的单词。其中,bert更是在诞生之初就横扫了11项nlp任务。使用诸如bert这类预训练模型或者改进预训练模型
用于日志记录语句(logging statement)的变量推荐将会是一件有意义的事情。


技术实现要素:

5.针对目前日志生成子系统无法通过对日志记录语句来获取日志变量的问题,本发明提出了一种针对日志记录的变量推荐方法,首先使用图神经网络提取图结构信息,然后融合图结构信息和利用预训练模型提取的日志语义信息去推荐日志变量。本方法能直接帮助开发人员编写高质量日志记录语句,以解决源代码中记录的日志变量不合理的技术问题。
6.本发明的一种针对日志记录的变量推荐方法,包括有如下步骤:
7.步骤一,从源代码中获取每个代码段中标志对应的标签;
8.步骤二,构建代码段异构图;
9.步骤三,计算标志的标签取值;
10.步骤四,编码代码段的图结构信息;
11.步骤五,基于bert的图结构信息融合;
12.本发明针对日志记录的变量推荐方法的优点在于:
13.①
首先,挑选优质开源java项目的源代码,利用java开发工具(jdt)并构建多条日志变量推荐提取规则,从中准确高效地提取并处理进行变量推荐所需要的各类标志的标签。然后,将提取处理后的数据转化可供后续模型使用的数据集。
14.②
本发明提出了一个新的推荐应该日志记录哪些日志变量的方法,在利用代码段的语义信息的同时还利用代码段的结构信息来进行变量推荐。具体来说,本发明模型能高效地去编码语义信息,并且利用神经网络去编码图结构信息。给定一个没有日志记录语句的代码段,本发明首先使用图神经网络提取图结构信息,然后融合图结构信息和利用预训练模型提取的日志语义信息去推荐日志记录变量。
附图说明
15.图1是自动日志分析总体框架示意图。
16.图2是源代码与日志记录语句的示意图。
17.图3是本发明针对日志记录的变量推荐的流程图。
18.图4是实施例中日志记录语句及对应的代码段示例图。
19.图5是步骤一应用在实施例中的流程图。
具体实施方式
20.下面将结合附图和实施例对本发明做进一步的详细说明。
21.参见图3所示,本发明的一种针对日志记录的变量推荐方法是存储于日志生成子系统中,其包括有下列步骤:
22.步骤一,从源代码中获取每个代码段中标志对应的标签;
23.在本发明中,开源java项目的源代码,利用java开发工具(jdt)并构建出多条日志变量推荐提取规则。
24.步骤11,从源代码中获取日志记录语句及对应的代码段;
25.在本发明中,从源代码中获取日志记录语句,记为ls;多个日志记录语句ls形成了日志记录语句集,记为ls={ls1,ls2,

,lsn,

,lsn}。每一个日志记录语句ls对应一个代码段cs,则有代码段集合,记为cs={cs1,cs2,

,csn,

,csn}。
26.ls1表示第一个日志记录语句。
27.ls2表示第二个日志记录语句。
28.lsn表示第n个日志记录语句。
29.lsn表示最后一个日志记录语句。
30.cs1表示ls1对应的代码段,即第一个代码段。
31.cs2表示ls2对应的代码段,即第二个代码段。
32.csn表示lsn对应的代码段,即第n个代码段。
33.csn表示lsn对应的代码段,即最后一个代码段。
34.下角标n表示日志记录语句的标识号。为了方便说明,将lsn也称为任意一个日志记录语句。对应于所述lsn的所述csn也称为任意一个代码段。
35.例如,参见图2所示的源代码中的第3行和第5行分别是日志记录语句。
36.步骤12,制定日志变量提取规则;
37.在本发明中,日志变量提取规则集记为rule={rule1,rule2,

,rule
γ
}。
38.rule1表示第一个日志变量提取规则。
39.rule2表示第二个日志变量提取规则。
40.rule
γ
表示最后一个日志变量提取规则。
41.为了方便说明,所述rule
γ
也称为任意一个日志变量提取规则,下角标γ表示日志变量提取规则的标识号。
42.日志变量提取规则的制定参考了ieee transactions on software engineering,2019年09月,第4节内容。
43.步骤13,提取日志记录语句中的日志变量;
44.任意一个日志记录语句lsn依据rule={rule1,rule2,

,rule
γ
}来提取日志变量,得到的日志变量集记为且下角标δ为lsn中日志变量的总个数。
45.表示lsn的第一个日志变量。
46.表示lsn的第二个日志变量。
47.表示lsn的最后一个日志变量。
48.同理可得:日志记录语句ls1依据rule={rule1,rule2,

,rule
γ
}来提取得到的日志变量集记为且下角标g为ls1中日志变量的总个数。
49.表示ls1的第一个日志变量。
50.表示ls1的第二个日志变量。
51.表示ls1的最后一个日志变量。
52.同理可得:日志记录语句ls2依据rule={rule1,rule2,

,rule
γ
}来提取得到的日志变量集记为且下角标h为ls2中日志变量的总个数。
53.表示ls2的第一个日志变量。
54.表示ls2的第二个日志变量。
55.表示ls2的最后一个日志变量。
56.同理可得:日志记录语句lsn依据rule={rule1,rule2,

,rule
γ
}来提取得到的日志变量集记为且下角标u为lsn中日志变量的总个数。
57.表示lsn的第一个日志变量。
58.表示lsn的第二个日志变量。
59.表示lsn的最后一个日志变量。
60.步骤14,确定代码段中每个标志对应的标签;
61.在本发明中,多个标志token组成了一个代码段cs。
62.在本发明中,属于csn的标志集记为在代码段csn中任意一个标志的标签,记为当所述存在于所述中,则对应的为日志变量。当所述不存在于所述中,则对应的不是日志变量。标签赋值记为
63.表示csn中的第一个标志。
64.表示csn中的第二个标志。
65.表示csn中的第y个标志。
66.表示csn中的最后一个标志。
67.同理可得:属于csn的标志集记为在代码段csn中任意一个标志的标签,记为当所述存在于所述中,则对应的为日志变量(即取值为1)。当所
述不存在于所述中,则对应的不是日志变量(即取值为0)。
68.表示csn中的第一个标志。
69.表示csn中的第二个标志。
70.表示csn中的第b个标志。
71.表示csn中的最后一个标志。
72.同理可得:属于cs1的标志集记为则有:在代码段cs1中任意一个标志的标签,记为当所述存在于所述中,则对应的为日志变量(即取值为1)。当所述不存在于所述中,则对应的不是日志变量(即取值为0)。
73.同理可得:属于cs2的标志集记为则有:在代码段cs2中任意一个标志的标签,记为当所述存在于所述中,则对应的为日志变量(即取值为1)。当所述不存在于所述中,则对应的不是日志变量(即取值为0)。
74.在本发明中,针对cs1的标志集记为针对cs2的标志集记为针对csn的标志集记为针对csn的标志集记为源代码段标志集记为
75.步骤二,构建代码段异构图;
76.步骤21,代码段集的随机选取;
77.从cs={cs1,cs2,

,csn,

,csn}中随机选取70%的代码段记为训练代码段集tcs={tcs1,tcs2,

,tcs
α
,

,tcs
β
}。
78.tcs1表示选取的第一个代码段。
79.tcs2表示选取的第二个代码段。
80.tcs
α
表示选取的第α个代码段。
81.tcs
β
表示选取的第β个代码段。
82.从中随机选取70%的标志集记为训练标志集
83.表示从tkk中选取的对应于tcs1的训练标志集。
84.表示从tkk中选取的对应于tcs2的训练标志集。
85.表示从tkk中选取的对应于tcs
α
的训练标志集。
86.表示从tkk中选取的对应于tcs
β
的训练标志集。
87.在本发明中,tcs与ttkk为一一对应选取。
88.步骤22,训练标志集的去重;
89.由于不同训练代码段tcs中存在相同的标志token,为了便于边的选取,增加无重复的标志集,采用对去除重复的标志token,来构建无重复的标志集。去除重复标志后的标志,记为标志训练序列ut,且ut=[token1,token2,

,tokeni,

,tokenj,

,tokenk];
[0090]
token1表示第一个训练标志。
[0091]
token2表示第二个训练标志。
[0092]
tokeni表示第i个训练标志。
[0093]
tokenj表示第j个训练标志。
[0094]
tokenk表示最后一个训练标志。
[0095]
下角标k表示标志训练序列ut中训练标志的总个数。
[0096]
步骤23,代码段异构图的节点的选取;
[0097]
在本发明中,代码段异构图,记为g(v,e)。所述g(v,e)中v表示图中的节点集合,e表示图中的边集合。
[0098]
在本发明中,将tcs与ut作为g(v,e)的节点。
[0099]
步骤24,代码段异构图的边的选取;
[0100]
在本发明中,采用点共生信息方法(pmi方法)和词频-反文档频率方法(tf-idf方法)来计算g(v,e)的边的权重。
[0101]
代码段异构图g(v,e)是由节点和边构成。之所以称构建的图为异构图,是因为构建的图中有两类节点,一类是tcs,另一类是ut。图中的边同样有两类,即tokeni与tokenj之间的边,tcs
α
与tokeni之间边。tokeni与tokenj之间的边的权重按照pmi方法进行计算,而tcs
α
与tokeni之间的边的权重按照tf-idf方法进行计算。
[0102]
在本发明中,pmi方法计算的边权重值为pmi(i,j),即:
[0103][0104][0105][0106][0107]
f(i)表示包含tokeni的滑动窗口的频率。
[0108]
f(j)表示包含tokenj的滑动窗口的频率。
[0109]
f(i,j)表示同时包含tokeni与tokenj的滑动窗口的频率。
[0110]
s表示滑动窗口的总个数。
[0111]
s(i)表示包含tokeni的滑动窗口的总个数。
[0112]
s(j)表示包含tokeni的滑动窗口的总个数。
[0113]
s(i,j)表示同时包含tokeni与tokenj的滑动窗口的总个数。
[0114]
在本发明中,tf-idf方法计算的边权重值为tf-idf(i,α),即:
[0115]
tf-idf(i,α)=tf(i,α)
×
idf(i)(5)
[0116][0117][0118]
tf(i,α)表示tokeni在tcs
α
中的词频。
[0119]
λ表示tokeni在tcs
α
中的个数。
[0120]
η表示tcs
α
中标志的个数。
[0121]
idf(i)表示包含tokeni的代码段的逆向对数频率。
[0122]
k表示训练标志的总个数。
[0123]
表示tcs中包含tokeni的代码段的个数。
[0124]
步骤三,计算标志的标签取值;
[0125]
在本发明中,采用标签赋值为1的次数占比m_label(i)来计算任意一个标志tokeni的标签取值。
[0126]
计算公式为:
[0127][0128]
m_label(i)表示tokeni的标签采用标签为1的次数占比。
[0129]
|truei|表示tokeni的标签为1的个数。
[0130]
|i|表示tokeni在tcs={tcs1,tcs2,

,tcs
α
,

,tcs
β
}中出现的次数。
[0131]
在本发明中,0≤m_label(i)≤1。
[0132]
步骤四,编码代码段的图结构信息;
[0133]
传统图卷积模型(gcn模型)参考“semi-supervisedclassificationwithgraphconvolutionalnetworks”中的公式2内容,2017年04月,iclr会议。
[0134]
在本发明中,对传统gcn模型中加入了relu激活函数和sigmoid分类器,称为改进gcn模型。
[0135]
在本发明中,将代码段异构图g(v,e)输入至改进gcn模型中进行处理,输出tokeni预测的标签取值,记为m_label
预测
(i)。
[0136]
在本发明中,改进gcn模型使用2层的图卷积层进行训练,第一图卷积层的激活函数是用的relu,第二图卷积层输出结果喂给sigmoid函数,损失函数为均方差损失函数mse。
则输出每一个tokeni预测的标签取值,记为m_label
预测
(i)。
[0137][0138][0139]
σ(
·
)为激活函数。
[0140]
为邻接矩阵与单位矩阵的和。
[0141]
为度矩阵。
[0142]
x为g(v,e)中的顶点表示矩阵。
[0143]
w1为第一图卷积层权重矩阵。
[0144]
w2为第二图卷积层权重矩阵。
[0145]
在本发明中,代码段异构图g(v,e)经改进gcn模型训练后,得到g(v,e)中的各个节点的嵌入表示,记为所述也称为代码段的图结构信息编码。
[0146]
步骤五,基于bert的图结构信息融合;
[0147]
传统bert模型参考《智能摘要与深度学习》第46-50页,作者高扬,北京理工大学出版社2019.07。
[0148]
步骤51、构建se-bert模型;
[0149]
在本发明中,将加入到bert模型的嵌入表示层中,实现图结构信息与语义信息的融合,记为融合模型(即se-bert模型)。
[0150]
在本发明中,由于bert模型使用的字片段断词器,因此在与词嵌入表示、段嵌入表示和位置嵌入表示相加的时候,一个tokeni的只加在第一个字片段上,对应的剩余字片段加的都是零向量。
[0151]
在本发明中,将任意一个tcs
α
的段嵌入表示都置为0。
[0152]
步骤52、利用se-bert模型进行标签预测;
[0153]
在本发明中,利用交叉熵损失函数对se-bert模型进行模型参数调节,得到代码段tcs
α
中每个的预测标签
[0154]
本发明的交叉熵损失函数
[0155]
在本发明中,经步骤一至步骤五得到了日志变量推荐模型(即reval模型)和日志变量推荐数据库。将本发明reval模型应用到源代码中,能够确定出源代码中的哪些标志token是日志变量。
[0156]
实施例1
[0157]
参见图4、图5所示,应用图4所示的源代码进行验证本发明日志变量推荐模型(即reval模型)。图5是对图4所示源代码进行步骤一处理的详细过程。
[0158]
从日志记录语句中提取日志变量的八条规则:
[0159][0160]
应用hits@1、mrr、map三个指标对本发明日志变量推荐模型进行评测。
[0161]
(1),hits@1意为在推荐的有序变量列表中,第一个变量是否有真实被进行日志记录的。给定一个代码变量序列,如果第一个变量的标签是
‘1’
(也就是真实被日志记录的),那么就认为这是一个正确的推荐,赋值为1;如果第一个变量的标签是
‘0’
(也就是未被日志记录的),那么就认为这个不是推荐,赋值为0。所以,hits@1就是所有代码段的正确分数的平均值。hits@1越高意味着推荐方法的效果越好。
[0162]
(2),mrr(平均倒数排名)表示第一个正确预测的代码段的标志的秩的倒数。mrr是用于评估信息检索方法的常用指标。给定一个代码变量序列和预测的有序列表,从头开始搜索有序列表,一直到第一个是真实被日志记录的位置。找到真实被日志记录的变量的搜索次数的倒数就是倒数排名。平均倒数排名是所有代码变量的倒数排名的平均值。更高的mrr取值意味着第一个预测正确的变量在有序预测列表中的排名越靠前。
[0163]
(3),map是一种单一指标的质量度量,已被证明在评估排名技术时具有良好的辨别力和稳定性。map考虑了所有正确预测的代码变量,可以将其视为平均性能的度量。给定一系列代码变量及其有序预测列表,map是所有代码段平均精度的平均值。因为在一个日志记录语句中可能存在多个代码变量,所以这个度量(map)是必不可少的。map越高说明它考虑到所有推荐记录的变量。
[0164]
评测对比结果
[0165]
基于hits@1、mrr、map三个指标,对数据分别使用rg(random guess,随机猜)、ir-comp、ir-flat、ir-mix、rnn_attn、bert、reval等模型进行评测。评价结果如表1至表3所示。
[0166]
(1)从评测结果可以发现,rg、ir-comp、ir-flat、ir-mix这一类既没有编码语义信息又没有编码图结构信息的模型在各个指标上既达不到只编码了语义信息的模型(bert、pretraining_bert、codebert)的性能,又达不到既编码了语义信息又编码了图结构信息的本发明reval模型的性能,这说明在本发明中针对的问题上,语义信息是相当重要的。
[0167]
(2)在对比reval和bert在各指标上的平均表现的时候,可以发现reval在hits@1,mrr和map都比bert要好。更好的hits@1和mrr意味着reval推荐的第一个日志变量(如果有多个推荐变量)比bert更精确。更好的map意味着reval的整体性能优于其他模型;换句话说,无论日志语句是否只有一个日志变量,或者是否有多个日志变量,reval的推荐质量都会更好。这也说明reval相比bert额外编码的图结构信息是有益的,它使reval利用上了代码段中更多的信息,更有利于变量的推荐。
[0168]
表1 rg、ir-comp、ir-flat、ir-mix、rnn_attn、bert、reval在hits@1上的对比
[0169]
projectsrgir-compir-flatir-mixrnn_attnbertrevalactivemq0.1790.22270.17030.16590.60260.60260.6463camel0.20240.33060.28930.28930.69420.6860.7066cassandra0.47220.08330.13890.13890.55560.66670.75cloudstack0.21520.15250.11660.12110.5090.52020.5628directoryserver0.29730.40540.22970.24320.62160.71620.7162hadoop0.22780.150.11670.13150.64070.67590.6778hbase0.19820.15860.11890.11890.52860.61670.6255hive0.16670.1750.150.15420.61250.60830.6292zookeeper0.29790.38290.21280.34040.59570.55320.6383average0.25070.2290.17150.18930.59560.62730.6614
[0170]
表2 rg、ir-comp、ir-flat、ir-mix、rnn_attn、bert、reval在mrr上的对比
[0171]
projectsrgir-compir-flatir-mixrnn_attnbertrevalactivemq0.31320.22380.17790.17360.73660.76170.778camel0.34640.33370.29030.29030.8080.81150.8246cassandra0.57980.08330.13890.13890.70770.78410.8221cloudstack0.3280.15990.11770.12220.64830.66860.7033directoryserver0.47970.40540.22970.24320.75420.81750.8186hadoop0.37880.15530.12520.14150.76890.79820.7993hbase0.32010.16010.12150.12150.69040.75650.7553hive0.28470.18230.15970.16180.74150.74190.7537zookeeper0.44790.3830.21280.34040.71640.72250.7543average0.38650.23190.17490.19260.73020.76250.7788
[0172]
表3 rg、ir-comp、ir-flat、ir-mix、rnn_attn、bert、reval在map上的对比
[0173]
projectsrgir-compir-flatir-mixrnn_attnbertreval
activemq0.26340.2220.17890.17460.71550.74630.7626camel0.3140.33330.290.29030.78480.8050.8106cassandra0.55750.07940.1350.1350.6710.76160.8036cloudstack0.29390.15980.11740.12170.62550.6520.6838directoryserver0.43590.40540.22970.24320.74410.80720.8113hadoop0.3430.15480.12380.13990.73940.76740.7677hbase0.2970.15980.12080.12080.66110.73210.7222hive0.26690.17240.15530.15780.70040.7160.7171zookeeper0.38850.3830.21280.34040.71640.71720.7472average0.35110.230.17370.19150.70640.7450.7585
[0174]
在本实施例中,日志变量推荐如图4所示,从图中的日志记录语句可以发现日志变量为“i”,而本发明reval模型的推荐变量也为i,而其他模型推荐的变量为"me"和“context”,并不准确。
[0175]
日志记录方法总结
[0176]
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献