O que mudou no Sentence Transformers
A biblioteca Sentence Transformers — padrão de mercado para embeddings e rerankers usados em RAG, busca semântica e aplicações de IA — ganhou na versão 6.0 um quarto tipo de modelo: o MultiVectorEncoder, voltado para recuperação por late interaction no estilo ColBERT. Na prática, qualquer checkpoint do PyLate, qualquer checkpoint ColBERT da Stanford-NLP e até modelos de recuperação visual de documentos do colpali-engine carregam direto na mesma API que você já usa para modelos dense, sparse e reranker.
O anúncio é assinado por Tom Aarsen (Sentence Transformers), Antoine Chaffin, Raphael Sourty e a LightOn, empresa francesa que construiu o PyLate sobre o Sentence Transformers justamente para preencher a lacuna da late interaction.
O problema dos embeddings de vetor único
Um modelo de embedding denso lê um texto e devolve um único vetor de tamanho fixo. Tudo o que o modelo percebeu precisa caber naqueles 384, 768 ou 1024 números, e a similaridade é um único produto escalar entre dois “resumos”. Isso funciona muito bem, mas a compressão é lossy de uma forma específica: uma entidade rara, um identificador exato ou uma cláusula crucial de um trecho longo competem por espaço no mesmo vetor.
O exemplo do post é ótimo: para a busca “sofá verde com pés de madeira e almofadas arredondadas”, um vetor único precisa fundir os quatro requisitos em um só ponto — e um sofá verde com os pés errados acaba ficando perto do sofá que você realmente pediu.
Um modelo multi-vetor (também chamado de late interaction ou estilo ColBERT) pula essa compressão. Ele roda o mesmo transformer, mas em vez de fazer pooling dos embeddings dos tokens em um vetor, projeta cada token para uma dimensão pequena (classicamente 128) e mantém todos. Um documento de 9 tokens vira uma matriz 9×128, não um vetor 1×128.
O operador MaxSim
A pontuação usa o MaxSim: para cada token da consulta, pega a maior similaridade contra qualquer token do documento e soma esses máximos. Como os embeddings são normalizados L2, cada produto escalar é um cosseno em [-1, 1], e a soma fica entre -num_tokens_da_consulta e +num_tokens_da_consulta.
Dá para ler o operador como um alinhamento suave: cada token da consulta aponta para o token do documento que melhor o explica. O alinhamento não precisa ser léxico, porque os embeddings são contextualizados. No exemplo do post, “Where do penguins live?” contra “Penguins inhabit Antarctica.” faz o token live casar com inhabit em 0.94 — duas palavras que não compartilham nenhum caractere. É algo que o BM25 não consegue fazer, e que a late interaction faz sem abrir mão da correspondência exata quando ela importa (um código de produto, um sobrenome, um nome de função).
O que você ganha (e o que custa)
Você ganha qualidade de recuperação, sobretudo em consultas com múltiplos requisitos (cada requisito encontra sua própria evidência), em consultas em que um pedaço específico do documento é o que o torna relevante, e em dados out-of-domain. O efeito cresce com o comprimento do documento.
O custo é o tamanho do índice. Um vetor por token é muito mais vetor do que um por documento, só parcialmente compensado pela dimensão menor. Codificando 4.874 passagens do Natural Questions com o lightonai/LateOn, o post gerou 608.414 vetores de token (média de 124,8 por passagem) — cerca de 42× o armazenamento do índice MiniLM. A boa notícia é que índices comprimidos (como o fast-plaid, com PLAID) trazem isso para território comparável aos índices dense que as pessoas já rodam.
Como usar
A instalação é um pip normal:
pip install -U sentence-transformers
# Para recuperação visual de documentos (ColPali):
pip install -U "sentence-transformers[image]"Carregar um modelo multi-vetor é idêntico a carregar qualquer outro modelo do Sentence Transformers:
from sentence_transformers import MultiVectorEncoder
model = MultiVectorEncoder("lightonai/LateOn")
# Checkpoints PyLate, Stanford-NLP ColBERT e ColPali carregam direto
model = MultiVectorEncoder("mixedbread-ai/mxbai-edge-colbert-v0-17m")A v6.0 exige transformers v5.x, torch 2.2+ e huggingface-hub v1.x. Se você fixa essas versões em um patamar mais baixo, planeje o upgrade primeiro.
Por que isso importa
Para quem constrói RAG e busca semântica no Brasil, a mudança baixa a barreira de entrada da late interaction: antes era preciso aprender PyLate ou colpali-engine à parte; agora tudo vive na biblioteca que a maioria já usa. Casos como busca em documentos longos (contratos, editais, artigos jurídicos), recuperação visual de PDFs escaneados (sem OCR) e matching de código são exatamente onde a late interaction brilha.
O trade-off continua o mesmo de sempre: mais qualidade de recuperação em troca de um índice maior. Para quem precisa de escala, o post traz ainda caminhos como Token Pooling (reduz a contagem de vetores antes do índice) e Retrieve and Rerank (evita construir índice), além de seções sobre interpretabilidade, aceleração de inferência e avaliação.
Descubra mais sobre noticiAI
Assine para receber nossas notícias mais recentes por e-mail.



