当前位置: 首页 > news >正文

【网安AIGC专题11.1】论文12:理解和解释代码,GPT-3大型语言模型学生创建的代码解释比较+错误代码的解释(是否可以发现并改正)

Comparing Code Explanations Created by Students and Large Language Models

  • 写在最前面
    • 总结
    • 思考
  • 背景介绍
    • 编程教育—代码理解和解释技能培养
    • 编程教育—解决方案
    • 研究问题
    • 研究结果
  • 相关工作
    • Code Comprehension
    • Pedagogical Benifis of code explanation
    • Large Language Models in CS Education
    • Contribution of this paper
  • 方法与分析
    • 数据集
      • 数据来源
      • 数据收集
      • 数据抽样
      • 数据分析
    • 描述性统计
    • 学生和LLM生成的代码解释质量差异
  • 讨论与总结
    • 来自 GPT-3 和学生的好坏解释示例
      • 1
      • 2
      • 3
      • 4
    • 代码解释的特征
    • 学生和LLM创建的代码解释之间的差异
      • GitHub Copilot工具
      • 缺点:过度依赖LLM
    • What Do Students Value in Code Explanations?
    • Limitations
    • Future work

写在最前面

本文为邹德清教授的《网络安全专题》课堂笔记系列的文章,本次专题主题为AIGC。

李智佳同学分享了Comparing Code Explanations Created by Students and Large Language Models《学生和大型语言模型创建的代码解释比较》
https://doi.org/10.48550/arXiv.2304.03938
Submitted on 8 Apr 2023
Computer Science > Computers and Society

感觉这篇有点偏gpt生成的代码解释分析,以及和学生生成解释的对比(用的统计问卷分析,序数选项:非参数 Mann-Whitney U 检验)。
不是常规论文的那种思路——提升gpt生成性能

总结

本文通过让学生创建代码解释,然后对比评估他们同伴的代码解释以及 GPT-3 创建的代码解释。实验发现:
1、学生和 LLM 创建的代码解释在感知长度和实际长度上没有差异
2、但学生对 GPT-3 创建的代码解释的准确性和可理解性的评价都更高
3、此外,我们发现学生更喜欢详细的解释,而不是简明扼要的高层次解释。
4、LLM 创建的代码解释对练习代码阅读和解释的学生很有益处。

思考

1、随着基于LLM的人工智能代码生成器(如 GitHub Copilot)的出现,未来软件开发人员的角色将越来越多地是评估 LLM 生成的源代码,而不是从头开始编写代码。
2、GPT在面对错误代码时将如何解释?是否可以发现错误并改正?

背景介绍

编程教育—代码理解和解释技能培养

理解和解释代码的能力是计算机科学专业学生需要培养的一项重要技能。学生解释代码的能力与编写、跟踪代码等其他技能之间的关系,在计算教育领域已经有了广泛的研究。特别是,在高度抽象的水平上描述代码如何在所有可能的输入中表现的能力与代码写作技巧密切相关。
然而,学生很难解释自己的代码,而且解释代码的能力也是一项难以培养的技能,其并未明确列为学习目标。培养能够准确、简洁地理解和解释代码的专业技能对许多学生来说是一个挑战。

编程教育—解决方案

在这里插入图片描述

研究问题

问题 1 学生和LLM创建的代码解释在准确性、长度和可理解性方面有多大差异?
问题 2 学生重视代码解释的哪些方面?

研究结果

本文通过对比学生与LLMs创建的代码解释在准确性、可理解性和长度方面的优劣,评估了LLMs在生成解释方面的潜力。实验结果表明,LLM和学生生成的代码解释在理想长度上相当,LLM创建的、可按需自动生成的解释更容易理解且更准确。这对将这些模型纳入入门编程教育具有重要意义。

相关工作

Code Comprehension

代码理解技能对于帮助编程学生理解代码片段背后的逻辑和功能非常重要,程序员可以采用各种代码理解策略,从而灵活地理解编程概念。

在这里插入图片描述

Pedagogical Benifis of code explanation

代码解释可以帮助学生理解代码片段是如何执行的 ,从而帮助学生提高编写自己代码的推理能力 。它们还能通过分解复杂的概念来减轻压力。
在这里插入图片描述

