# Sparse versus dense retrieval: SPLADE, BM25 en vectoren

[Naar de inhoud](#lm-inhoud)Netwerk/NL[EN](/en/)[Hubhub.llmnet.nlModellen vergelijken op taak, taal, kosten en licentie.](https://hub.llmnet.nl/)[Communitycommunity.llmnet.nlPrompttechnieken, patronen en systeemprompts.](https://community.llmnet.nl/)[APIapi.llmnet.nlLLM's robuust in software: rate limits, routing, structured output.](https://api.llmnet.nl/)[Consultancyconsultancy.llmnet.nlAI invoeren in een organisatie, van pilot tot productie.](https://consultancy.llmnet.nl/)[Nieuwsnieuws.llmnet.nlOntwikkelingen in AI, geduid voor Nederland.](https://nieuws.llmnet.nl/)[Benchmarkbenchmark.llmnet.nlZelf meten wat AI-kwaliteit is, voor jouw taken.](https://benchmark.llmnet.nl/)[Vacaturesvacatures.llmnet.nlAI-rollen, salarissen en carrièrepaden in Nederland.](https://vacatures.llmnet.nl/)[Lerenleren.llmnet.nlAI-concepten in gewoon Nederlands, van beginner tot bouwer.](https://leren.llmnet.nl/)[Gidsgids.llmnet.nlAI privé draaien op eigen Mac, pc, NAS of thuisserver.](https://gids.llmnet.nl/)[Directorydirectory.llmnet.nlHet AI-ecosysteem in kaart: tools, modellen, bedrijven.](https://directory.llmnet.nl/)[Radarradar.llmnet.nlSignalen uit X, onderzoek en communities voor indie developers.](https://radar.llmnet.nl/)[Appsapps.llmnet.nlReviews van AI-apps en open-source repo's, met tips voor wie zelf bouwt.](https://apps.llmnet.nl/)[llmnet.nl — hoofdsite](https://llmnet.nl/)[](https://x.com/intent/post?url=https%3A%2F%2Fhub.llmnet.nl%2Fsparse-versus-dense-retrieval-splade-en-bm25-naast-vectoren&text=Sparse%20versus%20dense%20retrieval%3A%20SPLADE%2C%20BM25%20en%20vectoren)[](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fhub.llmnet.nl%2Fsparse-versus-dense-retrieval-splade-en-bm25-naast-vectoren)[](https://www.reddit.com/submit?url=https%3A%2F%2Fhub.llmnet.nl%2Fsparse-versus-dense-retrieval-splade-en-bm25-naast-vectoren&title=Sparse%20versus%20dense%20retrieval%3A%20SPLADE%2C%20BM25%20en%20vectoren)[](#)[](https://x.com/intent/post?url=https%3A%2F%2Fhub.llmnet.nl%2Fsparse-versus-dense-retrieval-splade-en-bm25-naast-vectoren&text=Sparse%20versus%20dense%20retrieval%3A%20SPLADE%2C%20BM25%20en%20vectoren)[](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fhub.llmnet.nl%2Fsparse-versus-dense-retrieval-splade-en-bm25-naast-vectoren)[](https://www.reddit.com/submit?url=https%3A%2F%2Fhub.llmnet.nl%2Fsparse-versus-dense-retrieval-splade-en-bm25-naast-vectoren&title=Sparse%20versus%20dense%20retrieval%3A%20SPLADE%2C%20BM25%20en%20vectoren)[](#)

 
# Sparse versus dense retrieval: SPLADE en BM25 naast vectoren

 Door Ivo Donker — samengesteld met AI-ondersteuning (Claude & Gemini)

 Bij het bouwen van een robuuste zoekfunctionaliteit of een retrieval-augmented generation (RAG) pijplijn vormt de keuze van het ophaalmechanisme het fundament van de uiteindelijke antwoordkwaliteit. Jarenlang domineerde dense vector retrieval het debat: teksten worden via neurale transformatormodellen omgezet in dichte numerieke vectoren van doorgaans 768 tot 3072 dimensies, waarna semantische verwantschap wordt berekend via cosinusovereenkomst of inproducten. In de praktijk blijkt dense retrieval echter kwetsbaar voor exacte zoektermen, serienummers, out-of-vocabulary domeincodes en vaktermen. Hierdoor ontstaat vaak een zoekfout die semantisch aannemelijk oogt, maar feitelijk onjuist is.

 Om deze blinde vlekken op te vangen, blijven klassieke lexico-statistische methoden zoals BM25 en moderne neurale sparse architecturen zoals SPLADE onmisbaar. In dit artikel analyseren we de wiskundige grondslagen, infrastructurele voetafdruk en kwalitatieve afwegingen tussen traditionele sparse indexen, dichte vectoren en geleerde sparse vectoren. Voor een overzicht van beschikbare vector-encoderingsmodellen en hun eigenschappen verwijzen we naar het artikel waarin we [embeddingmodellen vergelijken voor zoekfuncties en RAG](https://hub.llmnet.nl/embeddingmodellen-vergeleken). Dit artikel behandelt de operationele implementatie van databaseclusters niet; het focust op het wiskundige en architecturale selectieproces.

 
## 1. De anatomie van Dense Retrieval: semantiek versus exacte precisie

 Dense retrieval representeert tekstfragmenten als continue vectoren in een meerdimensionale latente ruimte. Het model comprimeert de volledige semantische betekenis van een zin of alinea naar een vaste lijst reële getallen, waarbij nagenoeg elke dimensie een waarde ongelijk aan nul bevat. Een bi-encoder transformeert de invoervraag en documentchunks onafhankelijk van elkaar, waarna een Approximate Nearest Neighbor (ANN) index — zoals HNSW (Hierarchical Navigable Small World) of IVF-PQ (Inverted File with Product Quantization) — de dichtstbijzijnde documenten selecteert.

 De kracht van dense representaties ligt in het vangen van synoniemen, omschrijvingen en taaloverstijgende concepten zonder dat specifieke trefwoorden letterlijk overeen hoeven te komen. Wanneer een gebruiker zoekt op "woning isoleren tegen geluidsoverlast", herkent een dense model documenten over "akoestische voorzetwanden plaatsen" moeiteloos als relevant. De embeddingruimte brengt semantisch verwante concepten dicht bij elkaar op basis van co-occurrentie en contextpatronen die tijdens de pre-training zijn geleerd.

 Deze compressie naar een dichte vector brengt echter een structureel nadeel met zich mee: het verlies van exacte lexico-grafische specificiteit. Wanneer een document een uniek type-id zoals XZ-9042-B, een Burgerservicenummer, of een zeldzame biochemische formule bevat, verdeelt de tokenizer deze string vaak in willekeurige subtokens. Het dichte model kent aan deze fragmenten een generieke semantische positie toe, waardoor de unieke trefwoordidentiteit vervaagt. Dense retrieval vertoont daardoor een systematische neiging tot overgeneralisatie op entiteit-specifieke zoekopdrachten.

 
## 2. BM25 en de kracht van omgekeerde indexen

 Best Matching 25 (BM25) is een probabilistisch retrieval-algoritme dat voortbouwt op het aloude TF-IDF-principe (Term Frequency-Inverse Document Frequency). In plaats van dichte vectoren genereert BM25 een extreem ijle vector ter grootte van het volledige vocabulair (vaak 100.000 tot meer dan 1.000.000 termen). In deze sparse vector zijn vrijwel alle dimensies nul, behalve de posities die exact overeenkomen met de termen die daadwerkelijk in het document aanwezig zijn.

 BM25 berekent de relevantiescore van een document $D$ voor een zoekvraag $Q$ aan de hand van de volgende parameters:

 $$Score(D, Q) = \sum_{i=1}^{N} IDF(q_i) \cdot \frac{f(q_i, D) \cdot (k_1 + 1)}{f(q_i, D) + k_1 \cdot (1 - b + b \cdot \frac{|D|}{avgdl})}$$

 Hierin representeert $f(q_i, D)$ de termfrequentie van zoekterm $q_i$ in document $D$, $|D|$ de lengte van het document, $avgdl$ de gemiddelde documentlengte over het gehele corpus, $k_1$ de parameter voor verzadiging van de termfrequentie (doorgaans tussen 1.2 en 2.0) en $b$ de mate van lengtenormalisatie (meestal 0.75). De inverse documentfrequentie $IDF(q_i)$ zorgt ervoor dat zeldzame termen aanzienlijk zwaarder meewegen dan veelvoorkomende stopwoorden.

 Omdat sparse representaties worden opgeslagen in een geïnverteerde index (inverted index), is het ophalen van documenten met exacte trefwoorden hardwaretechnisch bijzonder efficiënt. Er is geen zware matrixvermenigvuldiging op een GPU nodig; zoekopdrachten vereisen slechts het doorlopen van geordende postlijsten in het geheugen. Het fundamentele zwakke punt van BM25 is echter het zogeheten 'vocabulary mismatch problem': als de zoeker andere woorden gebruikt dan de auteur (bijvoorbeeld "hartinfarct" versus "myocardinfarct"), faalt het model volledig tenzij handmatige synoniemenlijsten worden onderhouden.

 
## 3. SPLADE: Geleerde sparse representaties via BERT-vocabulair

 SPLADE (Sparse Lexical and Anatomic Document Embeddings) overbrugt de kloof tussen de lexico-grafische precisie van BM25 en het semantische begrip van transformatormodellen. In plaats van een dichte vector van 768 getallen te produceren, projecteert SPLADE de verborgen toestand van een BERT-achtig neuraal netwerk direct terug naar de volledige vocabulair-ruimte van het taalmodel (bijvoorbeeld 30.522 dimensies bij WordPiece).

 Voor elk token $t$ in het vocabulair genereert het model een belangrijkheidsscore $w_j$ voor een gegeven document $d$. Dit gebeurt via een log-transformatie en saturatiefunctie over de reeks invoertokens:

 $$w_j = \max_{t \in d} \log(1 + \text{ReLU}(W_j \cdot h_t + b_j))$$

 Hierbij is $h_t$ de contextuele embedding van token $t$ uit de transformatorlaag en zijn $W_j$ en $b_j$ de gewichten van de vocabulair-projectielaag. Om te zorgen dat de resulterende vector daadwerkelijk 'sparse' blijft (en dus in een standaard omgekeerde index past), wordt tijdens de training een regularisatieloss toegevoegd, zoals de FLOPS-regularisatie of L1-normering.

 Het revolutionaire aspect van SPLADE is geautomatiseerde **termuitbreiding** (term expansion). Wanneer SPLADE de zin "de auto start niet door een lege accu" verwerkt, kent het netwerk niet alleen gewicht toe aan de aanwezige termen, maar activeert het ook gerelateerde vocabulair-dimensies zoals spanning, dynamo, accupool en pechverhelping. Deze geëxpandeerde termen worden met hun bijbehorende gewichten direct opgeslagen in de geïnverteerde index. Hierdoor vangt SPLADE synoniemen op zónder de noodzaak van een dichte vectorruimte en behoudt het tegelijkertijd een hoge trefwoordprecisie.

 
## 4. Structurele vergelijking: BM25, SPLADE en Dense Embeddings

 De keuze tussen deze drie methodes hangt af van specifieke eisen rond latentie, geheugengebruik, indexeersnelheid en de aard van de corpusgegevens. Onderstaande vergelijking toont de structurele eigenschappen per retrieval-architectuur:

 
 
 
 
 Eigenschap | 
 BM25 | 
 Dense Embeddings | 
 SPLADE | 
 

 
 
 
 Vectorstructuur | 
 Sparse (exact vocabulair) | 
 Dense (768–3072 dimensies) | 
 Sparse (geleerd vocabulair) | 
 

 
 Semantisch begrip | 
 Geen (puur lexico-grafisch) | 
 Uitstekend (contextueel) | 
 Hoog (via termexpansie) | 
 

 
 Exacte ID / OOV match | 
 Uitstekend | 
 Matig tot slecht | 
 Goed tot uitstekend | 
 

 
 Indexeer-rekenkracht | 
 CPU (zeer laag) | 
 GPU/Neuraal (hoog) | 
 GPU/Neuraal (zeer hoog) | 
 

 
 Query-latentie | 
 < 5 ms (CPU) | 
 15–50 ms (ANN-zoekopdracht) | 
 10–30 ms (Geïnverteerde index) | 
 

 
 Indexgrootte op schijf | 
 Klein (1x corpusgrootte) | 
 Groot (afhankelijk van vectoren) | 
 Middelgroot tot groot (2-4x BM25) | 
 

 
 Index-mechanisme | 
 Inverted Index (Lucene/WAND) | 
 HNSW, IVF-Flat, SCaNN | 
 Sparse Inverted Index / Lucene | 
 

 
 
 

 Wanneer we de computationele kosten analyseren, valt op dat SPLADE een aanzienlijke rekenkracht vereist tijdens de indexeerfase. Elk document moet door een transformatormodel worden gehaald om de vocabulairgewichten te berekenen. De resulterende index is echter operationeel eenvoudiger te onderhouden dan een zware vectorindex, omdat sparse postlijsten efficiënt naar schijf kunnen worden geflusht en gecomprimeerd via block-max WAND-algoritmen.

 
## 5. Hybride architecturen: Reciprocal Rank Fusion en Cross-Encoders

 In productietoepassingen blijkt een enkelvoudige retrieval-methode zelden toereikend voor elk type zoekvraag. Daarom kiezen moderne RAG-systemen massaal voor een hybride opzet waarbij sparse en dense zoekresultaten worden gecombineerd. Om de resultaten van twee verschillende score-mechanismen (bijvoorbeeld een BM25-score van 14.2 en een cosinusafstand van 0.82) samen te voegen, is normalisatie noodzakelijk.

 De industriestandaard voor deze samenvoeging is **Reciprocal Rank Fusion (RRF)**. RRF kijkt niet naar de absolute scores, maar uitsluitend naar de rangorde binnen elke resultatenlijst. De formule voor RRF luidt:

 $$RRF\_Score(d \in D) = \sum_{m \in M} \frac{1}{k + r_m(d)}$$

 Hierbij is $M$ de verzameling gebruikte zoekmethodes (zoals BM25 en dense retrieval), $r_m(d)$ de rangpositie van document $d$ binnen methode $m$, en $k$ een constante afvlakfactor (standaard ingesteld op 60). Door deze afvlakking krijgen documenten die in beide zoekmethodes hoog scoren een sterke cumulatieve voorkeur, zonder dat uitschieters in absolute scores de uitkomst verstoren.

 Om te bepalen wanneer een hybride aanpak noodzakelijk is boven een enkelvoudig model, biedt het overzichtsartikel over [de keuze tussen embedding, reranker of hybride retrieval](https://hub.llmnet.nl/embedding-reranker-of-hybride-welk-retrieval-model-wanneer) een complete methodologische beslisboom. Na de initiële RRF-selectie (bijvoorbeeld de top 50 documenten) volgt vaak een tweede filterfase via een neuraal cross-encoder model, dat de interactie tussen vraag en antwoord per document gedetailleerd herbeoordeelt.

 
## 6. Voorbeeld: Implementatie van een Sparse-Dense Hybride Fusie

 Onderstaand Python-fragment toont hoe een gecombineerde RRF-pijplijn programmatisch wordt opgebouwd. We combineren de hits uit een sparse component (BM25 of SPLADE) en een dense vectorzoekopdracht om tot een definitieve top-k selectie te komen:

from typing import Dict, List, Tuple

def reciprocal_rank_fusion(
 dense_results: List[str],
 sparse_results: List[str],
 k: int = 60
) -> List[Tuple[str, float]]:
 """
 Combineert gerangschikte document-ID's via Reciprocal Rank Fusion (RRF).
 """
 rrf_scores: Dict[str, float] = {}

 # Verwerk rangposities uit de dense vectorzoekactie
 for rank, doc_id in enumerate(dense_results, start=1):
 if doc_id not in rrf_scores:
 rrf_scores[doc_id] = 0.0
 rrf_scores[doc_id] += 1.0 / (k + rank)

 # Verwerk rangposities uit de sparse (BM25/SPLADE) zoekactie
 for rank, doc_id in enumerate(sparse_results, start=1):
 if doc_id not in rrf_scores:
 rrf_scores[doc_id] = 0.0
 rrf_scores[doc_id] += 1.0 / (k + rank)

 # Sorteer documenten op basis van de gecombineerde RRF-score
 gesorteerd = sorted(
 rrf_scores.items(),
 key=lambda item: item[1],
 reverse=True
 )
 return gesorteerd

# Voorbeeldlijsten met document-ID's gerangschikt op relevantie
dense_hits = ["doc_alpha", "doc_gamma", "doc_beta", "doc_delta"]
sparse_hits = ["doc_beta", "doc_alpha", "doc_epsilon", "doc_gamma"]

gecombineerde_top_k = reciprocal_rank_fusion(dense_hits, sparse_hits, k=60)
for doc_id, score in gecombineerde_top_k[:3]:
 print(f"Document: {doc_id} | RRF Score: {score:.5f}")

 In dit voorbeeld scoort doc_alpha het hoogst omdat het in beide zoekpaden binnen de absolute top twee valt. Het document doc_beta, dat dense op plek drie stond maar sparse op plek één, stijgt eveneens met overtuiging naar de top van de gecombineerde index.

 
## 7. Geheugengebruik, Latentie en Schaalbaarheid in Productie

 Bij het uitrollen van een retrieval-systeem naar tienduizenden tot miljoenen documenten verschuift de afweging van theoretische recall naar operationele kosten en geheugendruk. Dense vectorindexen zoals HNSW vereisen dat de volledige vectorgrafiek bij voorkeur in het werkgeheugen (RAM) wordt gehouden om acceptabele zoektijden te garanderen. Bij 10 miljoen vectoren van 1536 dimensies (float32) betekent dit minimaal 60 gigabyte aan kale vectordata, exclusief de overhead van verbindingsranden in de HNSW-graaf (die de geheugenbehoefte vaak verdubbelt).

 Sparse indexen via BM25 benutten daarentegen sterk geoptimaliseerde posting lists op schijf. Dankzij technieken zoals block-max WAND hoeft de zoekmachine slechts een fractie van de indexblokken in te laden, waardoor de RAM-voetafdruk marginaal blijft. SPLADE bevindt zich in het midden: hoewel de indextechniek identiek is aan BM25, bevat elk document door de termexpansie aanzienlijk meer actieve tokens (gemiddeld 150 tot 300 niet-nul waarden per passage tegenover 30 tot 80 bij BM25). De geïnverteerde index voor SPLADE valt daardoor gemiddeld twee tot vier keer groter uit dan die van BM25.

 Om de kwaliteit van het gecombineerde resultaat na retrieval te maximaliseren, wordt de top-k subset doorgaans geëvalueerd door een tweetraps reranking-model. Details over het selecteren en benchmarken van deze scoringsmodellen zijn te vinden in de analyse over [rerankers en zoekmodellen voor geavanceerde RAG-systemen](https://hub.llmnet.nl/rerankers-en-zoekmodellen).

 
## 8. Kwantitatieve Evaluatie: Meetmethoden en Benchmarks

 Om te bepalen welke retrieval-opzet superieur is voor een specifiek domein, is empirische validatie vereist. Gangbare academische benchmarks zoals BEIR (Benchmarking Information Retrieval) tonen aan dat geen enkele methode op alle domeinen wint:

 
 
- Biomedische datasets (zoals BioASQ en NFCorpus): SPLADE en BM25 presteren vaak beter dan 'zero-shot' dense modellen, vanwege het grote volume aan unieke Latijnse nomenclatuur en specifieke eiwitcodes.
 
- Argumentatie en redenering (zoals Touché-2020): Dense modellen behalen aanzienlijk hogere scores doordat de letterlijke trefwoorden zelden de retorische structuur van een argument reflecteren.
 
- Financiële en juridische data: Hybride systemen (SPLADE + Dense) scoren consistent 5 tot 12 punten hoger op nDCG@10 dan geïsoleerde vectormodellen.
 

 De standaard meetmethodes om retrieval-kwaliteit uit te drukken zijn Recall@K (het percentage relevante documenten dat binnen de top-K is opgehaald), MRR@K (Mean Reciprocal Rank, hoe hoog het eerste relevante document staat) en nDCG@K (Normalized Discounted Cumulative Gain, dat de positie van alle relevante documenten weegt). Om te ontdekken hoe je deze metrieken structureel inricht binnen een evaluatiepijplijn, zie de diepgaande handleiding over [RAG-evaluatie en het meten van retrieval- en generatiekwaliteit](https://benchmark.llmnet.nl/rag-evaluatie).

 
## Conclusie en Strategische Keuzematrix

 De tegenstelling tussen sparse en dense retrieval is in modern AI-ontwerp geen binaire keuze meer. Waar dense vectoren uitblinken in abstracte contextbegrip en meertaligheid, blijven BM25 en SPLADE essentieel voor harde trefwoordprecisie, productcodes en domeinspecifiek jargon.

 Voor eenvoudige toepassingen met strikte budgetten levert BM25 een uiterst betrouwbare basislijn met minimale hardware-eisen. Wie maximale precisie zoekt zonder de operationele complexiteit van vectorgrafieken, vindt in SPLADE een uitstekend alternatief dankzij automatische termexpansie. Voor missiekritieke productiesystemen waarin recall en precisie beide cruciaal zijn, vormt een hybride architectuur — waarbij dense en sparse representaties via Reciprocal Rank Fusion samenkomen en gefilterd worden door een cross-encoder — de meest robuuste standaard.
