【论文阅读】UniLog: Automatic Logging via LLM and In-Context Learning


由于其公司的保密政策,本文没有公开源代码,数据是公开的。

文章目录

  • 摘要
  • 一、介绍
  • 二、背景和动机
    • 2.1、日志语句生成
    • 2.2、大语言模型
    • 2.3、上下文学习(In-Context Learning,ICL)
  • 三、UNILOG
    • 3.1、模型骨干
    • 3.2、提示策略
      • 3.2.1、提示格式
      • 3.2.1、提示样例
    • 3.3、预热策略
  • 四、评估
    • 4.1、UniLog与现有的基于LLM的日志方法相比如何
    • 4.2、与微调相比,ICL能给日志记录带来多少改进
    • 4.3、不同的ICL策略如何影响日志记录的有效性
  • 五、讨论
    • 5.1、有效性威胁
    • 5.2、道德问题
    • 5.3、误差分析
  • 六、总结


摘要

问题

  • 许多自动日志工具被设计用来帮助开发人员完成日志任务之一。这些工具在某些情况下很有用,但通常不能提供全面的日志解决方案。
  • 尽管最近的研究已经开始探索端到端日志,但它仍然在很大程度上受到微调的高成本的限制,阻碍了它在软件开发中的实际用途。

创新点

  • UniLog是一个基于大型语言模型(llm)的上下文学习(ICL)范式的自动日志框架。
  • UniLog可以生成一个适当的日志记录语句,该语句只包含一个提示符,其中包含五个演示示例,而不需要任何模型调优。
  • UniLog在预热后只需要几百个随机样本,就可以进一步增强其记录能力。

效果

  • 测井位置选择准确率76.9%
  • 预测冗余程度准确率72.3%
  • 在生成日志消息时BLEU-4评分27.1
  • UniLog所需的参数调优时间不到调优相同LLM所需参数调优时间的4%

一、介绍

  随着软件规模和复杂性的快速增长,日志记录越来越成为软件可靠性保证不可或缺的实践。目前构建日志记录的研究主要聚焦于三个子任务上:

  • 确定日志记录位置
  • 设置详细级别(Verbosity level)
  • 生成日志消息

  虽然以前的日志记录方法在不同的子任务上得到了较好的结果,但它们并没有将日志记录任务作为一个整体来考虑。目前一种用于日志记录的一体化解决方案LANCE能够从整体的角度来考虑这三个子任务,但是在涉及模型调优的两个阶段–多任务预训练和微调时需要大量的时间和计算资源。
  因此本文认为现有方法的实际意义有限,对端到端、轻量级和与代码相关的日志解决方案的需求很大。


二、背景和动机

2.1、日志语句生成

  长期以来,对该方面的三个子问题都没有作为一个整体来解决,因此在实际场景中实用性较差。最近提出的LANCE,试图通过使用LLM以端到端方式解决日志问题。然而,由于训练成本较大。从实践的角度看仍然具有局限性。

2.2、大语言模型

  自LLM出现以来,NLP已经发展成为一种新的学习范式,即预训练和微调。在这种范例中,人们选择在不同的下游场景中使用特定任务的数据对预训练的LLM进行微调,而不是以一种非常昂贵的方式从头开始训练LLM。相比预训练,微调所需的计算资源要少得多,因此更节省成本
  具体来说,在软件工程领域,LLM与微调技术一起,在代码评审生成、模糊测试用例生成、自动程序修复和根本原因分析等任务中取得了巨大的成就。

2.3、上下文学习(In-Context Learning,ICL)

  ICL的优势在于:

  • ICL不需要进行架构工程和目标工程
  • 所有的指令和描述都是自然语言,便于用户理解
  • 直接利用了预训练和提示演示的信息,避免了由于过度依赖下游特定任务数据而导致的微调过拟合问题。

  由此提出了UniLog。具体来说,UniLog不再需要从消耗大量日志数据的训练过程中显式地学习日志记录。相反,它利用llm的类比推理能力,从提示词中提供的代码示例直接推断出预期的日志记录语句


