NeoMME matches a retriever 14× its size at 260M parameters
H Company pretrained a multimodal encoder from scratch instead of repurposing a generative VLM, and released the weights under Apache-2.0.
30-Second Summary
- H Company released NeoMME, a family of 260M- and 800M-parameter multimodal multilingual encoders pretrained from scratch, on 3 September 2026 under Apache-2.0.
- The 260M retrieval checkpoint scores 0.523 nDCG@10 on ViDoRe v3 — within 0.002 of ColQwen2.5, which carries roughly 14× more parameters.
- Hierarchical pooling plus asymmetric quantization cuts a page's late-interaction embedding from about 1.5 MB to 6 kB while keeping over 95% of baseline retrieval quality.
What Happened
H Company published NeoMME on 3 September 2026: two multimodal multilingual encoders, 260M and 800M parameters, with pretrained backbones and retrieval-tuned checkpoints on the Hugging Face hub under Apache-2.0. The paper — NeoMME: A Single-Tower Multimodal-Native Multilingual Foundation Encoder for Efficient Fine-Tuning and Inference, by Aurélien Lac and Tony Wu — went to arXiv on 31 August 2026 as 2609.01657.
The architecture is the argument. Retrievers like ColPali take a generative vision-language model — a separately pretrained vision tower bolted to a causal language model — and press it into service as an encoder. NeoMME is a single bidirectional Transformer with no vision tower and no decoder. Images enter as non-overlapping 32×32 patches through a small MLP; text enters through factorized embeddings over a 131k-token BPE vocabulary. Most layers run symmetric sliding-window attention, with global attention every sixth layer and at the end. Both sizes hold a 16,384-token context, which the paper puts at two standard 4K UHD images.
Pretraining ran a masked discrete-diffusion text objective over roughly 524 billion packed tokens, 290 billion of them text-only, conditioned on visible image patches for the multimodal examples. The retrieval fine-tune trains a dense head and a late-interaction head jointly and returns both from one forward pass: a 1,024-dimensional pooled vector with Matryoshka cut points, alongside a 128-dimensional vector per token and per patch.
Why It Matters
On ViDoRe v3, NeoMME-Retriever-260M reaches 0.523 nDCG@10 — the best of any evaluated model strictly below 800M parameters, and within 0.002 of ColQwen2.5 at about 14× fewer parameters. The 800M variant reaches 0.556, within 0.009 of the similarly sized Vultron Retriever Flash. At a matched 2048×2048 input on an NVIDIA L40S, the 260M model encodes about 51 pages per second against ColModernVBERT's 26.
The compression numbers matter more. A page's late-interaction embedding starts near 1.5 MB. Pooling factor 10 with int8 brings that to 39 kB and retains over 99% of baseline quality; pooling factor 8 with int8 queries and binary documents brings it to 6 kB, 255× smaller, with over 95% retained. H Company also contributed the model upstream, so NeoMMEForRetrieval is a Transformers class rather than trust-remote-code.
Builder Insight
The benchmark table is not the interesting result. A 0.002 nDCG@10 gap is a tie, and ties on ViDoRe get published every month. What the tie demonstrates is that the parameter cost of the ColPali recipe was overhead — a decoder that never generates, a vision tower pretrained for a different objective, causal masking on a task with no causality. Strip those and the score survives at a fourteenth of the size. That is a negative result about the standard recipe dressed as a positive one about a new model, and the negative half is the more useful finding.
For a small studio the number that changes what is shippable is 6 kB per page. Late-interaction retrieval has always been gated on index size rather than index quality: at 1.5 MB per page a 100,000-page corpus is a 150 GB index, which is a served-infrastructure problem with a monthly bill. At 6 kB it is 600 MB, which fits in RAM on a machine you already own. This release moves the affordability line considerably further than it moves the quality line.
What H Company is not saying deserves equal weight. No VRAM figure appears in the paper, the blog post or the model card — the L40S throughput number comes off a 48 GB datacentre card and implies nothing about a 16 GB consumer GPU. And "multilingual" is never enumerated; no language list appears in any of the three sources, so coverage outside the usual European set is unverified until you test it. The parameter counts also disagree slightly: the paper and blog say 260M, the retriever model card reports 263M.
Practical Implementation
The retrieval class ships in Hugging Face Transformers upstream, and the blog points at the main branch, so install from source until a tagged release carries it:
pip install "git+https://github.com/huggingface/transformers"
pip install "sentence-transformers>=6.0.0" # only for the ST dense/late checkpoints
pip install accelerate # for device_map="auto"
Loading the 260M retriever is three lines:
from transformers import AutoProcessor, NeoMMEForRetrieval
processor = AutoProcessor.from_pretrained("Hcompany/NeoMME-260M-Retriever")
model = NeoMMEForRetrieval.from_pretrained(
"Hcompany/NeoMME-260M-Retriever", device_map="auto"
)
Six checkpoints are published: the NeoMME-260M and NeoMME-800M backbones, their two -Retriever variants, and NeoMME-260M-Retriever-ST-dense and -ST-late for Sentence Transformers.
The default image ceiling is 2,048 pixels on the longest side, and the patch grid follows: 2048 ÷ 32 gives 64 patches per side, so a square page costs 4,096 of the 16,384 context slots and leaves ample room for the query. Plan indexing throughput from that, not from page count alone.
No source states a memory requirement. Before wiring this into a pipeline, run the 260M checkpoint at your real page resolution on your actual card and log peak allocated VRAM and pages per second — at this parameter count the binding constraint is far more likely to be activation memory at high resolution than weights. If you serve non-English documents, build a small labelled set in your target languages and measure recall before trusting the word "multilingual".
License
Apache-2.0, stated in the paper abstract and in the license field of the model card metadata. Commercial use is permitted with no per-use fee, no non-commercial clause and no revenue or deployment ceiling; the obligations are the ordinary Apache-2.0 ones — preserve the licence and notice files, state significant changes, and accept the patent grant and its termination clause. Backbones and retrieval checkpoints carry the same terms, so a fine-tune of your own on top of the backbone takes on no additional restriction from H Company.
Sources
- NeoMME: multimodal multilingual encoders — H Company on the Hugging Face blog — tier 1
- NeoMME: A Single-Tower Multimodal-Native Multilingual Foundation Encoder for Efficient Fine-Tuning and Inference (arXiv:2609.01657) — tier 1
- Hcompany/NeoMME-260M-Retriever model card — tier 2
We build these. Addis Pulse Studio designs and runs production AI workflows — private stacks, creator tooling, and the pipelines behind them. addispulsestudio.com
How this post was made
Drafted from clustered primary sources by the models below, then read, edited and approved by a human before it was published. The sources are listed in full at the end of the article.
- Drafted
- Independent sources
- 3
- draft article
- claude-opus-5
- short script
- claude-opus-5
- Run
- radar-20260904T140206Z