ChatGPT能否通过入门级函数式编程课程?

互联不一般哥 2024-07-08 18:35:10

Can ChatGPT Pass An Introductory Level Functional Language Programming Course?

Chuqin Geng, Yihan Zhang, Brigitte Pientka , Xujie Si

引用

Chuqin Geng, Yihan Zhang, Brigitte Pientka and Xujie Si. 2023. Can ChatGPT Pass An Introductory Level Functional Language Programming Coutse?. arXiv preprint axXiv:2305.02230, 2023. https://doi.org/10.48550/arXiv.2305.02230

论文:https://arxiv.org/abs/2305.02230

摘要

本文旨在探讨ChatGPT在入门级函数式编程课程中的表现。在系统性评估中,我们将ChatGPT视为课程的一个学生,结果显示它能够达到B级成绩,其在314名学生中的排名为155。我们的全面评估为学生和教师的角度提供了有价值的见解。此外,我们还指出了ChatGPT可能为双方带来的潜在好处。总的来说,我们相信这项研究显著澄清并推进了我们对ChatGPT能力及其对计算机科学教育潜在影响的理解。

1 引言

近年来,随着GPU和TPU等计算硬件的进步以及海量训练数据的可用性,大语言模型的发展步伐加快。这些模型的成功主要归功于深度学习架构从循环神经网络(RNN)向Transformer模型的转变。如今,像BERT(双向Transformer编码器表示)和T5(文本到文本转移Transformer)这样的成功模型大多基于Transformer架构。

OpenAI开发的GPT(生成预训练Transformer)家族模型是这一趋势的显著例子。早期的语言模型如GPT-1参数相对较少,但随着GPT-2和GPT-3的推出,语言模型的规模大幅增长。例如,GPT-3拥有1750亿个参数,成为迄今为止最大的语言模型之一。而ChatGPT,作为OpenAI GPT-3的增强版本,也被称为GPT-3.5,其性能在几乎所有的基准测试中超越了GPT-3。这些大型语言模型极大地提升了自然语言处理(NLP)任务,如文本生成、摘要和翻译。它们的日益增长的能力使其可用于各种应用,如聊天机器人、虚拟助手,甚至代码生成。

ChatGPT的日益流行,源于其仅通过自然语言文本就能与用户交互的能力。这种能力与它们根据句子中先前单词预测下一个单词的能力密切相关。由于大多数与自然语言相关的任务都可以转化为下一个词的预测问题,因此,如果精心设计提示/指令,ChatGPT和其他GPT模型有望执行多种任务。通过适当的提示工程,ChatGPT能够执行广泛的任务,如语言翻译、摘要,甚至代码生成。因此,ChatGPT有可能成为教育、医疗等领域的宝贵工具,帮助用户仅使用自然语言输入完成任务和解决问题。在ChatGPT对计算机科学教育的影响方面,值得注意的是,模型理解和生成代码的能力相比先前的模型是一个重大突破。这一突破使得ChatGPT成为重塑计算机科学教育的工具。根据先前的研究,ChatGPT的前辈们已经能够理解和生成Python、Java和C等常用编程语言的代码。因此,在本研究中,我们关注的是在实际大学课程环境中,ChatGPT在理解OCaml(一种函数式编程语言)的概念和生成代码方面的性能。基于我们的实证结果,我们旨在探讨学生和教师/助教如何从ChatGPT中获益。虽然在计算机科学教育中使用ChatGPT有潜在优势,但我们也讨论了其局限性和潜在风险。总的来说,本文的贡献如下:

通过评估ChatGPT在2022秋季学期一门以OCaml为基础的初级函数式编程课程中的表现,来考察其性能。根据实际成绩分布对模型的性能进行排名。通过比较无辅助和辅助模式的结果,确定在引导学习的作用下,ChatGPT答案的质量可以有多大提升。

2 实验设计

本研究通过评估ChatGPT在2022秋季学期一门以OCaml为基础的初级函数式编程课程中的表现,来考察其性能。目标是确定ChatGPT在每次评估和整个课程中的成绩。为了将模型的表现与实际课程中的学生进行比较,我们还根据实际成绩分布对模型的性能进行排名。为了评估ChatGPT解决作业问题和考试问题的能力,我们采用了两种方法:无辅助和辅助模式(见图1)。这些提示类似于学生在答疑时间可能获得的帮助。

