Schat, ik heb de embeddings verkleind: Matryoshka vs. PCA
Toen mensen LLM's (Large Language Models) in combinatie met hun eigen documenten gingen gebruiken, deed zich een nieuw probleem voor: hoe sla je al die informatie efficiënt op en doorzoek je deze?
Vector-databases werden snel de standaardoplossing. Maar vectoren kunnen duizenden dimensies bevatten, en het opslaan van miljoenen vectoren kan het ophalen (retrieval) traag en duur maken.
AI-labs reageerden hierop met een techniek genaamd Matryoshka Representation Learning (MRL). Hiermee kun je minder embedding-dimensies gebruiken zonder veel in te leveren op de nauwkeurigheid van je zoekopdrachten. Dit resulteert in lagere kosten voor de vector-database en snellere queries.
Een gelukkig einde. Bijna.
Ik maak me normaal gesproken op woensdag geen zorgen over de rekeningen van vector-databases. Maar een artikel van Doug Turnbull over het gebruik van Principal Component Analysis (PCA) om vectordimensies te verminderen, maakte me nieuwsgierig: hoe zou deze oudere, eenvoudigere techniek zich vergelijken met MRL?
Om dit uit te zoeken, heb ik de twee methoden vergeleken over acht standaard datasets voor retrieval-kwaliteit. In dit artikel loop ik door het experiment en deel ik mijn bevindingen. Alle code en data zijn beschikbaar op GitHub.
Wat zijn MRL en PCA?
Beide methoden produceren kleinere vectoren die zich bijna hetzelfde gedragen als de volledige vectoren. Ze bereiken dit echter op een andere manier.
MRL werkt tijdens het trainen. Je traint het model waarbij de loss gelijktijdig wordt toegepast op verschillende prefix-lengtes: de eerste 64 dimensies, de eerste 128, enzovoort. Dit leert het model om de belangrijkste informatie aan het begin van de vector te plaatsen, vergelijkbaar met een set geneste matroesjka-poppetjes.
Tijdens de inferentiefase behoud je simpelweg de eerste d dimensies en normaliseer je de resulterende vector opnieuw. Veel moderne embedding-modellen zijn op deze manier getraind, maar oudere modellen niet; MRL-gebaseerde truncatie is dus niet beschikbaar voor veel populaire embedding-modellen.
PCA werkt ná het trainen, wat betekent dat het met elk model gebruikt kan worden. Je neemt een steekproef van embeddings, bepaalt de richtingen waarin deze het meest variëren en behoudt de top d daarvan als een projectiematrix¹. PCA levert kleinere vectoren op, maar brengt ook extra operationele complexiteit met zich mee. Je moet de PCA-transformatie opslaan en versiebeheer toepassen, en vervolgens consistent dezelfde versie gebruiken bij het toevoegen aan en het bevragen van de index.
Hoe ik het experiment heb uitgevoerd
Het idee achter het experiment was simpel: ik zou de embeddings met beide methoden verkleinen, de benchmarks draaien en kijken hoeveel de retrieval-kwaliteit per grootte afnam.
Ik genereerde alle embeddings via OpenRouter en evalueerde de retrieval op acht BEIR-datasets. Voor elke dataset reduceerde ik de embeddings naar 512, 256, 128, 64 en 32 dimensies.
Details van de datasets
| Dataset | Taak | Corpus | Queries |
|---|---|---|---|
| SciFact | Verificatie van wetenschappelijke claims | 5,2K | 300 |
| NFCorpus | Medisch zoeken | 3,6K | 323 |
| ArguAna | Zoeken naar tegenargumenten | 8,7K | 1.406 |
| FiQA-2018 | Financiële vraagbeantwoording | 57K | 648 |
| SciDocs | Citatie-aanbevelingen | 25K | 1.000 |
| Quora | Zoeken naar dubbele vragen | 523K | 10.000 |
| TREC-COVID | Biomedisch zoeken (COVID-19) | 171K | 50 |
| Touché 2020 | Zoeken naar argumenten in webdocumenten | 382K | 49 |
Ik wilde antwoord krijgen op drie vragen.
Vraag 1: Welke methode behoudt de meeste retrieval-kwaliteit bij het verminderen van dimensies?
Om dit te beantwoorden, gebruikte ik twee MRL-getrainde modellen: OpenAI's text-embedding-3-small (1.536 dims) en Alibaba's qwen3-embedding-8b (4.096 dims), dat bovenaan de open-weights MTEB BEIR-ranglijst staat.
Ik reduceerde de embeddings van elk model op twee manieren:
- Via truncatie: Ik behield de eerste d dimensies en normaliseerde deze opnieuw. Dit is de standaardmethode voor MRL.
- Via PCA: Ik paste de projectie toe op de volledige document-embeddings van dezelfde dataset die ik vervolgens doorzocht, en behield de top d componenten. Elke document- en query-embedding wordt vervolgens vermenigvuldigd met deze projectiematrix en opnieuw genormaliseerd voor het zoeken.
Vraag 2: Komt dit puur door de MRL-training?
Als PCA goed presteert, zou dat kunnen komen doordat MRL-training de embedding-ruimte al op een gunstige manier heeft georganiseerd. Om dit te testen, voegde ik text-embedding-ada-002 toe als controle; een ouder model van 1.536 dimensies dat niet met MRL is getraind.
Ik paste PCA toe op beide modellen. Als PCA een vergelijkbaar aandeel aan retrieval-kwaliteit behoudt bij zowel text-embedding-3-small als text-embedding-ada-002, suggereert dit dat de prestaties niet afhankelijk zijn van MRL-training.
Vraag 3: Maakt het fitting-data uit?
PCA moet op iets "gefit" worden, wat twee praktische vragen oproept: hoeveel trainingsdata heb je nodig en moet deze afkomstig zijn uit het corpus waarin je zoekt?
Voor de eerste vraag paste ik PCA toe op willekeurige steekproeven van de 57K documenten van FiQA (1.000, 5.000, 20.000 en het volledige corpus) om te zien hoe de grootte van de steekproef de kwaliteit beïnvloedde.
Voor de tweede vraag vergeleek ik reguliere PCA met out-of-domain PCA: een projectie die één keer is gefit op 100.000 MS MARCO-passages en vervolgens ongewijzigd is hergebruikt voor elke andere dataset.
Eerst een sanity check
Voordat ik het experiment startte, wilde ik zeker weten dat de evaluatiepijplijn zinvolle resultaten produceerde. Daarom probeerde ik eerst de officiële MTEB-scores voor de modellen te reproduceren. De onderstaande tabel vergelijkt NDCG@10 bij volledige dimensies: de officiële MTEB-score versus de score van mijn pijplijn.
| Dataset | ada-002 (MTEB) | ada-002 (mij) | 3-small (MTEB) | 3-small (mij) | qwen3-8b (MTEB) | qwen3-8b (mij) |
|---|---|---|---|---|---|---|
| SciFact | 0,7275 | 0,7277 | 0,7337 | 0,7296 | 0,7846 | 0,7863 |
| NFCorpus | 0,3697 | 0,3705 | 0,3833 | 0,3847 | 0,4145 | 0,4150 |
| ArguAna | 0,5744 | 0,5757 | 0,5549 | 0,5573 | 0,7685 | 0,7689 |
| FiQA | 0,4441 | 0,4440 | 0,4491 | 0,4484 | 0,6457 | 0,6492 |
| SciDocs | 0,1836 | 0,1837 | 0,2080 | 0,2077 | 0,3274 | 0,3268 |
| Quora | 0,8760 | 0,8759 | 0,8883 | 0,8880 | 0,8890 | 0,8901 |
| TREC-COVID | 0,6847 | 0,6884 | 0,7790 | 0,7775 | 0,9499 | 0,9492 |
| Touché 2020 | 0,2161 | 0,2143 | 0,2428 | 0,2433 | 0,3593 | 0,3596 |
Mijn resultaten liggen dicht genoeg bij de officiële cijfers om er zeker van te zijn dat de pijplijn naar behoren werkt.
Resultaten Q1: Welke methode behoudt de meeste retrieval-kwaliteit?
PCA deed het bijna bij elke dimensie net zo goed of beter dan MRL-truncatie voor beide MRL-getrainde modellen. De onderstaande tabel toont hoeveel van de oorspronkelijke kwaliteit (NDCG@10) bewaard blijft na de reductie, gemiddeld over de acht datasets.
| Dims | 3-small (Truncation) | 3-small (PCA) | qwen3-8b (Truncation) | qwen3-8b (PCA) |
|---|---|---|---|---|
| 512 | 98% | 97% | 99% | 98% |
| 256 | 94% | 95% | 96% | 96% |
| 128 | 86% | 90% | 91% | 91% |
| 64 | 71% | 82% | 83% | 84% |
| 32 | 46% | 65% | 68% | 71% |
Bij 512 dimensies heeft MRL-truncatie een licht voordeel. Maar naarmate de vectoren kleiner worden, haalt PCA het in of gaat het voorbij aan MRL. Op text-embedding-3-small is PCA duidelijk superieur onder de 256 dimensies (65% vs 46% behouden bij 32). Bij qwen3-embedding-8b ligt de race veel dichter bij elkaar (71% vs 68% bij 32).
Interessant is dat de MRL-training van qwen3-embedding-8b zo sterk is, dat getrunceerde vectoren van 32 dimensies (gecut vanuit 4.096) meer kwaliteit behouden dan die van 3-small (gecut vanuit 1.536).
Kijkend naar de individuele datasets:
- Bij de kleinste dimensies wint PCA op zeven van de acht datasets voor
text-embedding-3-smallen op zes van de acht voorqwen3-embedding-8b. - Over alle dimensies presteert PCA beter op SciFact, FiQA en NFCorpus. ArguAna en SciDocs bevoordelen PCA bij
text-embedding-3-small. Truncatie presteert beter op Quora voor beide modellen.
Resultaten Q2: Komt dit puur door de MRL-training?
Ik vreesde dat PCA alleen goed zou lijken omdat MRL-training de embedding-ruimte al gunstig had georganiseerd. Als dat zo was, zou PCA op text-embedding-ada-002 (zonder MRL) merkbaar slechter moeten zijn.
Dat is grotendeels niet het geval. Tot 128 dimensies behoudt PCA bijna hetzelfde aandeel aan kwaliteit bij text-embedding-ada-002 als bij text-embedding-3-small. Daaronder opent zich een kleine kloof:
| Dims | ada-002 (Truncation) | ada-002 (PCA) | 3-small (Truncation) | 3-small (PCA) |
|---|---|---|---|---|
| 512 | 96% | 99% | 98% | 97% |
| 256 | 89% | 96% | 94% | 95% |
| 128 | 83% | 89% | 86% | 90% |
| 64 | 66% | 78% | 71% | 82% |
| 32 | 41% | 59% | 46% | 65% |
PCA op text-embedding-ada-002 behoudt 78% bij 64 dims en 59% bij 32, tegenover 82% en 65% bij text-embedding-3-small. Het kan zijn dat MRL echt helpt, of simpelweg dat text-embedding-3-small een nieuwer, beter model is. Maar de hypothese dat PCA alleen werkt dankzij MRL lijkt onwaarschijnlijk, aangezien PCA op het niet-MRL-model nog steeds beter scoort dan truncatie op het MRL-model bij 32 dimensies (59% vs 46%).
Resultaten Q3: Maakt de fitting-data uit?
Vergeleken met MRL voegt PCA meer operationele complexiteit toe. Daarom wilde ik weten wat er gebeurt als je "lui" bent en PCA slechts één keer fit bij het aanmaken van de index.
In-domain fit op een kleine steekproef: In dit scenario fit je PCA op de documenten die je aan het begin hebt (1.000, 5.000, 20.000 of alle 57K van FiQA). Bij deze schaal maakte het weinig uit: de projectie gefit op 1.000 documenten presteerde bijna hetzelfde als die op het volledige corpus.
Out-of-domain fit: Hierbij komt de data waarop je fit niet overeen met de data waarin je zoekt. Ik fitte PCA één keer op 100K generieke MS MARCO-passages en gebruikte deze projectie voor elke andere dataset.
- Bij
text-embedding-3-smallwas de overgedragen fit gemiddeld net zo goed of beter tussen de 512 en 64 dimensies. - Bij
qwen3-embedding-8bhield het stand tot 128 dimensies, maar zakte het terug bij lagere dimensies (56% vs 71% behouden bij 32 dims).
Voor mensen die graag efficiënt (of lui) werken is dit goed nieuws: de grootte van de fit-steekproef is minder belangrijk dan verwacht, en een out-of-domain fit houdt stand bij matige compressie.
Hoe zit het met kwantisering?
Je kunt vectoren ook verkleinen via kwantisering. In plaats van het aantal dimensies te verminderen, wordt elke dimensie opgeslagen met minder bits. Bij int8 gebruikt elke dimensie 1 byte (4x kleiner dan float32); bij binair alleen de tekenbit (32x kleiner).
Alleen kwantisering gebruiken voor text-embedding-3-small (volledige 1.536 dimensies) geeft dit resultaat:
| Configuratie | Bytes per vector | Grootte vs float32 | Kwaliteit behouden |
|---|---|---|---|
| int8 | 1.536 | 25% | 100% |
| binair | 192 | 3,1% | 95% |
Je kunt dit verder pushen door kwantisering te combineren met truncatie of PCA. Zo behoudt de combinatie van binaire kwantisering met PCA op 512 dimensies 82% van de oorspronkelijke prestatie, terwijl de ruwe vectorgrootte wordt teruggebracht tot ongeveer 1% van de float32-baseline.
Beperkingen
- Weinig embedding-modellen: Ik testte drie modellen, waarvan twee van OpenAI.
Qwenliet al zien dat een sterkere MRL-implementatie het voordeel van PCA verkleint; andere model-families zouden de resultaten verder kunnen beïnvloeden. - Corpusgrootte: Ik heb de grootste BEIR-datasets weggelaten om het budget te beheersen (~$30). Het is mogelijk dat PCA achterblijft bij MRL op een schaal die ik niet heb bereikt.
- Labomstandigheden: Mijn evaluatie voert exact zoeken uit over ruwe vectoren, wat niet is hoe een echte vector-database werkt (die gebruikt benaderende indexen en vaak rescoring). Dit zou mijn resultaten kunnen beïnvloeden.
- Benchmark-contaminatie: BEIR-datasets worden veel gebruikt om embedding-modellen te trainen, dus de absolute scores zijn waarschijnlijk opgeblazen.
Conclusie
PCA hield niet alleen stand tegen MRL-truncatie, maar won op de meeste dimensies. Op text-embedding-3-small versloeg PCA MRL-truncatie bij bijna elke dimensie, en met een grote marge bij agressieve compressie (65% behouden bij 32 dims vs 46% voor truncatie). Bij qwen3-embedding-8b had MRL een klein voordeel bij 512 dimensies, maar leidde PCA onder de 256.
Deze resultaten lijken geen artefact van MRL-training te zijn, aangezien PCA vergelijkbaar goed werkte op ada-002. Bovendien is het onderhoudsvriendelijker dan verwacht; resultaten veranderden nauwelijks bij een kleine in-domain steekproef.
Niet slecht voor een techniek die ouder is dan de elektrische wasmachine²!
***
Voetnoten ¹ Deze pagina legt het goed uit (zie bronverwijzingen). ² Elektrische wasmachine.
Citatie Castillo, Dylan. 2026. “Honey, I Shrunk the Embeddings: Matryoshka Vs. PCA.” August 1. https://dylancastillo.co/posts/matryoshka-vs-pca.html.
Groetjes,