简介:大模型长文本处理受制于注意力的二次方复杂度,算力成本随上下文长度急剧攀升。本文解析“以视觉模态压缩文本”的上下文光学压缩范式:将长文档渲染为图像,经窗口注意力、卷积压缩与全局注意力的三级流水线,把数千个图像块Token压缩至百量级,再由稀疏激活解码器按需还原,并给出压缩率与精度的权衡分析和典型落地场景,为长文本应用降本提供新思路。
大语言模型的上下文窗口,正从早期的千级Token走向十万乃至百万级。但这条扩展之路始终被一个数学事实卡住:标准自注意力机制的计算量与序列长度的平方成正比。序列长度扩大10倍,注意力矩阵的规模就膨胀100倍;与此同时,推理阶段的KV缓存随序列长度线性增长,进一步挤占显存。这带来三重现实压力:
业界已有多种缓解路线——稀疏注意力、线性注意力、滑动窗口、检索增强等,它们各有取舍,但大多仍在“文本Token”这一表示介质内部做文章。一个更根本的问题是:有没有可能换一种介质来承载上下文?
近期一批研究给出了一个反直觉的答案:把文本“画”出来。一页排版紧凑的文档图像,承载的文字可能相当于数千个文本Token,但用视觉编码器表示它,往往只需几百个视觉Token。换言之,同样的信息量,视觉表示的“码率”远低于文本表示。这并非魔法,而是两类表示的结构性差异:
OCR(光学字符识别)恰好是验证这一思路的理想试验场:它天然构成“视觉表示→文本表示”的解压映射,且有明确真值可对比,压缩质量可用文本召回率、编辑距离等指标量化。这构成了“上下文光学压缩”的基本框架:文本渲染为图像是编码,模型从图像还原文本是解码,两者Token数量之比即压缩率。用示意代码表达这条流水线:
def optical_compress(long_text: str):# 编码:文本 -> 页面图像 -> 少量视觉Tokenimage = render_to_image(long_text) # 一页长文档patches = slice_patches(image) # 切分为图像块Token(如4096个)local = window_attention(patches) # 局部感知,激活内存可控token = conv_downsample(local, ratio=16) # 16倍压缩 -> 256个return global_attention(token) # 全局语义聚合后的上下文表示def answer(query: str, ctx) -> str:# 解码:从压缩的视觉上下文中按需还原文本return sparse_decoder_generate(query, ctx)
若直接对高分辨率图像做全局注意力,激活内存会随图像块数量二次方增长,这条路走不通。可行的设计是把“贵”的全局注意力留给“便宜”的时刻——即Token已被压缩之后,由此形成“先局部、再压缩、后全局”的级联式编码器。
1. 局部感知:用窗口注意力扛住高分辨率。 以1024×1024输入为例,图像会被切分为约4096个图像块Token。若在此规模上做全局注意力,单层激活内存已不可接受。级联结构的第一级采用窗口注意力:每个图像块只与同窗口内邻居交互,计算量与序列长度近似线性,在保住细节感知能力(小字号、上下标、表格线)的同时,把激活内存控制在与输入规模线性相关的水平。
2. 关键一步:16倍卷积压缩。 第二级是16倍下采样的卷积压缩器,把4096个Token锐减至256个——这是整条流水线中真正“压缩”发生的地方。卷积天然擅长局部聚合,以极少参数完成邻域信息融合,将一个窗口的细节浓缩为一个Token。这一步让视觉Token数量降低一个量级,是高压缩比的工程支点。
3. 全局语义:在小Token集上做全局注意力。 第三级才引入全局注意力。此时序列长度已从4096降至256,全局注意力的开销从4096²量级降到256²量级,几乎可忽略。在如此小的集合上做全局交互,既能让模型跨区域理解版面结构(多栏、图表与正文的对应关系),又无需付出高昂代价。
4. 解码侧:稀疏激活的MoE解码器。 生成端采用混合专家结构,每个Token只激活部分专家参数,其价值在于把“模型总容量”与“单Token计算量”解耦——用更大的总参数换取更强的知识储备,推理算力仍保持低位。对于需要从压缩上下文中精细还原文本的任务,这种“大容量、低激活”的组合尤为契合。
整套设计的原则可以概括为一句话:在Token多的地方用便宜的操作,在Token少的地方用贵的操作。
光学压缩并非免费午餐,其核心权衡发生在三个变量之间:
研究层面的普遍观察是:正文类内容在中等压缩率下可高保真还原;而极小字号的注释、复杂公式、手写体等高密度信息对压缩更敏感。因此实践中的目标函数应表述为:在可接受的精度损失阈值下最大化压缩率,或反之,在给定视觉Token预算下最大化可承载的文本量。下表对比了几类长上下文路线的取舍:
| 技术路线 | 核心思路 | 主要代价 |
|---|---|---|
| 稀疏/局部注意力 | 只计算部分位置对 | 实现复杂,硬件利用率受限 |
| 线性注意力/状态空间 | 固定状态近似历史 | 精确回忆长距离细节能力下降 |
| 检索增强 | 仅取相关片段入上下文 | 依赖检索质量,上下文被割裂 |
| 视觉光学压缩 | 用图像作为文本载体 | 需渲染步骤,存在信息损失风险 |
1. 文档密集型工作负载。 合同审阅、论文研读、档案数字化等场景中,输入本就以扫描件、PDF等图像形态存在,天然适配这条流水线:跳过“先OCR成文本、再逐Token输入”的两段式处理,直接以视觉Token进入模型,可显著压缩等效上下文开销。
2. 超长对话与知识库的归档层。 对历史对话,可定期将早期轮次渲染成图像快照,以少量视觉Token归档,近期轮次保留文本形态;对知识库,可按页建立视觉索引,检索时以视觉Token粒度召回、按需解码。这相当于在“全量保留”与“摘要丢弃”之间,找到有损但可控的中间态。
3. 成本账本。 粗略估算:若一页文档约需3000个文本Token,而视觉表示仅需约300个Token,注意力开销即可获得约一个数量级的节省。完整核算还应计入渲染延迟、图像传输与存储——在典型云架构中,这些环节可依托对象存储、容器化推理服务、日志与监控告警等通用能力承载,例如基于百度智能云的对象存储托管页面图像,以GPU容器实例承载编码与解码推理,并通过监控链路持续追踪压缩率与召回率指标。
4. 边界与局限。 理性看待该范式还需注意:纯文本短对话未必受益,渲染与图像编码本身有开销,文本本就紧凑时压缩收益有限;极端压缩必然有损,细节信息(罕见字符、密集公式)最先丢失;召回率阈值应与具体任务(信息抽取、全文翻译、问答)挂钩评估,不能只看平均指标。
“用视觉模态压缩文本”的价值,不只在于提供一种降低长上下文成本的手段,更在于提示了一种思维方式:模态本身可以被当作压缩介质,上下文是值得被“编码”的资源,而不只是被“加长”的序列。 当前这类研究仍处于概念验证阶段,渲染策略、压缩率—精度曲线、与现有推理框架的整合都有大量工程问题待解。但对所有被长文档成本困扰的团队而言,这条路线值得纳入技术雷达持续跟踪:在多模态融合日益成为主流的背景下,“先压缩、后推理”很可能成为长上下文工程的标准组件之一。