三、UNILOG

  UniLog建立在大型语言模型Codex的上下文学习范式(ICL)之上,本章主要介绍了骨干(3.1)、提示(3.2)和可选预热(3.3)的设计细节,以下为整个模型的流程图
在这里插入图片描述

3.1、模型骨干

  本文选择Codex作为UniLog的支柱,Codex是基于GPT-3的LLM,它利用GitHub上的大量存储库来增强代码生成能力。通过采用Codex作为主干,UniLog可以充分利用Codex模型的知识,减轻由于这种差异而导致的性能下降。此外,由于Codex的参数规模很大,预训练中使用的数据量很大,UniLog可以直接从提示中推断答案,而不需要对模型进行微调。
  UniLog以黑盒方式使用LLM,因此可以随意替换主干。但是当使用不提供微调api的闭源模型(例如GPT-4)时,UniLog不能执行模型预热,这可能会影响性能。

3.2、提示策略

3.2.1、提示格式

  尽管大多数LLM的预训练目标包括文本生成任务,但它们并没有明确考虑生成的文本应该插入到哪里。为了使llm能够完成“记录到哪里”的任务,一种直观的解决方案是将日志任务转换为代码完成任务:预测每行代码之后是否应该生成日志语句。然而,如果这种范式在目标代码片段有二进制的行,模型将需要执行二进制的推断,从而导致效率低下。此外,在日志和非日志语句之间的代码行比例上存在明显的不平衡,日志语句的数量远远少于非日志语句。例如,马斯特罗帕罗等人指出,几乎96%的Java方法不包含日志记录语句。这些样本中的不平衡可能导致低召回率,这意味着几乎每一行都更有可能被预测为不需要日志记录语句,这可能严重损害我们的日志记录性能。

  所以,本文的做法为在每个换行符位置添加一个特殊的标记来表示行ID,然后将代码片段平展为序列格式。
在这里插入图片描述
  在指令中,UniLog要求模型提供生成的日志语句和要插入的目标行ID。

3.2.1、提示样例

  在UniLog中,我们选择了KATE,一种简单的kNN-based采样算法,在实践中不会涉及太多的计算开销,用于上下文示例扩增。具体地说,我们首先将训练数据中的所有候选代码段纳入向量表示 v v v。然后,对于每个向量化查询 v q v_q vq,我们计算它与所有候选查询之间的相似度指标 d ( v q , v ) d(v_q, v) d(vq,v),输出前5个结果作为示例。

在这里插入图片描述

3.3、预热策略

  预热与微调有着截然不同的目的与做法:

  • 微调通过使用相关样本进行训练来提高llm在特定任务上的性能,使用不记录语句(即完整提示中的查询)的代码片段进行训练。
  • 预热则增强了llm的一般类比能力,即根据提示中的每条指令找到有限上下文示例的共同特征。使用完整提示作为输入,每个提示包括一条指令、几个演示示例和一个查询。

  在UNILOG的实现中,我们将所有预热样例的指令设置为相同的目标(即,日志语句生成),并将标记的代码片段设置为提示示例,以特定于任务的方式提高ICL能力。因此,整个预热过程如下:

  • 默认情况下,UniLog首先从验证集中随机选择500个样本作为预热提示的查询。
  • 然后,对于每个查询,UniLog采用KNN算法在训练集中再搜索5个最相似的样本作为提示例,附加它们的groundtruth标签,并与固定的指令一起打包成一个完整的提示。
  • 之后,所有的提示将被提交给Codex进行批量参数调整。

四、评估

  本文设置了以下三个研究问题:

  • UniLog与现有的基于llm的日志方法相比如何?
  • 与 微调相比,ICL能给日志记录带来多少改进?
  • 不同的ICL策略如何影响日志记录的有效性?

