词向量模型对CNN日志异常检测的性能影响研究*

2024-01-02 07:43闫谦时容晓峰
西安工业大学学报 2023年6期
关键词:日志卷积向量

杨 光,闫谦时,容晓峰

(西安工业大学 计算机科学与工程学院,西安 710021)

当前数字化时代,数据中心承担着存储、处理和分发海量数据的关键任务,已成为支撑现代科技发展和信息交流不可或缺的基础设施[1-2]。然而数据中心的系统不可避免的会因自身原因或是受到外部攻击因素而发生异常,一旦对这些异常未做出及时处理,将会为各行业带来无法挽回的巨大经济损失。日志记录了系统组件和应用程序在运行期间的状态以及各关键节点信息[3],因此可通过日志帮助数据中心的运维人员及时发现系统异常,从而做出相应的措施修复异常,维护系统安全。然而随着数据中心规模的日益扩大,数据中心的系统每天会产生TB级数量大小的日志文件[4],如何高效准确的从这些大规模日志文件中检测出异常是面临的一大挑战。

当前对于日志异常检测的研究主要集中在使用机器学习和深度学习两种技术上。基于机器学习的日志异常检测技术从日志特征向量中学习系统正常运行的模式,通过建立适当的特征工程并经过一定数据量训练后,能够有效检测出日志中存在的异常[5-6]。文献[7]提出了一种使用K原型聚类和K近邻分类算法的集成方法,通过分析系统日志的特征,应用K原型聚类算法对数据集进行分区,过滤出正常事件,然后设计基于距离特征的KNN分类算法衡量每个异常候选的k个最近邻从而判别系统异常。文献[8]在监督机器学习的基础上通过将每个日志消息与日志模板相关联表征日志消息的生成模式,然后依据专家经验从生成模式中提取典型特征学习从而进行异常检测。文献[9]提出了一种用于自动发现并挖掘日志中程序不变量的方法,该方法学习日志的正常行为模式,使用聚类算法将相似的日志数据分组在一起,接着对于新的日志事件,通过将其与所有已知的聚类中心进行比较从而判断异常。文献[10]构造了以会话ID为行、以日志模板为列的特征矩阵,采用特征提取器对语义相近的日志模板进行合并以减少噪声干扰,最后应用支持向量机对日志数据是否异常进行判别。虽然上述基于机器学习的日志异常技术已取得一定成效,但由于该技术在特征提取的过程中高度依赖于特定行业内相关人员的专业知识和经验才能确保提取的特征能够更准确,这导致在训练过程中需要花费大量的时间在特征工程上,因此基于机器学习的日志异常检测技术仍然存在着不足。近年来,作为深度学习技术之一的卷积神经网络模型(Convolutional Neural Network,CNN),因其能够对文本中的重要特征自动进行提取学习,大大减少了人们花费在特征工程上的投入[11],现如今CNN已被多数研究者应用于日志的异常检测。文献[12]提出一种基于CNN的自动化日志异常检测方法,通过Word2vec词向量模型[13]将日志映射为向量,采用卷积层提取日志语句中的关键词信息,结合全连接层对日志进行分类和异常检测。文献[14]提出了一种改进的LogEvent2vec算法,其中使用FastText词向量模型[15]将日志映射为向量,然后输入到CNN中进行日志异常检测。文献[16]提出了一种结合CNN和长短期记忆神经网络的日志异常检测方法,该方法利用日志的语义信息,在检测中自动学习日志序列之间的关系,其中CNN的输入为日志中每个单词经GloVe模型[17]转化后的词向量。文献[18]评估了应用在日志异常检测领域中使用最广泛的几种机器学习技术,考虑了日志数据的不平衡问题,提出了一种数据平衡方法以提高现有日志异常检测模型的性能,其中在基于CNN日志异常检测评估环节,输入是经GloVe模型生成的词向量。文献[19]提出结合CNN和双向长短期记忆神经网络的日志异常检测方法,在考虑日志键显著时间序列特征基础上,兼顾日志参数的空间位置特征检测异常,其中CNN的输入是经Word2vec模型生成的词向量。

从基于CNN的日志异常检测研究中可以发现,在异常检测之前需要利用词向量模型将日志中的每个单词映射为向量作为模型的输入[20-21],这是必要的预处理步骤。当前不同研究者采用不同的词向量模型来实现日志的向量化,然而选择的词向量模型是否是最优选择,不同词向量模型是否会对后续CNN日志异常检测的性能产生影响,目前还缺少相应对比分析。因此,文中设计基于CNN的日志异常检测模型,在预处理阶段基于训练日志采用研究现状中的三种不同词向量模型构建词向量字典,利用词向量字典将测试日志向量化输入到CNN中,比较CNN各项性能指标以选择最优词向量模型提高CNN日志异常检测的性能表现。最后结合实验分析了词向量模型影响CNN日志异常检测性能差异的因素。

