Gå til indholdet

Embedding og vektorer - for begyndere

Michell Cronberg

Du kan ikke arbejde med AI uden at støde på begreberne embedding og vektorer. Disse er grundlæggende for, hvordan AI-modeller repræsenterer og forstår data – og selvom det er frygteligt komplekst og matematisk, behøver du kun at forstå det på et overordnet niveau. Resten kan du trygt overlade til de studerende på matematik- og datalogiuddannelserne.

Hvad er embedding

Embedding er i bund og grund en smart måde at sammenligne betydning og indhold på tværs af data – ikke kun tekst, men også eksempelvis billeder, lyd og video og nogle gange en kombination af fx et billede og tilhørende billedtekst. "Embedding" kunne måske oversættes til "meningsrepræsentationer" på dansk, men det lyder ret kunstigt – derfor bruger alle bare ordet "embedding".

Eksempelvis vil en søgning efter "hund" i en traditionel database kun returnere resultater, hvor "hund" indgår. I en lidt mere avanceret database kan der tages højde for bøjningsformer, så "hund", "hunde" og "hundene" behandles som varianter af samme ord. Embedding går et skridt videre og fanger selve meningen – så den kan relatere "hund" til "vovse" eller "labrador", selvom ordene ikke har samme rod.

Embedding
Embedding

At få "vovse" til at betyde "hund" kræver naturligvis en model, som forstår meningen, og der findes mange forskellige slags modeller til forskellige formål og sprog – endda modeller der kan forbinde betydning på tværs af sprog. Det er derfor helt logisk, at en traditionel database ikke kan se nogen relation mellem "det styrtregner" (dansk) og "it's raining cats and dogs" (engelsk) – men det kan en embedding-model, hvis den er trænet til det.

Visualisering

Der findes en del muligheder for at visualisere embedding og vektorer, som kan hjælpe med at forstå, hvordan de fungerer. Et eksempel er TensorFlow Embedding Projector, hvor du kan uploade dine egne data og se, hvordan de er fordelt i et flerdimensionelt rum. Det kan give en intuitiv forståelse af, hvordan lignende data grupperes sammen. Jeg har skabt to filer to kan lege med - embeddings.tsv og metadata.tsv. De består af en række vektorer, der repræsenterer ordene "hund", "vovse", "labrador" og "bil". Du kan uploade dem til projektoren og se, hvordan de relaterer sig til hinanden i et flerdimensionelt rum.

Data i embeddings.tsv er vektorer, der repræsenterer betydningen af ordene, mens metadata.tsv indeholder de faktiske ord. Når du uploader dem til projektoren, kan du se, hvordan "hund", "vovse" og "labrador" ligger tættere på hinanden i det flerdimensionelle rum end "bil", hvilket illustrerer deres semantiske lighed. Der ligger ikke nogen model bagved beregning af afstanden mellem vektorerne - eller - jeg er modellen - og har blot opfundet vektorerne, så de passer til det, jeg gerne vil vise.

Ser man på embedding af billeder, er det også meget udbredt. Google har fx en funktion, der finder "lignende billeder", efterretningstjenester kan lave ansigtsgenkendelse (disse to ansigter minder om hinanden) eller analysere et gerningssted (hvad skiller sig ud på billedet). Og hvad med algoritmerne hos Spotify, som på magisk vis synes, at danske Alberte faktisk minder lidt om amerikanske Jack Johnson? De har musik, der minder om hinanden.

Så den korte forklaring på embedding hen over spisebordet til middagen: embedding gør det muligt at finde data, der minder om hinanden.

Hvad er vektorer

Embedding er det overordnede begreb for at sammenligne betydning. I sidste ende er det jo matematik og binære funktioner, der bruges til at returnere et resultat som "vovse" minder om "hund". Så på en eller anden måde skal fx tekst, der minder om hinanden, repræsenteres af tal, som kan sammenlignes.

Disse tal kaldes vektorer (som er det, embeddings består af) og kan fx se sådan ud:

[0.12, -0.88, 1.05, 0.33, ...]

I praksis er der ofte tusinder eller millioner af tal i mange dimensioner i sådan en liste. Hver vektor repræsenterer et stykke data, fx en sætning, et billede eller en lydfil, og hvert tal i vektoren er et mål for, hvordan det pågældende data relaterer sig til forskellige egenskaber eller betydninger.