4.1、UniLog与现有的基于LLM的日志方法相比如何

  为了证明UniLog在日志语句生成任务中的有效性,我们采用了带和不带预热的两个版本的UniLog(即,UniLog-w/ warmUniLog-w/o warm)来与专门为日志任务设计的其他日志方法进行比较。考虑到重现基于LLM的方法需要微调的难度,所以直接使用了LANCE原论文中报告的评估结果,而不是再次对其进行重新训练。由于原论文没有采用BLEU进行评价,因此在结果表中用N/A代替了该指标。

在这里插入图片描述

  在没有模型调优的情况下,UniLog在所有指标中都优于LANCE。

4.2、与微调相比,ICL能给日志记录带来多少改进

  实验结果如表2所示,表明Codex-ICL优于Codex-FT, MA优势14.3%,BLEU优势16.3。这些结果清楚地表明了Codex-ICL在日志消息生成方面的优越性。

在这里插入图片描述

然而,我们观察到Codex-ICL在较简单的任务中没有取得显着优势,即位置预测和水平预测。
日志位置预测分析
  尽管CodexFT显示出10%的高PA,但该度量本身的实际指导作用有限,因为在大多数实际场景中,将日志语句移动几行并不会产生显著差异。因此,我们利用位置距离来进一步评估预测与实际情况之间的行间隔。例如,如果预测行ID为<line4>,真实线ID为<line3>,则位置距离为1。
在这里插入图片描述
  如图6所示,误差预测在位置(即非零位置距离)上的位置距离分布用累积分布函数(CDF)表示。这说明在Codex-ICL和Codex-FT之间的分布没有显著差异。

详细级别(Verbosity level)预测分析
  详细级别预测分析数据集中有五个日志详细级别:致命(fatal)、错误(error)、警告(warn)、信息(info)和调试(debug)。
  这些级别服务于不同的目的。例如,Fatal和Error处理严重问题并生成错误消息,而Info和Debug在大多数情况下提供可忽略或琐碎的信息。
  然而,对于级别评估来说,LA是不够的,因为将Debug预测为Info或Fatal在实践中可能会产生截然不同的影响。因此,我们引入水平距离来细粒度量化预测水平与真实水平之间的差距。例如,如果预测结果为Debug,真值也为Debug,则距离为0;如果预测结果为Debug,而真实值为Error,则级别距离为3,因为它们之间有三个级别。如图6所示,Codex-ICL和Codex-FT之间的能级距离分布相似。例如,这两个主要预测与基本事实(约90.0%)仅相差一个水平。然而,Codex-ICL仍然产生更高比例的精确匹配预测(即LA)。因此,我们认为基于ICL的方法在水平预测方面有轻微的优势。

4.3、不同的ICL策略如何影响日志记录的有效性

  本节将分析不同配置对日志记录有效性的四个方面的影响:(1)模型主干的类型,(2)提示示例的数量,(3)提示示例的排列方法,(4)预热示例的数量。

模型主干的类型

  为了确保ICL范式能够被利用,LLM的大小必须保证足够大。因此,在实验中,我们将不考虑规模相对较小的LLM。为了确保规模(即>100M)和结构(即仅解码器)的公平性,我们选择了GPT-3系列中的型号作为骨干,即GPT-3- a、GPT-3- b、GPT-3- c和Codex。
在这里插入图片描述

  实验结果如表4所示。可以看出,与其他llm相比,UniLog在使用Codex作为主干时具有相对较大的精度优势。例如,在测井位置方面,Codex的精度比GPT-3系列高30%左右,而BLEU的精度甚至是其他系列的两倍以上。结果表明,使用与代码相关的模型作为主干极大地影响了UniLog的性能,而简单地增加通用LLM的参数并不能有效地提高日志记录能力。

提示示例的数量

  为了研究提示示例数的影响,我们考虑了比较实验中示例数的五个层次:1、3、5、10和15。特别是,我们观察到,当示例数量超过15时,有效性指标没有显着改善。因此,我们选择不将这些结果包含在表中。
