Elke verrijking die een semantische ID oplost, hergebruikt een concept dat je organisatie al kent of maakt een nieuw concept aan. Op de pagina Semantische ID's wordt die groeiende woordenschat iets wat je kunt bekijken: doorblader hem, meet hoe dicht twee vermeldingen echt bij elkaar liggen, voeg met de hand termen toe, beantwoord de vragen die de identiteitsbeoordelaar voor je achterlaat, zet buiten gebruik 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 waarmee het is 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 concepttypen, op de schema's die erin schrijven, of op een minimaal gebruik om de items te vinden die je aandacht verdienen. Schema's kiezen is een snelkoppeling naar hun concepttypen — en omdat een type gedeeld wordt, zie je ook de concepten die een ander schema in datzelfde type heeft aangemaakt. 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.
Niets belandt in Beoordelen alleen omdat het op elkaar lijkt. Elk paar hier is iets waarover de identiteitsbeoordelaar heeft beslist en dat hij aan jou overlaat: hij wist het niet (Onzeker), hij vond twee van je concepten gelijk aan één binnenkomende tekst (Lijkt dubbel), of hij scheidde er twee die vrijwel identiek meten (Apart gehouden) — dat laatste krijg je te zien zodat je kunt bevestigen dat hij de voor de hand liggende kandidaat niet over het hoofd zag. Elke rij bevat de eigen zin van de beoordelaar die uitlegt wat de doorslag gaf.
Vergelijken → springt terug naar de tabel met dat concept geselecteerd, zodat je ziet wat er verder in de buurt staat voordat je beslist. Samenvoegen… vouwt het ene in het andere — de schrijfwijzen van de verliezer worden aliassen van de winnaar, zodat het paar overal samenkomt en samen blijft. Negeren sluit de vraag af wanneer het echt om twee dingen gaat. De gebruikstellingen laten zien welke van de twee de data daadwerkelijk 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). |
Het concepttype typ je, je kiest het niet. Een bestand is een volkomen normale manier om een vocabulaire te beginnen, dus het veld stelt de ruimtes voor die je al hebt en accepteert tegelijk een naam die je nog niet hebt — en zegtnieuw wanneer dat zo is. Een nieuwe naam stelt de ene vraag die later niet meer gesteld kan worden: in welk embeddingmodel de concepten gaan leven. Beantwoord die hier en de ruimte wordt aangemaakt met de eerste waarde die de import aanmaakt; daarna is een vocabulaire tussen modellen verplaatsen een migratie.
Twee dingen voorkomen dat een vergissing een tweede vocabulaire wordt: als je de naam typt van een ruimte die je al hebt, wordt die geselecteerd, ongeacht hoofdletters, en een naam die één of twee letters van een bestaande afligt, wordt gesignaleerd met een correctie in één klik. Tegen een echt nieuwe ruimte valt niets te vergelijken, dus een run met alleen matchen antwoordt “elke waarde zou worden aangemaakt” zonder ook maar één rij te embedden — en rekent daar niets voor.
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.