veilletech.fr
27 août Feed du jour
#07 RAG Article

Multi-vecteur : Sentence Transformers s’y met

Un vecteur par jeton, et le rappel change de catégorie.

Sentence Transformers v6 introduit MultiVectorEncoder et toute la chaîne d'entraînement pour les modèles à interaction tardive façon ColBERT. La démonstration atteint 0,9139 de NDCG@10 sur un corpus médical, contre 0,7817 pour un modèle dense de 4 milliards de paramètres — sur une seule RTX 3090.

3 min de lecturevidéo 1:26
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Les chiffres
  3. L'objection sérieuse : la taille de l'index
  4. À retenir

Ce qui se passe

La v6.0 de Sentence Transformers ajoute un quatrième type de modèle, MultiVectorEncoder, et la méthode d'entraînement complète qui va avec : MultiVectorEncoderTrainer, MultiVectorEncoderTrainingArguments, CachedMultiVectorMultipleNegativesRankingLoss, MultiVectorInformationRetrievalEvaluator. Tout tourne après un pip install -U "sentence-transformers[train]".

Le principe de l'interaction tardive tient en une phrase : au lieu d'un vecteur par document, on garde un vecteur par jeton, et le score MaxSim prend, pour chaque jeton de la requête, sa meilleure correspondance dans le document, puis additionne. Le signal fin survit là où une moyenne l'écrase.

Les chiffres

Le modèle de démonstration, multi-vector-encoder/mLateOn-medical, part du point de contrôle lightonai/mLateOn-unsupervised et s'entraîne sur un million de paires question/passage du jeu MIRIAD. Évaluation : 1 000 questions contre 200 000 passages.

Modèle Famille NDCG@10
mLateOn-medical (affiné) Multi-vecteur 0,9139
lightonai/mLateOn Multi-vecteur, zéro-coup 0,8520
Qwen3-Embedding-4B Dense 0,7817
BM25 Lexical 0,7501
naver/splade-v3 Creux 0,6853

La précision au premier rang passe de 75,8 % à 84,9 % : plus d'un tiers des erreurs de rang 1 supprimées. Le modèle dense le plus fort, avec environ 33 fois plus de paramètres actifs, reste 0,13 en dessous — et sa version 8B fait moins bien que la 4B.

Le coût : 14,5 heures sur une seule RTX 3090, pic à 17,5 Go de VRAM. Pour un budget plus serré, 100 000 paires (75 minutes) arrivent à 0,012 NDCG@10 du résultat obtenu avec le million. L'essentiel du gain tombe dans la première heure.

L'objection sérieuse : la taille de l'index

C'est la vraie limite du multi-vecteur, et l'article ne l'esquive pas. Avec environ 878 vecteurs par passage, le corpus de 200 000 passages pèse 45 Go en fp16, là où un index dense tient sous 1 Go. Ce sont des passages longs : sur des passages courts, le rapport est bien plus favorable.

Deux leviers, qui se composent — la quantification d'abord :

Configuration Taille de l'index Score
Embeddings bruts fp16 45 GB 0,9139
HierarchicalTokenPooling(pool_factor=4) 11,2 GB 0,8991
PLAID 1 bit, tous les vecteurs 3,37 GB −0,0155 par rapport au brut
PLAID 1 bit + élagage 1,45 GB élagage naïf, à lire comme un plancher

La dernière ligne du tableau vaut d'être lue deux fois : 1,45 Go, soit moins que les embeddings fp16 de Qwen3-Embedding-8B (1,64 Go), pour 0,0895 de NDCG@10 en plus. Ces mesures ont été faites avec fast-plaid par Omar Khattab, en quantification résiduelle 1 bit avec identifiants compacts.

Source : Hugging Face, Training and Finetuning Multi-Vector Embedding Models with Sentence Transformers