Large Language Models in CS Education

基于人工智能的代码生成模型引发了计算教育研究领域的极大兴趣,初步研究主要集中在评估这些模型在解决入门课程中常见的编程问题时的性能。
例如“The Robots are Coming”[13],它利用了 Codex 模型和一个从高分终结性评估中提取的私人编程问题库。研究结果表明,Codex 生成的解决方案在评估中的得分率约为 80%。
此外,还有一些辅助研究对基于人工智能的代码生成模型生成学习资源的潜力进行了调查。
例如,Sarsa 等人[36]探索了使用 Codex 模型生成代码解释和编程练习的各种提示和方法,发现它经常生成新颖和高质量的资源。
MacNeil 等人[24]使用 GPT-3 模型生成简短代码片段的解释,然后将这些解释和相应的代码一起以在线电子书的形式呈现给学生。

问题:这种参与度低于预期,学生既没有参与代码示例的创建,也没有参与附带的解释。

在这里插入图片描述

Contribution of this paper

本研究通过直接比较学生生成的代码解释与人工智能模型生成的代码解释,做出了独特的贡献。
虽然之前的研究已经证明,LLM 可以生成专家和新手都认为是高质量的代码解释,但这是第一项调查学生如何评价同伴创建的代码解释与人工智能模型生成的代码解释的研究。

方法与分析

数据集

在这里插入图片描述

数据来源

本研究的数据是在奥克兰大学一年级编程课程中收集的。2022 年,约有 1000 名学生选修了这门课程。

数据收集

数据是在两次(A、B)不同的实验课上收集的,每次实验课为期一周。在第一次实验开始收集数据时,课程已涵盖了 C 编程语言中的算术、类型、函数、循环和数组等概念。

在第一个实验(Lab A)中,学生们看到了三个函数定义,并被要求总结和解释每个函数的预期目的。第二个实验(Lab B)中,学生们被要求对随机抽取的4份代码解释(一部分来自学生,一部分来自GPT-3)的准确性、可理解性和长度进行评分。
最后,学生回答以下问题:你们认为好的代码解释最有用的特征是什么?代码解释的哪些方面对你有用?
在这里插入图片描述

数据抽样

代码解释的生成和抽样概述

在Lab A中3个函数分别提交了963份解释,根据代码解释字长分为3类,每类抽取3条,共27条,研究又增加了27条GPT-3创建的解释。
在Lab B中,每个学生从54条解释中随机抽取4条,并对其评分:
(5个选项:非常不同意、不同意、中立、同意、非常同意)
A该解释通俗易懂
B该解释准确概括了代码
C该解释长度理想
D该解释非常准确概括了代码
在这里插入图片描述

数据分析

量化学生创建的代码解释与 LLM 生成的代码解释之间的差异,比较了两种代码解释来源的学生对Likert-scale问题的回答并探究学生看重代码解释的哪些方面。

为了回答问题 1 ,比较了两种代码解释来源的学生对Likert-scale问题的回答。由于Likert-scale表回答数据是序数,本文使用了非参数 Mann-Whitney U 检验来检验学生和LLM代码解释之间的差异。检验了:
①在代码解释是否通俗易懂方面是否存在差异;
②在代码解释是否准确概括代码方面是否存在差异;
③在代码解释长度是否理想方面是否存在差异。
④研究了代码解释的实际长度,以形成学生和 GPT-3 之间代码解释长度是否存在差异的基线,这有助于解释其他研究结果。
对于四次 Mann-Whitney U 检验,使用 Bonferroni 校正 p < 0.05/4 作为统计显著性的临界值。
为了回答问题 2,即研究学生重视代码解释的哪些方面,对随机抽取的 100 份学生对开放式问题 "代码解释的哪些方面对你有用?"的回答进行了专题分析。

描述性统计

共有 954 名学生参与了评估代码解释质量的活动。表 1 显示了这些回答的平均值和中位数,以及学生创建的代码解释和 LLM 生成的代码解释的平均长度。图 3 进一步概括了回答的分布情况,对不同的回答分别用不同的颜色进行了标注,并对不同的回答值进行了直观的比较。

在这里插入图片描述
在这里插入图片描述

