NeoMME: ефективен мултимодален и многоезичен енкодер
Накратко
Представяме NeoMME — семейство от многоезични мултимодални енкодери с 260M и 800M параметъра. За разлика от много генеративни визуално-езикови модели, NeoMME не използва отделна предварително обучена визуална кула или каузален езиков модел. Един двупосочен Transformer обработва едновременно текстови токени и необработени образни пачове, а целият модел се обучава от нулата с целева функция за маскирана дискретна дифузия.
Дообучихме NeoMME за извличане на визуални документи, използвайки подхода на ColPali с изображения на страници. NeoMME-Retriever връща плътни и embeddings за късно взаимодействие при едно предно преминаване. И двата размера на модела са на границата на Парето на ViDoRe v3 по отношение на nDCG@10 и размера на модела. При съпоставим размер на входното изображение 2048×2048, на графичен процесор NVIDIA L40S моделът с 260M параметъра кодира около 51 страници в секунда — приблизително два пъти по-висока пропускателна способност от ColModernVBERT. Йерархичното обединяване на токени и асиметричното квантуване намаляват съхранението на индекса за късно взаимодействие от приблизително 1,5 MB до 6 kB на страница (255 пъти по-малко), като същевременно запазват над 95% от базовия nDCG@10.
NeoMME е достъпен в Hugging Face Transformers. Публикуваме всички контролни точки на моделите под лиценза Apache 2.0.
Защо още един мултимодален енкодер?
Много от последните системи за извличане на визуални документи са адаптирани от предварително обучени генеративни визуално-езикови модели. Отделно предварително обучен визуален енкодер създава визуални характеристики, които проектор преобразува в пространството на входа на езиковия модел. След това каузален декодер обработва комбинираните представяния на изображенията и текста. Извличането, класификацията и етикетирането на токени не генерират текст авторегресивно, затова не се нуждаят от каузален декодер, нито от допълнителните параметри и изчислителни разходи на тази архитектура.
ModernBERT въведе ефективни архитектурни и обучителни подобрения при двупосочните енкодери. За извличане на визуални документи ModernVBERT приложи двупосочен текстов енкодер в стил ModernBERT, като запази отделна предварително обучена визуална кула SigLIP2. Искахме да надградим това още повече, като проектираме и обучим мултимодален енкодер, без да пренасяме допълнителните параметри и изчислителни разходи на VLM.
NeoMME (произнася се „ни-оу-ми“, IPA /ˈniː.oʊ.mi/) е многоезичен мултимодален базов енкодер, който генерира векторни представяния за входен текст и/или изображения с помощта на един Transformer енкодер. Той не се основава на съществуваща предварително обучена визуална кула, текстов енкодер или текстов декодер.
Изображенията и текстът използват един и същ изчислителен път, така че NeoMME може по-лесно да поддържа предварително обучение, дообучаване, паралелизация и обслужване и на двете модалности.
Архитектура на енкодера NeoMME
Един Transformer за изображения и текст
NeoMME се предлага в два размера: 260M и 800M. И двата варианта споделят една и съща архитектура:
- Мултимодални входове по подразбиране: текстовите входове използват факторизирани токенни embeddings, а изображенията се разделят на решетка от неприпокриващи се пачове 32×32 и се проектират с малък MLP. И двата типа входове постъпват в един и същ Transformer енкодер.
- Динамична резолюция на изображенията: изображенията запазват съотношението на страните и размера си. Това позволява на модела да използва повече токени при високорезолюционна, наситена с информация страница на документ, отколкото при по-малко изображение с по-малко съдържание.
- Дълъг двупосочен контекст: и двата модела имат дължина на контекста 16 384 токена (достатъчно за до две стандартни 3840×2160 4K UHD изображения). Повечето слоеве използват симетрично внимание с плъзгащ се прозорец, докато всеки шести слой и финалният слой използват глобално внимание.
- Съвременен стек на енкодера: NeoMME използва скорошни подобрения на енкодерите, сред които внимание с групирани заявки, нормализация на query-key, gated attention, 2D ротационни позиционни embeddings и MLP със squared-ReLU.
- Многоезичен текст: обучихме от нулата BPE токенизатор с речник от 131 хиляди токена върху многоезичен текст, код, математика и машинно създадени транскрипции на изображения.
Учене от изображения чрез маскиран текст
Предварително обучаваме NeoMME от нулата като дискретен денойзър на маскирана дифузия. За всеки пример само с текст избираме равномерно ниво на повреждане между 0 и 1. След това всеки подходящ текстов токен се маскира независимо на това ниво.
Мултимодалните примери използват нива на повреждане между 0,3 и 1. Образните пачове остават видими, докато NeoMME възстановява маскирания текст. При леко маскиране моделът често може да възстанови липсваща дума само от околния текст. Например „cat“ е правдоподобно допълване на „The [MASK] sat on the mat“, дори без изображение. Но силното маскиране принуждава модела да научи описания, обосновани от изображението, с малко или никакъв сигнал от немаскираните входни текстови токени.
Предварителното обучение съчетава многоезичен текст, код, математика, естествени изображения и изображения на документи. Всеки модел обработва около 524 милиарда пакетирани входни токена, включително 290 милиарда токена от примери само с текст. Този текстов обем е сравнително малък в сравнение с бюджета от 2 трилиона обучаващи токена на ModernBERT. Затова избрахме оптимизатора NorMuon, за да подобрим ефективността на данните по време на обучението.
NeoMME-Retriever
За да получим смислена оценка на базовата архитектура надолу по веригата, дообучихме NeoMME за извличане на визуални документи, използвайки методологията с изображения на страници, въведена от ColPali. Докато традиционното текстово извличане се състои в извличане на текстови фрагменти, NeoMME-Retriever подрежда екранни снимки на страници от документи и заобикаля всички стъпки за OCR, необходими за извличане на текст от PDF файлове. Разглеждането на страниците като изображения запазва оформлението, графиките, таблиците, вида и размера на шрифта и други визуални подсказки, които не могат да бъдат уловени дори от перфектен OCR модел.
Двуглава архитектура за плътно извличане и извличане с късно взаимодействие
NeoMME-Retriever използва повторно базовата архитектура NeoMME, но добавя две съвместно обучавани глави за извличане:
- Плътната глава осреднява скритите векторни състояния на базовата архитектура в нормализиран вектор (mean pooling). Плътните embeddings са най-разпространени днес: те са компактни и работят естествено с техники за приблизителни най-близки съседи (ANN) за бързо извличане.
- Главата за късно взаимодействие проектира всеки текстов токен или образен пач от изходните скрити състояния на базовата архитектура в нормализиран вектор с 128 измерения. В сравнение с плътните embeddings по-фината грануларност запазва локалните съвпадения между отделните токени на заявката и областите от изображението.
Omar Khattab, който въвежда късното взаимодействие в ColBERT, обяснява защо терминът е по-точен от „multi-vector“. Той описва грануларността и способността за обучение на функцията за оценяване, а не просто броя на съхраняваните вектори.
За да научите повече за късното взаимодействие, препоръчваме да прочетете този кратък курс на Amélie Chatelain.
Едно предно преминаване на NeoMME-Retriever връща и двете представяния, което ви дава гъвкавост независимо от случая на употреба и инфраструктурата. По принцип препоръчваме използването на embeddings за късно взаимодействие, тъй като те са по-мощни и могат лесно да се използват с библиотеки с отворен код като NextPlaid. Ако обаче разполагате с много голям корпус, можете да извършите едно предно преминаване с NeoMME-Retriever, за да получите плътния embedding, да извлечете малък брой документи чрез ANN индекс и след това да използвате късно взаимодействие за повторно подреждане на извлечените кандидати.
Конкурентно извличане при компактни размери на модела
Отчитаме nDCG@10 на ViDoRe v3. NeoMME-Retriever-260M достига 0,523 — най-високия резултат сред оценените модели със строго под 800M параметъра. Той е на 0,002 nDCG@10 от ColQwen2.5, като използва около 14 пъти по-малко параметри. NeoMME-Retriever-800M достига 0,556 — на 0,009 nDCG@10 от сходния по размер Vultron Retriever Flash (0.8B). И двата модела NeoMME-Retriever са на границата на Парето по размер на модела.
ViDoRe v1 и v2 използват nDCG@5. И при двата бенчмарка NeoMME-Retriever-260M превъзхожда ColModernVBERT и два пъти по-големия ColSmol-500M. NeoMME-Retriever-800M превъзхожда ColPali v1.3, като използва 3,6 пъти по-малко параметри.
| Подробности за модела | 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. ‡ Резултати от наши собствени оценки.
Практично извличане с висока резолюция за късно взаимодействие
Съхранението при късно взаимодействие се мащабира линейно спрямо броя на векторите в изходния embedding. Изображенията с по-висока резолюция съдържат повече пачове и следователно създават по-големи embeddings. Например квадратна страница с размер 2048×2048 генерира embeddings, съдържащи 4200 вектора с NeoMME-Retriever, или около 2,1 MB във формат float32. При бенчмарка ViDoRe v3 измерената средна стойност е около 1,5 MB на документ.
За да намалим обема на съхранение на индекса за късно взаимодействие, комбинираме два допълващи се метода за компресия:
- Йерархичното обединяване на токени групира сходни документни вектори в даден многовекторен embedding и заменя всеки клъстер със средната му стойност, като така намалява броя на съхраняваните вектори за всяка страница.
- Асиметричното квантуване квантува документните embeddings до int8 или binary. Тъй като query embeddings не се съхраняват и се генерират само в движение, те могат да се запазят с по-висока точност.
Тествахме тази конфигурация върху ViDoRe v3. При фактор на обединяване 10 и int8 заявки и документи съхранението намаля от около 1,5 MB на 39 kB на страница — 39-кратно намаление — като се запазват над 99% от базовия nDCG@10. По-агресивна конфигурация използва фактор на обединяване 8, int8 заявки и двоични документи. Тази версия използва 6 kB на страница (255 пъти по-малко) и запазва над 95% от първоначалното качество на извличане.
Потребителите могат да изберат настройка за компресия от тази граница според бюджета за съхранение и необходимото качество на извличане.
Бързо извеждане за по-евтино индексиране на мултимодални корпуси
Преди да можете да търсите в корпус, моделът за извличане трябва да преобразува документите ви в embeddings, които ще се съхраняват във векторно хранилище като Qdrant, Weaviate или Milvus. По-бързото кодиране ускорява създаването и добавянето на нови документи към индекса, като така намалява необходимото време за работа на GPU и изчислителните разходи.
Затова измерихме скоростите на кодиране на изображения за NeoMME-Retriever спрямо други мултимодални системи за извличане на документи. Използвахме предварително обработени тензори на изображенията и калибрирахме размера на пакетите отделно за всеки модел и размер на изображението. При съпоставим входен размер 2048×2048 на един NVIDIA L40S NeoMME-Retriever-260M кодира около 51 страници в секунда — почти два пъти повече от 26-те страници в секунда на ColModernVBERT. И двата модела NeoMME-Retriever с 260M и 800M параметъра са също по-бързи от останалите сравнявани модели при изображения с по-малък входен размер.
Изпробвайте сами NeoMME-Retriever!
NeoMME-Retriever (260M и 800M) връща едновременно плътни и многовекторни embeddings. Примерът по-долу оценява две текстови заявки спрямо две изображения на страници от документи с късно взаимодействие MeanMaxSim и плътно косинусово сходство.
Щракнете, за да видите пълния откъс с пример за 🤗transformers
pip install -U accelerate "transformers @ git+https://github.com/huggingface/transformers.git@main" "sentence-transformers>=6.0.0"
from typing import Any, Literal
import requests
import torch
from PIL import Image
from sentence_transformers.util import cos_sim, mean_maxsim
from transformers import BatchFeature, NeoMMEForRetrieval, NeoMMEProcessor
def encode(
messages: list[list[dict[str, Any]]],
task: Literal["query", "document"],
) -> BatchFeature:
return processor.apply_chat_template(
messages,
task=task,
tokenize=True,
return_dict=True,
return_tensors="pt",
processor_kwargs={"padding": "longest"},
)
model_name = "Hcompany/NeoMME-260M-Retriever"
processor = NeoMMEProcessor.from_pretrained(model_name)
model = NeoMMEForRetrieval.from_pretrained(model_name, device_map="auto")
image_urls = [
"https://github.com/tonywu71/colpali-cookbooks/blob/6ef1332da6bcb48c7ef1f19b25bfa555be7031a8/examples/data/shift_kazakhstan.jpg?raw=true",
"https://github.com/tonywu71/colpali-cookbooks/blob/6ef1332da6bcb48c7ef1f19b25bfa555be7031a8/examples/data/energy_electricity_generation.jpg?raw=true",
]
documents = [Image.open(requests.get(url, stream=True).raw) for url in image_urls]
queries = [
"Quelle partie de la production pétrolière du Kazakhstan provient de champs en mer ?",
"Which hour of the day had the highest overall electricity generation in 2019?",
]
document_messages = [
[{"role": "user", "content": [{"type": "image", "image": document}]}] for document in documents
]
query_messages = [[{"role": "user", "content": query}] for query in queries]
inputs_documents = encode(document_messages, "document").to(model.device)
inputs_text = encode(query_messages, "query").to(model.device)
with torch.inference_mode():
document_outputs = model(**inputs_documents)
query_outputs = model(**inputs_text)
late_scores = mean_maxsim(
query_outputs.embeddings,
document_outputs.embeddings,
a_mask=inputs_text["attention_mask"],
b_mask=inputs_documents["attention_mask"],
)
dense_scores = cos_sim(query_outputs.dense_embeddings, document_outputs.dense_embeddings)
print(late_scores, dense_scores)
Дообучаване със Sentence Transformers
Предоставяме отделни плътни и за късно взаимодействие контролни точки за дообучаване с Sentence Transformers v6. Следвайки същия модел като текстовите енкодери, например ModernBERT, Sentence Transformers зарежда базовата архитектура чрез NeoMMEModel, а не чрез двуглавия клас NeoMMEForRetrieval. Понастоящем Sentence Transformers поддържа една глава за извличане на модел, така че всяка контролна точка ви позволява да дообучавате независимо плътната глава или главата за късно взаимодействие. За да обучите двете глави заедно, използвайте NeoMMEForRetrieval с персонализиран Trainer.
От извличане към визуален RAG
Извличането на визуални документи може да се използва като първи етап на система за визуално генериране с подпомогнато извличане (RAG). За разлика от текстовия RAG, който извлича текстови фрагменти, визуалният RAG извлича оригиналните изображения на страниците и ги изпраща към визуален езиков модел. След това моделът може да използва таблици, графики, диаграми и оформление на страницата, които извличането на текст може да сплеска или пропусне. Ето как работи визуалният RAG:
- Индексиране: Преобразувайте всяка PDF страница в изображение, генерирайте embedding с модел за извличане и съхранете embeddings във векторно хранилище.
- Извличане: Генерирайте embedding за заявката на потребителя със същия модел и извлечете най-релевантните k страници.
- Генериране: Добавете изображенията след заявката в чат съобщението (напр.,
{query}{img_1}{img_2}...{img_k}) и го изпратете към VLM, за да генерира отговора.
Можете да изпробвате визуален RAG директно с NeoMME-Retriever в нашето HF Space: 🤗 tonywu71/neomme-retriever-demo.
Заключение
NeoMME заменя отделните предварително обучени енкодери за изображения и текст с един двупосочен Transformer с дълъг контекст. Обучаваме го от нулата да обработва както многоезични текстови токени, така и необработени образни пачове 32×32.
NeoMME-Retriever е дообучена версия на NeoMME за извличане на визуални документи. Едно предно преминаване създава както плътни представяния, така и представяния за късно взаимодействие. Моделът с 260M параметъра превъзхожда всички оценени модели със строго под 800M параметъра и при съпоставим входен размер 2048×2048 кодира страници с около 2 пъти по-висока пропускателна способност от ColModernVBERT. За да намалим големия обем на съхранение на embeddings за късно взаимодействие при документи с висока резолюция, експериментирахме с йерархично обединяване на токени и асиметрично квантуване и успяхме да намалим embeddings за късно взаимодействие от приблизително 1,5 MB до 6 kB на страница — 255-кратна компресия — като запазихме над 95% от базовия nDCG@10.
Публикуваме всички контролни точки на моделите NeoMME и реализация на Hugging Face Transformers, налична от деня на пускането, за да позволим на практиците да изграждат ефективни мултимодални и многоезични модели за представяния върху нашата работа.
Благодарности
NeoMME започна като страничен проект между двама добри приятели. Работихме с ограничено време и изчислителни ресурси и решихме да споделим резултатите, за да може общността да ги надгради. Благодарим на H Company за подкрепата на работата и за предоставените изчислителни ресурси, използвани за обучението на NeoMME.
Цитиране
@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},
}
Модели, споменати в тази статия 7
Пространства, споменати в тази статия 1
Статии, споменати в тази статия 1
Колекции, споменати в тази статия 1
Общност
· Регистрирайте се или влезте, за да коментирате
Модели, споменати в тази статия 7
Пространства, споменати в тази статия 1
Статии, споменати в тази статия 1
Колекции, споменати в тази статия 1
Преведено автоматично от английски. Оригиналната статия е на връзката по-долу.