ColBERT
ColBERT encode les requêtes et les documents sous forme d’embeddings BERT par token, puis les évalue par interaction tardive (MaxSim) afin d’offrir une recherche rapide et précise et de prendre en charge le RAG.
ColBERT (Contextualized Late Interaction over BERT) est un modèle neuronal de recherche d’information qui représente une requête et chaque document par un embedding par token, puis attribue un score au document par interaction tardive : chaque token de la requête trouve le token de document qui lui ressemble le plus, puis ces similarités maximales, appelées MaxSim, sont additionnées pour obtenir le score de pertinence. Omar Khattab et Matei Zaharia, de l’université Stanford, l’ont présenté dans l’article SIGIR 2020 ColBERT : recherche de passages efficace et performante par interaction tardive contextualisée sur BERT. Les embeddings des tokens de document sont calculés une seule fois, hors ligne ; au moment de la requête, il suffit donc d’effectuer un calcul de similarité peu coûteux, au lieu d’exécuter entièrement BERT pour chaque document candidat.
La place de l’interaction tardive#
Les systèmes neuronaux de recherche diffèrent par le moment où la requête et le document se rencontrent. Les bi-encodeurs compressent chaque texte en un seul vecteur, configuration standard pour la recherche vectorielle : les vecteurs des documents sont pré calculés et la recherche est rapide, mais un vecteur unique brouille les distinctions entre termes individuels. Les cross-encodeurs transmettent ensemble la requête et le document à un transformer, de sorte que l’attention compare chaque paire de tokens. Ce sont les plus précis et ils doivent être exécutés une fois pour chaque paire requête-document, ce qui les limite au réordonnancement de courtes listes de candidats.
ColBERT encode séparément la requête et le document, comme le fait un bi-encodeur, mais conserve un vecteur de 128 dimensions par token et ne fait interagir les deux côtés qu’à l’étape finale MaxSim. Les requêtes sont complétées avec le token de masque de BERT jusqu’à une longueur fixe de 32, ce qui donne au modèle des emplacements supplémentaires pour enrichir la requête avec des termes associés. Sur les benchmarks de recherche de passages MS MARCO et TREC CAR, ColBERT s’est montré compétitif avec les systèmes de classement basés sur BERT, tout en étant cent fois plus rapide et en utilisant dix mille fois moins de FLOPs par requête.
Calcul d’un score MaxSim#
L’opérateur MaxSim s’implémente en quelques lignes de PyTorch. Cet exemple l’applique aux embeddings contextuels de tokens issus d’un petit encodeur de la famille BERT :
import torch.nn.functional as F
from sentence_transformers import SentenceTransformer
encoder = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
query = "who wrote the novel Dune"
docs = [
"Frank Herbert published the science fiction novel Dune in 1965.",
"A dune is a hill of sand shaped by the wind.",
]
# One L2-normalized contextual embedding per query token
q = F.normalize(encoder.encode(query, output_value="token_embeddings"), dim=-1)
for doc in docs:
d = F.normalize(encoder.encode(doc, output_value="token_embeddings"), dim=-1)
# MaxSim: each query token keeps its best-matching document token, and the maxima are summed
score = (q @ d.T).max(dim=1).values.sum()
print(f"{score.item():.2f} {doc}")Le passage sur le roman obtient un score de 5.90 et celui sur les dunes de sable, de 4.33. Les deux contiennent « dune », qui correspond fortement dans chacun, mais, dans le premier passage, le token de requête « wrote » trouve « published » avec une similarité cosinus de 0.72 et « novel » se correspond à lui-même, tandis que, dans le second passage, la meilleure correspondance pour « wrote » n’atteint que 0.29.
ColBERT et les termes apparentés#
- BERT lui-même : l’encodeur préentraîné que ColBERT ajuste pour la recherche d’information en ajoutant une couche linéaire qui projette chaque token sur 128 dimensions.
- Découpage tardif : encode aussi le texte dans son contexte avant de le découper, puis moyenne les tokens pour obtenir un vecteur par segment, tandis que ColBERT conserve chaque vecteur de token.
- Recherche sémantique : la tâche effectuée par ColBERT, qui classe les passages selon leur sens plutôt que selon les mots-clés qu’ils ont en commun.
- Recherche hybride : combine les résultats par mots-clés et par vecteur unique pour réunir correspondance exacte des termes et compréhension du sens. La correspondance au niveau des tokens de ColBERT capture une partie de cette exactitude au sein d’un seul modèle neuronal.
Interaction tardive pour les images#
L’interaction tardive fonctionne aussi sur les images. ColPali (2024) encode la capture d’écran de chaque page de document sous forme de grille de vecteurs de patchs à l’aide d’un modèle vision-langage, puis les compare aux tokens de la requête avec MaxSim, étendant ainsi l’interaction tardive au RAG multimodal sur les PDF. La détection à vocabulaire ouvert conserve des caractéristiques d’image fines pour une raison similaire : Ultralytics YOLOE stocke un embedding textuel pour chaque classe indiquée, comme « autobus à impériale », et le compare aux caractéristiques des régions à chaque emplacement de ses cartes de caractéristiques. Une courte invite peut ainsi correspondre à un petit objet plutôt qu’à un vecteur unique qui résume toute l’image.
ColBERTv2 et PLAID#
Stocker un vecteur pour chaque token rend un index ColBERT environ dix fois plus volumineux qu’un index à vecteur unique, un coût qui compte lorsque ColBERT sert de système de recherche de premier niveau ou de réordonnanceur dans un pipeline de génération augmentée par récupération (RAG). Le dépôt Stanford ColBERT met en œuvre deux solutions. PLAID est un moteur de recherche qui attribue un score aux candidats par rapport aux centroïdes de clusters avant d’exécuter MaxSim complet. ColBERTv2 (NAACL 2022) stocke chaque vecteur de token sous forme de l’identifiant de son centroïde le plus proche, accompagné d’un résidu quantifié à 1 ou 2 bits par dimension, et s’entraîne avec une supervision débruitée distillée à partir d’un cross-encodeur. Sa compression des résidus a réduit de 6 à 10 fois l’espace occupé par l’interaction tardive.