Disse vektorer skabes af embedding-modeller, som konverterer data til tal baseret på deres mening. Nogle modeller er superkomplekse og returnerer mange tal i mange dimensioner, mens andre er mere simple og dermed hurtigere og billigere. Hvis man fx kun arbejder med tekst på dansk, er der ingen grund til at bruge en embedding-model, der forstår mange sprog, og hvis man arbejder med juridiske tekster, er der ingen grund til, at modellen kender noget til Peter Pedal.

Vektorerne gemmes i en database som kan håndtere den specielle datatype og indeholder funktioner der kan sammenligne vektorer med hinanden. Det kunne eksempelvis være en PostgreSQL-database eller en online database som Pinecone. Men der er mange forskellige muligheder.

Et eksempel

Lad os tage et konkret eksempel med Ernest Hemingways "Den gamle mand og havet" (du ved - den om den gamle fisker som aldrig giver op - og som mange af os skulle analysere i skolen) for at illustrere, hvordan embedding fungerer i praksis.

Først opdeler vi bogen i mindre afsnit (også kaldet "chunking") – måske hver paragraf eller hver side bliver til et separat stykke. Et af afsnitene kunne være: "Santiago havde ikke fanget en fisk i 84 dage. De første 40 dage havde en dreng været med ham, men efter 40 dage uden fisk havde drengens forældre sagt, at den gamle mand nu helt sikkert var salao, den værste form for uheld."

Dette afsnit bliver så omdannet til en embedding-vektor ved hjælp af en sprogmodel – en lang række tal, der repræsenterer afsnittets betydning og indhold. Denne vektor gemmes i en database sammen med alle de andre afsnit fra bogen.

Når en bruger så søger efter "sult og fiasko", bliver deres søgning også omdannet til en vektor med den samme model. Systemet sammenligner derefter søgevektoren med alle afsnittene i databasen og finder dem, der ligner mest. I dette tilfælde vil afsnittet om Santiago's 84 dage uden fisk score højt, selvom ordet "sult" eller "fiasko" aldrig optræder i teksten. Modellen forstår den semantiske forbindelse mellem "84 dage uden fisk", "uheld" og brugerens søgning om sult og fiasko.

På samme måde kunne en søgning efter "kamp mod naturen" finde afsnit om Santiago's kamp med den store fisk, selvom de eksakte ord ikke står der. Embedding fanger meningen bag ordene frem for kun at matche bogstaver og ord.

Terminologi

Her er nogle centrale begreber, der ofte bruges i forbindelse med embedding og vektorer:

Embedding Processen hvor data (tekst, billeder, lyd) konverteres til numeriske repræsentationer, der fanger deres betydning og mening. Gør det muligt at sammenligne og finde ligheder mellem forskellige data baseret på semantik frem for eksakte matches.

Embeddings De faktiske numeriske repræsentationer (vektorer) som embedding-processen producerer. Hver embedding er en liste af tal, der repræsenterer et stykke datas betydning i et flerdimensionelt rum.

Vektorer Matematiske objekter bestående af en liste af tal (fx [0.12, -0.88, 1.05, ...]). I AI-sammenhæng er embeddings netop vektorer - typisk med hundredvis eller tusinder af dimensioner, hvor hver dimension repræsenterer forskellige semantiske egenskaber.

Chunks Mindre dele af større dokumenter eller datasæt. Når man arbejder med lange tekster, opdeles de i chunks (fx afsnit eller sider) for at gøre dem mere håndterbare for embedding-modeller og søgning.

Embedding-model En AI-model der er trænet til at konvertere data til embeddings/vektorer. Forskellige modeller er optimeret til forskellige opgaver, sprog eller datatyper. Eksempler inkluderer OpenAI's text-embedding-ada-002 eller open source-modeller som Sentence-BERT.

Kommende artikel

Dette er en teoretisk introduktion til embedding og vektorer. I en kommende artikel vil vi se på, hvordan man praktisk kan implementere embedding i et søgesystem - for det er faktisk ret nemt at gøre, da mange af modellerne er tilgængelige som open source og kan bruges gratis ligesom mange af databaserne. Det kræver ikke meget mere end en smule programmeringserfaring og en god forståelse for, hvordan embedding-modeller fungerer. Selve matematikken kan vi overlade til andre.