Embeddings är tekniken som gör att en dator kan avgöra att ”byta armband på klockan” och ”justera länkarna i stålarmbandet” handlar om samma sak, trots att texterna inte delar ett enda ord. Den här guiden förklarar hur det går till, vad siffrorna faktiskt betyder och vilka missuppfattningar som är vanligast.
Vad en embedding är
En embedding är en lista med tal som representerar en text. OpenAI beskriver den i sin dokumentation som ”a vector (list) of floating point numbers”, och lägger till att avståndet mellan två vektorer mäter hur besläktade de är: litet avstånd betyder hög släktskap, stort avstånd betyder låg.
Poängen är att talen inte beskriver vilka ord som förekommer, utan vad texten handlar om. Två texter som betyder ungefär samma sak hamnar nära varandra även när ordvalet skiljer sig helt. Det är skillnaden mot den äldre sortens sökning, som letar efter ord som matchar bokstavligt.
Hur många tal handlar det om
Antalet tal i vektorn kallas dimensioner. Ju fler dimensioner, desto mer nyans kan modellen fånga, men desto mer minne och beräkning kostar det.
| Modell | Dimensioner |
|---|---|
| OpenAI text-embedding-3-small | 1 536 |
| OpenAI text-embedding-3-large | 3 072 |
| Googles gemini-embedding | 3 072 som standard, 128 till 3 072 stöds |
Siffrorna kommer från leverantörernas egen dokumentation: OpenAI anger ”the length of the embedding vector is 1536” respektive ”3072 for text-embedding-3-large”, och Google skriver att ”by default, both models output a 3072-dimensional embedding” och rekommenderar 768, 1 536 eller 3 072 i sin API-dokumentation.
Inte bara text
Embeddings började som en textteknik men är det inte längre. Googles nyare modell beskrivs i Googles dokumentation som multimodal och sägs placera ”text, images, video, audio, and documents into a unified embedding space”, vilket gör det möjligt att söka på tvärs mellan formaten. En bild och en text kan alltså hamna nära varandra i samma rymd om de handlar om samma sak.
För en e-handel betyder det att en produktbild i princip kan matchas mot en kategori utan att någon skrivit en beskrivning.
Semantisk likhet: att mäta en vinkel
När två texter blivit vektorer behöver man ett mått på hur nära de ligger. Det vanligaste är cosinuslikhet. Måttet är hämtat ur klassisk informationssökning och definieras i standardverket Introduction to Information Retrieval som skalärprodukten av två vektorer delad med deras längder.
Att dela med längderna gör att bara riktningen spelar roll, inte hur långa vektorerna är. Eftersom uttrycket är cosinus för vinkeln mellan vektorerna kan värdet aldrig hamna utanför intervallet minus 1 till 1. Ett värde nära 1 betyder att texterna pekar åt samma håll, alltså handlar om samma sak. Ett värde nära 0 betyder att de är obesläktade.
I praktiken sätter man en tröskel. Ligger två artiklar över tröskeln räknas de som relaterade, annars inte. Var tröskeln ska gå är en avvägning: för lågt satt tröskel ger förslag som bara är ungefär relevanta, för högt satt ger inga förslag alls.
Tröskeln går inte att räkna fram teoretiskt, den måste kalibreras mot det egna materialet. Ett arbetssätt som fungerar: börja högt så att bara uppenbara träffar släpps igenom, plocka ut ett stickprov av par strax över och strax under gränsen, och läs dem som en läsare skulle göra. Där du börjar tveka går den verkliga gränsen. Sänk sedan stegvis tills du ser förslag du inte skulle stå för, och backa ett steg.
Rätt nivå beror på materialet. Ett smalt ämnesområde där alla texter liknar varandra kräver en högre tröskel än en bred portfölj, eftersom likheten mellan två godtyckliga texter redan är hög. Därför är tröskelvärden från en annan sajt sällan direkt överförbara.
Cosinus eller euklidiskt avstånd
Här är en punkt där förklaringar på nätet ofta blir för grova. Den vanliga versionen lyder att cosinus används i stället för euklidiskt avstånd eftersom cosinus bortser från vektorns längd. Det stämmer, men bara när vektorerna inte är längdnormaliserade.
OpenAI skriver att deras embeddings ”are normalized to length 1”, och drar slutsatsen att ”cosine similarity and Euclidean distance will result in the identical rankings”. Är vektorerna redan normaliserade rangordnar alltså de två måtten likadant, och valet handlar mest om beräkningskostnad: cosinus går snabbare eftersom den reduceras till en skalärprodukt. Google beskriver i stället cosinus som ett bra mått därför att det ”focuses on direction rather than magnitude”.
Båda har rätt, men om olika fall. Längdargumentet spelar roll för vektorer som inte normaliserats. För normaliserade vektorer är skillnaden i praktiken ingen.
Varför nyckelord inte räcker
Att semantisk sökning slår ordmatchning är mätt och inte bara påstått. I Dense Passage Retrieval for Open-Domain Question Answering (Karpukhin med flera, 2020) överträffade den semantiska metoden ett starkt BM25-system, alltså klassisk nyckelordssökning, med ”9%-19% absolute in terms of top-20 passage retrieval accuracy”.
För den som driver en webbplats är den praktiska följden att relaterat innehåll inte behöver bygga på taggar. En taggbaserad lösning kan bara koppla ihop det som någon har taggat likadant. En semantisk lösning hittar sambandet så länge texterna handlar om samma sak.
Att söka bland miljoner vektorer
Att jämföra en vektor mot alla andra fungerar bra upp till en viss storlek. Därefter används ungefärlig grannsökning, ofta kallad ANN, som hittar de närmaste utan att jämföra mot varenda vektor.
Den mest spridda metoden är HNSW, beskriven av Malkov och Yashunin. Den bygger flera lager av grannskapsgrafer över allt mindre delmängder av datan, vilket enligt artikeln ger en logaritmisk skalning av söktiden. Sökningen börjar i det grövsta lagret och förfinas nedåt, ungefär som att först välja land, sedan stad, sedan kvarter.
Vektorerna måste också lagras någonstans. När mängden växer används vanligen en vektordatabas, vilket Google beskriver så här i Googles dokumentation: ”As you take embeddings to production, it is common to use vector databases to efficiently store, index, and retrieve high-dimensional embeddings.” Det är alltså vektordatabasen som håller datan och ANN-algoritmen som söker i den.
Embeddings och AI-svar
Det vanligaste skälet till att embeddings diskuteras just nu heter RAG, Retrieval Augmented Generation. Tekniken går ut på att först hämta relevanta textstycken med semantisk sökning och sedan låta en språkmodell svara utifrån dem, i stället för att modellen svarar ur eget minne.
Google beskriver i Googles dokumentation RAG som ett vanligt användningsområde och skriver att embeddings spelar en nyckelroll för att förbättra svaren med ”improved factual accuracy, coherence, and contextual richness”. Poängen är att modellen får se källtexten i stället för att gissa, vilket minskar risken för påhittade uppgifter.
Praktikfallet: produktkategorier
Samma teknik löser ett helt annat problem: att placera en produkt i rätt kategori. Google Product Taxonomy innehåller 5 595 kategorier i upp till sju nivåer. Att para ihop en egen kategori som ”Löparskor herr” med rätt nod i det trädet är samma sorts uppgift som att para ihop två artiklar: hitta den motpart som ligger närmast i betydelse.
Värt att veta är att Google numera klassificerar produkter automatiskt, och att attributet google_product_category är valfritt och fungerar som en åsidosättning. Läs mer i guiden om kategorimappning för Google Shopping.
Kortare vektorer, nästan samma kvalitet
Vektorer kostar lagring. Nyare modeller går därför att korta ner. OpenAI anger att ”a text-embedding-3-large embedding can be shortened to a size of 256 while still outperforming an unshortened text-embedding-ada-002 embedding with a size of 1536″, alltså att en nedkortad ny modell slår en äldre i full storlek.
Tekniken bakom kallas Matryoshka Representation Learning, efter de ryska dockorna. Den beskrivs i en artikel av Kusupati med flera och går ut på att den viktigaste informationen packas först i vektorn, så att slutet kan kapas utan att det mesta går förlorat.
Tre vanliga missuppfattningar
Att fler dimensioner alltid är bättre. Fler dimensioner kostar minne och beräkning, och nyttan avtar. En nedkortad vektor kan räcka gott, vilket citatet ovan visar.
Att valet av avståndsmått är avgörande. För normaliserade vektorer rangordnar cosinus och euklidiskt avstånd likadant. OpenAI skriver rentav att ”the choice of distance function typically doesn’t matter much”.
Att semantisk matchning förstår texten. Modellen mäter statistiska mönster i språket, inte innebörd i mänsklig mening. Den kan para ihop två texter som liknar varandra ytligt men skiljer sig i sak. Därför behöver förslag som visas för läsare fortfarande en redaktionell spärr, exempelvis att sidor med kända faktafel aldrig föreslås.
Ordlista
- Embedding. En text omvandlad till en lista med tal.
- Dimension. Antalet tal i vektorn.
- Cosinuslikhet. Mått på vinkeln mellan två vektorer, mellan minus 1 och 1.
- ANN. Ungefärlig grannsökning, som hittar de närmaste utan att jämföra mot alla.
- Vektordatabas. Databas som lagrar och indexerar embeddings för snabb sökning.
- RAG. Att hämta relevant text med semantisk sökning och låta en språkmodell svara utifrån den.
- Lexikal sökning. Matchning på ord som förekommer i texten.
- Semantisk sökning. Matchning på vad texten handlar om.
Det här är tekniken bakom båda tjänsterna under Matcher. Läs om hur den används för relaterat innehåll mellan sajter.
Senast faktagranskad: 18 juli 2026