图1:研究设计流程图,包括无辅助和辅助两种类型的实验

2.1 课程概述

研究关注的是X大学二年级的计算机科学课程学生。该课程介绍了函数编程和编程范式的基本概念。这门课程每学期都会开设,注册的本科学生人数超过300人。在这个研究中,我们使用了2022年秋季的作业和考试题目,因为ChatGPT的训练数据截止于2021年,所以模型不太可能见过这些题目。

课程结构包括每周十次编程作业,每项占3%的学分,中期考试占20%,期末考试占总成绩的50%。表1概述了课程内容和相关的家庭作业。每个作业包含多个编程任务,要求实现函数和测试用例。所有作业都通过Learn-OCaml平台进行,这是一个专为OCaml设计的在线编程平台,学生可以在其中编辑、编译、测试和调试代码。我们使用了Learn-OCaml的一个修改版本,其中包含了“去函数化延续和堆栈机”等相关内容。表1列出了课程的时间安排概览。

表1 课程安排概览

2.2 实验设置

评估数据集。我们的数据集包含2022年秋季的作业问题和考试题目,因为ChatGPT的训练数据截止于2021年,所以它不太可能见过这些题目。

实验方法与指标。实验的初始阶段侧重于评估由ChatGPT自动产生的解决方案,我们称之为无辅助实验。我们将ChatGPT视为这门课程的学生,要求它完成2022年秋季学期的10个作业(总共31个问题),涵盖了模式匹配、递归、回溯、延续和高阶函数等各种主题,最后两个作业涉及用OCaml实现名为MiniOCaml的编程语言。ChatGPT生成的代码被粘贴到LearnOCaml平台进行评分。我们重复查询5次,计算平均分数,以考虑ChatGPT的启发式性质。我们同样使用这种方法处理2022年秋季学期的期末考试和期中考试。考试通常包含编程任务和概念问题,可以分为理论、代码完成和归纳证明三部分。理论部分涉及类型推断和OCaml基础知识的概念问题,而归纳证明则需要使用数学归纳法证明程序的正确性,通常是多选题。代码完成任务要求学生在纸上编写代码或填写OCaml程序的空白部分。为了公平比较,所有由ChatGPT返回的考试答案都由该课程的助教手动评分,使用与2022年秋季学期相同的评分标准。

错误类型。错误类型被分为三类:1)OCaml语法错误,这是OCaml新手常见的错误;2)编译错误,主要指类型不匹配错误;3)逻辑错误,即使程序成功编译,但如果答案未能通过自动评分器的测试用例,就会发生这种情况。根据我们的分类,ChatGPT提供的每个解决方案要么是正确的,要么存在上述错误类型之一。

实验流程。我们的实验流程采用统一格式,首先直接提供问题描述。除了问题要求,描述中可能还包含对学生的一些提示。我们无需明确指出我们希望答案用OCaml编写,因为ChatGPT能够从给定的起始代码或问题描述中识别编程语言。

3 实验评估

3.1 无辅助实验

表2 ChatGPT的HW结果

结果。表2展示了ChatGPT在每个作业问题上获得的分数及其解决方案中的错误。每个问题都由Learn-OCaml平台自动评分,满分100分。最后一列显示了在语法错误、编译错误和逻辑错误类别中的错误数量。我们可以看到,ChatGPT成功解决了超过一半(16个问题中的31个)的问题,还有4个任务获得了85%或以上的分数。值得注意的是,模型在9个问题上得分为0,主要是由于编译错误,即自动评分器无法评估其解决方案。特别是对于作业3、9和10,模型表现最差。在这三个任务中,作业3是一个特殊情况,因为我们在定义Church数值时采用了与常见形式不同的方式,即交换了定义函数的两个输入参数。然而,模型似乎忽略了我们给出的定义,而是使用了传统的定义,导致在作业3中,它的解决方案无法通过类型检查。作业9和10涉及实现一种名为MiniCAML的编程语言,这些题目依赖于类型检查和类型推断的概念。相比之下,作业7和8涉及高阶函数(HOF)、引用、惰性编程和流,尽管这些主题通常对学生来说颇具挑战性,但ChatGPT成功通过了所有测试。从模型的表现来看,我们可以得出结论,ChatGPT在理解函数背后的复杂逻辑和生成整洁代码方面表现出色。然而,它在推导表达式的类型方面显得力不从心。

