【论文阅读】KnowLog: Knowledge Enhanced Pre-trained Language Model for Log Understanding


摘要

  日志作为半结构化文本具有丰富的语义信息,因此全面理解日志对于自动化日志分析至关重要。随着自然语言处理中预训练语言模型的成功,许多研究都利用这些模型来理解日志。尽管取得了成功,但现有的预训练语言模型仍然存在三个弱点。

  • 这些模型不能理解特定于领域的术语,尤其是缩写。
  • 这些模型难以充分捕获完整的日志上下文信息。
  • 这些模型难以获得同一原木的不同样式的通用表示。

  对于这些问题的解决方法有:

  • 为了解决前两个挑战,我们分别利用公共文档中日志的缩写和自然语言描述作为本地和全局知识,并通过设计新的预训练任务来增强模型来利用这些知识。
  • 设计了一个基于对比学习的预训练任务来获得普遍表示。

  本文·通过在六个不同的日志理解任务上对KnowLog进行微调来评估它。大量实验表明,与没有知识增强的现有预训练语言模型相比,KnowLog显著提高了日志理解能力,并取得了最先进的结果。此外,本文在迁移学习和低资源场景下进行了额外的实验,展示了KnowLog的实质性优势。


一、介绍

  由于日志大小的快速增长,由经验丰富的专家进行日志分析变得更具挑战性。
  为了解决这个问题,自动日志分析已经被提出,其目标是基于机器学习或深度学习技术自动分析日志。相比于机器学习方法,深度学习方法更具有灵活性。其分为两大类:

  • 传统的深度学习方法,利用词嵌入模型来表示日志。然后将这些模型输入到各种神经网络模块中进行训练和预测。
  • 用于日志理解的大型预训练语言模型。这种模型建立了一种预训练-再微调的范式。这种模式包括通过首先在大型语料库上进行预训练,然后在小而特定的数据集上进行微调来获得显著的结果。

尽管这些用于日志理解的预训练语言模型显示出了良好的性能,但它们仍然存在三个弱点。如下所示:

  • 首先,这些模型不能理解特定于领域的术语,尤其是缩写。
  • 其次,这些模型难以充分捕获完整的日志上下文信息。
  • 第三,这些模型难以获得同一日志的不同样式的通用表示。

  为了解决上述问题,本文提出了知识增强的日志理解预训练语言模型KnowLog,其设计了三个新的预训练任务来有效地利用领域知识来提高对日志的理解。具体来说:

  • 针对第一个问题,提出了缩写预测任务,利用缩写信息作为局部知识,使模型能够准确理解这些领域缩写。
  • 针对第二个问题,提出了一个描述判别任务,通过利用文档中的自然语言描述知识作为全局知识来补充日志的底层知识并充分捕获完整的日志上下文信息。
  • 针对第三个问题,提出了一个日志对比学习任务,以捕获日志中的共性,并使日志的表示更加通用。

二、相关工作

2.1、预训练语言模型(PLM)

  近年来,PLM受到了广泛关注,这些基于Transformer结构的(PLM)已经彻底改变了NLP领域。一般来说,这些模型可以分为三类:

  • 基于编码器结构的掩码语言模型
  • 基于解码器结构的自回归语言模型
  • 编码器-解码器模型。

2.2、使用预训练的语言模型进行日志理解

  使用预训练的语言模型进行日志理解可以分为两类:

  • 一种类型是不微调预训练模型。比如HitAnomaly、SwissLog、NeuralLog和ClusterLog利用预训练模型进行基于日志的异常检测。
  • 还有一种是对预先训练好的模型进行微调。

  尽管这些方法已经取得了很好的表现,但本文认为这些针对自然语言的预训练语言模型仍然存在由于自然语言和日志之间的差距而无法全面理解日志的弱点。此外,UniLog首先提出在日志上进行预训练,目标是重建掩码令牌,然后对多个下游任务进行微调。本文认为,UniLog的简单预训练任务和缺乏领域知识不能解决上文提出的挑战。
  基于这些工作,可以发现没有深入的研究解决日志理解的挑战。本文提出了利用领域知识加强日志预训练的新视角,并设计了相关的预训练任务,以提高日志的理解能力


三、设计

3.1、总览

在这里插入图片描述

3.2、输入表示

 日志中的标记与自然语言不同。日志中的令牌不仅包含一些自然语言的单词,还包含一些领域缩写,以及一些专家根据自己的习惯构造的符号,这些现象对如何有效地分割日志提出了挑战。

 为了避免词汇外(OOV)问题并有效地保留标记信息,我们使用预训练语言模型的标记器tokenizer进行分词。对于给定的输入文本𝐿,我们使用标记器来获得令牌序列{[𝐿𝑆],𝑙1,𝑙2,…,𝑙𝑛,[ S E P SEP SEP]}作为编码器的输入。作为一个特殊的标记,在整个序列的前面添加[𝐿𝑆],并且其最后的隐藏表示被用来整合整个序列的表示。