1 词向量模型

1.1 Word2vec模型

Word2vec是文中采用的第一种词向量模型,其通过对日志文本建模,利用滑动窗口内单词的上下文来学习日志单词之间的语义和关联性,将日志单词转换为向量表示。在Word2Vec模型中,主要包含两种形式:基于连续词袋模型(Continuous Bag of Words ,CBOW)和跳字模型(Skip-Gram),这两种模型结构均由输入层(INPUT)、投影层(PROJECTION)和输出层(OUTPUT)组成。

CBOW模型框架如图1(左图)所示,通过训练与日志中某一个特定词wt上下文相关的2k个词wt-k,wt-k+1,…,wt-1+k,wt+k来获得wt的词向量,而Skip-Gram则通过训练某一个日志特定词wt获得该特定词对应上下文相关的日志词向量,模型框架如图1(右图)所示。

图1 CBOW模型(左)和Skip-Gram模型(右)

对于 CBOW 模型,输入为日志特征词 wt上下文相关词所对应的词向量,由one-hot表示,经过求和并由投影层映射到嵌入空间中,接着由输出层使用Softmax预测当前的日志特征词wt,其公式为

(1)

(2)

式中:con(w)为词语w的上下文相关词;x为con(wt)的词向量求和并经投影层映射后的向量;e′(wt) 为词的输出向量,即所对应的日志特征词wt关于上下文的词向量。Skip-Gram模型的原理与上述过程类似。

1.2 GloVe模型

GloVe是文中采用的第二种词向量模型,其结合日志文本的全局共现信息和局部上下文信息,通过使用记录了日志单词在上下文中出现频率的共现矩阵,对共现矩阵进行分解和优化从而得到日志单词的词向量表示。共现矩阵X的定义为

(3)

式中:(wk,i)为日志单词i在日志单词wk的上下文中出现的次数。之后需要采用最小化目标函数将共现矩阵转化为日志单词的向量表示,最小化目标函数的公式为

(4)

式中:|V|为词表大小;wi和wj分别为日志单词i和日志单词j的词向量;Xij为日志单词j在日志单词i上下文中出现的次数;bi和bj为偏置项,用于调整日志单词词频对日志词向量的影响;f(xij)代表权重函数,公式为

(5)

通过最小化目标函数,GloVe模型可以学习到每个日志单词的向量表示,使得相似日志单词在向量空间中更加接近。

1.3 FastText模型

FastText是文中采用的第三种词向量模型,基于子词表示词向量。对于每个日志子词,FastText 模型都有一个对应的日志子词向量,在构建日志词向量时,FastText 将日志词向量表示成日志子词向量的加权和,其中日志子词向量的权重是由其出现的次数或出现的频率来决定。FastText模型的结构与Word2vec模型的CBOW结构类似,同样是由输入层、隐藏层、输出层这三层结构组成,模型在做输出时采用分层 Softmax并使用哈夫曼编码对输出进行处理来降低运算的复杂度。FastText模型的目标函数为

(6)

式中:N为语料库数量;yn为第n个输入文本对应的类别;f(x)为softmax损失函数;为文本的归一化处理值;A和B分别为模型训练过程中通过学习得到的权重矩阵。最终训练得到输入层到隐藏层的权重参数就是日志的词向量。

2 日志异常检测

2.1 日志异常检测流程

日志异常检测流程的第一步是预处理阶段。图2是由HDFS、BGL、OpenSSH三种不同类型系统产生的日志样例数据。

图2 日志样例数据

由图2可以看出,一条日志由消息头和消息内容两部分组成。消息头包含了如时间戳、消息类型、消息级别等信息。消息内容则是一种没有格式约束的文本,由常量部分和变量部分组成,其中,常量部分在系统运行过程中保持不变,变量部分会随着系统运行而发生动态变化。由于原始日志是一种复杂的非结构化特征数据,存在着消息头以及变量等较多的冗余信息和噪声,因此在预处理阶段需要利用日志解析算法对原始日志进行结构化并去除无关的冗余信息和噪声[22-24],得到日志模板用以后续流程的进行。例如对HDFS其中的一个日志条目“081109 213009 2207 INFO dfs.DataNode$PacketResponder:PacketResponder 1 for block blk_38865049064139660 terminating”,经解析得到日志模板为“PacketResponder * for block * terminating”。日志模板不能直接被检测模型所识别,仍需继续进行相应的处理,通过将日志模板中的单词进行小写转化,并删除其中的换行符、空格、下划线等特殊字符,输入到词向量模型中构建词向量字典,利用词向量字典对日志单词进行向量映射,最终得到符合检测模型的标准输入形式。

