Naar de inhoud
trending

Handleidingen

Wat zijn embeddings en vector databases? Uitleg en test

Wat zijn embeddings en vector databases? Eenvoudige uitleg zonder wiskunde, inclusief lokale benchmark tussen bge-m3 en nomic-embed-text via Ollama.

Tekst: 7 min leestijd

👁 116 keer gelezen

Een embedding zet tekst om in een reeks getallen (een vector), waarbij teksten met een vergelijkbare betekenis vergelijkbare getallen krijgen. Een vector database slaat deze vectoren op en vindt razendsnel de vectoren die het dichtst bij je vraag liggen. Dit vormt het fundament onder semantisch zoeken, RAG en het geheugen van AI-agents. Hieronder leg ik het uit zonder wiskunde en toon ik een test van twee gratis embedding-modellen op Poolse zinnen en wetsteksten: het ene model vond in 8 van de 10 gevallen het juiste artikel, het andere in 4. Dit artikel maakt deel uit van het leertraject AI-agents vanaf nul.

Status op 4 oktober 2026

  • Ik heb twee modellen lokaal getest via Ollama 0.35.1 op een RTX 4090: bge-m3 (MIT-licentie) en nomic-embed-text (Apache 2.0). Beide zijn geschikt voor commercieel gebruik.
  • Test: 5 zinnen ter vergelijking en 10 vragen op 920 fragmenten uit drie Poolse wetten.
  • Kosten: EUR 0, alles draaide lokaal op mijn eigen computer.
  • De testcode is te vinden in het pakket startersarchief-voor-agenten (04_rag.py).

Wat is een embedding? Eenvoudig uitgelegd

Stel je een landkaart voor waarop elke zin een specifiek punt vormt. Zinnen over de waarborgsom voor een huurwoning liggen dicht bij elkaar, zinnen over vakantiedagen iets verderop, en zinnen over het weer liggen aan de andere kant van de kaart. Een embedding vormt simpelweg de coördinaten van zo’n zin op die kaart. Het enige verschil is dat deze kaart geen twee dimensies telt, maar honderden of zelfs meer dan duizend.

Zo ziet het begin van een embedding eruit voor de vraag “Hoeveel bedraagt de waarborgsom voor een huurwoning?” (in het Pools getest als “Ile wynosi kaucja za wynajem mieszkania?”) via het model bge-m3:

[-0.0375, 0.0463, -0.0196, -0.0042, 0.0015, ... ]   (in totaal 1024 getallen)

Losse getallen zeggen op zichzelf niets. Het gaat om de afstand tussen vectoren. Meestal bereken je die via cosinus-overeenkomst (cosine similarity): 1 betekent exact dezelfde richting (dezelfde betekenis), waarden rond 0 duiden op een compleet gebrek aan samenhang.

Test met vijf zinnen

Ik heb de Poolse zin “Ile wynosi kaucja za wynajem mieszkania?” (“Hoeveel bedraagt de waarborgsom voor een huurwoning?”) vergeleken met vier andere uitspraken. Een kwalitatief model hoort de zin met dezelfde betekenis als dichtstbijzijnde te herkennen, zelfs wanneer er andere woorden of een andere taal worden gebruikt.

Vergeleken zin (vertaling uit het Pools) bge-m3 nomic-embed-text
How much is the rental deposit for a flat? (dezelfde strekking in het Engels) 0,736 0,416
Welke borg betaalt de huurder van een pand? (vertaling van het Poolse origineel: “Welke borg betaalt de huurder van het pand?”) 0,678 0,665
Statiegeld op retourflessen in de winkel (hetzelfde Poolse woord voor borg/kaucja, andere context) 0,569 0,713
Hoeveel vakantiedagen heb ik per jaar? (volledig ander onderwerp) 0,442 0,755

bge-m3 rangschikte de zinnen exact zoals een mens dat zou doen: de vertaling als meest verwant, daarna de parafrase, vervolgens het statiegeld en de vakantiedagen als verste verwijderd. nomic-embed-text zag de vraag over vakantiedagen juist als het meest verwant aan de vraag over huurborg, terwijl de Engelse vertaling als minst passend werd beoordeeld. Dit model is voornamelijk getraind op Engels; bij Pools kijkt het eerder naar zinsconstructies (“Ile wynosi…” / “Ile dni…”) dan naar de feitelijke betekenis.

Test op wetteksten

