【论文阅读-ICSE2023】预训练目标对代码相关任务的影响

news2024/11/24 16:21:14

目录

  • 简介
  • 有哪些预训练
  • 预训练的影响
    • 回答RQ1
    • 回答RQ2
  • 总结

简介

Title: Automating Code-Related Tasks Through Transformers: The Impact of Pre-training1
Author: Rosalia Tufano, Luca Pascarella, Gabriele Bavota
Published: ICSE2023

Abstract:
尽管现在很多研究能够证明预训练可以提升模型性能,但很少有研究解释预训练目标的影响。耳熟能详的MLM只是NLP领域的常见的文本预训练任务,而且NLP领域近期的研究也表明专门为下游任务设计预训练目标能进一步提升模型性能。例如,在代码摘要任务中,预训练目标可以是为方法生成一个合适的方法名。这篇文章预训练了32个Transformer(Text-To-Text Transfer Transformer (T5),small版本)模型,其中包含了使用通用预训练目标和专门为下游任务设计的预训练目标。实验包含了三个任务:bug-fixing, code summarization, code completion。结论包含两点:(1)预训练能提升模型性能,即使下游任务数据集很小。(2)MLM目标通常足以使模型的预测性能最大化。

单从摘要角度来看个,感觉结论的第一点是显而易见的。而第二点和上面提到的“NLP领域近期的研究”相矛盾,意味着大家以后也不用为下游任务特定设计预训练目标。

有哪些预训练

这篇文章首先给出目前代码相关的预训练任务总结
在这里插入图片描述
后续还会用到的预训练目标:

  • MLM:随机遮住一些token,然后模型预测被遮住的内容
  • NSP:给出两个句子a,b,预测a句子的下一句话会不会是b
  • RTD:预测一个token是否属于原始的句子,还是被随机替换了

预训练的影响

这篇文章只用了两个RQ来探索预训练的影响(对应于摘要中的两个结论)
RQ1: To what extent is the effectiveness of pre-training influenced by the size of the fine-tuning dataset?

  • RQ1探索预训练在下游fine-tuning数据集上的影响
  • RQ1中仅选择MLM作为预训练目标

RQ2: To what extent does the choice of the pre-training objective impact the performance of transformer models?

  • RQ2对比了通用的和特定设计的预训练目标,并探索了多个预训练目标的结合
  • general vs task-specific objectives
  • combinations of multiple objectives
  • 通用的预训练目标选择:MLM,NSP,RTD
  • 任务特定的目标选择如下:
    • bug-fixing任务:IMF
    • code summarization 任务:MNG
    • code completion任务:CBS

首先解释特定任务的预训练目标

  • Injected-Mutants Fixing (IMF): 输入给T5一个原始代码的变异体,要求模型输出中还原出原始输入
  • Method Name Generation (MNG):要求模型输出给定代码的函数名
  • Code Block Selection (CBS):给定函数并mask掉一个代码块,并给出两个候选代码块,模型需要选择一个合适的代码用于替换掉被mask掉的代码

预训练和fine-tune所用的数据集
在这里插入图片描述

回答RQ1

在这里插入图片描述
可以看出这篇文章预训练出来的模型在fine-tuning数据集小的时候才能好于不预训练的结果。

回答RQ2

在这里插入图片描述
上图展示了使用不同预训练目标进行预训练的结果,第一列表示任务,第二列表示单独预训练目标,后面表示预训练目标结合的情况。
改论文的得到的结论是:

  • 不同预训练目标的导致的模型性能差异较大
  • MLM预训练目标最有效
  • 如果特定任务的预训练目标能达到如下条件则能提升性能(i)与非特定目标(如MLM)相比捕获正交信息;以及(ii)严格模拟下游任务。

这个其实有点奇怪,按理说如果有一个预训练目标没什么作用,那么按理说结合了这个预训练目标之后不会对预训练过程产生明显的不良影响。

总结

优点:

  • 这篇文章所面向的问题是一个值得探索的问题
  • 文章中对SE相关任务的总结比较全面
  • 文章中预训练了多个模型,进行了多种对比实验

不足:

  • 文章中均基于一种预训练模型,没有在已有数据集上进行实验,且所有实验性能均较低,所以难以具有较强的说服力
  • 文章中的针对任务特定的预训练目标较少,不确定是否能够代表专门为该任务设计的预训练目标
  • 文章中的结合预训练目标后实验性能有下降,按直觉而言,结合一个有意义的预训练目标不提升可以理解,但下降了很多就会令人困惑,而论文中却没有解释这一点。

写作参考
tailored for:为xxx而定制


  1. https://arxiv.org/abs/2302.04048 ↩︎

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

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

相关文章

OSS的STS模式授权案例

OSS的STS模式授权 某云提供的权限管理系统主要包含两部分,RAM(资源访问管理)和STS(安全认证服务),以满足不暴露主账号AK\SK的情况下安全的授权别人访问的需求,STS提供的是一种临时访问授权。通…

XSS知识总结

