Hugging Face добавила в Sentence Transformers ColBERT-модели

Hugging Face добавила в Sentence Transformers ColBERT-модели

Библиотека Sentence Transformers от Hugging Face получила в версии 6.0 новый класс MultiVectorEncoder, поддержку мультивекторных (late-interaction) embedding-моделей ColBERT-стиля. В него напрямую грузятся чекпойнты PyLate, чекпойнты ColBERT от Stanford NLP и модели colpali-engine для визуального поиска по документам, через тот же API, что уже используется для плотных (dense), разреженных (sparse) и reranker-моделей.

Обычная (dense) embedding-модель сжимает весь текст в один вектор фиксированного размера, 384, 768 или 1024 числа, и всё, что модель заметила в тексте, должно поместиться в эти числа. Мультивекторная модель этого сжатия избегает: она проецирует эмбеддинг каждого токена в компактное пространство (классически 128 измерений) и хранит вектор для каждого токена отдельно, документ из 9 токенов превращается в матрицу 9×128, а не в один вектор 1×128. Сравнение запроса и документа откладывается до момента поиска и считается оператором MaxSim: для каждого токена запроса берётся максимальное сходство с любым токеном документа, и эти максимумы суммируются. Токен-эмбеддинги контекстуальны, поэтому совпадение не обязано быть лексическим: в примере с моделью lightonai/mLateOn токен запроса «live» находит лучшее соответствие в токене документа «inhabit» с оценкой 0,94, притом что у слов нет ни одной общей буквы.

Такая точность стоит места в индексе. В примере на 4874 отрывках из Natural Questions модель lightonai/LateOn сгенерировала 608 414 векторов токенов, в среднем 124,8 вектора на отрывок; в несжатом виде такой индекс занимает 62 КиБ на отрывок, это примерно в 42 раза больше места, чем занимает плотный индекс на базе MiniLM (около 1,5 КиБ на отрывок). Но индексы обычно сжимают: те же 608 414 векторов в формате fast-plaid (сжатый late-interaction индекс, хранящий id центроида и квантованный остаток вместо самого вектора) занимают 92 МБ, для сравнения, плотная 4096-мерная модель Qwen3-Embedding-8B на тех же 4874 отрывках потребовала бы около 80 МБ, то есть после сжатия мультивекторный индекс сопоставим по размеру с обычным плотным.

На бенчмарке долгих документов MLDR многоязычная мультивекторная модель mLateOn набрала 77,92 против 51,59 у плотной mDenseOn, разрыв растёт с длиной документа, потому что плотной модели приходится ужимать всё больше текста в тот же вектор. У каждого чекпойнта есть свой предел длины документа (document_length): например, у colbert-ir/colbertv2.0 запросы дополняются до ровно 32 токенов, а документы обрезаются на 180-м; у lightonai/GTE-ModernColBERT-v1 пределы, 48 и 300. Всё, что длиннее предела, в индекс не попадает: отрывок в 662 токена через предел LateOn в 300 превращается в 273 вектора, а остаток текста просто теряется. Предел можно поднять точечным вызовом (processing_kwargs с max_length=512), но тогда модель работает за пределами того, на чём её обучали, а индекс растёт пропорционально.

Мультивекторный подход, по утверждению авторов поста, также остаётся передовым методом для визуального поиска по документам: текстовый запрос сопоставляется напрямую со страницами-изображениями, без этапа OCR. Чекпойнты семейства ColPali хранятся в собственном формате colpali-engine, который Sentence Transformers напрямую не читает, поэтому каждому такому чекпойнту нужна отдельная конфигурация в его репозитории, часть этой работы уже сделана и ждёт слияния. Библиотеку PyLate, на чекпойнтах которой построена значительная часть примеров поста, разработала компания LightOn поверх Sentence Transformers, раньше та поддерживала только плотные, разреженные и reranker-модели, а разрыв в late-interaction закрывал именно PyLate; LightOn же создала вокруг неё экосистему, включая fast-plaid. С версии 6.0 эти возможности встроены в саму Sentence Transformers. Для работы нужны transformers v5.x, torch 2.2+ и huggingface-hub v1.x; для визуального поиска, дополнительно pip install -U "sentence-transformers[image]".