分析。总的来说,ChatGPT在处理涉及模式匹配的基本递归函数生成上表现出色,特别是在尾递归、高阶函数使用、惰性编程甚至通常对学生来说非常困难的 Continuations 等主题上,它的表现远超我们的预期。这确实让我们感到惊讶。实际上,ChatGPT为通常非平凡且对学生来说困难的复杂问题提供了优雅的解决方案。生成的解决方案常常将复杂问题分解为较小的辅助函数,ChatGPT在使用状态(引用)和异常处理回溯问题上毫无困难。同样让我们惊讶的是,ChatGPT遇到困难的大部分时候是因为生成代码中的类型违反。然而,这可能通过提供辅助或验证答案,并将形式推理融入自然语言模型中来解决。

表3展示了在2022秋季学期无辅助实验中,ChatGPT在期中和期末考试中的表现。每份试卷的问题被分为三类:概念性问题(选择题或简答题)、代码完成和证明(见第2列)。第3列提供了每个问题的简要描述,第4列则给出了得分。从表格中可以看出,模型在两份试卷的代码完成部分表现出色,但在概念性问题上表现欠佳。可能的原因是考试中的编程问题往往有更简洁明确的指令,而OCaml概念问题则需要对函数式编程范式有深入理解。考试中的这些发现与作业情况一致。

表3 ChatGPT在期末考试和期中考试中按体型分组的表现

鉴于ChatGPT在考试和作业中的编程任务上表现出色,自然会产生两个问题:1)模型是否真正理解它生成的代码?2)它能否解释程序的执行过程?为了了解情况,我们让ChatGPT输出调用堆栈。模型能正确展开递归调用并生成与助教在黑板上解释递归程序执行类似的执行轨迹,这表明模型对其生成的函数有一定的理解。然而,需要注意的是,它输出的调用堆栈并不总是可靠的。

3.2 辅助实验

实验方法。提示学习和工程已经被证明在自然语言处理/大型语言模型研究中非常有效,并成为主要研究领域。在本论文中,我们也希望通过展示ChatGPT在提供更多相关信息时可以提高答案质量,来强调提示工程的重要性。在所谓的辅助研究中,我们开发了四种方法:同义替换、自然语言提示、示例教学和提供测试用例。使用这些技术,我们重新评估了ChatGPT在它之前未能获得满分的所有情况下。表2:ChatGPT的作业结果。我们使用了一些缩写:E1表示语法错误,E2表示编译错误,E3表示逻辑错误。第一列表示作业的编号,第二列指出了该作业涵盖的内容,第三列提供了每个任务的简要描述,最后四列记录了模型的总分以及语法错误、编译错误和逻辑错误的数量。我们发现,对请求进行改述有助于ChatGPT提供更准确的回答。图2展示了ChatGPT在解答编程问题时,前后改述请求的对话。在这个例子中,问题的独特性在于我们以不同于常规的方式定义了Church数。因此,ChatGPT最初的回应(第18行)是错误的,因为它在答案中使用了Church数的常见定义。然而,当我们把名称改为Charles而不是Church时,模型能正确理解我们的新定义,并给出了问题的正确答案(第39行)。

图2 HW3中某变成问题的改写示例

教师在答疑时间引导学生通常会使用自然语言提示。为了通过实例教导模型,我们会在输出对测试样例的预测前,提供一个上下文示例,即问题和答案对。在我们的案例中,我们从课程教程中选择了一个归纳证明的问题作为示例。图3a展示了ChatGPT最初返回的解决方案。模型未能识别出正确的基情况,其回答与标准归纳证明结构不一致。接着,我们输入了一个关于计数叶节点和内部节点的归纳证明问题(如图3b中第1-30行所示)。在提供这个示例后,模型返回的新解决方案(第33-63行)遵循了这类证明的典型形式,证明过程包含逻辑推理和清晰的推导,最终得出所需的结论。

