在传统文档检索系统中,光学字符识别(OCR)一直是不可或缺的预处理环节。然而,OCR技术存在两个显著痛点:一是识别准确率受文档质量影响较大(特别是低分辨率或复杂排版的文档),二是处理流程需要消耗大量计算资源。2024年6月问世的ColPali模型首次提出了完全绕过OCR的解决方案,直接基于视觉语言模型处理文档图像,但其30亿参数的规模对实际部署提出了挑战。
ColFlor正是在这种背景下诞生的轻量化解决方案。它保留了ColPali的核心优势——无需OCR即可实现端到端的文档检索,同时将模型参数量压缩到1.74亿(仅为ColPali的1/17)。在实际测试中,ColFlor在英文文本密集文档上的检索性能仅比ColPali下降1.8%,却带来了5.25倍的图像编码加速和9.8倍的查询编码加速。这种效率提升使得OCR-free的文档检索技术能够真正惠及计算资源有限的用户群体。
关键突破:ColFlor首次在BERT模型量级(约1亿参数)实现了实用的视觉文档检索能力,打破了"视觉任务必须大模型"的固有认知。
ColFlor的创新架构源自对Florence-2模型的巧妙改造。原始Florence-2包含视觉编码器、文本编码器和文本解码器三部分,而ColFlor移除了文本解码器,将剩余组件重新定位为:
视觉编码器:采用DaViT(Dual Attention Vision Transformer)架构,将输入图像转换为N个视觉嵌入向量。与标准ViT不同,DaViT通过空间注意力和通道注意力的双重机制,能更高效地捕捉文档图像中的空间布局特征——这对理解文档结构至关重要。
文本编码器:基于BART的编码器部分,接收视觉编码器输出的N个嵌入向量,生成上下文感知的表示。这里的一个关键设计是保留了Florence-2中的特殊<OCR>标记,使模型能够学习区分图像中的文本区域和其他视觉元素。
为优化存储效率,ColFlor在文本编码器后添加了一个可训练的线性投影层,将768维的原始嵌入压缩到128维。这个设计借鉴了ColBERT的成功经验,但实现时遇到了训练不稳定的挑战。我们的解决方案是:
这种分阶段训练策略有效解决了梯度爆炸问题,同时保证了投影层的质量。实测表明,经过压缩的128维嵌入在ViDoRe基准测试中仅导致约0.3%的性能损失,却将存储需求降低了83%。
与传统单向量检索系统不同,ColFlor采用ColBERT风格的"上下文化迟交互"机制。具体索引过程包含以下关键步骤:
<OCR>标记,输出上下文化表示实测数据:处理100万页文档图像时,ColFlor的索引大小仅为ColPali的1/5.7,显著降低了存储成本。
查询端的优化是ColFlor效率提升的关键。我们实现了以下创新:
查询相似度计算采用MaxSim操作:
code复制def maxsim(query_emb, doc_emb):
# query_emb: [Q, D], doc_emb: [N, D]
sim_matrix = torch.matmul(query_emb, doc_emb.T) # [Q, N]
return torch.max(sim_matrix, dim=1)[0].mean()
这种逐token的最大相似度聚合方式,比传统的CLS向量点积更能捕捉细粒度语义关联。
我们使用ViDoRe基准测试的扩展版进行训练,包含:
数据增强策略包括:
在4块A100 GPU上的具体训练配置:
| 超参数 | 预训练阶段 | 微调阶段 |
|---|---|---|
| 学习率 | 3e-5 | 2e-5 |
| 批大小 | 64 | 64 |
| 训练轮次 | 5 | 40 |
| 学习率调度 | 线性衰减 | Cosine |
| 梯度裁剪 | 1.0 | 1.0 |
| Warmup比例 | 10% | 5% |
关键发现:在预训练阶段禁用混合精度训练(使用FP32)能显著提升稳定性,而微调阶段开启AMP(自动混合精度)可将训练速度提升1.7倍。
我们在三类文档上的评估结果(nDCG@10指标):
| 文档类型 | ColPali | ColFlor | 差距 |
|---|---|---|---|
| 英文文本密集文档 | 0.742 | 0.729 | -1.8% |
| 图表文档 | 0.681 | 0.623 | -8.5% |
| 法语文档 | 0.588 | 0.402 | -31.6% |
值得注意的是,在TatDQA(财务报告数据集)上,ColFlor反而以0.712比0.698领先ColPali。分析表明,这是因为财务文档具有高度结构化的表格和固定术语,小模型反而更容易捕捉这些规律性特征。
在T4 GPU(16GB显存)上的实测性能:
| 指标 | ColPali | ColFlor | 提升倍数 |
|---|---|---|---|
| 图像编码速度 | 12.3 img/s | 64.5 img/s | 5.25x |
| 查询编码速度 | 8.7 query/s | 85.2 query/s | 9.8x |
| 内存占用 | 9.8GB | 1.2GB | 8.2x |
| 索引构建时间 | 4.2h | 0.8h | 5.25x |
特别值得注意的是,ColFlor支持更高的输入分辨率(768vs448),却能生成更少的嵌入向量(587vs1024),这种"高质量低密度"的特征表示是其效率优势的核心。
当前版本的主要限制体现在:
我们正在推进的改进包括:
一个有趣的发现是:当文档图像中包含手写注释时,ColFlor的检索准确率会提升3-5%。这表明模型可能自发学习了笔迹特征作为辅助线索,这为未来的多模态检索研究提供了新思路。