编程是人类思维的数字表达,涵盖了逻辑推理、问题分解和错误检测等一系列认知活动。其本质在于将复杂问题转化为计算机可读的指令,确保嵌套逻辑结构的一致性和准确性。关于人类编程思维和认知发展的研究已成为一个重要的跨学科课题,涉及心理学[1]、教育[2][3]、认知科学[4]和人工智能[5][6][7]。智能辅导系统(ITS)[8]在编程教育中得到广泛应用,积累了大量的用户编程数据,包括用户的尝试、代码提交和测验结果。分析用户的历史编程数据以构建认知模型并预测他们的未来编程表现已成为验证这些模型有效性的关键方法。如图1(a)所示,基于数据的认知建模方法——知识追踪(KT)[9][10][11]——可以实时评估用户的知识获取情况,并为个性化学习提供强有力的支持。
深度学习将KT的重点从传统的贝叶斯模型转向了深度神经网络。早期研究[12]主要使用循环神经网络(RNN)架构及其变体[13][14]来有效捕捉知识状态的动态变化,并实时确定下一个状态。Transformer架构[15]的出现通过自注意力机制带来了并行计算的优势,使得知识状态的建模更加精确。此后,卷积网络[16][17]和图神经网络[18][19]等各种网络结构越来越多地被集成到KT模型的设计中。这些创新旨在更好地表示用户知识状态并提高未来表现预测的准确性。
然而,通用模型在编程领域的有效性有限,因为它们无法处理代码的独特语义和句法结构。为了解决这一挑战,研究人员正在逐步探索针对编程特定需求的新方法。一种策略[20]是将大型语言模型(LLM)整合到通用模型中,以表示代码文本,并用用户的历史表现数据丰富模型输入,从而增强特征表示。另一种策略[21]强调编程任务的细微差别,开发专门的神经网络或架构来捕捉代码中的结构信息以及用户编程行为的独特特征,旨在提高编程性能预测的准确性。
编程预测本质上涉及判断用户提交的代码是否能够在特定的时间和空间约束下通过给定问题的测试用例。它从根本上检查代码是否正确解决了问题。尽管当前的研究已经探索了多种利用提交代码中的信息的方法,但这些方法通常仍然依赖于传统的状态驱动范式,这些范式通过从用户的历史数据中构建知识状态来间接预测未来表现,如图1(c)所示。这样的方法偏离了编程预测的实际意义。在代码驱动的范式下,如图1(d)所示,任务被直观地划分为两个紧密相关的子任务:通过预测(Pass Prediction,PP)和代码预测(Code Prediction,CP)。
PP强调问题和提交代码之间的语义关系,而不是依赖于用户的历史数据。通过利用LLM的高级语义理解能力,可以有效地增强对提交代码是否满足特定问题要求的评估。相比之下,CP本质上依赖于利用用户之前的提交作为预测他们可能为新问题提交的代码的基础。例如,在解决求前N个数字的编程问题时,传统的状态驱动方法基于用户的过去表现和循环结构构建知识状态,从而推断出他们的答案。然而,这种方法未能捕捉到涉及的具体语义特征,如循环终止条件,导致预测不准确。相比之下,PP和CP的范式利用LLM来更深入地理解问题要求和代码逻辑,精确识别语义需求并划定潜在的编码解决方案。通过分析历史提交模式,系统可以预测用户在下一次尝试中可能会正确修改循环条件,从而生成能够通过测试的代码。这种方法展示了研究的实际应用,表明与传统方法相比,这种策略提供了更准确的编程性能预测。
然而,这种策略面临两个重大挑战:巨大的解决方案空间和冷启动。前者源于代码的复杂性,其中结构和语义表示的挑战导致预测的目标空间比知识状态向量更广。后者指的是用户对于特定编程问题类型的提交历史有限,使得准确的代码预测变得困难。
关于巨大解决方案空间的挑战,编程KT的主要目标不是完美复制学习者提交的代码。相反,它强调识别和预测决定代码是否有效解决问题的关键特征。将代码空间转换为代码特征空间的这种转换可以实现减少解决方案空间的效果。因此,在PP阶段利用LLM准确构建和提取这些特征至关重要。对于冷启动挑战,一种实用的策略是通过分析尝试相同问题的其他用户的代码提交模式来解决缺乏用户特定数据的问题。通过将这些聚合的模式与新用户的有限历史数据结合起来,模型可以做出更明智的预测。这有助于缩小潜在的解决方案范围,并使预测与特定编程问题的常见分布模式保持一致,从而有效缓解冷启动问题。
综合上述分析,我们提出了创新的
代码驱动特征融合知识追踪(CFKT)框架,该框架包括PP模块和CP模块。PP模块使用LLM对问题陈述和代码进行语义嵌入,然后通过代理任务减少特征维度以提取关键信息。它解决了巨大解决方案空间引起的问题,并构建了一个二元分类模型来判断代码是否可以通过测试。CP模块通过特征融合块重建代码特征,旨在提取和整合个性化代码信息和通用代码信息。它使用问题编码器改进上下文元素,并为个性化代码和通用代码方面开发编码器,以从用户提交的代码中检索相关信息。同时,特征选择掩码优化了融合和更新过程,以缓解冷启动问题。最后,我们合并了PP和CP组件,并在多个真实世界的公共编程数据集上进行了实验。结果表明,我们的方法显著优于现有的基线方法。我们的贡献总结如下。
•独特视角:我们对编程预测挑战进行了深入分析,创新地将它们区分为通过预测和代码预测。这种方法为在线编程学习中用户表现的建模提供了新的视角。
•有效模型:我们提出了CFKT模型,该模型结合了LLM来增强代码特征的语义,并引入了信息融合机制来整合代码中的个性化和通用信息。它实现了精确的代码表示,并缓解了编程预测中的冷启动问题。
•广泛实验:我们在多个真实的在线编程数据集上进行了实验,将我们的方法与通用KT、编程KT和LLM增强型KT进行了基准测试,并在大多数数据集上取得了更好的性能。
为了清楚地概述我们工作的其余部分,第2节回顾了编程预测的相关工作。第3节介绍了初步工作和问题表述。第4节详细介绍了提出的CFKT模型,包括通过预测和代码预测模块。第5节介绍了实验设置、结果和分析。最后,第6节总结了我们的工作并概述了未来的研究方向。