CodeShrink:自适应视觉压缩如何让代码图像比纯文本更高效

快速导读:提出自适应视觉压缩框架CodeShrink,通过空白去除渲染、主导令牌选择和强化学习驱动的自适应压缩配置,在多种代码理解任务中大幅降低视觉令牌消耗并保持或超越未压缩文本输入的性能。

将源代码渲染为图像输入多模态大模型(MLLMs)是一种新兴的代码理解范式,能显著降低长上下文带来的令牌成本。然而,代码图像中存在大量空白区域和任务无关代码区域,造成视觉令牌的严重冗余。更关键的是,不同样本、不同任务对图像分辨率和压缩程度的需求差异巨大——一个固定的压缩策略无法在所有场景下都表现良好。

CodeShrink 针对这一问题提出了系统性的解决方案。它包含三个紧密协作的组件:Blank-Free Rendering(BFR)从渲染源头消除空白冗余,Dominant Token Selection(DTS)在推理时根据指令动态剪枝无关令牌,Adaptive Compression Configuration(ACC)则利用轻量级 Config Agent 通过强化学习为每个样本预测最优的缩放比和剪枝比。实验表明,CodeShrink 在 Python 代码问答上以 82.3% 的准确率超越了未压缩纯文本的 81.0%,同时视觉令牌减少约 40%。

英文题目:CodeShrink: Adaptive Visual Compression for Efficient Multimodal Code Understanding

论文出处:arXiv 每日论文精选 · arXiv:2607.29637

原始论文:PDF / 论文页面

这篇论文解决什么问题?

多模态大模型在代码智能任务中展现出强大能力,但源代码通常具有长上下文和稀疏格式的特点,导致令牌消耗成为实际部署的瓶颈。将代码渲染为图像是一种降低输入成本的替代方案——图像中的像素被编码为固定数量的视觉令牌,不受代码长度线性增长的影响。然而,这一范式引入了新的效率问题。

第一个问题是布局冗余。标准代码渲染保留了缩进、空行等空白区域,这些区域在图像中占据大量像素,对应的视觉令牌几乎不携带语义信息。论文的初步研究(第 2 页,图 1a)显示,原始代码渲染中灰色标注的空白区域占比相当可观。第二个问题是任务无关冗余。一段代码中,只有与当前任务相关的部分才是模型需要关注的。注意力可视化(图 1b)证实,任务相关代码区域确实获得更高的注意力分数,而其余区域可以被压缩。

第三个、也是最容易被忽视的问题是配置刚性。不同的代码理解任务对图像分辨率和压缩程度有截然不同的需求。代码补全需要看清细节,而代码克隆检测可能只需要整体结构信息。即使在同一任务内,不同样本的最优配置也各不相同(图 1c)。论文发现,动态选择配置在所有三个任务上都优于任何单一固定配置(图 1d),这直接催生了自适应压缩的需求。

现有方法无法同时解决这三个问题。文本压缩方法如 LLMLingua 系列和 LongCodeZip 在压缩代码文本时会破坏语法结构,而通用视觉令牌压缩方法如 FastV 和 VisionZip 没有利用代码图像的特殊性质。CodeOCR 首次探索了代码渲染范式,但未解决布局冗余和自适应压缩问题。CodeShrink 正是在这一研究空白上展开工作。

核心创新

  • 提出Blank-Free Rendering (BFR),通过结构线性化和紧凑布局消除代码图像中的空白区域冗余,在固定令牌预算下提升代码可读性。
  • 设计Dominant Token Selection (DTS),在推理时根据指令与视觉令牌的注意力分数,区分前景和背景进行任务无关令牌剪枝。
  • 提出Adaptive Compression Configuration (ACC),利用轻量级MLLM作为Config Agent,通过强化学习动态选择每样本的最优压缩配置,替代固定参数策略。

方法概览

