A Sentence Transformers — a beágyazási (embedding) és újrarendező (reranker) modellek használatára és betanítására szolgáló Python-könyvtár — a 6.0-s kiadással egy új modell‑típust kapott: a MultiVectorEncoder-t. Ez a komponens ColBERT‑stílusú, „late interaction” többvektoros lekérdezést támogat, azaz a dokumentumokhoz token‑szintű vektorokat tart meg, és a lekérdezést ezekkel a tokenekkel MaxSim operátorral értékeli.
A fontos kompatibilitási pontok:
- Bármely PyLate checkpoint és bármely Stanford‑NLP ColBERT checkpoint közvetlenül betölthető a MultiVectorEncoder-be.
- A ColPali / colpali-engine család vizuális dokumentum‑visszakereső modelljei is használhatók azonos API-n keresztül (néhány colpali checkpointhoz még kisebb konfigurációs kiegészítés szükséges a Hub repo-ban).
Miért más a többvektoros modell?
Egy hagyományos dense embedding modell egy teljes szöveget egyetlen fix hosszúságú vektorba sűrít. A többvektoros (late interaction / ColBERT‑stílusú) modell ehelyett minden tokenhez egy kis dimenziós vektort (klasszikusan 128) állít elő, és megőrzi az összes token‑vektort — például egy 9 tokenes dokumentum 9×128 mátrixot ad, nem 1×128 vektort. A tényleges párosítás (query ↔ document) a pontozáskor történik, a MaxSim operátorral.
A MaxSim operátor röviden: minden query‑tokenhoz kiválasztja a dokumentum tokenjei közül a legmagasabb hasonlóságot (dot productot / koszinusz, mert a tokenek L2‑normalizáltak), majd összeadja ezeket a maximumokat. Így a teljes pontszám a lekérdező tokenjeinek száma szerinti tartományba esik ([-num_query_tokens, num_query_tokens]). Ez a mechanizmus részleges, „puha” igazítást ad: egy keresőkifejezés minden tokenje megtalálhatja a dokumentumban a legjobb illeszkedést, legyen az lexikai egyezés vagy kontextuális párhuzam (például live ↔ inhabit 0.94 hasonlósággal egy bemutatott példa szerint).
Mire jó és mi az ára?
- Előny: jobb visszakeresési minőség, különösen olyan lekérdezéseknél, ahol egy dokumentum egy konkrét részlete dönt a relevanciáról, vagy több feltételes lekérdezéseknél (pl. „zöld kanapé fa lábakkal és lekerekített párnákkal”), illetve vizuális dokumentumoknál, ahol a lekérdezés közvetlenül lapképekkel egyeztethető OCR nélkül.
- Hátrány: nagyobb indexméret, mert egy vektor jut tokenenként, bár kisebb vektordimenzió részben ellensúlyozza ezt.
Konkrét példák a tárolásra (Natural Questions, 4,874 passage):
- Dense (all-MiniLM-L6-v2): 4,874 vektor, 384 dim → 7.5 MB (float32)
- Dense (gte-modernbert-base): 4,874 vektor, 768 dim → 15.0 MB
- Multi-vector (lightonai/LateOn): 608,414 tokenvektor (átlag 124.8/token per passage), 128 dim → 311.5 MB
A raw float32 index ~42×‑es többletet jelent a MiniLM‑hez képest, de tömörítéssel (például fast-plaid) ugyanaz a 608,414 vektor csupán 92 MB lehet. Token pooling és retrieve‑and‑rerank minták csökkentik az index‑költséget.
Telepítés és követelmények
A többvektoros modellek a szokásos telepítéssel működnek:
pip install -U sentence-transformers
Vizsgálati vizuális modellekhez szükséges az image extra:
pip install -U "sentence-transformers[image]"
Sentence Transformers v6.0 a transformers v5.x, torch 2.2+ és huggingface‑hub v1.x verziókat igényli.
Modellek betöltése és konfigurációk
A MultiVectorEncoder betöltése ugyanúgy néz ki, mint más Sentence Transformers modelleké:
from sentence_transformers import MultiVectorEncoder model = MultiVectorEncoder("lightonai/LateOn")
A Hub‑on a "multi-vector" és "sentence-transformers" tagek segítenek a keresésben, de a MultiVectorEncoder számos formátumot felismer: PyLate, Stanford‑NLP ColBERT checkpointok, és – ahol elérhető – colpali‑engine modellek. A modellek konfigurációját (pl. query/document marker prefix, hossz‑limit, skip‑lista, query expansion) a modellek modul‑configjai tartalmazzák; print(model) megmutatja őket. Fontos mező például a document_length, amely trancsírozza a dokumentumot (például ColBERTv2 padolja a lekérdezést 32 tokenre és vágja a dokumentumot 180 tokenre).
Lekérdezés és dokumentum enkódolás
A többvektoros modellek aszimmetrikusak: encode_query() és encode_document() hívások külön kellenek. Az eredmény listája 2D tenzorokból áll, minden bemenethez egy (num_tokens, embedding_dim) mátrix. Nem lehet egyszerűen egymás alá rakni őket, mert token‑számok változóak. A modellek belső előfeldolgozását (prefix, padding, skiplist stb.) a checkpoint receptje határozza meg.
Pontozás MaxSim‑szel
model.similarity() kiszámolja a lekérdezés és dokumentum párok MaxSim mátrixát. Mivel a MaxSim összeadja a query tokenekre eső maximumokat, a pontok mértéke arányos a query tokenek számával — ezért a modellek közti pontértékek összehasonlítása csak óvatosan ajánlott. Van MeanMaxSim is (similarity_fn_name="meanmaxsim"), ami oszt a query tokenek számával és így [-1,1] skálára hozza az értékeket.
Példa kis indexen (4,874 passage): a teljes kódolás 20s‑t vett igénybe RTX 3090‑en, a lekérdezés ~120ms‑t igényelt (MaxSim pontozás a 608,414 tokenvektor ellen). Ez pontos, de nem skálázódik milliós gyűjteményekhez.
Retrieve‑and‑Rerank mintázat
A többvektoros modellek felhasználhatók rerankerként is: egy gyors bi‑encoder előszűkíti a nagy gyűjteményt (pl. top 50), majd a MultiVectorEncoder csak ezeket a jelölteket kódolja token‑szinten és MaxSim‑al pontozza újra. Így az index maradhat hagyományos, és a tokenvektorok tranziensekként használhatók.
Indexelési lehetőségek
Több vektoradatbázis natívan támogatja a többvektoros indexelést és MaxSim‑et: Qdrant (1.10+), Weaviate (1.29+), Vespa, LanceDB (v0.15.0+), VectorChord, és Milvus (v2.6.4) külön megoldással. LightOn fast-plaid implementációja PLAID‑et hozza pip‑telepítéssel és nincs szerverrátartás. Néhány rendszer (OpenSearch, Elasticsearch) csak rescore‑ra képes, nem natív lekérésre.
Konkrét mérési adatok a bejegyzés példáiból (RTX 3090, i7‑13700K) — Natural Questions, 4,874 dokumentum, 608,414 tokenvektor:
- fast-plaid: indexelés 5s, keresés 11ms, index méret 92 MB (approximate)
- Qdrant: indexelés 26.3s, keresés 18ms (exact)
- Weaviate: indexelés 41s, keresés 17ms (exact)
- Vespa: ingest ~80s, kérdés ~75–115ms (attól függően, warm/first call)
Vizuális dokumentum‑visszakeresés, audio és video
Late interaction áll a csúcson a vizuális dokumentumoknál, ahol a lekérdezés közvetlenül lapképekkel egyeztethető, OCR nélkül. ColPali/ColQwen család checkpointjai betölthetők és azonos API‑val használhatók; a dokumentumok képként (URL, helyi fájl, PIL kép) adhatók át.
Multimodális modellek (például vidore/colqwen-omni-v0.1) támogatják a text, image, audio és video modalitásokat. Példaként 20 beszélgetés (átlag 28 másodperc) keresésekor a ColQwen‑Omni zero‑shot audio‑visszakeresésként a releváns felvételt hozta ki anélkül, hogy voltál rajta átírás (transcription).
Token pooling
A token pooling (például HierarchicalTokenPooling) az index‑lábnyom csökkentésére szolgál: klaszterezéssel egy dokumentum tokenjeiből kevesebb centroidot tárol. A táblázat mutatja, hogy pool_factor=2 körül a tokenek száma nagyjából felére csökken, miközben a BEIR‑átlagos teljesítmény gyakorlatilag nem romlik (például 100.6% megtartás pool_factor=2 esetén). Pooling alkalmazható enkódoláskor, utólag, vagy a checkpointba beégetve.
Gyorsítási opciók
A MultiVectorEncoder a Sentence Transformers meglévő export és gyorsítási útvonalait használja: torch, onnx, openvino, fp16, Flash Attention, torch.compile. GPU‑n fp16 + Flash Attention ~2.44× throughput növekedést hozott a tesztekben. Néhány checkpoint (query expansion‑nel) nem engedi Flash Attention használatát; ott az "sdpa" beállítás javasolt. CPU‑n OpenVINO és int8 kvantálás is hozhat előnyöket.
Értékelés
A MultiVectorNanoBEIREvaluator a 13 NanoBEIR alapkészletet futtatja MaxSim‑szel. Két LightOn által tréningezett összehasonlító modell (lightonai/LateOn multi‑vector 128d vs lightonai/DenseOn dense 768d, mindkettő 149M paraméteres backbone) NanoBEIR átlagban 0.6868‑kal (LateOn) vs 0.6764‑kel (DenseOn) szerepelt, azaz ~1 NDCG pontnyi előnyt hozott a late interaction. A LateOn 9/13 alatt jobb volt; néhány esetben (pl. SciFact, FiQA2018) a dense modell jobban szerepelt — ez a kompromisszum jellemzője.
Migráció PyLate és colpali‑engine felől
A MultiVectorEncoder magába olvasztja a PyLate és colpali‑engine modellek modellezését, inferenciáját és értékelését. PyLate, Stanford‑NLP ColBERT, és colpali‑engine checkpointok betölthetők, de a MultiVectorEncoder.save_pretrained kimenete nem tölthető vissza ezekbe a régebbi rendszerekbe.
Támogatott modellek és erőforrások
A Hub‑on a "multi-vector" és "sentence-transformers" tagekkel ellátott modellek a legaktuálisabb lista. A bejegyzés részletes táblázatokat közöl számos, vizuális és szöveges modellel, paraméter‑ és NanoBEIR/NanoViDoRe eredményekkel. A támogatott modellek paraméterméretek 17M‑tól több milliárdig terjednek, és a multimodális, vizuális dokumentumoknál a nagyobb modellek jelentősebb memóriát igényelnek.
Köszönetnyilvánítás
A fejlesztés és integráció az eredeti ColBERT (Omar Khattab, Matei Zaharia) munkára épül, és a LightOn csapat (Antoine Chaffin, Raphael Sourty, Paulo Moura, Amélie Chatelain) PyLate és fast-plaid eszközei sokat formáltak az API‑n. A ColPali csapat és a token pooling kutatói (Benjamin Clavié, Antoine Chaffin, Griffin Adams) szintén jelentős hozzájárulást tettek.
További források és példák
A release részletes dokumentációt, példaprogramokat és blogbejegyzéseket kínál: Usage, Pretrained Models, Creating Custom Models, Speeding up Inference, Semantic Search, Retrieve and Rerank, Token Pooling, ColPali Heatmaps, NanoBEIR Evaluation, Training guideok és a Hub gyűjteményei.
Összefoglalás
A Sentence Transformers v6.0‑s kiadása a MultiVectorEncoder bevezetésével natív támogatást ad a ColBERT‑stílusú late‑interaction modelleknek a megszokott Sentence Transformers API‑n belül. Ez lehetővé teszi token‑szintű lekérdezést szöveg, kép, hang és videó dokumentumokra, jobb visszakeresési pontosságot kínálva a token‑szelektív illeszkedések révén — miközben nagyobb index‑lábnyommal és részben megnövekedett infrastruktúra‑igénnyel jár. Dokumentált megoldások vannak az indexelésre (fast-plaid, Qdrant, Weaviate, Vespa, LanceDB, Milvus), a token poolingra és a gyorsításra, így a fejlesztők mérlegelhetik a teljesítmény/ár kompromisszumokat saját adataik mentén.