在这里插入图片描述
  实验结果如表5所示。随着提示示例数量的增加,所有指标都会逐渐改善。但随着提示示例数量超过5个,指标的增长速度逐渐放缓,出现饱和趋势。例如,当提示示例数从5个增加到10个时,BLEU略有下降;当数字增加到15时,其BLEU与数字为5时保持相同。此外,更多的提示示例可能导致更重的模型计算消耗和更慢的推理速度,从而导致实际效率低下。因此,我们最终设计的UniLog只有5个提示示例。

提示示例的排列方法
文中主要选择三种方法进行对比实验

  • (1)随机选择然后随机排序(即随机)
  • (2)根据KNN相似度选择然后升序排序(即𝑘NN-ascend)
  • (3)根据KNN相似度选择然后降序排序(即𝑘NN-descend)。

在这里插入图片描述

  实验结果如表6所示。我们发现𝑘NN-ascend在所有指标中都优于其他两种选择策略,这表明它在UniLog提示符中起着不可或缺的作用。

预热示例的数量
  本文考虑了五个层次的样本数进行比较实验:100、300、500、700和900。特别是,我们观察到,当样本数量超过900时,有效性指标没有显着改善。因此,我们选择不将这些结果包含在表中。
在这里插入图片描述

  实验结果如表7所示。当样本数量大于500时,总体指标不再有明显改善,有些指标甚至出现下降,这表明UniLog通过热身提高的有效性是有限的,趋于饱和。例如,当样品数量从500个增加到700个时,MA没有增加,CMA和BLEU都略有下降。此外,随着样本数量的增加,训练开销逐渐增加,不再满足第1节所示的快速部署需求。因此,考虑到计算成本,我们最终只设计了500个样本的UniLog


五、讨论

5.1、有效性威胁

  • 数据泄露
    CodeX是使用2020年5月前的数据进行预训练,而本文的数据用的是2022年收集的,如果在此期间数据库中有些代码没有变动的话,则会导致数据泄露
  • 随机性
    随机性可能在两个方面影响性能:(1)llm推理中的随机性;(2)RQ3中随机选择提示演示和预热样本所引入的随机性。

5.2、道德问题

  UniLog可能会遇到与LLM使用相关的道德问题,即

  • (1)使用第三方LLM模型作为骨干可能会导致代码或日志的隐私泄露。
  • (2)使用包含刻板印象或种族偏见的代码作为候选人可能会产生有害的日志信息。

5.3、误差分析

  本文将错误消息分为以下三种情况:(1)具有相似语义的消息,(2)具有不同记录的消息,以及(3)具有无意义信息的消息。

具有相似语义的消息
  基于精确匹配标准,由于同义词替换、词序变化或包含更简洁或详细的描述,这些语义相同的消息被认为是错误的。尽管表达式并不完全相同,但它们具有相似的语义。因此,我们认为它在开发过程中可能不会产生重大影响

具有不同记录的消息
  在我们提取的错误日志消息中,116条(23.2%)错误消息涉及错误的位置预测,导致记录的变量或描述与真实情况完全不同。然而,我们发现这些信息可能仍然有用。为了进一步提高LLM在正确位置插入日志的能力,我们建议引入更多不同日志位置的预热样例,从而提高LLM对日志位置的敏感性

具有无意义信息的消息
  我们发现167条错误消息(33.4%)重新编码了无用的变量或提供了完全无意义的描述。在分析它们的提示输入后,我们发现这是由于演示和查询之间编码风格的显著差异。编码风格的差异会阻碍UniLog通过ICL推理和与演示的类比来有效地学习日志。为了缓解这些问题,我们建议增加候选集的多样性,合并更多具有不同编码风格的代码片段,以提高对各种查询的提示演示的质量v


六、总结

  • 本文介绍了UniLog,这是一种采用大型语言模型(llm)的上下文学习(ICL)范式的新型日志框架。UniLog以端到端方式执行自动日志记录,包括选择日志记录位置、预测详细级别和生成日志消息。

  • UniLog不需要在每次使用之前对目标代码样式进行微调。UniLog已经对从1,465个GitHub存储库中提取的12,012个代码片段进行了评估,并在所有日志任务中实现了SOTA精度。

  • UniLog所需的参数调优时间不到SOTA方法所需的4%。作为第一个在日志记录中采用ICL范式的工作,我们相信UniLog可以促进更好的日志记录实践,并启发在一般日志分析研究中设计有效的框架。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/777647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3d金属模型灯怎么安装---模大狮模型网

