Elke verrijking die een semantische ID herleidt, hergebruikt een concept dat je organisatie al kent of maakt een nieuw concept aan. Op de pagina Semantische ID’s wordt dat groeiende vocabulaire iets wat je kunt bekijken: blader erdoorheen, meet hoe dicht twee vermeldingen echt bij elkaar liggen, voeg met de hand termen toe, spoor de bijna-duplicaten op die onder de drempel zijn geglipt, ruim op wat je niet meer wilt en verplaats het geheel naar een ander embeddingmodel.
Je vindt de pagina onder /semantic-ids in de zijbalk, en ze is pas nuttig zodra je organisatie een embeddingmodel heeft en minstens één schema met een semantisch ID — concepten worden aangemaakt door verrijkingen, niet door de pagina.
Elke rij is één concept: de canonieke tekst (de identiteitstekst die het concept oorspronkelijk heeft aangemaakt), het concepttype (de ruimte waarin het leeft — standaard de naam van het entiteitstype), hoeveel records het gebruiken en wanneer het is aangemaakt. Filter op tekst, op een willekeurig aantal concepttypes of op een minimaal gebruik om de items te vinden die je aandacht verdienen; Weergave exporteren downloadt precies wat de filters laten zien.

Gelijkenis wordt alleen binnen één ruimte gemeten. Vectoren zijn alleen vergelijkbaar binnen hetzelfde concepttype en embeddingmodel. Rijen buiten de ruimte van het geselecteerde concept tonen —, wat “niet vergelijkbaar” betekent — nooit “0%”.
Soms ken je de woordenlijst al voordat de data binnenkomt — een lijst met gerechten, statussen, productfamilies. De Cureren-balk is gemaakt om die lijst in te typen: stel het bereik één keer in op een concepttype — dat bereik komt in het adres van de pagina, dus /semantic-ids/<concept type> is een directe link naar dat deel — en herhaal dan waarde typen → Controleren → Toevoegen. Enter controleert, een tweede Enter voegt toe, en het veld wordt leeggemaakt en houdt de focus, zodat een woordenlijst van vijftig termen een paar minuten typen is, zonder de muis aan te raken.

Controleren is een proefrun van de echte resolutieladder — dezelfde die een verrijking doorloopt — dus het oordeel is geen schatting. En omdat je voor dat oordeel al hebt betaald, dient het meteen als duplicaatbewaking: dekt een bestaand concept je tekst op of boven de drempel, dan blijft Concept toevoegen uitgeschakeld.

Die weigering is bewust: een tweelingconcept boven de drempelwaarde zou nooit een herleiding kunnen winnen en zou toekomstige matches onvoorspelbaar over de twee items verdelen. De schuifregelaar Drempelwaarde naast het veld bepaalt waar die grens ligt voor je controles — hoger voor strenger, lager om agressiever samen te voegen.
Het vocabulaire hoeft ook niet vanuit een verrijking te beginnen: met Nieuw concepttype… (in de paginawerkbalk, editor en hoger) geef je een type een naam en kies je het embeddingmodel waarin de concepten ervan komen te leven — standaard het model van je organisatie. De curatiebalk wordt er meteen op afgestemd en het type wordt samen met het eerste concept dat je toevoegt aan het vocabulaire toegevoegd; een type dat al bestaat behoudt zijn model, want een vocabulaire tussen modellen verplaatsen is precies waar de migratie voor bedoeld is.
Alles boven de drempel is al voor je samengevoegd. De interessante gevallen zitten er net onder — dicht genoeg om verdacht te zijn, niet dicht genoeg om samen te vallen. De weergave Duplicaten toont precies die band, en met de schuifregelaar maak je hem breder of smaller.

Vergelijken → springt terug naar de tabel met dat concept geselecteerd, zodat je ziet wat er verder in de buurt ligt voordat je beslist. Een paar dat je als een echt duplicaat beschouwt, zegt iets over de drempel op de eigenschap die het voortbrengt: verlaag die in de schema-editor en toekomstige verrijkingen voegen het paar vanzelf samen. De gebruikstellingen laten zien welke van de twee de data eigenlijk verkiest.
In het rechterpaneel zie je de ID van het concept (kopieerbaar — je database koppelt hierop), de genormaliseerde tekst, het embeddingmodel erachter en de records die ernaar zijn herleid. Het geselecteerde concept maakt deel uit van het paginaadres, dus de URL in je adresbalk is een directe link terug — te delen met een collega of om in een ticket te bewaren. Twee weergaven plaatsen het tussen zijn buren.


