• 自动化编程提示框架——啃论文笔记


    自动化编程提示框架——啃论文笔记

    前言

    大家好,我是OpenHarmony成长计划啃论文俱乐部成员,今天这篇其实是我个人关于一篇综述论文的阅读笔记。这次只是针对综述论文记录的简单笔记,相关的测试例子,有机会我再之后几期可以对相关代码(如果我能找到开源仓库的话)做复现和应用。

    笔记中所有的图片均来自文献本身,如有侵权,请告知我删除。

    参考文献:A Survey of Automated Programming Hint Generation: The HINTS Framework

    摘要部分

    主要是介绍提示框架在教育领域,尤其是编程教育领域,其自动化带来的灵活性和可发展性,对 自动化编程提示技术 的发展,和对 其在教育领域的潜力给予肯定和展望。

    介绍部分

    对提示框架的简单介绍,一开始介绍自动化提示框架在教育领域的应用和发展,然后是提出面临的挑战——针对不同情况,很难确定那种技术最有效。而通过对多类数据集,自动提示工作背后关键理论思想的调查、对比研究中获取应对挑战的方法——将提示技术汇集到一个 高度通用模块化简单 的通用框架中。最后是对接下来的内容作介绍。

    相关调查及检讨

    先回顾了以前对 自动编程反馈 分类的三个区分类别的标准:

    1. 使用的技术(反馈产生方式),例子使用MDPS(马尔科夫决策过程)Bug库或测试用例 是产生提示的不同技术。
    2. 反馈的性质,提示的信息类型
    3. 所需的输入,产生反馈的数据

    然后是通过参考文献点出这三个标准的使用的例子,并提出作者对 编程提示的本质 进行更深的探索,以及一些其他工作。

    研究范围

    2014-2018年,为编程练习自动生成提示的技术。

    生成编程提示的HINTS框架

    提出现有的基于一般类别的方法不足够多种提示技巧组合在一起的原因:

    1. 各种技术很容易直接结合,比如会将两种技术的输出进行集成,即使二者从根本上不同。——技术分类困难。
    2. 截然不同的提示技术可以产生性质相似的提示,而相似的提示技术可以产生性质截然不同的提示,所以基于提示性质的分类也不行。
    3. 基于输入的分类也不行,相同输入通过不同方式处理,得到不同的结果。

    因为技术的小步骤要比技术更简单,引出问题:能否开发一个简单的框架通过考虑技术所包含的较小步骤来描述所有提示?

    这是可能的!

    提示生成技术的思想

    举了三个例子说明提示技术的多样性,从简单的提示开始,通过迭代过程发展成更复杂的提示。

    步骤相似:都通过缩小提示集获得提示。

    提示生成框架

    在这里插入图片描述

    1. 系统有一个数据池作为输入开始,称之为提示数据,用于生成提示。
    2. 可以处理池中的提示数据以生成新的提示数据,两步实现:
      1. 缩小
      2. 转换
    3. 生成新的提示数据可以继续迭代步骤2,生成更加复杂的提示。
    4. 从最终池中选择一组或多组提示数据。

    实例导向研究

    这一节主要描述HINTS框架在具体编程代码(上下文中)的最新工作,展示提示技术如何适合于框架,以及如何关联。

    从同级学生或者教师的程序选择下一步

    其实就是从现有数据集中选择,得到较适合的来进行下一步的操作。

    例子,Hint Factory

    在逻辑学中提出,后开用于编程领域,使用其他同学提交的程序和 MDP马尔科夫决策过程)来产生下一步的提示。

    在这里插入图片描述

    这个例子是将目标学生的程序先转化为状态,然后再对等数据中(可以理解为其它的学生程序或者老师给定的标准程序)也生成 状态空间,在将 目标学生 的状态在状态空间中进行 **MDP**的过程来产生下一状态(可以理解为是一个最终给出的提示池)

    拓展到下一个状态

    这里其实是通过一些目标程序,方法和技术将上一步中选择的状态拓展为一个新的状态,相当于到进行状态转换。

    例子,AskElle的程序策略

    AskElle是一个自动化的编程导师

    在这里插入图片描述

    这里我看文献也不是很懂,大致的意思就是输入上,有目标学生程序,模板程序,老师的注释,网页文档链接。

    过程上:

    1. 先将学生的程序标准化(可以理解根据程序的执行状态来分成多段)。
    2. 从模板程序提取出程序的 执行策略
    3. 利用执行策略和标准化后的目标程序生成一个中间态(数据集),这里猜测其实会有一定的对比,寻找出差异。
    4. 将上一步的差异信息数据集在老师给出的注释找相关性,筛选出相关的注释。
    5. 利用相关的注释找到相关的网页链接。

    比较程序特征

    利用程序特征(比如输出或结构)来生成提示。

    例子,Codewebs Engine

    在这里插入图片描述

    这里其实就是将对等程序和目标程序都进行了抽取,形成相应的 代码短语,再在二者进行筛选得到有Bug的短语,利用预先输入得反馈,就可以找到相关的反馈。

    自动修复程序

    这一节就是通过自动修复程序来生成提示。

    例子,SYNFIX

    在这里插入图片描述

    这里其实用到了机器学习中的迭代神经网络(RNN),我们用对等数据(其实就是其他正确程序)来训练得到RNN,然后用RNN来修复学生程序,将修复的地方提取出来,经过正确性测试,就可以得到最终的提示。

    提示框架下测量提示技术的启示

    其实这个就是在前面 实例导向研究 中的几项技术思想上的总结,就是一个完整的提示框架。

    在这里插入图片描述

    啃不动了!!!

    后话

    这篇确实有点难啃,但是很多例子还是很有趣的,如果对提示技术感兴趣的,强烈建议读一读,美中不足的是没直接给出相应的开源代码地址,可能需要去找相关的参考文献。

  • 相关阅读:
    [云原生.docker安装]Centos7安装docker环境
    Java 性能优化实战案例分析:乐观锁和无锁
    多线程编程
    使用腾讯云发送短信 ---- 手把手教你搞定所有步骤
    力扣100题——贪心算法
    SpringCloud&架构师面试
    Python基于Mirai开发的QQ机器人保姆式教程(亲测可用)
    【云原生】Kubernetes PDB(Pod Disruption Budget)介绍与简单使用
    使用nodel实现前后端数据渲染
    JVM 性能调优参数
  • 原文地址:https://blog.csdn.net/weixin_54891898/article/details/126563505