In het artikel over RAG stap voor stap heb ik een zoekmachine gebouwd op basis van het Poolse Arbeidswetboek, de wet op huurdersbescherming en de patiëntenrechtenwet (920 tekstfragmenten). Ik stelde 10 alledaagse vragen in het Pools en controleerde op welke positie in de zoekresultaten het juiste wetsartikel naar voren kwam.

Eigenschap bge-m3 nomic-embed-text
Juiste artikel op positie 1 5 van de 10 2 van de 10
Juiste artikel in de top 5 8 van de 10 4 van de 10
Vectordimensies 1024 768
Maximale contextlengte (in Ollama) 8192 tokens 2048 tokens
VRAM-geheugengebruik na laden 664 MB 323 MB
Indexgrootte van 920 fragmenten 8,5 MB 7,5 MB
Indextijd voor 920 fragmenten* 155 s 105 s
Spreiding overeenkomst (irrelevante vraag vs. treffer) 0,43 vs 0,64-0,72 0,69 vs 0,69-0,77
Licentie MIT Apache 2.0

* De videokaart voerde tijdens de meting nog een andere taak uit, dus beschouw deze tijden als indicatief. Op een niet-belaste kaart werken beide modellen sneller.

De laatste rij is net zo belangrijk als de trefzekerheid. Bij bge-m3 kreeg een vraag over de maximumsnelheid op de snelweg (niet aanwezig in deze wetten) een maximale overeenkomst van 0,43. Dat is aanzienlijk lager dan de relevante fragmenten. Hierdoor kun je een drempelwaarde instellen en direct “ik weet het niet” antwoorden zonder het taalmodel onnodig aan te roepen. Bij nomic-embed-text lag bijna elke score rond de 0,7, waardoor zo’n drempelwaarde onmogelijk te bepalen is.

Wat is een vector database?

Een vector database bewaart embeddings samen met de oorspronkelijke tekst en bijbehorende metadata (bestand, artikelnummer, datum) en kan vliegensvlug de dichtstbijzijnde vectoren opsporen. Bij bescheiden datasets volstaat een eenvoudige numpy-matrix: mijn 920 vectoren beslaan slechts 8,5 MB en het doorzoeken vergt één matrixvermenigvuldiging. Een volwaardige vector database wordt pas nuttig wanneer:

  • je honderdduizenden fragmenten hebt en het gelijktijdig doorrekenen te traag wordt;
  • je resultaten wilt filteren op metadata (zoals “alleen documenten uit 2026”);
  • er regelmatig nieuwe documenten bijkomen en je niet steeds de hele index opnieuw wilt berekenen;
  • meerdere gebruikers gelijktijdig zoekopdrachten uitvoeren.
Oplossing Waar het draait Geschikt voor
numpy (.npz-bestand) In je eigen script Leren en experimenteren, tot enkele tienduizenden fragmenten
Chroma Lokaal, als lokaal bestand of server Eerste projecten, prototypes
pgvector (PostgreSQL) In je bestaande PostgreSQL-database Wie al PostgreSQL gebruikt en alle data op één plek wil houden
Qdrant, Weaviate, Milvus Eigen server of managed cloud Grote datasets, intensief gebruik door veel gebruikers

Chroma 1.5.9 gaf bij mijn dataset exact dezelfde zoekresultaten als numpy. Een vector database verhoogt niet de zoekkwaliteit op zich, maar biedt schaalbaarheid en gebruiksgemak. De uiteindelijke trefzekerheid hangt af van het embedding-model en de manier waarop je teksten opsplitst (chunking).

Hoe kies je een embedding-model?

  1. Kies een meertalig model. Van de gratis lokale opties presteert bge-m3 uitstekend bij meerdere talen.
  2. Stel een kleine testset samen: 10 tot 20 vragen waarvan je het juiste tekstfragment kent. Zonder zo’n set blijft modelselectie puur giswerk.
  3. Meet of het juiste fragment in de top 5 verschijnt; dat is immers het gebruikelijke aantal fragmenten dat een taalmodel binnen een RAG-pipeline ontvangt.
  4. Controleer het verschil in scores bij vragen die buiten het brondomein vallen. Een ruim contrast maakt het mogelijk een “ik weet het niet”-drempel in te stellen.
  5. Let goed op modelprefixen: nomic-embed-text vereist de toevoeging van search_query: voor een zoekopdracht en search_document: voor documentteksten. Zonder die labels kelderen de prestaties aanzienlijk.

