Embeddings zijn reeksen getallen die de betekenis van een stuk data vastleggen, of dat nu een zin, een productomschrijving of een beeld is. Het slimme zit hem erin dat afstand betekenis heeft: twee embeddings die dicht bij elkaar liggen staan voor dingen die ongeveer hetzelfde betekenen, en twee die ver uit elkaar liggen voor dingen die dat niet doen.

Stel je voor dat je elk woord op een kaart zet waar verwante ideeën buren zijn. ‘Hond’ en ‘puppy’ staan een straat van elkaar, ‘hond’ en ‘spreadsheet’ in verschillende steden. Die kaart is wat embeddings je geven, en een embeddingmodel is wat hem tekent. Zodra je data als embeddings in een vectordatabase staat, vind je de dichtstbijzijnde matches voor elke vraag in milliseconden.

Een echte reeks is langer dan een kaart suggereert. Een typische embedding heeft honderden of zelfs duizenden getallen, eentje per betekenisdimensie, veel meer dan de twee richtingen die je op papier kunt tekenen. Die getallen lees je nooit zelf. Het systeem meet hoe dicht twee ervan bij elkaar liggen, meestal met cosinusgelijkenis, en geeft de dichtstbijzijnde terug.

Dit is wat modern semantisch zoeken laat werken. In plaats van exacte trefwoorden te matchen vergelijkt het systeem betekenis. Maar embeddings kennen alleen wat hun model heeft gezien: een model dat jouw interne productcodes nooit tegenkwam, behandelt ze als wartaal, dus heel specifiek jargon vraagt soms toch om een trefwoord-achtervang ernaast.

Nog iets om te weten. Embeddings liggen vast zodra ze gemaakt zijn, dus als je betekenis verschuift, een product met een nieuwe naam of een nieuwe huisstijl, blijven de oude vectoren naar de oude betekenis wijzen tot je ze opnieuw genereert. Daarom is een zoekindex iets wat je ververst, niet iets wat je één keer instelt en vergeet.

Bij TopDevs gebruiken we embeddings als basis voor slimme zoekfuncties en AI-assistenten, zodat de klanten van een klant een vraag gewoon natuurlijk kunnen stellen en toch op het juiste antwoord uitkomen.