预处理阶段完成后进入到特征提取阶段。通过将预处理后的训练日志输入到设计好的检测模型中,模型依据训练日志的标签(例如标签值为1代表正常的日志条目,标签值为0代表异常的日志条目),自动学习提取日志数据中存在的特征,并通过多次迭代以减少训练时的损失[25]。训练完成后保存损失率最小的一次模型的权重参数,然后利用测试日志继续对模型进行相应的参数调整,当模型在测试日志中也具有较好的表现且各项性能指标趋近于稳定时,即可将此时的模型用于最终异常检测阶段的使用。

特征提取阶段完成后进入到异常检测阶段。通过对待检测日志数据进行预处理然后输入到异常检测模型中,模型根据训练阶段学习到的特征,结合待检测日志的特征以判断当前日志是否异常。

2.2 基于CNN的日志异常检测模型

设计的CNN日志异常检测模型结构如图3所示,其中包括输入层,卷积层、池化层、全连接层四个重要部分。

图3 CNN日志异常检测模型结构

输入层输入的是经预处理后得到的日志向量矩阵,矩阵大小为w*h,其中w为每个日志模板中的字符数量,h为词向量模型生成的日志词向量维度。

卷积层通过将卷积核与日志向量矩阵中的不同位置进行卷积,从而提取日志数据的局部特征。卷积层通常包括多个卷积核,每个卷积核可提取到不同的特征,卷积核的大小和数量可通过实验进行设置调整。卷积层还包括一个偏置项和一个激活函数,通过偏置项和激活函数可增加模型的表达能力,卷积层的计算公式为

(7)

式中:x为输入的数据;o为卷积核;b为偏置项;y为卷积层的输出;i,j为输出数据的位置;k为输出通道数;m和n为输入通道数。卷积过程中使用一维卷积核来提取输入数据的特征,卷积核的大小设置为a*h,其中a的大小不超过所有日志模板中最短的日志模板字符数量,h同样为词向量模型生成的日志词向量维度。经过卷积核在日志向量上的一维滑动扫描,每个窗口和卷积核进行点乘操作提取特征,例如对于输入的一段日志文本,其点乘如图4所示。

图4 点乘示意图

将点乘的结果进行累加并加上偏置项,通过激活函数进行非线性变换,常用的激活函数包括 Sigmoid、Tanh、ReLU 等函数,使用最多的是ReLU激活函数,它的收敛速度更快且梯度不会饱和,公式为

(8)

池化层将卷积层得到的每个特征向量进行最大池化,突出重要特征并且达到降维效果,最大池化的公式为

(9)

式中:h为卷积层的输出;n为卷积核的数量。全连接层将池化层的输出映射到分类标签上,并以softmax,relu等作为激活函数预测最终的分类结果。全连接层的公式为

y=Wx+b,

(10)

式中:x为前一层的输出;W为权重矩阵;b为偏置项;y为全连接层的输出。在训练过程中,通过反向传播算法来更新权重矩阵和偏置项以最小化损失。

3 实验及分析

3.1 实验环境

搭建的实验环境采用Windows 11 Professional 64位操作系统,16 GB内存,处理器为11th Gen Intel(R) Core(TM) i5-11320H @ 3.20 GHz 3.19 GHz,显卡为NVIDIA GeForce MX450。

3.2 数据集

采用的实验数据集是目前公开的HDFS日志数据集以及BGL日志数据集。HDFS日志数据集是在Amazon EC2节点上运行并基于hadoop的map-reduce作业生成。原始日志文件大小约为1.5 G,共包含11 197 954条日志记录,每条日志记录都包含了时间戳、事件类型、事件描述等信息,其中的16 838条日志数据被标记为异常。BGL日志数据集是由美国国家能源研究科学计算中心提供的一个超级计算机日志数据集。该数据集记录了在计算机上运行的大量应用程序的日志,包括计算节点的状态、进程的运行情况、网络连接等信息。其原始文件大小约为708 M,一共包含4 747 963条日志记录。同样每条日志记录都包含了时间戳、事件类型、事件描述等信息,其中的348 460条日志被标记为异常。

3.3 评价指标

由于日志是一种不平衡数据,存在着正常日志数据量远大于异常日志数据量的情况,为避免出现测试日志中预测样本全为正常导致的高准确率现象,文中采用了除Accurary准确率之外,还包括Precision精确率、Recall召回率、F1共四种评价指标。这四种评价指标的计算公式为

(11)

(12)

(13)

(14)

式中:All为总样本的数量;T为预测正确的样本数;TP为异常日志数据被模型判定为异常的数量;FP为正常日志数据被模型判定为异常的数量;FN为异常日志数据被模型判定为正常的数量。根据Accurary可了解到检测模型对日志数据的正确分类情况。根据Recall和Precision可了解到模型的过拟合程度。如果召回率低,则说明有大量的异常日志数据被模型检测为正常数据,如果精确率低,则说明有大量的正常日志数据被模型检测为异常数据。F1用来综合判断模型的检测效果,F1值越大,模型对日志的异常检测效果越好,F1值越小,模型对日志的异常效果越差。

3.4 实验过程及结果分析

分别选取HDFS以及BGL两个数据集,按照不同比例将其划分为训练日志和测试日志,以分析Word2vec、GloVe、FastText这三种词向量模型对CNN日志异常检测的性能影响。

首先对日志数据进行预处理,其中在预处理中的构建词向量字典环节,设置三种词向量模型处理的最低词频都为1(即对语料库中出现的所有单词都进行处理生成词向量),且生成的词向量维度都设置为100。预处理阶段结束后,将预处理后的日志数据输入到CNN中进行训练。文中搭建的CNN模型各项参数详细设置见表1。

表1 CNN模型参数

表1中词嵌入维度embedding_dim设置为100维,输入通道数in_channels为1,输出通道数out_channels为50,卷积核大小设置为2*100和3*100两个大小的卷积核。池化层采用最大值池化进一步提取卷积后的特征,模型的输出维度output_dim设置为1,dropout设置为0.5,学习率设置为0.01,选择交叉熵损失函数来计算损失,使用Adam优化器来更新网络模型的参数。模型的训练迭代次数设置为100,训练迭代期间保存模型损失率最小时的状态参数。训练阶段结束后,结合训练阶段得到词向量字典,将测试日志中的单词映射为向量,输入到CNN中观察不同词向量模型对应CNN的各项性能指标。

图5展示了在HDFS和BGL两种数据集上,分别使用三种不同词向量模型对应CNN的准确率变化,其中横坐标是训练日志量占总日志量的比例,纵坐标是测试日志上CNN的准确率值。从图中可以观察到,不论是在HDFS还是BGL数据集上,当训练日志量占总日志量的10%时,与另外两种词向量模型相比,使用FastText模型生成的词向量,测试日志上对应CNN的准确率都是最低,而使用GloVe模型生成的词向量,测试日志上对应CNN的准确率都是最高。使用Word2vec模型生成的词向量,测试日志上对应CNN的准确率介于GloVe和FastText之间,准确率的差异在HDFS日志上的表现更为突出。分析原因是由于相较于BGL日志,HDFS日志更复杂且包含的特征更多。因此训练日志量较少时导致不同词向量模型生成的词向量质量差异较大,从而测试日志上CNN的准确率也具有较大差异。随着训练日志量的增加,从图5观察到两种数据集上CNN的准确率都逐渐提高,且在同一数据集上不同的词向量模型对应CNN的准确率逐渐接近。当训练日志量增加到占总日志量的70%和80%时,从图5观察到在同一数据集上此时三种不同词向量模型对应CNN的准确率基本接近相同。

图5 不同词向量模型对应CNN的准确率变化

除准确率外,文中还对比了其余三种评价指标。分别在两种数据集上使用10%的训练日志量,测试日志上不同词向量模型对应CNN的各项指标如图6和图7所示。

图6 HDFS数据集上的不同词向量模型对应CNN的各项指标

从图6可以看出,在HDFS日志数据集上,此时各词向量模型对应CNN的精确率差异不大且精确率都较高,这表明无论使用哪种词向量模型,都仅有少量的正常日志文本被CNN模型检测为异常文本。召回率和F1的差异较为显著,FastText模型对应CNN的召回率仅有31.34,这使得FastText模型对应CNN的F1值最小。GloVe模型对应CNN的召回率为82.29处于最高,这使得Glove对应CNN的F1值最高,Word2vec模型对应CNN的召回率和F1值介于其余两个词向量模型之间。因此在HDFS日志上使用10%的训练日志量时,测试日志上GloVe模型使得CNN日志异常检性能最好。