Embeddings zijn eveneens beschikbaar via cloud-API’s (van onder meer OpenAI, Google, Mistral en Cohere). Hierbij betaal je per verbruikte token en stuur je de documenten naar de clouddienst. Hoe je tokens berekent en wat dat kost, lees je in het overzicht over tokens.

Waar worden embeddings buiten RAG toegepast?

  • Zoekfuncties in webshops of kennisbanken, die begrijpen dat “schoenen voor regenweer” overeenkomt met “waterdicht schoeisel”.
  • Detectie van duplicaten bij supporttickets, forumberichten of artikelen.
  • Clusteren van klantfeedback in thema’s zonder handmatige categorisering.
  • Agent-geheugen: een agent slaat eerdere ervaringen op als embeddings en zoekt bij een nieuwe taak naar soortgelijke situaties uit het verleden. Zie ook: AI-agent: 12 voorbeelden uit de praktijk.

Veelgestelde vragen

Wat is een embedding in één zin?

Een reeks getallen die de betekenis van een tekst weergeeft, waardoor computers teksten kunnen vergelijken op semantische inhoud in plaats van losse zoekwoorden.

Wat is het verschil tussen een embedding en een token?

Een token is een tekstfragment (een woorddeel of leesteken) waarin een model een tekst opdeelt. Een embedding is de uiteindelijke vector die de betekenis van het gehele fragment samenvat. Een embedding-model splitst invoer dus eerst op in tokens en zet die daarna om naar één vector.

Moet je embeddings verplicht op een videokaart (GPU) berekenen?

Nee, compacte modellen draaien prima op een gewone processor (CPU), al duurt de verwerking dan wat langer. bge-m3 nam tijdens mijn test 664 MB grafisch geheugen in beslag en past daarmee op vrijwel elke moderne videokaart.

Kun je embeddings van verschillende modellen door elkaar gebruiken?

Nee. Elk model hanteert zijn eigen coördinatenstelsel en dimensies. Zoekvragen moeten worden omgezet met exact hetzelfde model als de geïndexeerde documenten. Stap je over op een ander model, dan moet je de complete index opnieuw opbouwen.

Wat is beter: een vector database of een traditionele relationele database?

Een traditionele database doorzoekt exacte tekst en numerieke waarden, terwijl een vector database zoekt op contextuele betekenis. De krachtigste oplossing is vaak hybride zoeken (hybrid search): trefwoorden vangen eigennamen en nummers af, terwijl vectoren synoniemen en parafrasen herkennen.

Wat kosten embeddings?

Draai je ze lokaal, dan betaal je uitsluitend stroomkosten. Bij cloud-API’s behoren embeddings tot de goedkoopste AI-verzoeken, veelal fracties van een dollar per miljoen tokens. Raadpleeg voor actuele tarieven altijd de prijzenpagina van de betreffende aanbieder.

Google · Jouw bronnenHoger in Google - met één klikToevoegen aan voorkeursbronnen →

Bronnen en controle

  • bge-m3 en nomic-embed-text in de bibliotheek van Ollama (gecontroleerd op 4 oktober 2026).
  • Chroma-documentatie.
  • Metingen uitgevoerd op een eigen pc (RTX 4090, Windows 11, Ollama 0.35.1), 4 oktober 2026, tussen 14:30 en 15:00 uur.

Kinetyra

// read next

More on this from HELDER

Helder

Helder

ADMINISTRATOR
lees ookWat kost video met AI per seconde? Tarieven van 16 modellenai-toolsWat kost video met AI per seconde? Tarieven van 16 modellenEen seconde AI-video kost tussen 0,04 en 0,36 euro. We vergeleken de actuele API-prijzen van 16 videomodellen, van Wan 2.6 tot Google Veo 3.1.

Meest gelezen

  1. 1Anthropics biolab ontdekt nieuw enzym via bijna 950 Claude-agents
  2. 2Meta onthult sleutelhanger-apparaatje met AI-assistent Muse
  3. 3OpenAI richt wiskundeadviesgroep op na oplossen van meer dan 100 open problemen
// sitemap

Deze pagina in andere talen6

helder in cijfers 0teksten in archief0nieuwsberichten van de afgelopen 7 dagen0videomodellen in observatorium
× ‹ vergroting ›