我尝试在无监督的日志消息异常检测上实施这项工作,但预处理步骤对我来说很不清楚。
在这篇论文中,他们告诉消息被填充到 40 个单词,然后计算词频。我不明白为什么需要填充序列,因为像 TF-IDF 这样的词频会根据词汇量的大小生成结果。
所提出的无监督异常检测模型包括两个深度自动编码器网络和一个隔离森林。首先,将包括标记化和将字母更改为小写在内的文本预处理应用于数据集。接下来,将句子填充到 40 个单词,并删除少于 5 个单词的句子。然后计算词频并对数据进行混洗。接下来,对数据集进行归一化并在 0 和 1 之间缩放。
我在这个实验中使用的数据是BGL。
这是一个数据示例。 数据框
columns = ['Label','Timestamp','Date','Node','Time','NodeRepeat','Type','Component','Level','Content']
目前,我只是将填充序列直接提供给模型。
sequences = tokenizer.texts_to_sequences(t1['Content'])
t1_encoded = pad_sequences(sequences, maxlen=40, padding='post')
t1_scaled = scaler.fit_transform(t1_encoded)
实际上,自动编码器应该在隔离森林之前应用,但我尝试仅使用隔离森林作为其评估案例之一(a)一个隔离森林。
IF = IsolationForest(n_jobs=-1)
IF.fit(t1_encoded)
pred = IF.predict(t3_encoded)
与纸上的结果相比,结果很糟糕。
Accuracy: 89.9065250294299
Precision 0: 0.9007981755986317
Precision 1: 91.01406092594956
Recall 0: 0.12458406270205485
Recall 1: 98.66322950585173