EyeMulator: Improving Code Language Models by Mimicking Human Visual Attention
EyeMulator 是一种与模型无关的方法,它通过将人类眼动追踪数据转化为语义显著性和注视转移先验,从而对标记级训练损失进行重加权,以此增强代码语言模型,并在各种模型和任务中实现了持续的性能提升。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下你正在教一个机器人编写计算机代码。目前,大多数机器人(称为代码语言模型)是通过阅读数百万行代码并记忆哪些词通常会出现在彼此相邻的位置来学习的。这就像一个学生通过以完全相同的速度阅读每一个单词来背诵教科书,而不在乎某个词是关键指令还是仅仅是一个无聊的标题。它们将重要的逻辑与那些“废话”同等对待。
问题所在:
人类程序员阅读代码的方式与机器人不同。我们的眼睛会跳跃着看。我们会专注地盯着代码的“精华”部分——比如变量名、数学逻辑和决策点(if/else 语句)——而快速略过那些枯燥、重复的部分(比如标准的设置代码)。我们有一种天然的“心理聚光灯”,能够突出显示重要的内容。
解决方案:EYEMULATOR
这篇论文介绍了一种名为 EYEMULATOR 的新方法,旨在教这些编写代码的机器人像人类一样思考。研究人员并没有改变机器人的大脑(其架构),而是简单地改变了“如何教它”。
以下是类比:
想象你正在教一个学生阅读一张复杂的地图。
- 旧方法: 你告诉学生:“平等地阅读这张地图上的每一寸土地。”
- EYEMLUATOR 方法: 你给学生一副特殊的眼镜(基于 27 位专家程序员的真实眼动追踪数据)。这副眼镜会让重要的地标(如“大街”或“左转”)发出红光,而空旷的田野则保持暗淡。然后你告诉学生:“在学习时,要格外注意发光的部分。”
它是如何工作的(“配方”):
- 眼动追踪数据: 研究人员利用了一项研究数据,在该研究中,程序员在阅读和编写 Java 代码时佩戴了眼动仪。他们观察到了专家注视的具体位置以及他们的眼睛如何在代码的不同部分之间移动。
- 提取“光芒”: 他们将这些眼动数据转化为两条简单的规则:
- 看哪里: 他们发现专家总是盯着诸如“变量声明”和“函数调用”之类的内容。
- 如何移动: 他们发现了专家采取的路径,例如从一个函数定义跳转到它被使用的地方。
- 教导机器人: 他们将这些规则应用于标准的代码训练。当机器人进行练习时,系统会给那些人类关注的重要 Token(标记)给予“额外分数”(或权重),而给那些无聊的部分较少的分数。这就像是在告诉机器人:“如果你把逻辑写对了,你会得到一颗金星;如果你只是死记硬背模板代码,你只能得到一个小贴纸。”
结果:
研究人员在六种不同的机器人模型和三项任务上测试了该方法:
- 代码补全:(完成一段代码句子)。
- 代码翻译:(将 Java 代码转换为 C# 代码)。
- 代码总结:(用纯英文解释代码的功能)。
研究发现:
- 每一项测试都变好了: 在所有 36 种不同的机器人、任务和数据规模的组合中,使用 EYEMULATOR 训练的机器人表现都优于常规训练的机器人。
- 最大的提升: 对于那些需要保持代码结构完美(如补全或翻译代码)的任务,提升非常显著。这表明机器人终于学会了哪些部分真正决定了含义。
- 微小但真实的提升: 机器人在将代码总结为英文方面也取得了小幅进步,尽管由于输出的是自然语言,这变得稍微复杂了一些。
为什么这很重要:
论文声称,你不需要构建一个全新的、极其昂贵的机器人大脑来让它变得更聪明。你只需要教它去关注正确的事物,就像人类专家那样。通过模仿人类的视觉注意力,机器人学会了优先处理代码的逻辑“骨架”,而不是迷失在细节之中。
他们并未声称:
- 他们并未声称这适用于(所有)编程语言(他们仅测试了 Java 和 C#)。
- 他们并未声称这适用于巨大的、海量的机器人(他们测试的是 1B 到 3B 参数规模的较小模型)。
- 他们并未声称这可以追踪职场中的个体(数据是聚合且匿名的)。
简而言之,EYEMULATOR 是一个代码机器人的“专注力训练器”,它利用人类专家的眼动轨迹来教机器人该看哪里,从而实现更智能、更准确的代码生成。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。