图3 期末考试中通过示例讲解归纳证明的例子

结果。表4展示了使用四种方法改进ChatGPT在不同作业任务上的性能结果。表格列出了作业题目、初始分数以及应用方法后的分数,还标明了每道题目使用了哪些方法。可以观察到,ChatGPT在某些主题上的提升效果优于其他。例如,HW3和HW4在应用方法后获得了满分,表明这些方法对改进ChatGPT的解决方案非常有效。相反,HW5即使应用了方法,分数仍为0,表明ChatGPT在寻找连续解决方案上存在困难。HW9的分数在应用方法后也相对较低,暗示将MiniCaml设计成问题对ChatGPT来说是一个挑战。在方法使用上,提供提示和调整输入问题似乎是效果最显著的策略。这些方法被广泛应用于表格中的大多数问题,且常常与其他方法结合使用。重述也被用于几个问题,如将church整数转换为整数的函数实现,这在调试后续问题的解决方案时特别有用。然而,重述必须与其他方法结合使用。测试用例也被证明有效,如HW1到HW4通过这个策略显著提升。表5展示了期中和期末考试的辅助实验结果。从表格中可以看出,提高考试分数的方法包括重述、提供提示和实例教学。在这三种方法中,提供提示最为常用,期末考试部分几乎所有的题目都进行了检查,而期中考试部分有两题进行了检查。重述仅用于期末考试的两题,实例教学则用于期末考试的两题和期中考试的一题。总的来说,辅助学习下期末考试成绩显著提高,而期中考试也有所提升。

表4 作业任务重提示学习结果概述

3.3 结果对比

表6比较了两种不同研究的结果——一种是无辅助的,另一种是有辅助的。这些结果基于两次不同的考试,期末考试和期中考试。

表5 无辅助/有辅助实验的考试统计数据对比

对于期末考试,有辅助的得分显著优于无辅助的。有辅助组的总分为81.0,比无辅助组的64.4分高出16.6分。在三种类型的题目上,有辅助组也表现更佳——概念理解、代码完成和归纳证明。有辅助组的概念理解得分是27.5,比无辅助组高出12.0分。代码完成部分,有辅助组得分为70.5,比无辅助组高出7.0分。最后,归纳证明部分,有辅助组得分为20.0,比无辅助组高出5.0分。对于期中考试,有辅助组也领先于无辅助组,但差距没有期末考试那么显著。有辅助组的总分为79.5,比无辅助组的74.5分高出5.0分。在概念理解题上,有辅助组的表现更优,得分为25.0,比无辅助组高出5.5分。图4比较了ChatGPT在两种模式下的作业、期中和期末考试排名。在无辅助模式下,ChatGPT在所有四个评估标准中的排名均低于有辅助模式。在期末考试中,这种差距最为明显,无辅助模式下ChatGPT排名为170,而在有辅助模式下提升到了121。这表明有辅助模式中使用的方法提高了ChatGPT在期末考试中的表现。同样,在有辅助模式下,ChatGPT在所有四个评估标准上都优于无辅助模式。就总成绩而言,有辅助模式下ChatGPT排名为155,而无辅助模式下为220,这表明有辅助模式中的方法帮助ChatGPT的整体表现更佳。

图4 ChatGPT无辅助/有辅助的作业成绩与班级平均成绩的比较

关于家庭作业,整体排名并不能提供太多信息,因为模型在十个作业中的表现差异很大。图4是一个条形图,比较了ChatGPT在两种不同研究(无辅助的ChatGPT和辅助的ChatGPT)中的成绩与班级平均分。条形的高度代表模型和班级平均分在十个不同的作业(HW1到HW10)上的得分。图表显示,辅助模式下的模型表现显著优于无辅助模式。将这两组数据与班级平均分进行比较,我们发现模型在两组研究中,大部分作业的分数都高于班级平均分。然而,辅助模式下的改进更为显著,模型在辅助研究中所有作业的分数都达到了或超过了班级平均分,而在无辅助研究中,它仅在7个作业中达到或超过了这个水平。

转述:刘佳凯

0 阅读:0

互联不一般哥

简介:感谢大家的关注