学生和LLM生成的代码解释质量差异

本文进行了Mann-Whitney U 检验,以研究学生和 LLM 生成的代码解释之间的差异。从表 2 中的共同语言效应大小(CLES)来看,学生和LLM生成的代码解释对中,学生生成的代码解释更容易理解的比例约为 40%,而LLM的比例约为 60%。同样,在学生生成的代码解释和LLM生成的代码解释中,学生生成的代码解释是更准确的摘要的比例约为 44%,而LLM生成的代码解释是更准确的摘要的比例约为 56%。根据 Bonferroni 修正,学生对代码解释长度是否理想的看法在统计学上没有显著差异,代码解释的实际长度在统计学上也没有显著差异。
在这里插入图片描述

讨论与总结

来自 GPT-3 和学生的好坏解释示例

为了说明 GPT-3 和学生创建的解释类型,本文介绍了四个学生认为质量不同的解释示例–LLM 和学生创建的最大值函数的最高和最低解释。

学生们更喜欢以逐行的形式来说明函数是什么和如何操作的解释。
许多学生还认为,好的解释应说明代码的输入和输出。糟糕的解释则是遗漏了代码的某些细节,同时篇幅过长或过短。例如,解释可能会在较高的层次上说明代码的目的,但没有详细说明使用了哪些数据结构,或函数的输入是什么。
此外,论文发现所有 LLM 生成的解释都以 "此代码片段 "或 "此代码片段的目的 "开头,而学生生成的解释则差异较大。这部分是由于 LLM 的提示,它被要求解释 "以下代码片段 "的目的。不过,学生和LLM的大多数解释一般都遵循类似的结构:函数的目的、代码分析以及最后的返回输出

1

在这里插入图片描述

2

在这里插入图片描述
在这里插入图片描述

3

在这里插入图片描述

4

在这里插入图片描述

代码解释的特征

在专题分析(n=100)中,发现学生们几乎各占一半,分别侧重于代码的特定方面和一般方面,有些学生的回答还包括这两方面。在关注代码的具体方面时,学生描述了逐行解释的必要性(21%)。学生们还关注更低级别的细节,如变量名、输入和输出参数(36%)以及术语定义(8%)。一些学生要求提供代码解释中很少包含的其他方面。例如,学生要求提供示例、模板以及编写代码背后的思考过程。
学生们广泛地评论了好的解释应具备的品质。篇幅是一个重要方面,40% 的学生明确评论了解释的篇幅。然而,对于最理想的确切长度并没有达成明确的共识。相反,评论往往侧重于效率;用最少的字数传达最多的信息。学生似乎对简短的解释评价不高。部分原因可能是这些解释几乎或根本没有提供函数中不明显的额外信息,例如函数名称。
学生作为新手,可能更喜欢更详细的解释,因为这有助于他们更好地学习和理解代码中实际发生的事情。

学生和LLM创建的代码解释之间的差异

GitHub Copilot工具

将重点从编写代码转移到理解代码的目的、评估生成的代码是否合适以及根据需要修改代码,从而使代码理解成为一项更加重要的技能。而,LLM 不仅可以帮助学生生成代码,还可以通过创建代码解释(可用作代码理解练习)来帮助学生理解代码。

缺点:过度依赖LLM

对抗过度依赖LLM创建的代码解释的方法之一是监控学生使用这类工具的使用(例如,给予学生有限数量的tokens ,这些tokens会在他们向LLM请求解释时使用)。例如,学生可以通过要求解释来获得固定数量的代币开始和使用,然后通过编写自己的手工代码解释来获得代币。

What Do Students Value in Code Explanations?

在专题分析中发现,学生们表示更喜欢逐行解释。这也是LLM似乎最擅长的解释类型。

这表明,教师和学生对什么是好的解释可能存在不一致的意见。甚至可能是一些先前的工作"不公平"地对学生的多结构解释进行了较低的评价,因为学生可能能够产生更抽象的关系解释,但他们认为更长、更详细的解释是"更好"的,从而产生了这些类型的解释。

在专题分析中,还观察到,LLM 创建的解释密切遵循标准格式。向学生展示 LLM 创建的解释可能有助于他们在自己的解释中采用标准格式,这可能有助于做出更好的解释。