在3D场景中&#xff0c;添加灯光是非常重要的步骤&#xff0c;可以提升场景的氛围和逼真度。特别是对于金属材质的模型&#xff0c;合适的灯光设置能够突出其质感和反射效果。下面将介绍如何在3D软件中安装金属模型灯&#xff0c;并分为以下四个分类进行详细说明。 一、选择合适…

竞赛 python+opencv+深度学习实现二维码识别

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; pythonopencv深度学习实现二维码识别 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 该项目较为新颖&…

【InternLM 实战营第二期笔记】书生·浦语大模型全链路开源体系及InternLM2技术报告笔记

大模型 大模型成为发展通用人工智能的重要途径 专用模型&#xff1a;针对特定任务&#xff0c;一个模型解决一个问题 通用大模型&#xff1a;一个模型应对多种任务、多种模态 书生浦语大模型开源历程 2023.6.7&#xff1a;InternLM千亿参数语言大模型发布 2023.7.6&#…

视觉信息处理与FPGA实现第八次作业——verilog实现对比度调节

一、查看灰度图的数据格式 2.1 安装HxD HxD下载链接&#xff1a;https://download.csdn.net/download/weixin_44357071/89045331 解压直接打开exe就能使用。 将需要查看二进制数据的图片拖到软件框里就能读取 2.2 找到bmp图像的图片点阵数据起始地址&#xff0c;原理和例子…

R语言批量计算t检验,输出pvalue和均值

1.输入数据如下&#xff1a; 2.代码如下 setwd("E:/R/Rscripts/rG4相关绘图") # 读取CSV文件 data <- read.csv("box-cds-ABD-不同类型rg4-2.csv", stringsAsFactors FALSE)# 筛选出Type2列为指定五种类型的数据 filtered_data <- subset(data, …

使用Kaggle API快速下载Kaggle数据集

前言 在使用Kaggle网站下载数据集时&#xff0c;直接在网页上点击下载可能会很慢&#xff0c;甚至会出现下载失败的情况。本文将介绍如何使用Kaggle API快速下载数据集。 具体步骤 安装Kaggle API包 在终端中输入以下命令来安装Kaggle API相关的包&#xff1a; pip install…

elementplus-vue-审核按钮-对话框(Dialog )

效果图&#xff1a; 代码&#xff1a; <template> <el-button type"success" click"dialogVisible true" :icon"Edit">审核</el-button> <el-dialog v-model"dialogVisible" title"是否通过" width&q…

公链角逐中突围,Solana 何以成为 Web3 世界的流量焦点?

在众多区块链公链中&#xff0c;Solana 凭借其创纪录的处理速度和极低的交易费用&#xff0c;成为了众多开发者和投资者的宠儿。就像网络上流行的那句话所说&#xff1a;“Why slow, when you can Solana?”&#xff0c;Solana 正以它的速度和强大的生态系统&#xff0c;重新定…

uniApp使用XR-Frame创建3D场景(5)材质贴图的运用

上一篇讲解了如何在uniApp中创建xr-frame子组件并创建简单的3D场景。 这篇我们讲解在xr-frame中如何给几何体赋予贴图材质。 先看源码 <xr-scene render-system"alpha:true" bind:ready"handleReady"><xr-node><xr-assets><xr-asse…

AcWing 800. 数组元素的目标和(哈希)

原题链接 哈希思路: 我们可以在输入 时把每个数存进哈希表里&#xff0c;对于每个输入的 b[i]看看 x−b[i]是否出现与哈希表即可。 图解 #include <iostream> #include <algorithm> #include <unordered_map> using namespace std;const int N 111111;in…

【网安小白成长之路】3.MySQL环境配置以及常用命令(增删改查)

