← 最新论文
💻 computer science

EmbeddedKittens: An Evaluation of Code Embeddings for Scratch

本文通过对四种大语言模型和五种嵌入方法在 Scratch 程序上的应用进行了实证评估,证明了在大型开源数据集上训练的模型能够有效地捕捉结构和语义信息,从而在无需进一步微调的情况下,支持预测小型课堂场景中功能正确性等学习分析任务。

原作者: Benedikt Fein, Gordon Fraser

发布于 2026-07-22
📖 1 分钟阅读☕ 轻松阅读

原作者: Benedikt Fein, Gordon Fraser

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你正试图教一个超级聪明的机器人如何理解人类语言。你喂给它数百万本书籍、电影和网站,最终,它学会了以惊人的准确度预测句子中的下一个词。这就是大型语言模型(LLMs)的魔力。现在,想象你想让同一个机器人理解源代码——即程序员编写用来指挥计算机执行任务的指令。由于代码看起来有点像一种奇特的结构化语言,研究人员发现这些机器人也可以学习理解它,从而帮助开发者更快地编写软件,甚至自动修复漏洞。

但这里有一个转折:并非所有的代码看起来都像文本。在学校里,许多孩子学习编程时使用的是 Scratch,这是一种色彩鲜艳、基于积木的系统,通过在屏幕上将拼图块拼接在一起,而不是输入行文本。这就像是在用乐高积木搭建,而不是在写故事。科学家们面临的一个大问题是:那些能阅读文本型代码的“机器人大脑”也能理解这些视觉化的积木拼图吗?如果可以,哪种方法效果最好?这很重要,因为如果我们能教会机器人理解 Scratch,我们就能开发出各种工具来帮助老师批改作业、发现遇到困难的学生或提供即时提示,让下一代的编程学习过程变得更加顺畅。


伟大的代码翻译挑战

在这项研究中,研究人员 Benedikt Fein 和 Gordon Fraser 着手回答一个棘手的问题:**我们能否教会计算机“理解” Scratch 程序,从而在课堂上提供帮助?**他们并没有仅仅靠猜测;他们构建了一个数字游乐场,用来测试不同种类的“代码翻译器”。

把代码翻译器想象成一种将复杂的 Scratch 程序转化为单个、神秘数字(或称为“向量”)的方法,这个数字捕捉了程序的本质。如果两个程序相似,它们的神秘数字应该靠得很近;如果它们不同,数字则应该相距较远。研究人员想要看看哪种翻译器在这场游戏中表现最出色。

竞争者

他们列出了五种不同类型的翻译器来进行比赛:

  1. “扁平化”阅读者: 这些模型将代码视为简单的单词列表,忽略了结构。这就像是在读一份食谱,却忽略了某些步骤是在“搅拌碗”内进行的,而另一些是在“炉灶”上进行的。
  2. “树状”阅读者: 这些模型观察代码的结构,就像指令的家谱树一样。它们理解某些积木是如何嵌套在其他积木之内的。
  3. “流式”阅读者: 这是最先进的一类。它们不仅能看到结构,还能追踪信息如何在程序中流动,就像观察水流通过管道一样。它们知道一个变量在某个积木中发生变化后,会在另一个积木中被使用。
  4. “大脑袋”(LLMs): 这些是巨大的、预训练好的 AI 模型(比如驱动聊天机器人的那些),它们已经阅读了数百万份文本文档。研究人员要求它们观察 Scratch 代码并猜测代码正在做什么。

测试:为角色命名

为了测试这些翻译器,研究人员创建了一个名为**“角色命名”(Sprite Naming)**的游戏。在 Scratch 中,每个角色(或称“精灵/Sprite”)都有一个名字。任务很简单:向模型展示角色内部的代码,然后让它猜出该角色的名字。这就像给某人看一个角色的日记,然后问:“这个角色的名字是什么?”

结果显示出了明显的等级制度。胜出者是“流式”阅读者(具体来说是一个名为 GGNN 的模型)。通过关注积木如何连接以及数据如何在它们之间流动,这些模型能更好地理解代码的“故事”。它们猜对角色名字的准确率显著高于其他模型。

巨大的“大脑袋”模型(LLMs)和“扁平化”阅读者在此特定命名任务中的表现很差。 它们难以猜出正确名称,因为 Scratch 程序很少使用这些大模型在文本代码中常见的花哨变量名或自定义函数。相反,Scratch 高度依赖于积木的结构以及它们是如何连接的。然而,值得注意的是,即使是获胜的“流式”模型也没有做到完美;它仍然会犯错,这意味着没有任何模型是完美的先知。LLM 并非不是唯一未能获得完美得分的模型,但它们始终被那些理解程序结构和流动的模型所超越。

语言障碍

研究人员还测试了学生使用的语言是否重要。Scratch 在世界各地都被使用,在巴西、中国、波兰以及许多其他地方。他们发现,当代码使用英语或其他使用拉丁字母(如 A, B, C)的语言编写时,模型的表现最好。当代码使用其他书写系统(如中文字符或俄语西里尔字母)时,模型就会感到困惑。这表明,为了让这些工具在全球范围内发挥作用,它们需要更好地理解不同的语言和符号,而不仅仅是英语。

从命名到评分:我们能在课堂上使用它吗?

接下来的真正魔法发生了。研究人员问道:“如果这些模型擅长命名角色,它们也能帮助老师吗?”

他们测试了两个大想法:

  1. 检查正确性: 模型能否在不运行程序的情况下,观察一个混乱的程序并判断它是否有效?他们发现,模型的“理解能力”与代码是否通过测试之间存在强关联。如果模型认为代码“接近”解决方案,那么代码通常是有效的。这意味着这些模型可以作为一个“代理”来即时检查作业。
  2. 追踪进度: 模型能否展示一个学生的进步程度?他们使用了一张特殊的地图来绘制学生的进度。随着学生为他们的游戏添加功能,他们的“代码地图”会向最终解决方案移动。模型成功地追踪了这一旅程,向老师展示了学生在哪里卡住了,或者已经取得了多少进展。

有趣的是,对于这些更广泛的任务(例如对项目类型进行分类或追踪进度),LLMs 实际上表现得相当好,有时甚至能达到或超过专门的结构化模型。这表明,虽然 LLM 可能会错过命名特定角色所需的微小结构细节,但它们非常擅长理解项目的“大局观”。

结论

研究得出结论:是的,使用代码嵌入(code embeddings)处理 Scratch 是可行的,但你必须选择合适的工具。对于需要深度结构理解的任务(如命名角色),理解积木形状和流动的专门模型才是冠军。那些巨大的聊天机器人(LLMs)并不适合这些特定的谜题,因为它们会错过 Scratch 所依赖的结构细节。

然而,对于更广泛的教育任务(如评分或追踪进度),LLMs 表现得非常出色,甚至可以与专门的模型不相上下。更有意义的是,这些专门的模型一旦经过训练,就可以用于其他任务——比如评分或追踪进度——而无需针对每一个新作业进行重新训练。这对老师来说是一个巨大的胜利,因为这意味着他们可以拥有强大的自动化工具来帮助学生学习,即使是在数据不足以从头开始训练新 AI 的小型课堂中。

简而言之,研究人员找到了一种让计算机获得 Scratch 代码“感知力”的方法,这种感知力超越了单纯的文字阅读。通过理解积木的形状流动,这些模型可以帮助我们构建一个更智能、更具支持性的编程教育未来。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →