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

news2025/2/21 21:13:35


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

文章目录

  • 摘要
  • 一、介绍
  • 二、背景和动机
    • 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.coloradmin.cn/o/1559112.html

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

相关文章

stable diffusion如何下载预处理器?

如何下载预处理器&#xff1f; 具体位置:SD文件>extensions>sd-webui-controlnet>annotator” 把整个文件夹复制到SD的文件夹里面 里面有一个“downloads”文件夹 把这些模型复制到“downloads”文件夹里

YOLOV5训练自己的数据集教程(万字整理,实现0-1)

文章目录 一、YOLOV5下载地址 二、版本及配置说明 三、初步测试 四、制作自己的数据集及转txt格式 1、数据集要求 2、下载labelme 3、安装依赖库 4、labelme操作 五、.json转txt、.xml转txt 六、修改配置文件 1、coco128.yaml->ddjc_parameter.yaml 2、yolov5x.…

PLC的大脑和心脏——CPU及其分类、端子接线图

CPU不断地采集输入信号&#xff0c;执行用户程序&#xff0c;刷新系统的输出。 根据供电方式和输入/输出方式的不同&#xff0c;CPU分为3类&#xff0c;如下图1。 图1 CPU的分类 第1对字母&#xff0c;表示CPU的供电方式&#xff0c;AC&#xff08;Alternating Current&#…

vcf文件可以用excel打开吗?四种解决方案

vcf文件可以用excel打开吗&#xff1f; 当然可以。 一、VCF文件简介 VCF&#xff08;vCard&#xff09;文件是一种用于存储联系人信息的文件格式。它通常包含姓名、电话号码、电子邮件地址、地址等详细信息。VCF文件在多种设备和操作系统中广泛使用&#xff0c;特别是在电子邮…

百度云加速方法「Cheat Engine」

加速网盘下载 相信经常玩游戏的小伙伴都知道「Cheat Engine」这款游戏内存修改器&#xff0c;它除了能对游戏进行内存扫描、调试、反汇编 之外&#xff0c;还能像变速齿轮那样进行本地加速。 这款专注游戏的修改器&#xff0c;被大神发现竟然还能加速百度网盘资源下载&#xf…

MySQL数据库备份策略与实践详解

目录 引言 一、MySQL数据库备份的重要性 &#xff08;一&#xff09;数据丢失的原因 &#xff08;二&#xff09;数据丢失的后果 二、MySQL备份类型 &#xff08;一&#xff09;根据数据库状态 &#xff08;二&#xff09;根据数据的完整性 &#xff08;三&#xff09;…

uniapp开发App(二)开通 微信授权登录功能(应用签名、证书、包名 全明白)

前言&#xff1a;开发App肯定要包含登陆&#xff0c;常用登陆方式很多&#xff0c;我选择微信登陆。 一、如何获得微信的授权登陆 答&#xff1a;申请&#xff0c;根据uniapp官网的提示有如下三个步骤 开通 1. 登录微信开放平台区&#xff0c;添加移动应用并提交审核&#xf…

基于java+SpringBoot+Vue的网上书城管理系统设计与实现

基于javaSpringBootVue的网上书城管理系统设计与实现 开发语言: Java 数据库: MySQL技术: SpringBoot MyBatis工具: IDEA/Eclipse、Navicat、Maven 系统展示 前台展示 后台展示 系统简介 整体功能包含&#xff1a; 网上书城管理系统是一个基于互联网的在线购书平台&#…

MSTP环路避免实验(华为)

思科设备参考&#xff1a;MSTP环路避免实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 MSTP&#xff08;多生成树协议&#xff09;&#xff0c;MSTP解决了STP和RSTP没有考虑vlan的问题&#xff0c;STP和RSTP将所有的vlan共享为一个生成树实例&#xff0c;无法实现…

STM32 字符数组结束符 “\0”

STM32 字符数组结束符 “\0” 使用字符数组使用printf&#xff0c;string参考 使用字符数组 使用STM32的串口发送数据&#xff0c;核心代码如下&#xff1a; char str[] "hello world!\n\r";while(1) {HAL_UART_Transmit(&huart2, str, sizeof (str), 10);HAL…

AI预测福彩3D第22弹【2024年3月31日预测--第5套算法开始计算第4次测试】

今天&#xff0c;咱们继续进行本套算法的测试&#xff0c;今天为第四次测试&#xff0c;仍旧是采用冷温热趋势结合AI模型进行预测。好了&#xff0c;废话不多说了。直接上结果~ 仍旧是分为两个方案&#xff0c;1大1小。 经过人工神经网络计算并进行权重赋值打分后&#xff0c;3…

Spring Boot 使用 Redis

1&#xff0c;Spring 是如何集成Redis的&#xff1f; 首先我们要使用jar包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><gro…

px转rem VsCode插件和快捷键

安装插件 修改配置参数 设置里面的 快捷键 altz

Java算法之哈希算法

Java算法之哈希算法 哈希表 哈希表&#xff08;Hash Table&#xff09;&#xff0c;也称为散列表&#xff0c;是一种根据关键码值&#xff08;Key Value&#xff09;直接进行访问的数据结构。它通过哈希函数&#xff08;Hash Function&#xff09;将关键码值映射到哈希表中的…

CXL系统架构

CXL系统架构 CXL支持三种设备类型&#xff0c;如下图。Type 1支持CXL.cache和CXL.io&#xff1b;Type 2支持CXL.cache&#xff0c;CXL.mem和CXL.io&#xff1b;Type 3支持CXL.mem和CXL.io。无论哪种类型&#xff0c;CXL.io都是不可缺少的&#xff0c;因为设备的发现&#xff0…

c实现猜数游戏(猜不对可是要自动帮你电脑关机)

接下来的日子会顺顺利利&#xff0c;万事胜意&#xff0c;生活明朗-----------林辞忧 前言 猜数字游戏作为一个基础的C程序小项目&#xff0c;实现简单&#xff0c;可以帮助我们巩固很多知识&#xff0c;作为扩展接下来我们实现一个自定猜数次数&#xff0c;用完次数电脑自动…

测试开发(测试用例篇)

一 测试用例篇 1.测试用例的概念: 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素 2.测试用例的好处 测试执行者的依据 使得工作可重复&#xf…

STM32CubeIDE基础学习-RS232通信

STM32CubeIDE基础学习-RS232通信 文章目录 STM32CubeIDE基础学习-RS232通信前言第1章 工程配置第2章 代码编写第3章 实验现象总结 前言 RS232也是串口的一种&#xff0c;RS-232是由电子工业协会(Electronic Industries Association, EIA)所制定的异步传输标准接口。在1962年发布…

常用类(比较器、System类、Math类、BigInteger与BigDecimal)

目录 一、Java比较器1.1、概述1.2、Comparable自然排序举例1.3、自定义类实现Comparable自然排序1.4、使用Comparator实现定制排序 二、System类、Math类、BigInteger与BigDecimal2.1、System类2.2、Math类2.3、BigInteger与BigDecima 一、Java比较器 1.1、概述 Java中的对象…

物联网实战--入门篇之(五)嵌入式-IIC驱动(SHT30温湿度)

目录 一、IIC简介 二、IIC驱动解析 三、SHT30驱动 四、总结 一、IIC简介 不管是IIC还是串口&#xff0c;亦或SPI&#xff0c;它们的本质区别在于有各自的规则&#xff0c;就是时序图&#xff1b;它们的相同点就是只要你理解了时序图&#xff0c;你就可以用最普通的IO引脚模…