Ключевые факты

  • Hugging Face выпустила Sentence Transformers 6.0 с классом MultiVectorEncoder, единый API для мультивекторных (late-interaction, ColBERT-стиль) embedding-моделей, включая визуальный поиск по документам через чекпойнты colpali-engine.
  • Мультивекторная модель хранит по вектору на каждый токен (классически 128 измерений) и сравнивает запрос с документом оператором MaxSim, вместо сжатия всего текста в один вектор из 384, 1024 чисел, как у обычных dense-моделей.
  • Несжатый мультивекторный индекс занимает 62 КиБ на отрывок, примерно в 42 раза больше плотного индекса на базе MiniLM (около 1,5 КиБ на отрывок), но после сжатия в формат fast-plaid 608 414 векторов занимают 92 МБ, сопоставимо с ~80 МБ у плотной модели Qwen3-Embedding-8B на тех же данных.
  • На бенчмарке долгих документов MLDR мультивекторная модель mLateOn набрала 77,92 против 51,59 у плотной mDenseOn.
  • Библиотеку PyLate, обеспечивавшую late-interaction до релиза 6.0, разработала компания LightOn поверх Sentence Transformers; для работы нужны transformers v5.x, torch 2.2+ и huggingface-hub v1.x.

Почему это важно

До версии 6.0 Sentence Transformers поддерживала dense-, sparse- и reranker-модели, но не late-interaction, за это отвечала отдельная библиотека PyLate от LightOn. Теперь мультивекторные, ColBERT-стиля модели загружаются через тот же единый API класса MultiVectorEncoder. Смысл подхода, не терять информацию при сжатии: dense-модель сжимает весь текст в один вектор из 384, 1024 чисел, из-за чего редкая сущность, точный идентификатор или отдельное условие в многосоставном запросе («зелёный диван с деревянными ножками и круглыми подушками») вынуждены конкурировать за место в одном и том же векторе. Мультивекторная модель хранит вектор для каждого токена и сравнивает их оператором MaxSim, поэтому точное совпадение, код товара, фамилия, имя функции, не растворяется в общем усреднении.

Кому это важно

Разработчикам поисковых систем и RAG-конвейеров, которым важна точность на сложных запросах с несколькими условиями или точными идентификаторами; командам, которые уже используют чекпойнты PyLate или ColBERT от Stanford NLP и хотят получить их через привычный интерфейс Sentence Transformers; тем, кто строит поиск по сканам и PDF без OCR, через чекпойнты семейства ColPali для визуального поиска по документам.

Как это применить

Мультивекторные модели работают после обычной установки pip install -U sentence-transformers; для визуального поиска по документам (ColPali) нужен дополнительный набор зависимостей: pip install -U "sentence-transformers[image]". Модель загружается одной строкой, MultiVectorEncoder("lightonai/LateOn"), и это работает для любого чекпойнта с тегами multi-vector и sentence-transformers на Hugging Face Hub, а также для PyLate- и Stanford-NLP-чекпойнтов, даже если нужный тег ещё не проставлен. Перед использованием стоит проверить предел длины документа (document_length) конкретного чекпойнта: всё, что длиннее, обрезается и не попадает в индекс, а поднять предел точечно можно через processing_kwargs={"text": {"max_length": 512}}, помня, что индекс при этом вырастет пропорционально. Версия 6.0 требует transformers v5.x, torch 2.2+ и huggingface-hub v1.x.

Можно ли доверять

Материал, официальный технический пост в блоге Hugging Face с конкретными числами (размеры индексов, результаты бенчмарка MLDR) и рабочими примерами кода, а не маркетинговый анонс. Имя автора поста в доступном тексте не указано. Приведённые цифры воспроизводимы, это описание конкретной библиотеки с открытым кодом, а не разовое заявление, которое нельзя проверить.

Риски и подводные камни

Несжатый мультивекторный индекс примерно в 42 раза больше плотного, экономить место позволяет сжатие (например, формат fast-plaid), но это дополнительный шаг настройки. Чекпойнты, чей предел обучения короче ваших документов, молча обрезают текст на границе document_length, часть данных просто выпадает из индекса, если предел не поднять вручную. Для визуального поиска по документам поддержка чекпойнтов ColPali пока не универсальна: формат colpali-engine несовместим напрямую, и часть конфигураций, добавляющих поддержку, ещё не слита в репозитории моделей.