
ACL 2025 | GALLa:给代码大模型装上“透视眼”,看懂程序的“骨架”!
- 你的 AI 编程助手,真的“读懂”你的代码了吗?
- 它可能只是“看”到了表面文字,却错过了代码背后真正的逻辑骨架。
今天,我们带来了一项被 ACL 2025 主会录用的创新工作——GALLa。这项由蚂蚁集团 × 上海交通大学合作的研究,通过一种巧妙的方式,让代码大模型(Code LLM)学会理解程序的深层结构,实现代码理解能力的精准跃升!
⚡ 核心亮点速览
- 注入结构化知识代码不仅是文本,更是严谨的图结构(如 AST、DFG)。我们利用图神经网络(GNN)将这些“代码骨架”信息注入大模型,让它知其然,更知其所以然。
- 即插即用,推理无开销GALLa 只在训练阶段引入图信息,训练完成后,模型推理方式与普通 LLM完全一致。不改变模型架构,不增加部署成本,堪称“无痛增强”。
- 性能全面提升在7 个不同系列、不同参数量的模型以及5 个主流代码任务上的实验证明,GALLa 能够稳定、有效地提升所有基座模型的性能。
> 本文已被自然语言处理顶会 ACL 2025 主会接收。> - arXiv: https://arxiv.org/abs/2409.04183> - GitHub: https://github.com/codefuse-ai/GALLa> - Hugging Face: https://huggingface.co/datasets/codefuse-ai/GALLa
当大模型“阅读”代码时,它错过了什么?
与自然语言不同,编程语言背后是精确的语义和逻辑,这些逻辑通常通过抽象语法树(AST)、数据流图(DFG)等图结构表示。它们就像建筑的蓝图,揭示了程序的真正构造。
然而,大多数代码大模型(如 DeepSeek-Coder、Qwen-Coder)都选择了一条“捷径”:把代码当成普通文本处理,这无疑丢失了大量宝贵的结构信息。
此前的尝试也存在明显缺陷:
- “拍扁”成文本:将图结构线性化成字符串,无法表达复杂图(如带环 DFG),信息损失严重。
- “大动干戈”改结构:修改注意力掩码或位置编码,破坏预训练知识,难以扩展。
> 有没有一种方法,既能利用图的强大能力,又不破坏大模型优美的原始结构?
GALLa 的“独门秘籍”:如何优雅地注入图结构?
我们的答案是:GALLa(Graph Aligned Large Language Models)
我们借鉴多模态领域的成熟经验,设计出 GALLa 框架。其核心思想是:
> 在微调阶段,把代码的图结构信息“教”给大模型,但不去修改它原本的“大脑结构”。
框架三大模块
模块 | 作用 |
🧠 图神经网络(GNN) | 专业的“图阅读器”,读取 AST/DFG,输出节点深层语义表示。 |
🔗 适配器(Adapter) | 跨界的“翻译官”,将图特征向量转换为 LLM 能理解的“图 Token”。 |
🧠 大语言模型(LLM) | 学习的“最强大脑”,接收“图 Token + 文本 Token”,统一处理。 |
GALLa 整体框架图
两阶段训练法:让知识注入更丝滑
为了让 GNN 和适配器这两个“新兵”不干扰 LLM 这个“老将”,我们设计了两阶段训练流程:
阶段一:热身与对齐(Frozen LLM)
- 目标:让“新兵”快速成长。
- 做法:冻结 LLM 参数,只训练 GNN + 适配器。
- 任务:Graph2Code—— 给模型一张代码结构图,让它写出对应源代码。
- 效果:GNN 学会将图信息有效“翻译”给 LLM。
阶段二:协同与升华(Full Fine-tuning)
- 目标:三大模块协同进化,全面提升能力。
- 做法:解锁 LLM 参数,端到端联合训练。
- 任务:
- Graph2Code:巩固图→代码生成能力。
- GraphQA:根据图结构回答问题,如“这个节点的父节点是谁?”
- 下游任务:用纯文本微调代码翻译、总结、Bug 检测等任务。
GALLa 训练流程图
GALLa 的“魔法”:智能训练,极简推理
GALLa 最具吸引力的一点是:
> 所有与图相关的复杂操作,都只发生在训练阶段。
- 训练完成后,GNN 和适配器“退役”,只保留微调后的 LLM。
- 推理阶段,模型像普通指令微调模型一样,直接接收文本输入,输出结果。
两大优势
- 推理效率高:无需每次请求都解析代码、构建图,避免巨大延迟。
- 适用性更广:对于不完整或有错的代码(如 Bug 修复场景),无需构建图,完美适配。
效果怎么样?让实验数据说话!
我们在 7 个不同模型家族(如 Qwen2.5-Coder 14B、LLaMA3 8B)和 5 个主流代码任务上验证 GALLa 的威力。
多任务微调结果(节选)
模型 | 任务 | Baseline | G2C | G2C+GraphQA | 提升 |
CodeGen-350M | 翻译/克隆/修复 | 56.9 | 35.2 (+1%) | 36.6 (+5%) | ✅ |
StarCoder-1B | 同上 | 14.0 | 16.7 (+20%) | 18.9 (+36%) | ✅ |
Qwen2.5-Coder-1.5B | 同上 | 39.3 | 44.1 (+12%) | 44.2 (+12%) | ✅ |
LLaMA3-8B | 同上 | 44.6 | 45.0 (+1%) | 45.4 (+2%) | ✅ |
Qwen2.5-Coder-14B | 同上 | 42.3 | 44.2 (+4%) | 46.0 (+9%) | ✅ |
> 注:G2C = Graph2Code,GraphQA = 图问答任务。> 所有结果均为多任务平均分数,单位:%。
多任务实验结果图
消融实验
我们还探索了不同适配器(MLP vs Attention)、不同图类型(AST vs DFG)的影响,进一步验证了 GALLa 的灵活性与有效性。
消融实验结果图
未来展望:从代码片段到整个仓库
GALLa 的成功只是一个开始。我们团队进一步开发了更强大的 Code Graph Model(CGM),将图结构融合扩展到仓库级别。该模型在 SWE-bench 等权威榜单上取得了开源模型 SOTA!
- 论文(NeurIPS 2025):https://arxiv.org/abs/2505.16901
- 开源代码:https://github.com/codefuse-ai/CodeFuse-CGM
本文转载自PaperAgent
