Finjustert multivektor-modell slår alle generelle søkemodeller etter 14,5 timer
Finjuster en multivektor-modell på ditt eget fagfelt, og den slår alle generelle søkemodeller etter 14,5 timer på ett forbrukerkort.
En tett embedding-modell i milliardklassen tapte mot en modell som ble trent over natten på ett RTX 3090-kort. Tom Aarsen, som vedlikeholder Sentence Transformers hos Hugging Face, målte 0,9139 i NDCG@10 for sin egen mLateOn-medical mot 0,7817 for Qwen3-Embedding-4B. Testen gikk over 1 000 medisinske spørsmål mot 200 000 passasjer.
Bakgrunnen er den nye klassen MultiVectorEncoder i Sentence Transformers, som trener modeller for late interaction. En vanlig embedding-modell presser hele teksten ned i én vektor, og likheten blir ett skalarprodukt mellom to sammendrag. En multivektor-modell hopper over den komprimeringen: den beholder én liten vektor per token og scorer med MaxSim, der hvert spørringstoken finner sitt beste treff i dokumentet. Signalene som forsvinner i et gjennomsnitt, overlever.
Oversatt til noe du kjenner igjen: den finjusterte modellen la riktig passasje øverst i 84,9 prosent av spørringene, mot 75,8 prosent for den sterkeste modellen uten finjustering. Aarsen beskriver det som over en tredjedel færre bom på førsteplass. Selve treningskjøringen brukte én million spørsmål-passasje-par fra MIRIAD, uten lærermodell og uten utvunne negative eksempler.
«Fjorten og en halv time på ett forbruker-GPU ga en modell ingen generell søkemodell kommer i nærheten av på disse dataene» — Tom Aarsen, Hugging Face
Et funn i gjennomgangen betyr trolig mer for deg enn arkitekturvalget: avkorting. Klassiske ColBERT-sjekkpunkter kutter dokumenter ved 180 eller 300 tokens, mange tette modeller ved 256 eller 512, fordi treningsdataene deres sjelden gikk lenger. Aarsens passasjer er i snitt 941 tokens. Han målte at avkortingen alene koster opptil 0,24 NDCG@10, altså vesentlig mer enn forskjellen mellom arkitekturene. Modellene kaster stille mesteparten av hvert dokument før de scorer det.
Innvendingen mot multivektor har alltid vært indeksstørrelsen, og Aarsen tar den rett på. Modellen hans lagrer rundt 878 vektorer per passasje, som gir omtrent 45 GB i fp16 for de 200 000 passasjene. Omar Khattab fikk tidlig tilgang til modellen og målte konfigurasjoner med fast-plaid og 1-bits residualkvantisering. Den fulle indeksen krympet til 3,37 GB mot et tap på 0,0155 NDCG@10.
Den nederste raden er mindre enn fp16-vektene til Qwen3-Embedding-8B og scorer 0,0895 høyere. Kvantisering krymper hver vektor, mens pooling og beskjæring kutter antallet, så de to virker sammen. Kvantisering er den du bør ta først.
Hva bør du gjøre?
- Installer pakken med pip install -U sentence-transformers[train] og kjør en BM25-basislinje på dine egne data først. Den er billig og avslører hvor mye leksikalsk overlapp datasettet ditt faktisk har.
- Sjekk lengdegrensene på sjekkpunktet du starter fra før du trener noe som helst. Sett query_length og document_length til None hvis dokumentene dine er lange, slik at tokenizerens grense gjelder i stedet.
- Regn på indeksen før du velger arkitektur. Har du korte passasjer, starter du langt under Aarsens 45 GB, og med 1-bits kvantisering er størrelsesargumentet mot multivektor stort sett borte.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.