CodeShrink包含三个组件:1) Blank-Free Rendering (BFR) 通过结构线性化和显式标记替换空白布局,在固定视觉令牌预算内最大化字体大小,消除布局引起的空白令牌;2) Dominant Token Selection (DTS) 在浅层MLLM融合指令和视觉信息后,基于注意力分数分别对前景代码令牌和背景空白令牌进行剪枝,保留任务相关令牌;3) Adaptive Compression Configuration (ACC) 使用轻量级Config Agent通过强化学习(GRPO)为每个样本动态预测最优的缩放比和剪枝比配置。

  • Blank-Free Rendering(BFR):BFR 通过两个步骤消除布局引起的空白令牌。首先进行结构线性化,将代码的层级缩进结构转换为显式的标记符号(如用特殊 token 标记代码块的开始和结束),从而移除所有缩进空白。然后,在固定视觉令牌预算内最大化字体大小,使代码内容尽可能清晰可读。这种渲染方式确保每一个视觉令牌都对应有意义的代码内容,而非空白背景。
  • Dominant Token Selection(DTS):DTS 在 MLLM 的浅层进行,此时视觉令牌已与指令信息发生交互。它基于注意力分数分别处理前景代码令牌和背景空白令牌。对于前景,保留与指令注意力最高的令牌;对于背景,则进行更激进的剪枝。这种区分处理使得 DTS 能根据不同任务动态保留最相关的视觉信息。图 6(第 10 页)通过红框标注展示了 DTS 在三个任务上保留的令牌区域,可以直观看到不同任务关注的代码片段差异。
  • Adaptive Compression Configuration(ACC)的整体设计:ACC 引入一个轻量级的 Config Agent,其核心是一个小型 MLLM。对于每个输入样本,Config Agent 同时预测两个关键参数:scale ratio(缩放比,控制渲染分辨率)和 pruning ratio(剪枝比,控制 DTS 的保留比例)。这两个参数共同决定了最终的视觉令牌数量和代码可读性。
  • ACC 的训练机制:Config Agent 使用 Group Relative Policy Optimization(GRPO)进行强化学习训练。训练前需要构建环境——对每个样本穷举评估所有可能的配置组合,记录每种配置下的下游任务性能。训练时,Agent 为每个样本生成配置,环境返回对应的性能作为奖励。GRPO 通过组内相对比较来优化策略,使 Agent 学会为不同样本选择最优配置。
  • ACC 与下游 MLLM 的协同:下游 MLLM 也需要进行轻量微调以适应压缩后的视觉输入。论文报告微调成本较低——Config Agent 约 25 分钟,下游 MLLM 约 40 分钟。这种协同微调确保了压缩后的视觉令牌仍能被模型有效理解。
  • BFR 的模型无关性验证:论文在 Qwen3-VL、GPT-5-mini 和 Gemini-3-Flash 三个不同架构的 MLLM 上测试了 BFR 渲染的代码图像质量。结果表明 BFR 在不同模型上均能提升代码理解性能,验证了其作为通用渲染策略的有效性。
  • 任务依赖的配置偏好分析:图 3(第 8 页)系统展示了不同任务对 scale ratio 和 pruning ratio 的偏好差异。代码补全偏好较高的缩放比以保留细节,代码克隆检测则可以在较低缩放比下工作。前景和背景的剪枝比在不同任务间也有显著差异,这进一步证明了自适应配置的必要性。
  • 与文本压缩方法的本质区别:CodeShrink 作为视觉压缩方法,保留了代码的二维空间结构信息——如对齐、缩进关系等——这些信息在纯文本压缩中可能丢失。实验表明,在代码克隆检测任务上,文本压缩方法 LLMLingua-2 的 F1 仅为 3.9%,而 CodeShrink 达到 65.9%,差距悬殊,说明视觉压缩在保持代码语义结构方面具有独特优势。

逐图理解论文

失败的固定策略

失败的固定策略
Fig. 1. Preliminary study of code image compression. (a) Original code rendering contains substantial blank regions, shown in gray. (b) Attention visualization shows that task-relevant code regions receive higher attention than other regions. (c) The preferred scale ratio varies across code completion samples. (d) Dynamic selection (DS) surpasses the best fixed scale ratio across all three tasks. Code QA and code clone detection are evaluated by accuracy, and code completion is evaluated by edit similarity (ES).

图 1 展示了代码图像压缩的初步研究。子图 (a) 显示原始代码渲染中灰色标注的空白区域占比很大,这些区域对应的视觉令牌几乎不携带语义信息。子图 (b) 的注意力可视化证实任务相关代码区域获得更高注意力,为选择性剪枝提供了依据。子图 (c) 和 (d) 揭示了不同样本和任务对压缩配置的需求差异,动态选择在所有任务上均优于固定配置,直接支撑了 ACC 的设计动机。

研究空白与CodeShrink的应对

研究空白与CodeShrink的应对
Fig. 2. The framework of CodeShrink.

图 2 展示了 CodeShrink 的完整框架。从左到右依次为:代码输入首先经过 BFR 进行无空白渲染,然后通过视觉编码器转换为视觉令牌;DTS 在浅层 MLLM 中基于指令注意力进行令牌剪枝;ACC 的 Config Agent 为每个样本动态预测最优的 scale ratio 和 pruning ratio。三个组件协同工作,实现了从渲染到剪枝到配置的全链路自适应压缩。

自适应配置如何工作

自适应配置如何工作
Fig. 3. Task-dependent compression configuration of CodeShrink on the three code understanding tasks. (a) shows the effect of the scale ratio rδ, where the stars mark the best operating point of each task. (b–d) show the effect of the foreground and background pruning ratios rρf and rρb on code clone detection, code QA, and code completion respectively, where the red box marks the best configuration of each task.

图 3 系统分析了不同任务对压缩配置的偏好。子图 (a) 显示代码补全需要较高的 scale ratio 以保留细节,而代码克隆检测在较低缩放比下即可工作。子图 (b-d) 分别展示了三个任务上前景和背景剪枝比的影响,红色方框标注的最优配置点差异显著,有力证明了自适应配置的必要性。

