Chapter 02

ColPali 架构拆解

一句话总结:PaliGemma 提 patch 向量 + 线性投影到低维 + MaxSim 算相关度。三件套,每件都来自成熟研究。本章把公式、维度、流程讲清。

三个前置概念

PaliGemma
Google 2024 年开源的视觉语言模型:SigLIP 视觉编码器 + Gemma 语言模型。把 448×448 的图切成 1024 个 patch,每个 patch 过 SigLIP 输出一个向量,再由 Gemma 对齐。开源许可、多语言、3B 参数易微调——ColPali 的理想底座。
ColBERT 风格 Late Interaction
2020 年 Stanford 提出的文本检索架构:query 和 doc 都编码为多向量(每 token 一条),打分时对每个 query token 在 doc 的所有 token 里找最相似的(MaxSim),求和。召回远优于单向量平均池化。
Patch Embedding
ViT 家族的标准操作:图片切成 N×N 网格,每格压成一个向量。PaliGemma 的 448×448 输入被切成 32×32=1024 个 patch。ColPali 把每个 patch 向量当作"文档的一个 token"。

编码流程(Document 侧)

PDF 页面 → 448×448 图片 │ ▼ PaliGemma 视觉编码器(SigLIP) │ 输出 1024 个 2048 维向量 ▼ Gemma 语言模型(加文本 prompt: "Describe the image.") │ 输出 1024 个 2048 维上下文化向量 ▼ 线性投影(Linear 2048 → 128) │ ▼ L2 normalize → 1024 × 128 维矩阵 D

也就是说,一页 PDF 变成 1024 个 128 维单位向量。存储 ≈ 1024×128×2(bfloat16) = 256KB / 页。

编码流程(Query 侧)

query 也过同一个 PaliGemma(带特殊 query token "Question: {text}"),输出每 token 的 128 维向量,通常 10–30 个 token。记为 Q = [q1, q2, ..., qn]

MaxSim 打分

# Q: query tokens,shape (n, 128)
# D: doc patches,shape (1024, 128)

# 1. 计算相似度矩阵
sim = Q @ D.T            # (n, 1024)

# 2. 每个 query token 取最大 patch 相似度
max_per_q = sim.max(axis=1)  # (n,)

# 3. 所有 query token 相加
score = max_per_q.sum()    # 标量

直觉:query 里每个词(token)去页面上找"最能解释我"的那块 patch,加总起来就是这页和这 query 的相关度。

为什么不是单向量 + cosine?
单向量是把整页压成 128 维——信息瓶颈。一个页面可能同时讲多个话题、有表格有图,单向量抹平所有细节。Late Interaction 把"是否讲了 X"分散到 patch 级别,query 里不同词自己去找自己关心的区域

为什么这招对视觉文档尤其有效

训练目标(对比学习)

# 一个 batch 里 N 个(query, positive_page)对
# 构造 N × N 相似度矩阵,每行正样本在对角线上

scores = maxsim(Q, D)                    # (N, N)
labels = torch.arange(N, device=device)
loss = F.cross_entropy(scores, labels)

典型的 in-batch negatives 对比学习:对一条 query,batch 内其他文档的页面都是负样本。数据来自 ViDoRe 的 100K 合成 query-page 对。

PaliGemma 为什么是好选择

优点

  • 3B 参数轻量、单 A100 能微调
  • SigLIP 视觉 tower 已经 LARGE-scale 预训练
  • 原生多语言
  • 开源许可商业友好

缺点

  • 448×448 输入对超高分辨率文档(A3 财报)信息丢失
  • 3B 参数在 edge 设备仍太重
  • 2024 年初版不支持动态分辨率——后续 ColQwen2 用 Qwen2-VL 解决

关键超参

参数含义
patch 数102432×32 网格(448/14 = 32)
输出维度128线性投影后,平衡容量与存储
bfloat16 每页256 KB128 × 1024 × 2 bytes
int8 每页128 KB量化后
binary 每页16 KBBinary Quantization 后

模型家族速览

模型骨干发布特点
ColPali v1PaliGemma-3B2024.7开山之作
ColPali v1.2PaliGemma-3B2024.10新数据训练,精度提升
ColQwen2Qwen2-VL-2B2024.11动态分辨率,高分图表更强
ColQwen2.5Qwen2.5-VL-3B2025.1长文档、多页检索优
ColInternVL2InternVL2-2B2025中文文档表现突出
ColSmolVLMSmolVLM-500M2025边缘设备可跑

本章小结