1536 dimensies platslaan tot 3 kan afstanden niet behouden, en de weergave overdrijft hoe compact clusters zijn. Beide weergaven kleuren elk punt volgens dezelfde gelijkenisschaal, dus lees de kleur, niet de afstand. De eerste kaart van een sessie kost een paar seconden om op te bouwen; daarna gaat het direct.
Bij elk gekoppeld record zie je de score waarmee het hier is herleid. Een — betekent dat de ID al in de invoer zat en is doorgegeven, dus er is nooit iets vergeleken — de gratis, ondubbelzinnige route die in de gids over semantische ID’s wordt beschreven.
Importeren & oplossen haalt een hele CSV-kolom door dezelfde ladder en geeft bij elke rij aan wat ermee zou gebeuren — er geldt geen limiet op de bestandsgrootte; grote bestanden worden opgelost in batches van 1000, met live voortgang. Het bestand wordt in je browser verwerkt — alleen de waarden zelf worden verstuurd.

| Resultaat | Wat het betekent |
|---|---|
exact | Dezelfde tekst bestaat al, genormaliseerd — gratis, geen modelaanroep. |
matched | Een andere formulering is boven de drempel herleid tot een bestaand concept. |
would_mint | Niets kwam dicht genoeg in de buurt; een verrijking zou hier een nieuw concept aanmaken. |
minted | Hetzelfde geval, met aanmaken ingeschakeld — het concept bestaat nu (alleen eigenaar). |
De herleide rijen download je als aparte CSV, zodat een import ook puur als audit kan dienen: welke van onze 900 leveranciersnamen zijn al bekend, en welke zouden een nieuwe identiteit openen? Exports werken andersom en vernoemen het bestand naar de filters waarmee het is gemaakt, zodat een map vol exports zichzelf blijft verklaren.
Verwijderen is veilig op een manier die voor de meeste data niet geldt: het vocabulaire bouwt zichzelf weer op, omdat de volgende verrijking gewoon opnieuw aanmaakt wat ze nodig heeft. Wat niet terugkomt, is de convergentie met de ID’s die je al hebt opgeslagen, en het dialoogvenster vermeldt dat met echte aantallen voordat je bevestigt.

Na zo’n wijziging is het behouden van de oude concepten juist de riskante keuze, niet de voorzichtige: identiteiten die uit de nieuwe sleutels zijn opgebouwd, kunnen alsnog binnen de drempel van de oude vectoren vallen en er stilletjes door worden opgeslokt, waarna je ID’s overhoudt die geen van beide dingen betekenen.
Vectoren van twee verschillende modellen zijn niet vergelijkbaar, dus van model wisselen betekent dat elk concept opnieuw geëmbed moet worden. Zodra er concepten bestaan, is deze migratie de enige toegestane manier om dat te doen — en daarom weigert de embeddingmodel-instelling van de organisatie om vanzelf te veranderen.

De preview laat zien wat het opnieuw embedden kost en welke conceptparen waarschijnlijk zullen botsen — in de nieuwe ruimte binnen elkaars drempelwaarde belanden en voortaan samen herleid worden. Daarbij worden de realistische kandidaten gemeten in plaats van elk paar, en dat wordt er ook bij vermeld.
Verrijkingen blijven in de oude ruimte herleiden terwijl de nieuwe vectoren ernaast worden opgebouwd; concepten die intussen ontstaan, worden in een latere ronde meegenomen. De omschakeling gebeurt in één stap aan het eind, waarbij ook het standaard-embeddingmodel van je organisatie wordt omgezet. Onderbreken is ongevaarlijk — als je opnieuw start, gaat het verder waar het gestopt is.
Controles, toevoegingen en imports worden net als elk ander embeddinggebruik in rekening gebracht, en exacte treffers kosten niets omdat ze nooit bij een model terechtkomen. Bladeren, vergelijken, de baanweergave, de 3D-kaart, exporteren en verwijderen zijn gratis. Alle interactieve uitgaven van een dag worden samengevoegd tot één regel in je credithistorie, zodat het overzicht leesbaar blijft in plaats van vol te lopen met fracties van een cent.