3.3、模型架构

  为了通过相应的自然语言描述增强对日志的理解,本文构建了“日志–描述对” P = ( l , d ) P={(l, d)} P=(l,d)并采用双编码器架构,其中两个编码器分别处理每种类型的数据。本文使用基于Transformer仅编码器结构的预训练模型作为主干对日志进行编码,给定一个标记化后的标记序列,编码器输出该序列的隐藏表示 h ∈ R D h∈R^D hRD:
h l = f ( l ; θ ) , h d = f ( d ; θ ∗ ) , h_l=f(l; \theta),h_d=f(d;\theta^*), hl=f(l;θ),hd=f(d;θ),
   f f f表示基于transformer的编码器, θ \theta θ θ ∗ \theta^* θ表示可以学习和冻结的参数, D D D是隐藏表示的维度。在这里,自然语言的编码器仅用于提供描述语义表示作为外部知识,因此不需要学习该编码器的参数。此外,为了保证日志和描述的表示在相同的语义空间中,两个编码器使用相同的预训练模型初始化,但不共享参数。

3.4、KnowLog预训练

3.4.1、框架
  首先,我们屏蔽日志中的缩写,并对日志执行数据增强。然后,两个预训练的语言模型分别对日志和描述进行编码,得到相应的表示。最后,将这些表征用于三个新的预训练任务。

  • 第一个任务是缩写预测,它利用缩写作为本地知识来理解这些缩写。
  • 第二个任务是描述判别,它利用日志的自然语言描述作为全局知识来补充日志的底层知识,并使模型能够充分捕获完整的日志上下文信息。
  • 第三个任务是日志对比学习,它基于对比学习来捕获日志中的共性,并获得更通用的日志表示

3.4.2、缩写预测任务
  该任务的两个问题在于

  • 目前的模型无法有效理解缩略语
  • 当使用标记器处理日志时,这些缩写被分割成子词标记,这破坏了缩写的语义

  为了有效地捕获日志中领域术语的语义,我们利用缩写信息作为局部知识来增强模型。首先,我们从多个供应商的公共文档中的术语表中收集了1711个缩写。其次,为了保持缩略词的完整性,我们将所有缩略词添加到标记器的词汇表中,以确保缩略词不会被切片。最后,我们提出了一种新的预训练缩写预测任务,以增强模型对缩写词的有效理解。
  具体来说,给定日志 l = { l 1 , l 2 , l 3 . . . , l n } l=\{l_1,l_2,l_3...,l_n\} l={l1,l2,l3...,ln},有M个缩写包括在 l l l中,每个缩写 l A B B R ∈ l l_{ABBR}∈l lABBRl,以一定概率 p p p被符号 [ M A S K ] [MASK] [MASK]掩盖,本文 p = 0.5 p=0.5 p=0.5
