NeoMME:高效的多模态原生与多语言编码器
核心要点
我们推出 NeoMME 系列多模态编码器,包含 260M 与 800M 两种规格。与许多生成式视觉语言模型不同,NeoMME 不依赖独立的预训练视觉塔或因果语言模型,而是由单一双向 Transformer 同时处理文本 token 与原始图像 patch,并基于掩码离散扩散目标从头训练。
我们基于 ColPali 的页面图像(page-image)方法对 NeoMME 进行微调,使其适用于视觉文档检索。NeoMME-Retriever 可在单次前向传播中同时输出稠密向量和晚期交互嵌入。两种规格均在 ViDoRe v3 的 nDCG@10 与模型体积 Pareto 前沿上。在 NVIDIA L40S GPU 统一 2048×2048 输入尺寸时,260M 模型每秒可编码约 51 页,吞吐量约为 ColModernVBERT 的两倍。通过分层 token 池化与非对称量化,单页晚期交互索引存储从约 1.5 MB 降至 6 kB(缩小 255 倍),且仍能保持基线 nDCG@10 的 95% 以上。
NeoMME 已集成至 Hugging Face Transformers,所有模型权重均以 Apache 2.0 许可证开源。
为何还要推出新的多模态编码器?
近期许多视觉文档检索器均基于预训练的生成式视觉语言模型改造而来。这类架构通常由独立的预训练视觉编码器提取特征,经投影层映射至语言模型输入空间,再由因果解码器处理融合后的图文表征。然而,检索、分类和 token 标注任务无需自回归生成文本,因此完全不需要因果解码器及该架构带来的参数与计算开销。
ModernBERT 将高效的架构和训练改进带入了双向编码器。在视觉文档检索场景中,ModernVBERT 采用了双向 ModernBERT 风格的文本编码器,同时保留了独立的预训练 SigLIP2 视觉塔。我们希望在此基础上更进一步,设计并训练一个多模态编码器,无需继承 VLM 的参数量和计算开销。
NeoMME(发音类似 "nee-oh-me",IPA /ˈniː.oʊ.mi/)是一种多语言、多模态的基础编码器,能够利用单个 Transformer 编码器为输入的文本和/或图像生成向量表示。它并非基于已有的预训练视觉塔、文本编码器或文本解码器。
图像和文本共用同一计算路径,因此 NeoMME 可以更便捷地支持跨模态的预训练、微调、并行化和部署。
NeoMME 编码器骨干网络
一个 Transformer 统一处理图像和文本
NeoMME 提供 260M 和 800M 两种规模。两种变体采用相同的架构:
- 原生多模态输入: 文本输入使用分解式 token 嵌入,图像则被划分为不重叠的 32×32 网格 patch,并通过小型 MLP 进行投影。两者共同进入同一个 Transformer 编码器。
- 动态图像分辨率: 图像保留其原始宽高比和尺寸,使得模型能够对高分辨率、信息密集的文档页面分配更多 token,而对内容较少的较小图像分配较少 token。
- 长双向上下文:两种模型的上下文长度均为 16,384 个 token(足以容纳两张标准 3840×2160 4K UHD 图像)。大部分层采用对称滑动窗口注意力,而每隔六层及最后一层则使用全局注意力。
- 现代编码器架构:NeoMME采用了近期编码器领域的主流改进,包括分组查询注意力(grouped-query attention)、查询-键归一化、门控注意力、二维旋转位置编码,以及平方 ReLU 的 MLP 等。
- 多语言文本:我们从头训练了一个 BPE tokenizer,词表大小 131k,训练数据涵盖多语言文本、代码、数学以及机器生成的图像转写文本。
通过掩码文本从图像中学习
我们以离散掩码扩散文本去噪器的形式,从头预训练 NeoMME。对于纯文本样本,我们在 0 到 1 之间均匀采样一个遮盖率,随后对每个可遮盖的文本 token 以该概率独立进行掩码。
多模态样本的遮盖率介于 0.3 到 1 之间。在此过程中,图像块保持可见,由 NeoMME 负责重建被掩码的文本部分。轻度的掩码下,模型往往仅凭周围文本即可推断出缺失词汇。例如,"The [MASK] sat on the mat"中补出"cat"是合理的完成结果,即便没有任何图像信息。而当遮盖率较高时,模型被迫依赖非掩码输入文本中极少甚至完全没有的信号,转而学习由图像支撑的描述。
预训练混合了多语言文本、代码、数学、自然图像和文档图像。每个模型处理约 5240 亿个打包输入 token,其中来自纯文本示例的有 2900 亿。与现代 BERT 的 2 万亿训练 token 预算相比,这个文本预算相对较小,因此我们选用 NorMuon 优化器来提升训练时的数据效率。
NeoMME-Retriever
为了对骨干网络进行更有意义的下游评估,我们使用 ColPali 提出的页面图像方法,将 NeoMME 微调用于视觉文档检索。传统基于文本的检索是从文本块中召回相关内容,而 NeoMME-Retriever 直接对标文档页面的截图进行排序,跳过了从 PDF 提取文本所需的全部 OCR 预处理步骤。将页面保留为图像形式,可以保持布局、图表、表格、字体类型与大小及其他视觉线索——这些内容即使是完美 OCR 也无法完整捕获。
面向密集检索与晚期交互检索的双头设计
NeoMME-Retriever 复用了 NeoMME 骨干网络,并在其上方增加了两个联合训练的检索头:
- 密集头:对骨干网络的隐藏状态向量做均值池化,得到一个归一化向量。密集嵌入是目前最主流的方式:它们紧凑,且天然兼容近似最近邻(ANN)技术以实现快速检索。
- 晚期交互头:将骨干网络输出隐藏状态中的每个文本 token 或图像 patch 投影为一个 128 维的归一化向量。相比密集嵌入,这种更细粒度的表示保留了查询 token 与图像区域之间更精细的局部匹配能力。
Omar Khattab 在 ColBERT 中引入了晚期交互(late-interaction)概念,他在 此推文 中解释了为何这一术语比"多向量"更为准确——它描述的是打分函数的粒度与可学习性,而非单纯指存储向量的数量。
想了解晚期交互的更多细节,推荐阅读 Amélie Chatelain 的 这篇速成课程。
一次 NeoMME-Retriever 前向传播即可返回两种表示,无论你面对何种使用场景或基础设施都能灵活应对。我们一般推荐使用晚期交互嵌入,因其表达能力更强,且能方便地配合 NextPlaid 等开源库使用。但若你的语料库规模极大,可先通过 NeoMME-Retriever 做一次前向传播获取密集嵌入,经 ANN 索引召回少量候选文档后,再用晚期交互对这些候选进行重排序。
紧凑型模型尺寸下的竞争性检索性能
我们在 ViDoRe v3 上报告了 nDCG@10 指标。NeoMME-Retriever-260M 达到 0.523,是所有严格低于 800M 参数的被评估模型中最高的。它与 ColQwen2.5 仅相差 0.002 nDCG@10,而参数量约为后者的 1/14。NeoMME-Retriever-800M 达到 0.556,与同规模的 Vultron Retriever Flash (0.8B) 仅差 0.009 nDCG@10。两款 NeoMME-Retriever 模型均位于模型尺寸的帕累托前沿上。
ViDoRe v1 和 v2 采用 nDCG@5 指标。在这两个基准测试上,NeoMME-Retriever-260M 均优于 ColModernVBERT 以及参数量为其两倍的 ColSmol-500M。NeoMME-Retriever-800M 在参数量减少 3.6 倍的情况下仍超越了 ColPali v1.3。
| 模型详情 | ViDoRe (nDCG@k) | |||
|---|---|---|---|---|
| 模型 | 参数量 | v3 (@10) | v2 (@5) | v1 (@5) |
| <300M | ||||
| ColModernVBERT | 250M | 0.261† | 0.407‡ | 0.806‡ |
| ColSmol-256M† | 256M | 0.207 | 0.348 | 0.797 |
| NeoMME-260M‡ | 260M | 0.523 | 0.522 | 0.860 |
| 300M–1B | ||||
| ColSmol-500M | 500M | 0.340‡ | 0.455† | 0.825† |
| Vultron Flash† | 850M | 0.565 | 0.604 | 0.882 |
| NeoMME-800M‡ | 800M | 0.556 | 0.559 | 0.874 |
| >1B | ||||
| ColQwen2.5-v0.2† | 3.75B | 0.524 | 0.601 | 0.895 |
| ColPali v1.3† | 2.92B | 0.430 | 0.547 | 0.848 |
† 来自 MTEB 的得分。‡ 由我们自行评测得出。
让高分辨率检索在 late-interaction 场景中变得可行
Late-interaction 的存储量与输出 embedding 中的向量数量呈线性增长。高分辨率图片包含更多 patch,因此会产生更大的 embedding。例如,一张 2048×2048 的正方形页面经 NeoMME-Retriever 处理后会生成包含 4,200 个向量的 embedding,以 float32 存储约 2.1 MB。在 ViDoRe v3 基准测试中,平均每页约 1.5 MB。
为缩小 late-interaction 索引的存储开销,我们结合了两类互补的压缩方法:
- 分层 token pooling:将同一多向量 embedding 中相似的文档向量聚类,并用均值替代每个聚类,从而减少每页存储的向量数量。
- 非对称量化:将文档 embedding 量化为 int8 或 binary。由于查询 embedding 不预存,仅在推理时动态生成,因此可保留更高精度。
我们在 ViDoRe v3 上测试了该方案。采用 pooling factor 10 且查询与文档均为 int8 时,每页存储从约 1.5 MB 降至 39 kB,压缩比达 39×,同时保留了基线 nDCG@10 的 99% 以上。更激进的配置为 pooling factor 8、int8 查询和 binary 文档,每页仅需 6 kB(缩小 255 倍),仍保留超过 95% 的原始检索质量。
用户可根据存储预算和所需的检索质量,从该前沿曲线中选择合适的压缩配置。
更快推理,降低多模态语料索引成本
在搜索语料库之前,检索模型需要先将文档转换为嵌入向量,并存入 Qdrant、Weaviate 或 Milvus 等向量数据库。更快的编码速度意味着构建索引和添加新文档的速度更快,从而降低 GPU 运行时间和计算成本。 因此,我们测试了 NeoMME-Retriever 与其他多模态文档检索器的图像编码速度。我们使用预处理的图像张量,并针对每个模型和图像尺寸分别校准了批大小。在单张 NVIDIA L40S 上匹配 2048×2048 输入尺寸时,NeoMME-Retriever-260M 每秒可编码约 51 页,几乎是 ColModernVBERT(26 页/秒)的两倍。在更小的输入图像上,260M 和 800M 的 NeoMME-Retriever 模型也比我们对比的其他模型更快。
亲自试试 NeoMME-Retriever!
NeoMME-Retriever(260M 和 800M)可同时返回密集嵌入和多向量嵌入。下面的示例使用 MeanMaxSim 晚期交互和密集余弦相似度,对两张文档页面图像计算两个文本查询的得分。
点击查看完整的 🤗transformers 示例代码片段
# accelerate 是仅在 device_map="auto" 时需要安装的可选依赖。
pip install -U accelerate "transformers @ git+https://github.com/huggingface/transformers.git@main" "sentence-transformers>=6.0.0"
Sentence Transformers 微调
我们提供了独立的 dense 与 late-interaction checkpoint,可用于 Sentence Transformers v6 的微调。与 ModernBERT 等文本编码器的处理方式一致,Sentence Transformers 会通过 NeoMMEModel 加载骨干网络,而非双头模型 NeoMMEForRetrieval。由于 Sentence Transformers 目前每个模型仅支持一个检索头,因此每个 checkpoint 允许你分别微调 dense 或 late-interaction 头。若要同时训练两个头,可使用 NeoMMEForRetrieval 配合自定义 Trainer。
从检索到视觉 RAG
视觉文档检索可作为视觉检索增强生成(RAG)系统的第一步。与检索已提取文本片段的文本 RAG 不同,视觉 RAG 直接检索原始页面图像并将其送入视觉语言模型,从而利用表格、图表、示意图及页面布局——这些内容在文本提取时往往会被压平或遗漏。视觉 RAG 的工作流程如下:
- 索引:将每个 PDF 页面转为图像,用检索模型生成 embedding 并存入向量数据库。
- 检索:用同一模型为用户查询生成 embedding,召回 top-k 最相关的页面。
- 生成:将图像追加到查询消息末尾(例如:
{query}{img_1}{img_2}...{img_k}),送入 VLM 生成答案。
你可直接在 HF Space 中使用 NeoMME-Retriever 体验视觉 RAG:🤗 tonywu71/neomme-retriever-demo。
结论
NeoMME 用单一长上下文双向 Transformer 取代了独立的预训练图像和文本编码器,从头开始训练,可同时处理多语言文本 token 与原始 32×32 图像 patch。
NeoMME-Retriever 是专为视觉文档检索微调的 NeoMME 版本。单次前向传播可同时产出密集表示与晚期交互表示。该 260M 模型在严格低于 800M 参数的模型中表现最佳,且在 2048×2048 的统一输入尺寸下,页面编码吞吐量约为 ColModernVBERT 的两倍。为缓解高分辨率文档晚期交互嵌入带来的巨大存储开销,我们尝试了分层 token 池化和非对称量化,成功将每页的晚期交互嵌入从约 1.5 MB 压缩至 6 kB(255 倍压缩),同时保留了基线 nDCG@10 95% 以上的性能。
我们开源了所有 NeoMME 模型权重及零依赖的 Hugging Face Transformers 实现,以支持开发者在其基础上构建高效的多模态、多语言表示模型。
致谢
NeoMME 最初是两位挚友利用业余时间完成的爱好项目。受限于时间与算力,我们决定公开成果,供社区在此基础上继续推进。感谢 H Company 对这项工作的支持,并提供了训练 NeoMME 所需的计算资源。
Citation
@misc{lac2026neommesingletowermultimodalnativemultilingual,
title={NeoMME: A Single-Tower Multimodal-Native Multilingual Foundation Encoder for Efficient Fine-Tuning and Inference},
author={Aurélien Lac and Tony Wu},
year={2026},
eprint={2609.01657},
archivePrefix={arXiv},
primaryClass={cs.IR},
url={https://arxiv.org/abs/2609.01657},
}