实验如何设计?

  • 任务与数据集:在三个代表性代码理解任务上评估——Code QA(代码问答)、Code Clone Detection(代码克隆检测)和 Code Completion(代码补全),覆盖 Python 和 Java 两种编程语言。
  • 基线方法:与 Text-Only(未压缩纯文本)、NoCtx(无上下文)、LLMLingua 系列、LongCodeZip 等文本压缩方法,以及 FastV、VisionZip 等视觉令牌压缩方法和 CodeOCR 进行全面对比。
  • 评估指标:Code QA 和 Code Clone Detection 使用准确率(Accuracy)和 F1 分数,Code Completion 使用编辑相似度(Edit Similarity, ES)和精确匹配(Exact Match, EM)。
  • 消融设计:通过逐步移除 BFR、DTS、ACC 和 SFT(监督微调)组件,分析各模块对整体性能的贡献。
  • 跨模型验证:在 Qwen3-VL、GPT-5-mini、Gemini-3-Flash 上验证 BFR 渲染的模型无关性。
  • 配置分析:深入分析不同任务对 scale ratio 和 pruning ratio 的偏好,以及 ACC 的动态选择行为。

关键结果与论文证据

  • CodeShrink 在 Python Code QA 上达到 82.3% 准确率,超越未压缩 Text-only 的 81.0%,同时视觉令牌减少约 40%(第 6 页)。这是论文最核心的结论——压缩后的视觉输入不仅没有损失性能,反而超越了纯文本基线。
  • 在 Python Code Clone Detection 上,CodeShrink 达到 68.0% 准确率和 65.9% F1,令牌减少率 41.4%,而文本压缩方法 LLMLingua-2 的 F1 仅为 3.9%(第 6 页)。这一悬殊差距凸显了视觉压缩在保持代码结构信息方面的优势。
  • 在 Java Code Clone Detection 上,CodeShrink 达到 71.0% 准确率和 70.1% F1,令牌减少率高达 71.2%(第 6 页)。Java 代码通常包含更多样板代码,因此压缩空间更大。
  • BFR 渲染在 Qwen3-VL 的 1x Code Completion 上,将 ES 从 36.2% 提升至 54.7%,EM 从 10.5% 提升至 23.8%(第 7 页)。仅改变渲染方式就带来近 20 个百分点的 ES 提升,说明消除空白冗余对代码补全这类细节敏感任务尤为关键。
  • 消融实验中,移除 ACC 导致 Python QA 准确率从 81.5% 降至 75.0%,Java Clone Detection 令牌减少率从 53.5% 降至 22.5%(第 8 页)。ACC 的自适应能力对性能和压缩率的平衡至关重要。
  • 图 3(第 8 页)显示,代码补全的最优 scale ratio 高于代码克隆检测,验证了不同任务对分辨率的差异化需求。红色方框标注的各任务最优配置点差异明显,固定配置无法同时满足所有任务。
  • 图 4(第 10 页)的案例展示了 Config Agent 的选择逻辑:对于某个样本,Agent 选择 4× 缩放比,因为 1× 和 2× 浪费令牌于不必要的高分辨率,而 8× 使代码不可读。这体现了 ACC 在可读性与效率之间的智能权衡。
  • 图 5(第 10 页)对比了不同渲染方法的效果。BFR 渲染的代码图像紧凑且清晰,相比原始渲染显著减少了空白区域,同时保持了代码的结构可读性。

阅读时需要注意

  • 任务覆盖有限:仅在 Code QA、Code Clone Detection 和 Code Completion 三个任务上评估,未扩展到代码摘要、代码搜索、bug 检测等更广泛的软件工程任务。
  • 语言覆盖有限:实验基于 Python 和 Java 两种语言,未验证在 C++、JavaScript、Go 等语言以及大型真实软件仓库上的泛化能力。
  • 训练开销:Config Agent 的强化学习训练需要预先对每个样本的所有配置进行穷举评估以构建奖励环境,计算开销较大,可能限制其在大规模数据集上的应用。
  • 微调需求:下游 MLLM 和 Config Agent 均需微调,尽管单次微调成本较低(约 25 分钟 + 40 分钟),但在需要频繁更新模型或处理新领域时仍需额外训练步骤。

关联工作

  • CodeOCR(第 1 页):首次探索将源代码渲染为图像进行代码理解的范式,CodeShrink 在其基础上进一步解决布局冗余和自适应压缩问题,可视为该范式的重大改进。
  • LLMLingua 系列(第 1 页):文本令牌压缩方法,通过删除或合并文本令牌来减少输入长度。CodeShrink 作为视觉压缩方法与其形成互补,在保持代码语义结构方面更具优势。
  • LongCodeZip(第 1 页):代码专用的文本压缩方法,CodeShrink 在压缩率和性能上均优于它,特别是在代码克隆检测等需要结构信息的任务上。
  • FastV / VisionZip(第 5 页):通用视觉令牌压缩方法,在推理时剪枝不重要的视觉令牌。CodeShrink 针对代码图像特性设计了专门的压缩策略,在代码任务上表现显著优于这些任务无关方法。

发表评论