Sentence Transformers 6.0: multi-vector под свой RAG на одной GPU

В Sentence Transformers 6.0 добавили тип MultiVectorEncoder: late interaction в духе ColBERT для RAG и семантического поиска. Вместо одного вектора на весь текст модель хранит вектор на каждый токен и считает сходство через MaxSim: для каждого токена запроса ищется лучший токен документа, баллы суммируются.
Tom Aarsen в гайде на Hugging Face за 14,5 часа на одной RTX 3090 дообучил multi-vector-encoder/mLateOn-medical на бенчмарке MIRIAD: модель обошла готовые dense-, sparse- и multi-vector retriever'ы. Старт: pip install -U "sentence-transformers[train]".
Почему не хватает готовой модели с Hub
Большинство retriever'ов обучали на коротких пассажах: классический ColBERT режет документы на 180–300 токенов, популярные dense-модели укладываются в 256–512. На медицинском корпусе со средней длиной 941 токен такая обрезка стоила до 0,24 NDCG@10: больше, чем разница между архитектурами. Своя модель позволяет задать нужную длину; у семейства mLateOn через processor_kwargs доступны 8192 токена.
С чего начать обучение
- Модель: дообучить
lightonai/mLateOn-unsupervisedили собрать с нуля на базе трансформера. - Данные: пары «вопрос, релевантный пассаж»; на Hub уже 4,4 млн медицинских примеров MIRIAD.
- Тренер:
MultiVectorEncoderTrainerсвязывает loss, аргументы и evaluator в один пайплайн.
Неочевидный результат из сравнения шести стартовых чекпоинтов: модели с суффиксом -unsupervised после 25k доменных пар выросли сильнее «доготовленных»: NDCG@10 у mLateOn-unsupervised поднялся с 0,9087 до 0,9398. Skiplist для пунктуации уменьшает индекс на 9,6% без потери качества.
Источник: Training and Finetuning Multi-Vector Embedding Models with Sentence Transformers.