XSS基础 跨站脚本(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这…

楼层滚动效果(超级简单,易懂)

系列文章目录 文章目录 系列文章目录一、楼层滚动效果图如下1. 下图是纯Css实现的楼层滚动2.通过Js优化后的楼层滚动如下图(🌹🌹) 二、楼层滚动(Css实现)1.滚动原理2.代码如下 三、楼层滚动(JsCss优化后的楼层滚动&…

FreeRTOS学习笔记(二)——内核机制

文章目录 0x01 临界段Cortex-M内核快速关中断指令关中断开中断进入和退出临界段的宏进入临界段退出临界段临界段代码应用 0x02 空闲任务与阻塞延时的实现空闲任务的创建实现阻塞延时阻塞等待总结 0x03 多优先级通用方法:taskRECORD_READY_PRIORITY()taskSELECT_HIGH…

微服务学习——服务异步通讯

实用篇-RabbitMQ 初识MQ 同步调用的问题 微服务间基于Feign的调用就属于同步方式,存在一些问题。 耦合度高 每次加入新的需求,都要修改原来的代码性能下降 调用者需要等待服务提供者响应,如果调用链过长则响应时间等于每次调用的时间之和…

【数据库】事务的隔离级别以及实现原理

文章目录 前言一、事务什么是事务?事务的四大特性分别是 二、事务并发存在的问题脏读可重复读不可重复读幻读 三、以MYSQL数据库来分析四种隔离级别第一种隔离级别:Read uncommitted(读未提交)第二种隔离级别:Read committed(读提交)第三种隔…

此环境变量太大,此对话框允许将值设置为最长 2047 个字符

背景: 自己是一个计算机爱好者,又大体精通计算机各种编程语言,所以电脑上安装的各种编译或者编程软件比较多,有一天需要安装一个多版本的python环境,发现无法添加环境变量,于是乎,自己去查看原因并解决这个…

C语言 sizeof, size_t, strlen

C语言 sizeof, size_t, strlen 文章目录 C语言 sizeof, size_t, strlen一. sizeof1.1 返回结构体长度 二. size_t三. sizeof 和 strlen 一. sizeof 返回一个结构体或者类型所占的内存字节数 1.1 返回结构体长度 这里我编写了2个结构体,区别在于数组问题 #include …

智慧园区gis三维数字孪生可视化平台辅助管理者提升安全管控效力

随着信息技术的发展,3D可视化已经成为交互式管理的主流。智慧3D可视化交互管理平台能够帮助企业实现高效、灵活的管理。 1:智慧3D可视化交互管理平台的基本特性 智慧3D可视化交互管理平台能够实时显示工厂中生产车间的设备和生产线的运行状态,并通过交互…

火焰图怎么看

性能平台 通过该平台可以使用pprof采集线上的服务指标数据生成CPU占用数据并自动绘制出火焰图,Top,以及函数调用图等。 1.1 火焰图 火焰图的深度代表了函数的调用栈,火焰图最深处就是正在执行的函数,上方的都是它的父函数&#x…

C++线程的简单学习及了解

此篇文章只是线程的简单了解。 文章目录 前言一、线程的优缺点二、C线程库 1.thread类的简单介绍2.线程函数参数总结 前言 什么是线程? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的控…

git 使用大全及各种疑难杂症解决方法(长期更新)

Git使用中遇到的各种问题及解决方法 git clone后修改文件然后再上传覆盖 git push出现“Everything up-to-date”解决方法 git commit后如何撤销或修改 git 同步远程和本地的同名分支 git push异常问题出现符号解决方法 git 删除最近或者任意一次提交commit

Http详解

一、什么是Http协议 Http全称为超文本传输协议,是目前使用最主流的 应用层协议, 二、Http工作过程 当我们在浏览器中输入一个 “网址”, 此时浏览器就会给对应的服务器发送⼀个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回⼀个 …

DAY06_常用API上

1:API 概述 1.1 API概述 如何自己设计对象并使用 获取已有对象并使用 而关于第一块知识:学习如何自己设计对象并使用,现在已经有一些基础了。 API(Application Programming Interface) :应用程序编程接口 那如何理解应用程序…

软件测试技术(四)白盒测试

白盒测试 白盒测试(White Box Testing)又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程,而不测试软件产品的功能,用于纠正软件系统在描述、表示和规格上的错误&#xff0c…

IDEA弹出`Lombok requires enabled annotation processing`错误信息

问题背景 项目启动时,弹出一个报错窗口 问题原因 当您使用 Lombok 库时,您可能会遇到Lombok requires enabled annotation processing的错误消息。这是因为 Lombok 库使用了 Java 注解处理器(annotation processor),而…

MySQL学习笔记第四天

第04章运算符 3.逻辑运算符 逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1、0或者NULL。 MySQL中支持4种逻辑运算符如下: 3.1逻辑非运算符 逻辑非(NOT或!)运算符表示当给定的值为0时返回…

【分布式技术专题】「分布式技术架构」手把手教你如何开发一个属于自己的限流器RateLimiter功能服务

限流器的算法选项 随着互联网的快速发展,越来越多的应用程序需要处理大量的请求。如果没有限制,这些请求可能会导致应用程序崩溃或变得不可用。因此,限流器是一种非常重要的技术,可以帮助应用程序控制请求的数量和速率&#xff0…

【JavaEE初阶】多线程(四)阻塞队列 定时器 线程池

文章目录 多线程案例阻塞队列概念生产者消费者模型标准库中的阻塞队列自己实现一个阻塞队列 定时器概念标准库中的定时器实现定时器 线程池标准库中的线程池工厂模式 ThreadPoolExecutor();构造方法参数详解(重点)实现线程池 多线程案例 阻塞队列 概念 阻塞队列是一种特殊的…

【软考备战·希赛网每日一练】2023年4月26日

文章目录 一、今日成绩二、错题总结第一题 三、知识查缺 题目及解析来源:2023年04月26日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析: 数据耦合:一组模块借助参数表传递简单数据。 公共耦合:多个模块都访问同一个…