No Resource, No Benchmarks, No Problem? Evaluating and Improving LLMs for Code Generation in No-Resource Languages
本文通过引入新的基准测试,解决了无资源编程语言中的代码生成挑战,并证明了一种具有成本效益的策略,即先在目标语言数据上对基座模型进行进一步预训练,随后通过权重差值迁移注入指令遵循能力,其效果显著优于对指令微调模型进行直接微调。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你拥有一个才华横溢、超级聪明的机器人助手(一种大语言模型,简称 LLM),它是一名编程专家。你可以要求它用 Python 或 Java 写代码,它就像一位掌握经典意式料理食谱的大厨一样——它能熟练掌握这些特定的语言,因为它已经读过了数百万本关于这些语言的“食谱”(训练数据)。
但如果你要求这个机器人去烹饪一道全新的、极其冷门的菜系,而从未有人为这道菜写过食谱呢?比如,一个公司昨天才刚刚发明的语言,或者是一个尚未在互联网上分享过的特定行业专用工具。
这篇论文正是关于如何教会那个机器人烹饪这些“零资源”料理的。
问题所在:机器人一脸茫然
研究人员发现,当他们要求顶尖 AI 模型编写这些新语言(他们测试了 Gleam 和 MoonBit)的代码时,这些机器人几乎完全陷入了混乱。
- 高资源语言(Python/Java): 机器人的正确率约为 80–90%。
- 低资源语言(如 Lua 或 R): 机器人的表现尚可,正确率约为 50–60%。
- 零资源语言(Gleam/MoonBit): 机器人几乎 100% 失败。
类比: 这就像是要求一位只用过刀的大厨,突然去使用一种从未见过的、形状奇特的全新工具。他们不仅仅是做出了小错误;他们甚至连如何正确握住工具都不知道。这些错误不仅仅是“厨艺不好”;它们是“语法错误”——机器人甚至无法写出代码的基本结构,因为它根本不了解这种新语言的语法。
实验过程:我们如何教导机器人?
团队尝试了四种不同的方法来帮助机器人学习这些新语言,将这些新语言视为机器人需要为考试而学习的一门新学科。
- “小抄”法(少样本学习/Few-Shot 与 RAG): 他们在要求机器人编写代码之前,先给它提供几段用新语言编写的代码示例或手册中的片段。
- 结果: 这确实有一点帮助,就像给学生几道练习题一样。机器人变得好了一点,但仍然在基础层面挣扎。
- “速成班”法(微调/Fine-Tuning): 他们拿到了机器人,并向它喂入了该新语言所能找到的所有代码和文档,强迫它重新学习一切。
- 结果: 这效果很好。机器人对这种语言的学习能力有了显著提升。
- “深度潜水”法(预训练/Pre-Training): 他们拿到了一个原始版本的机器人(一个尚未被教导如何遵循指令的版本),并将所有可用数据——每一份代码文件和每一页手册——都喂给了它。
- 结果: 这是最终的赢家。因为他们使用了所有的数据(而不只是用于微调的那些整齐、有序的示例),机器人对这种语言的学习更加深入。它获得了最高的评分。
转折点:“聪明”的机器人 vs. “原始”的机器人
这里有一个转折。执行“深度潜水”(预训练)效果最好,但它有一个副作用。
- 那个深度学习了该语言的机器人是一个“原始”模型。它完美地掌握了这种语言,但它忘记了如何听从人类的指令。如果你问它:“写一个函数来将两个数字相加”,它可能会只是盯着你看,或者写出一些乱码,因为它已经不再被训练去遵循指令了。
- “聪明”的机器人(经过指令微调的模型)可以完美地遵循指令,但它们对这种新语言的表现却很糟糕。
解决方案:“技能迁移”(指令迁移/Instruction Transferring)
研究人员想出了一个聪明的黑客手段,可以在不花费巨额资金进行训练的情况下,实现两全其美。
隐喻: 想象你有两胞胎。
- 双胞胎 A 是一位精通新菜系的顶级大厨,但他很鲁莽,不听指挥。
- 双胞胎 B 是一位礼貌、听话的服务员,但他完全不懂这种新菜系。
与其重新雇佣一名厨师或从头开始重新训练服务员,研究人员想出了一个方法,可以将双胞胎 B 的“礼貌”和“倾听技巧”复制并粘贴到双胞胎 A 身上。
他们计算了礼貌的服务员与原始大厨之间的“差异”,然后将这个“差异”添加到了那个掌握新语言的专家机器人身上。
- 结果: 他们创造了一个既是新语言专家、又懂得如何完美遵循指令的机器人。
- 额外收获: 这个技巧效果极佳,通过这种“技能迁移”得到的较小、较便宜的机器人(80 亿参数),其表现竟然优于一个仅仅进行了常规微调的更大、更昂贵的机器人(320 亿参数)。
核心结论
如果一家公司今天发明了一种新的编程语言,他们不能仅仅购买现成的 AI 助手并期望它能直接投入使用。AI 会失败。
然而,这篇论文展示了一条前进的路径:
- 收集该新语言现有的任何微量代码。
- 教会一个原始 AI 模型这种语言(预训练)。
- 使用“技能迁移”技巧赋予该模型遵循指令的能力。
这使得公司能够为自己独特的、专有的语言构建专门的 AI 编程助手,而无需投入数百万美元进行大规模训练。他们可以利用一个小巧、聪明的模型,仅需极低的成本就能将其打造成为语言专家。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。