ColBERT-поиск встроили в Sentence Transformers 6.0 — без отдельного PyLate

Sentence Transformers в версии 6.0 получил четвёртый тип моделей: MultiVectorEncoder для ColBERT-подобного поиска с поздним взаимодействием. Чекпоинты PyLate, Stanford-NLP ColBERT и colpali-engine для поиска по картинкам страниц подключаются тем же API, что dense-, sparse- и reranker-модели. Старт: pip install -U sentence-transformers; v6.0 требует transformers 5.x, torch 2.2+ и huggingface-hub 1.x.
Вектор на токен
Плотная модель сжимает текст в один вектор (384, 768 или 1024 числа) и сравнивает документы одним скалярным произведением. Multi-vector оставляет по вектору на каждый токен (классически 128 измерений): девятитокенный абзац даёт матрицу 9×128, а не одну точку. Документы кодируются офлайн, но при скоринге каждый токен запроса сравнивается с каждым токеном документа: больше деталей, чем у bi-encoder, без перекодирования всей коллекции на каждый запрос, как у cross-encoder.
MaxSim
Скоринг идёт через MaxSim: для каждого токена запроса берётся максимальная косинусная близость с любым токеном документа, затем максимумы суммируются. На примере из блога токен live в «Where do penguins live?» находит inhabit с близостью 0.94, хотя общих символов нет. Точные совпадения (код продукта, фамилия, имя функции) остаются отдельными токенами, а не размываются в одном векторе.
Размер индекса
На 4 874 отрывках Natural Questions модель lightonai/LateOn дала 608 414 токен-векторов, в среднем 124,8 на пассаж:
- Dense all-MiniLM-L6-v2: 4 874 × 384 → 7,5 МБ
- Multi-vector LateOn: 608 414 × 128 → 311,5 МБ (~42× тяжелее MiniLM)
- fast-plaid индекс: те же векторы → 92 МБ
Раньше late interaction жил в PyLate от LightOn; с v6.0 индексация и fast-plaid встроены в основную библиотеку. Для мультимодального поиска по картинкам страниц: pip install -U "sentence-transformers[image]".
Источник: Multi-Vector (Late Interaction) Embedding Models with Sentence Transformers.