Limitations

关于普适性,我们研究中的学生都是新手。这可能会影响他们创建的解释类型,以及他们如何评价同伴和 GPT-3 创建的解释。
有可能水平较高的学生或指导老师所创建的代码解释的评分会高于 GPT-3 创建的解释。
一旦学生积累了更多经验,他们可能会开始重视更抽象、更简短的解释。
只考察了学生对解释质量的看法,未考虑学习效果差异。

Future work

评估学生和 LLM 在解释和检测错误代码中的错误方面的表现
研究在使用学生和 LLM 创建的代码解释时,学生的学习效果是否存在差异。

相关文章:

【网安AIGC专题11.1】论文12:理解和解释代码,GPT-3大型语言模型学生创建的代码解释比较+错误代码的解释(是否可以发现并改正)

Comparing Code Explanations Created by Students and Large Language Models 写在最前面总结思考 背景介绍编程教育—代码理解和解释技能培养编程教育—解决方案研究问题研究结果 相关工作Code ComprehensionPedagogical Benifis of code explanationLarge Language Models i…...

【GEE】4、 Google 地球引擎中的数据导入和导出

1简介 在本模块中&#xff0c;我们将讨论以下概念&#xff1a; 如何将您自己的数据集引入 GEE。如何将来自遥感数据的值与您自己的数据相关联。如何从 GEE 导出特征。 2背景 了解动物对环境的反应对于了解如何管理这些物种至关重要。虽然动物被迫做出选择以满足其基本需求&am…...

【C++】特殊类设计+类型转换+IO流

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…...

JAVA整理学习实例(一)面向对象

JAVA整理学习实例&#xff08;一&#xff09;面向对象 注&#xff1a;整理一下之前写的东西&#xff0c;然后在修修补补&#xff0c;水平有限&#xff0c;有错误的请指正。 前言 基础部分的面试大部份是理论和一些语法细节&#xff0c;如果平时没有关注&#xff0c;在面试或者做…...

QT 实现解密m3u8文件

文章目录 概要如何解密M3U8文件呢实现思路和代码序列图网络请求解密 结论 概要 视频文件很多已M3U8文件格式来提供&#xff0c;先复习下什么是M3U8文件&#xff01;用QT的 mutimedia框架来播放视频时&#xff0c;有的视频加载慢&#xff0c;有的视频加载快&#xff0c;为啥&am…...

论文阅读—— BiFormer(cvpr2023)

论文&#xff1a;https://arxiv.org/abs/2303.08810 github&#xff1a;GitHub - rayleizhu/BiFormer: [CVPR 2023] Official code release of our paper "BiFormer: Vision Transformer with Bi-Level Routing Attention" 一、介绍 1、要解决的问题&#xff1a;t…...

理解 fopen的 rwa r+w+a+ 参数含义

tags: C categories: C 理解 一图胜千言 我愿称之为最强 c - Difference between r and w in fopen() - Stack Overflow; 需要注意里面的a和 a, 区别在于 a 不可以读而 a可以读. c - Difference between r and w in fopen() - Stack Overflow; ModeReadWriteCreate New Fil…...

【强化学习】17 ——DDPG(Deep Deterministic Policy Gradient)

文章目录 前言DDPG特点 随机策略与确定性策略DDPG&#xff1a;深度确定性策略梯度伪代码代码实践 前言 之前的章节介绍了基于策略梯度的算法 REINFORCE、Actor-Critic 以及两个改进算法——TRPO 和 PPO。这类算法有一个共同的特点&#xff1a;它们都是在线策略算法&#xff0c…...

驱动开发11-2 编写SPI驱动程序-点亮数码管

驱动程序 #include <linux/init.h> #include <linux/module.h> #include <linux/spi/spi.h>int m74hc595_probe(struct spi_device *spi) {printk("%s:%d\n",__FILE__,__LINE__);char buf[]{0XF,0X6D};spi_write(spi,buf,sizeof(buf));return 0; …...

Java使用pdfbox进行pdf和图片之间的转换

简介 pdfbox是Apache开源的一个项目,支持pdf文档操作功能。 官网地址: Apache PDFBox | A Java PDF Library 支持的功能如下图.引入依赖 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox-app</artifactId><version>…...