&#x1f42e;博主syst1m 带你 acquire knowledge&#xff01; ✨博客首页——syst1m的博客&#x1f498; &#x1f51e; 《网安小白成长之路(我要变成大佬&#x1f60e;&#xff01;&#xff01;)》真实小白学习历程&#xff0c;手把手带你一起从入门到入狱&#x1f6ad; &…

RabbitMQ3.x之四_RabbitMQ角色说明及创建用户与授权

RabbitMQ3.x之四_角色说明及创建用户与授权 文章目录 RabbitMQ3.x之四_角色说明及创建用户与授权1. 访问和授权1. Tags说明2. 命令行示例 2. 管理界面新建用户及访问授权1. 管理界面新建用户2. 管理界面中的授权说明3. guest用户不能远程登录提示 3. 创建用户1. 基本命令2. 实际…

大型矿业集团安全知识竞赛主持词

男&#xff1a;尊敬的各位领导&#xff0c;员工同志们&#xff1a; 合&#xff1a;大家好&#xff01; 男&#xff1b;首先让我们以热烈的掌声对公司领导亲临比赛现场指导观看表示欢迎&#xff01; 男&#xff1b;继成功开展了荣辱观专题讲座、好矿嫂女红艺术展、安全谜语竞猜…

RabbitMQ 实验消费原始队列消息, 拒绝(reject)投递死信交换机过程

如果你想通过 RabbitMQ 的死信队列功能实现消费者拒绝消息投递到死信交换机的行为&#xff0c;你可以按照以下步骤操作&#xff1a; 创建原始队列&#xff0c;并将其绑定到一个交换机上&#xff1a; export RABBITMQ_SERVER127.0.0.1 export RABBITMQ_PORT5672 export RAB…

反序列化动态调用 [NPUCTF2020]ReadlezPHP1

在源代码上看到提示 访问一下看看 代码审计一下 <?php #error_reporting(0); class HelloPhp {public $a;public $b;public function __construct(){$this->a "Y-m-d h:i:s";$this->b "date";}public function __destruct(){$a $this->a;…

实验02-1 C#和ASP.NET控件:在Web窗体中输出九九乘法表

【实验内容及要求】 1. 在Web窗体中输出九九乘法表 浏览效果如图2-1所示。 图2-1 在Default.aspx.cs中编写C#代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls;public par…

目前常见的搜索引擎有哪些?

常见的搜索引擎可以分为两类&#xff1a;全网搜索类和平台内搜索。 全网搜索类是指可以在互联网范围内进行搜索的引擎&#xff0c;它们提供了广泛的搜索结果&#xff0c;包括网页、图片、视频、新闻等各种类型的内容。以下是一些常见的全网搜索引擎&#xff1a; 百度&#xff…

Mac安装wget流程及异常解决(亲测有效)

目录 1.终端输入wget检查自己是否已经安装过wget,没有安装如下图2. 安装brew1&#xff09;点击brew官网&#xff1a;[官网网址](https://brew.sh)2&#xff09;将命令粘贴到终端&#xff0c;回车执行3&#xff09;输入sudo密码4&#xff09;系统开始自动安装brew&#xff0c;等…

FIBEX文件详细解析

文件概况 FIBEX文件是flexray的数据库文件&#xff0c;相当于CAN的DBC。 首先得了解这种文件的架构&#xff0c;就像下图那样&#xff0c;所以本文也是按照这个架构来进行展开讲解。project和PROCESSING-INFORMATION都是次要的&#xff0c;最重要的是ELEMENTS里面的5个元素。…

如何在Windows 10中打开屏幕键盘?这里有详细步骤

本文解释了在Windows 10中打开或关闭屏幕键盘的不同方法&#xff0c;还解释了如何将屏幕键盘固定到开始菜单。 使用屏幕键盘的快捷键 如果你喜欢快捷方式&#xff0c;你会喜欢这个&#xff1a;按物理键盘上的WinCTRLO。这将立即显示屏幕键盘&#xff0c;而无需通过轻松使用。…