TechnologyRetrieval & RAG
Late Interaction & ColBERT
At a glance
Keep one vector per token instead of one per passage, and match query to document token-by-token at search time.
- Who this is for
- Engineers and technical readers learning the terms used in AI systems.
- Topics
- Retrieval & RAG
- Technology
Most vector search systems compress a whole chunk into one embedding. That is fast, but it is lossy. A paragraph about "billing, refunds, enterprise contracts, and SOC 2" becomes one point in space, and rare details can disappear. Late interaction keeps richer token-level vectors and waits until query time to compare them.
The single-vector bottleneck#
A single passage embedding must represent every aspect of the text at once. That works well for broad semantic matching, but it struggles with long-tail entities, negation, and passages that contain several unrelated facts. Hybrid search helps with exact terms. Late interaction attacks the embedding side directly.
MaxSim scoring#
ColBERT encodes the query into one vector per query token and each passage into one vector per passage token. At search time, each query token finds the document token with the highest similarity. Those best matches are summed. This MaxSim operation lets "refund" match the refund sentence, "annual" match the plan type, and "30 days" match the exact clause, instead of hoping a single vector preserved all three.
Cost and compression#
The tradeoff is storage and compute. One vector per token is much larger than one vector per chunk. ColBERTv2 made the idea more practical with residual compression, and PLAID-style indexing prunes candidates efficiently before exact scoring. In production, late interaction often sits between first-pass retrieval and a cross-encoder reranking step.
When it wins#
Late interaction is strongest when exact facets matter: product names, legal clauses, code identifiers, and out-of-domain queries. On BEIR-style zero-shot retrieval, ColBERT-family models have historically been robust because they preserve multiple ways a passage can match. It is not free, so use it where recall is the bottleneck and single-vector embeddings are flattening important details.