l m a s k e d = { R E P L A C E ( l A B B R , [ M A S K ] ) , i f p > = 0.5 , l , o t h e r w i s e l^{masked}=\left\{ \begin{gather*} REPLACE(l_{ABBR},[MASK]),if p>=0.5, \\ l, otherwise \end{gather*} \right. lmasked={REPLACE(lABBR,[MASK]),ifp>=0.5,l,otherwise


3.4.3、描述识别任务
  日志语法非常简洁,因此很难有效地捕获日志的底层信息。为了更好地理解日志,我们利用日志的自然语言描述作为全局知识来增强模型。我们期望该模型能够拉近日志与语义空间中相应的自然语言描述之间的距离,从而减少对日志语义的误解。
  为了实现我们的想法,我们提出了一个基于对比学习的描述辨别预训练任务。给定一批日志和描述对 P = { ( l i , d i ) ∣ i = 1 , 2 , 3... } P=\{(l_i, d_i)|i=1,2,3...\} P={(li,di)i=1,2,3...},我们首先将它们分别编码为隐藏表示 h l i = f ( l i , θ ∗ ) , h d i = f ( d i , θ ∗ ) h^i_l=f(l_i,\theta^*),h^i_d=f(d_i,\theta^*) hli=f(li,θ),hdi=f(di,θ)。然后将 ( h l i , h d i ) (h^i_l,h^i_d) (hli,hdi)构建为正对,将 h l i h^i_l hli和其他的描述 h d j h^j_d hdj构建为负对,为了使得 ( h l i , h d i ) (h^i_l,h^i_d) (hli,hdi)距离更近, ( h l i , h = j d ) (h^i_l,h^=j_d) (hli,h=jd)距离更远,本文遵循对比框架,并且训练目标为:
在这里插入图片描述
  其中, τ \tau τ是其他论文中引入的温度超参数,设置为0.05,N是批大小, s i m ( h l i , h d i ) sim(h^i_l,h^i_d) sim(hli,hdi)是余弦相似度。
3.4.4、日志对比学习任务
  日志作为由模板和变量组成的半结构化文本,一方面在传递相同语义的日志模板上存在一些差异,另一方面,具有具体参数的日志实例的语义本质上类似于日志模板。受NLP中句子表征研究的启发,我们引入了日志对比学习任务。
  首先,使用数据增强生成额外的日志正样本,然后通过对比学习拉近日志和正样本之间的语义距离,最终,日志对比学习的目标是:
在这里插入图片描述
总目标
  现在我们提出了KnowLog的总体预训练目标。为了避免灾难性遗忘,我们同时训练三个任务。
  因此,总体学习目标如下:

在这里插入图片描述

3.5、微调KnowLog

  在预训练之后,我们针对不同的日志相关下游任务对KnowLog进行微调。我们像在预训练阶段一样将输入输入到模型中,并使用 [ L S ] [LS] [LS]的表示来表示整个输入。在下游任务中,我们使用两类输入任务进行实验,其中一种类型的输入是日志单任务,例如故障现象识别,另一种类型的输入是日志对任务,例如日志和可能原因排序。对于单日志任务,我们将表示向量传递给分类器。对于日志对任务,在sentence-bert之后,我们对输入进行独立编码以产生表示向量的 l , d l,d l,d,因此我们将元素 l , d l,d l,d之间的差异 { l − d } \{l-d\} {ld}连接起来并传递 [ l ; d ; { l − d } ] [l;d;\{l−d\}] [l;d;{ld}]到分类器。对于每个任务,我们简单地将输入输入到模型中,然后对所有参数进行端到端的微调,最后,微调后的KnowLog可用于对特定任务进行推断。


四、实验

  本节介绍了预训练数据、baseline和模型设置。还介绍了六个不同的下游任务,通过实验回答了五个研究问题,最后进行了消融实验以及定性分析。

4.1、预训练数据集

  本文研究的日志分析场景主要针对交换机、路由器等网络设备。我们使用日志模板训练KnowLog,而不是使用具体参数进行日志记录的日志实例。基于日志模板的预训练有几个优点:

  • 日志模板可以很容易地从公共文档中获得
  • 避免了数据隐私泄露。日志实例通常记录环境的资源信息,模型可能会无意中泄露这种隐私。
  • 可以减轻数据治理负担。

  本文从Cisco5、Huawei6和H3C7公共产品文档中收集了交换机、路由器、安全和WLAN四个产品的96060个日志模板和相应的自然语言描述。此外,我们还从文档中收集了1711个缩写词。由于日志模板来自公开可用的文档,因此我们发现同一产品有来自同一供应商的不同版本,从而产生许多相同的日志模板,因此我们过滤了重复的日志模板。

4.2、baseline

  用于日志理解的baseline分为两组:

  • 传统的深度学习方法,其依赖于Glove等静态词嵌入模型来获取日志的语义表示。然后将这些表示输入到各种神经网络模型中进行日志分析。
  • 预训练的语言模型,使用预先训练好的语言模型来提取语义信息或直接对具有强大语言理解能力的各种任务进行微调。

  本文采用的baseline有:CNN、Bi-LSTM、BERT、RoBERTa、UniLog

4.3、参数设置

  对于预训练,我们使用编码器结构模型(bert -baseuncaseRoBERTa-base)作为主干,bert-baseuncase主要用于消融研究和定性分析。KnowLog使用的优化器是Adam,其学习率为2e-5,权重衰减为0.01,学习率热身为10000步,之后学习率线性衰减。序列长度被限制为512个令牌,我们训练了50个epoch,批大小为16。为了进行微调,在下游任务中使用交叉熵损失作为损失函数,我们分别将日志单任务和日志对任务的epoch设置为20和10。我们使用PyTorch 1.10.1在NVIDIA RTX 3090 gpu上进行所有实验。

4.4、下游任务和数据集

  为了评估KnowLog处理这些日志的能力,我们构建了六个不同的日志理解下游任务。根据输入的类型,这些下游任务可以分为两类:日志单任务(其中输入是单个日志)和日志对任务(其中输入是日志对或日志对)。对于每个数据集,我们按6:2:2的比例划分训练集、验证集和测试集。在这之中,用训练集对模型进行微调,在验证集中获得最优结果,最后在测试集中评估并报告结果。

任务作用数据集指标
模块分类用于识别日志所属的模块。该任务的输入是一条模块名被屏蔽的日志,输出是对应的模块名。使用日志模板作为原始数据,日志中的模块名称作为ground truth,然后将模块名称替换为[MASK]Accuracy和Weighted F1-score
风险日志识别以确定日志是否对系统有影响为目标,一种二分类任务从文档中解析“处理步骤”这个字段,并根据它是否包含明确的操作步骤来构造基本事实。具体来说,带有操作步骤的日志为True,没有操作步骤的日志为False。Precision、Recall和F1-score
故障现象识别识别日志所属的故障现象,该任务基于实际数据。从实际场景中收集了602个华为交换机的日志实例作为数据集,这些日志经过专家标注,共涵盖43种故障现象。Hamming-score
日志和描述的语义匹配二分类问题,用于度量日志的语义𝑙是否与相应的自然语言描述相匹配𝑑从文档中获得日志的描述,然后将日志与其对应的描述标记为True,并随机选择另一个日志标记为False的描述,其中True与False的比例为1:1。Accuracy and Weighed F1-score
日志和可能原因排序是一种日志对类型的排序任务,用于根据给定日志的语义上下文确定其最可能的潜在原因。文档中的每条日志都包含对可能原因的介绍,我们将此字段解析为基础事实。将ground truth和随机选择的5个可能原因的其他日志作为候选集,并要求模型对候选集进行排序。Precision@1和平均倒数秩(MRR),Precision@1表示第一名的精度
厂商间模块匹配一种日志对类型的二进制任务,用于跨供应商对齐相同的模块,它可以度量日志的语义表示是否更通用。根据模块名称是否相同来构建不同厂商日志之间的ground truth,并随机抽取不同模块的日志作为负样本,其中True与False的比值为1:1。并且将我们将日志中的模块名称替换为[MASK]令牌,以避免训练过程中的标签泄漏。Accuracyand and Weighed F1-score

4.5、评估

  评估主要是在五个主要任务上进行

  • 与目前的主流方法相比,KnowLog在下游任务上的效率如何?
      KnowLog在日志分析任务中是有效的,并且优于现有的传统的基于dl的方法和预训练模型。虽然对日志进行预训练是有效的,但缺乏领域知识和简单的自监督预训练任务不足以理解日志。此外,这些发现表明,提高KnowLog的性能不仅仅需要对日志语料库进行预训练,知识也起着至关重要的作用。整体实验结果表明,知识增强的预训练任务优于简单的重建掩码令牌任务。
  • 对于低资源场景下的下游任务,KnowLog是否仍然有效?
      KnowLog在低资源场景下具有显著的优势,这激励我们寻求领域知识来提高低资源场景下的泛化能力。随着微调数据的增加,KnowLog可以获得更好的性能。
  • 在跨供应商的迁移学习中,KnowLog的效果如何?
      当处理来自不同供应商的日志时,KnowLog显示出优越的迁移学习能力。此外,领域知识的引入也启发我们为日志迁移学习的研究引入一个新的视角。
  • 将日志中的缩写词添加到KnowLog的词汇表中会如何影响模型的性能?
      拆分领域术语会破坏令牌的语义信息,从而导致模型性能下降。这启发我们避免破坏领域术语的完整性可以提高模型的性能,从而获得更有效的日志表示。
  • 与日志实例相比,KnowLog在日志模板上的预训练效果如何?
      预训练语料库对日志预训练有很大的影响,未进行数据清理的日志实例包含重复的日志,会降低模型的性能。

4.6、消融研究

  为了考察每个预训练目标的有效性,我们对多类分类任务和语义匹配任务中的两个典型任务MC和LDSM进行了消融实验。我们通过在验证集上观察10个epoch来分析结果。实验结果如图4所示,我们注意到:

  • (1)在所有目标上进行预训练的KnowLog表现出最优越的性能。此外,可以发现,在删除任何目标后,模型性能都会降低,从而突出了我们提出的目标对增强模型预训练的积极影响;
  • (2)在缺少缩写预测目标的情况下,模型在两个任务上的性能都有所下降,尤其是在MC任务上,这证实了对缩写的理解是理解日志语义的重要组成部分,缩写预测任务有助于从缩写中学习局部知识;
  • (3)没有描述辨别(DD)目标时,模型在LDSM任务上的性能显著下降,说明自然语言描述可以丰富日志的语义,DD可以使模型从描述中获得全局知识;
  • (4)在没有日志对比学习(LCL)目标的情况下,两个任务的学习成绩都有不同程度的下降,说明LCL可以获得更通用的语义表征,而通用表征可以提高下游任务的学习成绩。

4.7、定性分析

  为了直观地验证KnowLog的有效性,本文选取了四个具有代表性的案例进行定性分析。具体来说,本文采用未经微调的预训练模型来获得输入的嵌入,然后计算嵌入之间的余弦相似度作为度量。选择两种类型的输入进行分析:Log-NL和Log-Log。在Log-NL类型中,输入由日志和自然语言描述组成。在Log-Log类型中,一个输入由两条日志组成。正样本包括一个日志实例及其对应的日志模板,而负样本包括两个不同的日志模板。
在这里插入图片描述
  从这些例子中,BERT对正例的语义理解很熟练,而对反例的识别能力有限。这表明了BERT强大的语言能力,但也表明了它在理解日志语义方面的偏见。相反,UniLog在准确区分阴性样本方面表现出色,但并没有增强对阳性样本的语义理解。这表明,对日志进行预训练可以提高日志之间的区分,但缺乏领域知识并不能进一步提高对日志的语义理解。我们观察到,KnowLog对所有正样本的相似性得分最高,对所有负样本的相似性得分最低。这表明KnowLog可以更好地捕获日志语义,从而证实了其在日志理解方面的有效性。此外,通过对Log-NL案例的分析,我们发现得益于领域知识增强,KnowLog在语义理解方面表现出更高的准确性。同样,在Log-Log案例的分析中,得益于日志之间的对比学习,KnowLog证明能够获得更通用的表示。以上结果证明了KnowLog在日志理解方面的优异性能。


五、讨论

5.1、KnowLog得以工作的原因

  让KnowLog更好地工作有两个原因。首先,KnowLog对日志进行了预先训练,并对不同的任务进行了微调。其次,与现有的预训练模型相比,KnowLog分别利用局部和全局知识来增强预训练。
在这里插入图片描述
  从可视化结果中,我们可以发现基于BERT的日志表示和相应的自然语言描述在向量空间上是明显分离的,两者几乎是不对齐的。理想情况下,日志应该能够与语义空间中的相应描述保持一致。这表明当前预训练的模型在日志与其对应的描述之间存在明显的语义差距。相比之下,KnowLog能够将日志和相应的描述拉得更近,使模型能够全面理解日志。

5.2、对有效性的威胁

构造有效性
  本研究依靠从公共文档中获得的自然语言描述作为全局知识的来源来增强模型,我们假设知识来源是可靠的。然而,模型性能的质量可能会受到描述中存在的潜在噪声的影响。为了缓解这个问题,我们对收集到的描述执行了数据清理,包括手动补充缺失的描述和删除相同的描述,以确保知识质量。值得注意的是,我们的方法主要考虑了作为知识来源的缩写和描述,而没有结合其他形式的知识,如代码、配置和流程图。虽然我们的方法理论上可以通过提供领域知识推广到其他类型的日志,但它在处理其他知识方面受到限制。对于使用其他知识增强模型,我们的方法可能不是最佳解决方案,我们将在未来的工作中解决这些挑战。

内部有效性
  超参数对深度学习模型的影响是一个被广泛接受的事实。由于计算资源有限,KnowLog的一些超参数不是通过实验来调整的,而是通过经验来确定的。因此,存在其他超参数设置可能会得到更好的结果。最重要的是,KnowLog的编码器只使用了探索BERT和RoBERTa架构,基于缩放定律,更大的模型和更多的数据会产生更好的结果。

外部有效性
  一个比较大的威胁是数据的不平衡。数据在厂商和设备之间分布不均,导致数据集不平衡。因此,我们的方法不能保证在不同的设备和供应商上得到相同的结果。为了解决这个问题,我们采用了加权f1-score作为更合适的评估指标,它解释了数据的不平衡性质。


六、结论

  在本文中,我们提出了知识增强的日志理解预训练语言模型KnowLog,它提高了日志理解任务的最先进性能。我们提出了三个新的预训练任务,有效地利用领域知识来增强模型,使日志的表示更加通用。在知识增强的预训练之后,KnowLog在六个不同的下游任务上进行了微调。与其他没有知识增强的预训练模型相比,KnowLog达到了最先进的性能,这证明了知识对提高日志理解的有效性。消融分析证明了利用知识来理解日志的这些预训练任务的有效性。在未来,我们将探索集成更多类型的知识,以进一步提高对日志的理解,如配置、代码、流程图和其他多模式信息。


  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rockict_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值