# Tekstembeddings genereren met Vertex AI [[TOC]] Embeddings zijn de stille kracht achter slim zoeken en aanbevelingen. Waar een mens betekenis voelt, heeft een computer getallen nodig. Een embedding zet een stuk tekst om in een rij getallen, een vector, waarin de betekenis verstopt zit. Teksten met een vergelijkbare betekenis krijgen vectoren die dicht bij elkaar liggen. Dat klinkt abstract, maar het is enorm praktisch. Zodra je tekst als vectoren hebt, kun je rekenen met betekenis. Je vindt documenten die op een vraag lijken, je groepeert vergelijkbare items en je bouwt aanbevelingen. In Vertex AI maak je deze vectoren met een embeddingmodel. ## Waarom embeddings zo nuttig zijn Klassiek zoeken werkt op woorden. Zoek je op hond, dan vind je teksten met het woord hond, maar niet die over een viervoeter of een puppy. Zoeken op betekenis lost dat op. Een embedding begrijpt dat hond, puppy en viervoeter dicht bij elkaar liggen, ook al staan er andere woorden. Daardoor vind je relevante resultaten die je met trefwoorden zou missen. Dit is de basis van semantisch zoeken en van veel toepassingen rond kennisbanken en chatbots die over je eigen documenten praten. :::info title="Wat is een vector precies" Een embeddingmodel geeft per stuk tekst een vaste vector terug, bijvoorbeeld een rij van honderden of duizenden getallen. De lengte van die vector is een eigenschap van het model en is voor alle teksten gelijk. ::: ## Welk model kies je in Vertex AI Vertex AI biedt verschillende embeddingmodellen. Kies bewust, want de modelkeuze bepaalt de kwaliteit van je zoekresultaten. Voor tekst gebruik je doorgaans `gemini-embedding-001`. Wil je naast tekst ook afbeeldingen, audio of video in dezelfde vectorruimte plaatsen, dan is `gemini-embedding-2` de multimodale optie. Beide modellen ondersteunen meer dan honderd talen. Een belangrijk detail is het zogenoemde task type. Je geeft bij elke aanroep mee waarvoor de vector dient, bijvoorbeeld `RETRIEVAL_DOCUMENT` voor tekst die je indexeert en `RETRIEVAL_QUERY` voor een zoekvraag. Door het juiste task type te kiezen, liggen vragen en documenten beter op elkaar afgestemd en vind je relevantere resultaten. :::tip title="Houd je modelkeuze consistent" Gebruik voor je documenten en je zoekvragen hetzelfde model en dezelfde modelfamilie. Vectoren van verschillende modellen zijn niet vergelijkbaar, dus mixen levert rommelige zoekresultaten op. Leg vast welk model en welke versie je gebruikt, zodat je het later opnieuw kunt reproduceren. ::: ## Embeddings maken in Vertex AI Je genereert embeddings door een embeddingmodel aan te roepen met je tekst. Je stuurt een of meer stukken tekst mee en krijgt per stuk een vector terug. Voor grote hoeveelheden tekst doe je dit in batches, zodat je efficient werkt en binnen de limieten blijft. :::howto title="Zo genereer je embeddings" 1. Kies een embeddingmodel, bijvoorbeeld `gemini-embedding-001` voor tekst. 2. Verzamel de teksten die je wilt omzetten, zoals documenten of vragen. 3. Knip lange documenten in stukken per alinea of sectie. 4. Roep het model in batches aan met het juiste task type en bewaar de vectoren. 5. Sla de vectoren op in een vector-index of database. 6. Bereken bij een zoekvraag de vector en zoek de dichtstbijzijnde resultaten. ::: ## Van vectoren naar zoeken Een vector op zichzelf doet niets. De waarde ontstaat als je vectoren vergelijkt. Je berekent de afstand tussen de vector van een zoekvraag en de vectoren van je documenten, en de dichtstbijzijnde documenten zijn het meest relevant. Voor kleine hoeveelheden kun je dit zelf uitrekenen, maar voor grote collecties gebruik je Vertex AI Vector Search, dat dit razendsnel doet over miljoenen vectoren. Zo bouw je een zoekfunctie die op betekenis werkt in plaats van op trefwoorden. Welke aanpak past, hangt af van je schaal en eisen: | Situatie | Aanpak | | --- | --- | | Kleine, statische set van enkele honderden items | Bereken de afstanden zelf in je eigen code | | Duizenden of meer vectoren met lage zoektijden | Gebruik Vertex AI Vector Search | | Zowel exacte termen als betekenis nodig | Combineer semantisch zoeken met trefwoorden (hybride) | ## Praktische aandachtspunten Knip lange documenten in stukken voordat je ze embedt. Een embedding van een heel boek is te grof om bruikbaar te zijn. Door per alinea of per sectie een embedding te maken, vind je later precies het juiste fragment. Let ook op consistentie. Gebruik altijd hetzelfde model voor je documenten en je zoekvragen. Mix je modellen, dan zijn de vectoren niet vergelijkbaar en geeft je zoekfunctie rommel. :::warn title="Vectoren zijn niet anoniem" Embeddings bevatten betekenis maar zijn niet anoniem. Uit een vector kan in sommige gevallen informatie over de oorspronkelijke tekst worden afgeleid. Behandel vectoren van gevoelige data daarom met dezelfde zorg als de tekst zelf, inclusief toegangsrechten en versleuteling. ::: ## Kosten en schaal Je betaalt per stuk tekst dat je embedt, gerekend in tokens. Voor het eenmalig indexeren van een documentcollectie zijn de kosten vaak overzichtelijk. Let op als je een grote collectie regelmatig opnieuw embedt, want dan tikt het aan. Plan je verversing slim. Embed alleen documenten die nieuw of gewijzigd zijn in plaats van telkens de hele collectie. Zo houd je de kosten laag terwijl je index actueel blijft. Controleer de actuele prijzen en limieten altijd in de officiele Vertex AI documentatie, want die kunnen veranderen. :::faq ### Wat is precies een embedding? Een rij getallen die de betekenis van een stuk tekst vastlegt, zodat je teksten op betekenis kunt vergelijken in plaats van op losse woorden. ### Welk model gebruik ik voor tekst in Vertex AI? Voor zuivere tekst is `gemini-embedding-001` een goede keuze. Wil je tekst, beeld, audio en video in dezelfde vectorruimte combineren, dan gebruik je het multimodale `gemini-embedding-2`. ### Moet ik documenten opknippen voor ik ze embed? Ja, voor lange teksten. Per alinea of sectie embedden geeft veel bruikbaardere resultaten dan een embedding van een heel document. ### Waarvoor dienen task types zoals RETRIEVAL_DOCUMENT en RETRIEVAL_QUERY? Je vertelt het model waarvoor een vector bedoeld is. Gebruik `RETRIEVAL_DOCUMENT` voor tekst die je indexeert en `RETRIEVAL_QUERY` voor zoekvragen. Zo liggen vragen en documenten beter op elkaar afgestemd. ### Kan ik embeddings voor andere talen gebruiken? Ja. De Gemini-embeddingmodellen zijn meertalig en plaatsen teksten met dezelfde betekenis in verschillende talen dicht bij elkaar. Controleer de details per model. ### Waar bewaar ik de vectoren? Voor kleine sets in een gewone database, voor grote sets in een gespecialiseerde vector-index zoals Vertex AI Vector Search. ::: Embeddings zijn de brug tussen taal en wiskunde. Zodra je tekst als vectoren hebt, open je de deur naar semantisch zoeken, slimme aanbevelingen en kennisbanken die echt begrijpen wat je vraagt.