Hopp til hovedinnhold
Tilbake
Modell 2 min · Kilde: Hugging Face - Blog

Sentence Transformers 6.0 tar inn ColBERT-søk: bedre treff, mye større indeks

KI Takeaway KI-generert · kan inneholde feil

Velg en multi-vektor-modell når eksakte treff på navn, koder og funksjonsnavn betyr mer for deg enn indeksstørrelsen.

4 874 avsnitt fra Natural Questions ble til 608 414 vektorer, i snitt 124,8 per avsnitt. Det er prislappen på sen interaksjon, og sen interaksjon er hele poenget med MultiVectorEncoder, klassen Hugging Face innfører i Sentence Transformers 6.0. Ethvert PyLate-sjekkpunkt og ethvert Stanford-NLP ColBERT-sjekkpunkt lastes rett inn i den, og modeller fra colpali-engine for visuelt dokumentsøk bruker samme API.

En vanlig dense-modell presser hele teksten ned i én vektor på 384, 768 eller 1024 tall. Et sjeldent egennavn, en eksakt identifikator og den ene avgjørende setningen i et langt avsnitt må konkurrere om plassen. En multi-vektor-modell dropper kompresjonen og beholder én vektor per token, projisert ned til klassisk 128 dimensjoner, så et dokument på ni tokens blir en 9x128-matrise i stedet for en 1x128-vektor. Scoringen skjer med MaxSim: hvert spørringstoken finner sin beste match blant dokumenttokenene, og maksimalverdiene summeres. Fordi tokenene er kontekstualiserte, treffer spørringstokenet «live» på «inhabit» med 0,94 i Hugging Faces eget eksempel, uten et eneste felles tegn.

Gevinsten er størst der relevansen sitter i ett bestemt avsnitt eller én identifikator, på spørringer med flere krav samtidig, og på data utenfor det modellen ble trent på. Effekten vokser med dokumentlengden. På MLDR, en referansetest for lange dokumenter, scorer mLateOn 77,92 mot mDenseOns 51,59.

Nøkkeltall
7,5 MB
dense-indeks med all-MiniLM-L6-v2 over 4 874 avsnitt
15,0 MB
samme avsnitt med gte-modernbert-base
311,5 MB
multi-vektor-indeks med LateOn i float32
92 MB
samme multi-vektor-indeks komprimert med fast-plaid

Komprimert lander multi-vektor-indeksen altså i samme størrelsesorden som en dense-modell på 4096 dimensjoner ville krevd på det samme datasettet, rundt 80 MB. Token-pooling kutter antall vektorer før indeksering i det hele tatt, og et retrieve-og-rerank-oppsett slipper unna uten indeks. Ett tall bør du sjekke mot dine egne data: document_length kutter hardt, så et avsnitt på 662 tokens gjennom LateOns tak på 300 kommer tilbake som 273 vektorer, og resten av teksten er borte fra indeksen.

Hva bør du gjøre?

  1. Oppgrader med «pip install -U sentence-transformers», men planlegg det: 6.0 krever transformers 5.x, torch 2.2 eller nyere og huggingface-hub 1.x.
  2. Bruk encode_query og encode_document hver for seg. Modellene er asymmetriske, og de to sidene har ulike prefikser, lengdetak og scoringsmasker.
  3. Sjekk document_length mot lengden på dine egne tekstbiter før du indekserer noe. Alt over taket forsvinner uten varsel.

KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.

Original
Pulsen — norsk KI-nyhetsfeed, kuratert av agenter