从图7可以看出,在BGL日志数据集上,此时各词向量模型对应CNN的精确率和召回率以及F1值都有着明显的差异。精确率上FastText模型对应CNN的精确率为91.13处于最低,GloVe模型对应CNN的精确率为98.88处于最高,Word2vec模型对应CNN的精确率介于其余两个词向量模型之间。召回率上FastText模型对应CNN的召回率为98.96处于最高,Word2vec模型对应CNN的召回率依然介于其余两个词向量模型之间,GloVe模型对应CNN的召回率为95.96处于最低。最终的F1值上,GloVe模型97.19的F1值依然处于最高,因此在BGL日志上使用10%的训练日志量时,测试日志上GloVe模型同样使得CNN日志异常检测性能最好。

通过在HDFS和BGL数据集上的多次实验发现,当使用30%到80%之间的训练日志量时,测试日志上不同词向量模型对应CNN的各项性能指标差异都较小,因此文中选择部分关键性能指标数据展示在表2表3所示。从表2和表3可以明显的看出,当训练日志量较少时,使用Glove模型对应CNN日志异常检性能依然表现最好。随着训练日志量的增加,不同词向量模型对应CNN的精确率、召回率以及F1值的各项指标差异逐渐减小。当训练日志量增加到占总日志量的80%时,此时不同词向量模型对应CNN的精确率、召回率以及F1之间的差异基本可忽略不计。

表2 HDFS日志数据集上的CNN各项指标

表3 BGL日志数据集上的CNN各项指标值

综合以上实验结果,分析三种词向量模型使CNN日志异常检测性能指标变化的原因如下。日志中常常存在由多个单词组成的特定词语和术语,并具有特定的语义,由于FastText将单词拆分为子词或字符级别的表示,无法直接建模特定词语短语的整体语义,只能通过子词的组合来表示,因此在训练日志量较少的情况下,FastText无法很好地捕捉日志中单词之间的细粒度关系,导致生成的词向量质量较低,进而在测试日志上对CNN的性能产生了负面影响。相比之下,GloVe模型因为结合了全局共现信息和局部上下文信息,更好地捕捉到了日志语句中单词之间的细粒度关系,因此同样在训练日志量较少的情况下,GloVe模型生成的词向量质量更高,更接近于实际语义,从而在测试日志上使得CNN模型的性能最优。Word2vec模型在训练过程中通过滑动窗口的方式来捕获单词之间的细粒度关系,即Word2vec模型更多关注的是窗口内单词之间的细粒度关系从而生成词向量,关注点介于FastText模型的单个字符和GloVe模型的全局文本之间,因此在测试日志上Word2vec模型使得CNN的性能表现介于GloVe和FastText模型之间。随着训练日志量的增大,其中的训练样本逐渐包含了更多的语义和上下文信息,这弥补了词向量模型在训练日志量较少时捕获单词之间细粒度关系上存在的不足。此时不同的词向量模型生成的词向量都逐渐接近于实际语义,因此在测试日志上对应CNN的各项性能指标差异逐渐减小。

4 结 论

设计了基于CNN的日志异常检测模型,在预处理阶段基于训练日志分别采用不同词向量模型构建词向量字典,利用词向量字典将测试日志中的单词映射为向量,输入到CNN中比较其各项性能指标以选择最优词向量模型提高CNN日志异常的检测性能表现。实验结果表明:当训练日志量较少时,测试日志上不同词向量模型对应CNN的性能指标差异较为明显,其中GloVe模型在两种数据集上使得CNN分别取得了88.92和97.19 的最高F1值,表明了Glove使得CNN日志异常检测的性能最好,Word2vec模型在两种数据集上使得CNN取得的F1值介于另外两个词向量模型之间,而FastText模型在两种数据集上使得CNN仅取得了47.51和94.88的最低F1值,表明了FastText模型使CNN日志异常检测的性能最差。随着训练日志量逐渐增加,测试日志上不同词向量模型对应CNN性能指标差异逐渐减小,Glove模型使得CNN日志异常检测的性能依然表现最好。通过文中的对比实验,优先选择GloVe模型可提高CNN日志异常检测的性能表现。

猜你喜欢
日志卷积向量
向量的分解
一名老党员的工作日志
基于3D-Winograd的快速卷积算法设计及FPGA实现
聚焦“向量与三角”创新题
扶贫日志
从滤波器理解卷积
基于傅里叶域卷积表示的目标跟踪算法
游学日志
向量垂直在解析几何中的应用
向量五种“变身” 玩转圆锥曲线