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

news2024/11/24 4:46:15

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 创建的代码解释时,学生的学习效果是否存在差异。

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

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

相关文章

【监控指标】监控系统-prometheus、grafana。容器化部署。go语言 gin框架、gRPC框架的集成

文章目录 一、监控有哪些指标二、prometheus、grafana架构Prometheus 组件Grafana 组件架构优点 三、安装prometheus和node-exporter1. docker pull镜像2. 启动node-exporter3. 启动prometheus 四、promql基本语法五、grafana的安装和使用1. 新建空文件夹grafana-storage&#…

二维空间与三维空间的姿态表示法

二维空间与三维空间的姿态表示法 一、2D空间姿态表示法二、3D空间姿态表示法2.1 三个数表示空间姿态问题 2.2 九个数表示空间姿态问题 2.3 四个数表示空间姿态 结语Reference 假设&#xff0c;你有志成为我空军某航空旅歼-20飞行员&#xff0c;但要想开好飞机&#xff0c;那就得…

mac装不了python3.7.6

今天发现一个很奇怪的问题 但是我一换成 conda create -n DCA python3.8.12就是成功的 这个就很奇怪

数据结构——B树

文章目录 B树1. 概念2. B树插入分析3.插入过程4. B树插入实现5.B树验证6. B树性能分析7.B树&B*树8. 小结9. B树的运用MyISAMInnoDB 10. 总结 B树 可以用于查询的数据结构非常的多&#xff0c;比如说二插搜索树、平衡树、哈希表、位图、布隆过滤器&#xff0c;但如果需要存…

【MySQL】MySQL入门基础

文章目录 一、数据库基础1. 什么是数据库2. 数据库和文件3. 主流数据库&#xff08;关系型数据库&#xff09; 二、MySQL的基本使用1. 连接服务器2. 服务器管理3. 服务器、数据库、表关系4. 使用案例 三、数据的逻辑存储和实际存储四、MySQL的架构五、SQL分类六、存储引擎 一、…

Java基础-015-System.java常用类

Java基础-015-System.java常用类 1、标准输入输出2、获取属性3、System.java初始化4、设置标准输出System.out java/lang/System.java 1、标准输入输出 System.in、System.out public class Test {public static void main(String[] args) {String charsetName String.valueOf…

青少年python大赛知识点学习5--字典

python中的字典&#xff0c;与我们使用的新华字典有点像。索引与对象&#xff0c;新华字典存的是每个字的相关内容&#xff0c;python中的字典是一个容器类型的数据结构&#xff0c;通过key进行索引。 1.什么是字典 字典是python内置的重要数据之一&#xff0c;与列表一样是一…

Intel oneAPI笔记(2)--jupyter官方文档(oneAPI_Intro)学习笔记

前言 本文是对jupyterlab中oneAPI_Essentials/01_oneAPI_Intro文档的学习记录&#xff0c;包含对SYCL、DPC extends SYCL、oneAPI Programming models等介绍和SYCL代码的初步演示等内容 oneAPI编程模型综述 oneAPI编程模型提供了一个全面而统一的开发人员工具组合&#xff0…

Go与数据库:NoSQL数据库的应用

大家好&#xff01;我是[lincyang]。 今天我们将一起探索Go语言与NoSQL数据库结合的强大能力&#xff0c;并通过五个实际案例来深入理解它们的应用。 1. Go与MongoDB的结合 1.1 用户管理系统 在用户管理系统中&#xff0c;我们需要存储用户的基本信息和权限设置。MongoDB的…

MQTT协议零基础快速入门

MQTT协议零基础快速入门 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的发布/订阅消息传输协议&#xff0c;广泛应用于物联网&#xff08;IoT&#xff09;和机器对机器&#xff08;M2M&#xff09;通信场景。它具有简单、开放、易于实现等优…

产品经理入门学习(五):思维导图 原型设计

参考引用 黑马-产品经理入门基础课程 1. 思维导图的作用和应用场景 什么是思维导图&#xff1f; 思维导图是一种将思维进行可视化的实用工具。具体实现方法是用一个关键词去引发相关想法&#xff0c;再运用图文并茂的技巧把各级主题的关系用相互隶属的层级表现出来&#xff0c;…

多态 虚函数表深度剖析 纯干货讲解(2)

&#x1f4af; 博客内容&#xff1a;多态 &#x1f600; 作  者&#xff1a;陈大大陈 &#x1f680; 个人简介&#xff1a;一个正在努力学技术的准C后端工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎私信&#xff01; &#x1f496; 欢迎大家&#xff1a;这里是CSD…

crond服务

目录 一、crond服务基础知识 1、crond服务介绍 2、查看crond服务的状态 3、crond服务配置文件详解 4、额外的配置文件目录 二、crond服务基础命令 1、crond服务使用 2、 管理和操作 crond 服务 3、crond服务命令举例 一、crond服务基础知识 1、crond服务介绍 1、crond…

【redis面试题】双写一致性

文章目录 前言一、什么是双写一致性1. 先删除缓存还是先修改数据库1.1 先删除缓存的情况1.2 先修改数据库的情况 2. 双写一致性的解决方案 二、允许延迟一致的解决方法1. 采用 MQ 中间件2. 采用 canal 中间件 三、强一致性的解决方法1. 采用 Redisson 提供的读写锁 前言 跟着B…

7-2 数论中的模幂运算

solution 欧拉函数法可以解决模幂运算 #include<stdio.h> #include<math.h> int main(){int a, m, n, r1;scanf("%d%d%d", &a, &m, &n);while(m){if(m&1) r(r*a)%n;a(a*a)%n;m>>1; }printf("%d", r);return 0; }给定伪…

AtCoder Beginner Contest 327 G. Many Good Tuple Problems(带标号二分图计数+有区别小球放入有区别盒子)

题目 一个长为n(n<30)的原始序列x&#xff0c;x[i]可以取值0或1 一个长为m(m<1e9)的点对序列(s,t)&#xff0c; s序列第i项和t的第i项&#xff0c;均可以取值[1,n]&#xff0c; 如果构造好s和t后&#xff0c;对任意都存在01序列x使得&#xff0c; 则称这个序列是合法…

基于8086家具门安全控制系统设计

**单片机设计介绍&#xff0c;基于8086家具门安全控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 8086家具门安全控制系统设计介绍 8086家具门安全控制系统是一种用于保护家具和保证室内安全的系统。该系统基于808…

类的成员函数总结

前言&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成的…

【java学习—十三】处理流之一:缓冲流(1)

文章目录 0. 引言1. 缓冲流2. 缓冲字节流2.1. 缓冲字节输入流2.2. 缓冲字节输出流2.3. 缓冲流实现文件的复制 3. 缓冲字符流 0. 引言 上一章节讲了&#xff1a;文件字符流和字节流&#xff08;基于硬盘&#xff09; 其中&#xff0c;用到的方法有&#xff1a;FlieInuputStream、…

JDBC简单流程

Step1&#xff1a;加载对应数据库&#xff08;比如mysql、oracle、sqlserver&#xff09;的驱动器 1、以mysql驱动器为例&#xff0c;下载好对应的jar包后&#xff0c;在项目对应目录下新建一个lib文件夹&#xff0c;将jar包复制到该文件夹中。 2、然后选中改jar包&#xff0…