机器学习中的关键组件

机器学习中的关键组件 数据 每个数据集由一个个样本组成&#xff0c;大多时候&#xff0c;它们遵循独立同分布。样本有时也叫作数据点或数据实例&#xff0c;通常每个样本由一组称为特征或协变量的属性组成。机器学习会根据这些属性进行预测&#xff0c;预测得到的称为标签或…...

【JVM】JDBC案例打破双亲委派机制

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 打破双亲委派机制&#xff08;JDBC案例…...

每天五分钟计算机视觉:池化层的反向传播

本文重点 卷积神经网络(Convolutional Neural Network,CNN)作为一种强大的深度学习模型,在计算机视觉任务中取得了巨大成功。其中,池化层(Pooling Layer)在卷积层之后起到了信息压缩和特征提取的作用。然而,池化层的反向传播一直以来都是一个相对复杂和深奥的问题。本…...

Docker的安装、基础命令与项目部署

文章目录 前言一、docker安装与MySQL部署1.Linux环境下docker的安装&#xff08;1&#xff09;基于CentOS7&#xff08;2&#xff09;基于Ubuntu 二、docker基础1.常见命令&#xff08;1&#xff09;快速创建一个mysql容器&#xff08;MySQL得一键安装&#xff09;。&#xff0…...

Nodejs和npm的使用方法和教程

Nodejs简介 Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它几乎是任何类型项目的流行工具&#xff01; &#xff08; 运行环境&#xff0c;是不是很熟悉&#xff0c;对。就是 java JRE&#xff0c;Java 运行时环境&#xff09; Node.js 在浏览器之外运行 V8 Java…...

机器学习---支持向量机的初步理解

1. SVM的经典解释 改编自支持向量机解释得很好 |字节大小生物学 (bytesizebio.net) 话说&#xff0c;在遥远的从前&#xff0c;有一只贪玩爱搞破坏的妖怪阿布劫持了善良美丽的女主小美&#xff0c;智勇双全 的男主大壮挺身而出&#xff0c;大壮跟随阿布来到了妖怪的住处&…...

【unity实战】Unity实现2D人物双击疾跑

最终效果 前言 我们要实现的功能是双击疾跑&#xff0c;当玩家快速地按下同一个移动键两次时能进入跑步状态 我假设快速按下的定义为0.2秒内&#xff0c;按下同一按键两次 简单的分析一下需求&#xff0c;实现它的关键在于获得按键按下的时间&#xff0c;我们需要知道第一次…...

Spring面试题:(二)基于xml方式的Spring配置

xml配置Bean的常见属性 id属性 name属性 scope属性 lazy-init属性 init-method属性和destroy属性 initializingBean方法 Bean实例化方式 ApplicationContext底层调用BeanFactory创建Bean&#xff0c;BeanFactory可以利用反射机制调用构造方法实例化Bean&#xff0c;也可采用工…...

XR Interaction ToolKit

一、简介 XR Interaction Toolkit是unity官方的XR交互工具包。 官方XRI示例地址&#xff1a;https://github.com/Unity-Technologies/XR-Interaction-Toolkit-Examples 2023.3.14官方博客&#xff0c;XRIT v2.3 https://blog.unity.com/engine-platform/whats-new-in-xr-int…...

spring-boot中实现分片上传文件

一、上传文件基本实现 1、前端效果图展示&#xff0c;这里使用element-ui plus来展示样式效果 2、基础代码如下 <template><div><el-uploadref"uploadRef"class"upload-demo":limit"1":on-change"handleExceed":auto-…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言&#xff1a;本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中&#xff0c;跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南&#xff0c;你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案&#xff0c;并结合内网…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”&#xff0c;于是尝试整合图像识别与网页自动化技术&#xff0c;完成了这套模拟登录流程。核心思路是&#xff1a;截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...

Python的__call__ 方法

在 Python 中&#xff0c;__call__ 是一个特殊的魔术方法&#xff08;magic method&#xff09;&#xff0c;它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时&#xff08;例如 obj()&#xff09;&#xff0c;Python 会自动调用该对象的 __call__ 方法…...