# Embedding Models - Selection and Optimization

**Last updated:** 2026-02  
**Status:** GA (Azure OpenAI, Azure AI Search), Preview (Multilingual E5, Custom embeddings)  
**Category:** RAG Architecture & Semantic Search

---

## Introduksjon

Embedding-modeller er selve grunnmuren i moderne RAG-systemer og semantisk søk. De oversetter tekst — enten spørsmål, dokumenter eller metadata — til numeriske vektorer som gjør det mulig å finne semantisk liknende innhold basert på mening, ikke bare nøkkelord. Valget av embedding-modell påvirker direkte retrieval-kvalitet, latency, kostnad og hvor godt systemet håndterer domene-spesifikk terminologi eller flerspråklige dokumenter.

I Microsoft-økosystemet tilbys embeddings primært gjennom **Azure OpenAI Service** (text-embedding-ada-002, text-embedding-3-small, text-embedding-3-large) og **Azure AI Search** (som integrerer både OpenAI-modeller og åpen kildekode-embeddings som E5 via Azure AI). Riktig valg krever forståelse av dimensjonalitet, kostnad, domenetilpasning, flerspråklighet og håndtering av store dokumentvolumer.

Mange organisasjoner starter med standard OpenAI-modeller uten å vurdere om domene-spesifikke embeddings (f.eks. rettet mot juridisk, medisinsk eller teknisk språk) eller multilingual-støtte kan gi markant bedre kvalitet — eller om høyere dimensjonalitet faktisk er nødvendig for deres use case.

---

## Kjernekomponenter og nøkkelegenskaper

### Tilgjengelige embedding-modeller i Azure

| Modell | Dimensjoner | Maks tokens | Bruksområde | Status | Pris (per 1M tokens, ca.) |
|--------|-------------|-------------|-------------|--------|---------------------------|
| **text-embedding-ada-002** | 1536 | 8191 | Generell RAG, legacy baseline | GA | $0.10 |
| **text-embedding-3-small** | 1536 (eller 512) | 8191 | Kostnadseffektiv, generell bruk | GA | $0.02 |
| **text-embedding-3-large** | 3072 (eller 256-1024) | 8191 | Høy presisjon, komplekse domener | GA | $0.13 |
| **multilingual-e5-small** | 384 | 512 | Flerspråklig, kompakt | Preview | Via Azure AI (gratis i preview) |
| **multilingual-e5-large** | 1024 | 512 | Flerspråklig, høy kvalitet | Preview | Via Azure AI |
| **Custom embeddings** | Variabel | Variabel | Domene-spesifikk fine-tuning | Announced | Custom pricing |

**Nøkkelegenskaper per modell:**
- **Dimensjonalitet:** Høyere dimensjoner = bedre representasjon av nyansert semantikk, men større indekser og høyere kostnad
- **Token-kapasitet:** 8191 tokens tilsvarer ca. 6000 ord (norsk/engelsk), tilstrekkelig for de fleste chunks
- **Språkstøtte:** OpenAI-modeller håndterer 100+ språk, men med fallende kvalitet utenfor engelsk; E5-modeller er optimalisert for multilingual quality
- **Matryoshka-dimensjonalitet:** text-embedding-3-modellene støtter dynamisk reduksjon (f.eks. 3072 → 512) uten retraining, nyttig for kostnadsoptimalisering

### Eksempel: Generering av embeddings (Azure OpenAI, Python)

```python
from openai import AzureOpenAI

client = AzureOpenAI(
    api_key="YOUR_AZURE_OPENAI_KEY",
    api_version="2024-02-01",
    azure_endpoint="https://YOUR_RESOURCE.openai.azure.com"
)

response = client.embeddings.create(
    model="text-embedding-3-small",  # eller "text-embedding-3-large"
    input="Azure AI Foundry gir en unified plattform for LLM-utvikling.",
    dimensions=512  # valgfritt: reduser fra 1536 til 512 for mindre indeks
)

embedding_vector = response.data[0].embedding
print(f"Dimensjoner: {len(embedding_vector)}")  # 512
```

### Eksempel: Azure AI Search med embeddings

```json
{
  "name": "products-index",
  "fields": [
    {"name": "id", "type": "Edm.String", "key": true},
    {"name": "content", "type": "Edm.String", "searchable": true},
    {"name": "contentVector", "type": "Collection(Edm.Single)", "dimensions": 1536, "vectorSearchProfile": "vector-profile"}
  ],
  "vectorSearch": {
    "profiles": [
      {
        "name": "vector-profile",
        "algorithm": "hnsw-config"
      }
    ],
    "algorithms": [
      {
        "name": "hnsw-config",
        "kind": "hnsw",
        "hnswParameters": {"metric": "cosine", "m": 4, "efConstruction": 400}
      }
    ]
  }
}
```

---

## Arkitekturmønstre

### 1. Single Embedding Model (Standard)

**Beskrivelse:** Én embedding-modell for både indeksering av dokumenter og query embedding.

**Når bruke:**
- Generelle RAG-scenarioer (kunnskapsbase, FAQ, support)
- Engelsk eller primært engelsk innhold
- Modenhetsnivå: Grunnleggende til mellomliggende

**Fordeler:**
- Enkel å implementere og vedlikeholde
- Forutsigbar kostnad
- Garantert konsistens mellom query og dokumenter

**Ulemper:**
- Ikke optimalisert for spesifikke domener
- Suboptimal for multidomenescenarier (f.eks. juridisk + teknisk)

### 2. Domain-Specific Embeddings

**Beskrivelse:** Bruk av fine-tuned eller domene-spesifikke embeddings (f.eks. BioBERT for medisin, Legal-BERT for jus).

**Når bruke:**
- Høy tetthet av domene-spesifikk terminologi (jus, medisin, ingeniørfag)
- Kritisk at semantisk likhet fanger domeneforståelse (f.eks. "force majeure" vs "act of God")
- Modenhetsnivå: Avansert

**Fordeler:**
- Markant bedre retrieval-kvalitet i spesialiserte domener
- Reduserer behov for post-reranking

**Ulemper:**
- Høyere initielle kostnader (fine-tuning, custom hosting)
- Krever ekspertise for trening/validering

### 3. Multilingual Embeddings med Språkfiltrering

**Beskrivelse:** Bruk av multilingual embeddings (E5, mBERT) kombinert med metadata-filtrering på språk.

**Når bruke:**
- Dokumenter på flere språk (norsk, svensk, engelsk)
- Brukere forventer å søke på eget språk og få relevante treff på andre språk
- Modenhetsnivå: Mellomliggende til avansert

**Fordeler:**
- Én indeks for alle språk
- Cross-language retrieval mulig
- Lavere vedlikeholdskostnad enn separate indekser

**Ulemper:**
- Noe lavere kvalitet enn språk-spesifikke modeller
- Krever testing av språkparitet (engelsk får ofte bedre kvalitet)

---

## Beslutningsveiledning

### Velg embedding-modell basert på use case

| Scenario | Anbefalt modell | Begrunnelse |
|----------|-----------------|-------------|
| Generell RAG (engelsk) | **text-embedding-3-small** | Kostnadseffektiv, god kvalitet, rask |
| Kompleks domene (juridisk, teknisk) | **text-embedding-3-large** | Høyere dimensjonalitet fanger nyansert semantikk |
| Flerspråklig (norsk + engelsk + svensk) | **multilingual-e5-large** | Optimalisert for multilingual quality, lavere kostnad |
| Kostnadsoptimalisering (store volumer) | **text-embedding-3-small (512 dims)** | Redusert dimensjonalitet = mindre indeksstørrelse |
| Høy presisjon, kritisk applikasjon | **text-embedding-3-large (3072 dims)** + reranking | Maksimal semantisk dekning + post-processing |
| Domene-spesifikk terminologi | **Custom fine-tuned embeddings** | Treningsdata fra eget domene |

### Dimensjonalitet: Trade-offs

| Dimensjoner | Fordeler | Ulemper | Egnet for |
|-------------|----------|---------|-----------|
| **256-512** | Lavere kostnad, raskere søk, mindre storage | Lavere presisjon, vanskeligere å fange nyansert semantikk | FAQ, enkel klassifisering, kostnadsoptimalisering |
| **1024-1536** | God balanse mellom kvalitet og kostnad | Middels storage | Generell RAG, dokumentsøk |
| **3072** | Høyeste presisjon, fanger subtile semantiske forskjeller | Høyere kostnad, større indeks, tregere søk | Komplekse domener, kritiske applikasjoner |

**Tommelfingerregel:** Start med 1536 dimensjoner (text-embedding-3-small). Reduser til 512 hvis storage/kostnad er kritisk. Øk til 3072 hvis retrieval-kvalitet er utilstrekkelig.

### Vanlige feil og misforståelser

| Feil | Hvorfor det er problematisk | Riktig tilnærming |
|------|----------------------------|-------------------|
| **Bruke ada-002 i 2025-2026** | Dyrere og eldre enn text-embedding-3-small | Migrer til text-embedding-3-small |
| **Anta at høyere dimensjonalitet alltid er bedre** | Overhead i kostnad/storage uten målbar kvalitetsforbedring | Mål retrieval-kvalitet før du øker dimensjoner |
| **Gjenbruke generelle embeddings for juridisk innhold** | "Rettskraftig dom" og "endelig avgjørelse" feiltolkes | Vurder domene-spesifikk fine-tuning |
| **Blande embeddings fra ulike modeller i samme indeks** | Vektorer ikke sammenliknbare, retrieval feiler | Reindekser alle dokumenter ved modellendring |
| **Ikke teste multilingual paritet** | Engelsk får høy kvalitet, norsk får dårlig retrieval | Mål retrieval-kvalitet per språk, juster reranking |

### Røde flagg arkitekten bør se etter

- **"Vi indekserer 500 000 dokumenter med text-embedding-3-large (3072 dims)"** → Storage og kostnad blir enormt; vurder dimensjonsreduksjon
- **"Vi har norske juridiske dokumenter, bruker OpenAI embeddings uten reranking"** → Domene-spesifikk terminologi fanges dårlig; vurder custom embeddings eller Legal-BERT
- **"Vi har 10 språk i samme indeks, men søk på norsk gir dårlige resultater"** → Multilingual embeddings kan favorisere engelsk; test språkparitet
- **"Vi bytter fra ada-002 til text-embedding-3-small uten reindeksering"** → Gamle og nye vektorer ikke kompatible, retrieval feiler

---

## Integrasjon med Microsoft-stakken

### Azure OpenAI Service

```python
# Eksempel: Bruk av embeddings i Azure OpenAI
client = AzureOpenAI(azure_endpoint="https://YOUR_RESOURCE.openai.azure.com", api_version="2024-02-01")

embedding = client.embeddings.create(
    model="text-embedding-3-small",
    input="Hvordan integrere Azure AI Search med Copilot Studio?",
    dimensions=1536
)
```

### Azure AI Search (Integrated Vectorization)

Azure AI Search kan automatisk generere embeddings under indeksering via **skillsets**:

```json
{
  "skills": [
    {
      "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
      "name": "embedding-skill",
      "context": "/document/content",
      "resourceUri": "https://YOUR_RESOURCE.openai.azure.com",
      "deploymentId": "text-embedding-3-small",
      "modelName": "text-embedding-3-small",
      "dimensions": 1536,
      "inputs": [{"name": "text", "source": "/document/content"}],
      "outputs": [{"name": "embedding", "targetName": "contentVector"}]
    }
  ]
}
```

**Fordeler med integrated vectorization:**
- Automatisk embedding-generering under indeksering
- Ingen separat kode for embedding-pipeline
- Enklere reindeksering ved modellendring

### Copilot Studio og Power Platform

Copilot Studio kan kobles til Azure AI Search som **knowledge source**. Embeddings genereres automatisk når dokumenter lastes opp, men standardmodellen (typisk ada-002 eller text-embedding-3-small) kan ikke endres direkte i UI.

**Workaround for custom embeddings:**
1. Pre-generere embeddings eksternt
2. Lagre i Azure AI Search
3. Konfigurer Copilot Studio til å bruke eksisterende indeks

### Microsoft Agent Framework og Semantic Kernel

```csharp
// Semantic Kernel: Bruk av embeddings for memory
var embeddingGenerator = new AzureOpenAITextEmbeddingGenerationService(
    deploymentName: "text-embedding-3-small",
    endpoint: "https://YOUR_RESOURCE.openai.azure.com",
    apiKey: "YOUR_KEY"
);

var memoryBuilder = new MemoryBuilder();
memoryBuilder.WithAzureOpenAITextEmbeddingGeneration(embeddingGenerator);
var memory = memoryBuilder.Build();

await memory.SaveInformationAsync("facts", "Azure AI Foundry støtter prompt flow.", "fact-1");
var results = await memory.SearchAsync("facts", "Hva er Foundry?", limit: 3);
```

---

## Offentlig sektor (Norge)

### Datasuverenitet og residency

- **Azure OpenAI embeddings:** Data prosesseres i Azure-regionen du har deployed modellen (typisk West Europe, North Europe). No-logging policy for OpenAI API, men **ikke garantert for EU Data Boundary** (data kan krysse EU-grenser under inferens).
- **Multilingual E5 (Azure AI):** Hostet i Azure, kan konfigureres for EU-residency.
- **Custom embeddings (self-hosted):** Full kontroll, kan hostes i Azure Norway regions (anbefales for Høy/Kritisk data).

**Anbefaling for offentlig sektor:**
- **Lav/Middels risiko:** Azure OpenAI embeddings i West Europe OK (dokumenter offentlig informasjon)
- **Høy risiko:** Custom embeddings hostet i Azure Norway eller multilingual E5 med EU-residency

### GDPR og AI Act

- **Persondata i embeddings:** Hvis dokumenter inneholder persondata, **må embeddings behandles som persondata** (vektorer kan teoretisk brukes til re-identifikasjon via inversion attacks, selv om praktisk svært vanskelig).
- **Rettighet til sletting:** Embedding-vektorer må slettes ved brukerforespørsel (GDPR Art. 17). Azure AI Search støtter dokument-sletting, men ikke selektiv sletting av embeddings uten reindeksering.
- **AI Act (høyrisiko-systemer):** Hvis RAG brukes til automatiserte beslutninger (f.eks. tilskudd, klagesaksbehandling), må embedding-modellen dokumenteres (hvilken modell, treningsdata, bias-testing).

**Anbefaling:**
- Lagre metadata som kobler embedding-ID til dokument-ID for GDPR-sletting
- Dokumenter embedding-modell og versjon i systemdokumentasjon
- Test for bias i multilingual embeddings (engelsk vs norsk kvalitet)

### Forvaltningsloven og etterprøvbarhet

Offentlige vedtak må kunne etterprøves. Hvis RAG brukes til å hente grunnlagsdokumenter, må systemet logge:
- Hvilke dokumenter ble hentet (citation tracking)
- Hvilken embedding-modell genererte query-vektoren
- Score/relevans per dokument

**Implementering:**
```python
# Logging for etterprøvbarhet
search_result = search_client.search(
    search_text=None,
    vector_queries=[VectorizedQuery(vector=query_embedding, k_nearest_neighbors=5, fields="contentVector")],
    select=["id", "title", "content"]
)

for doc in search_result:
    log_entry = {
        "query": user_query,
        "embedding_model": "text-embedding-3-small",
        "document_id": doc["id"],
        "score": doc["@search.score"],
        "timestamp": datetime.utcnow()
    }
    logger.info(log_entry)
```

---

## Kostnad og lisensiering

### Prismodell (Azure OpenAI, per februar 2026)

| Modell | Pris per 1M tokens |
|--------|---------------------|
| text-embedding-ada-002 | $0.10 |
| text-embedding-3-small | $0.02 |
| text-embedding-3-large | $0.13 |

**Eksempel: Indeksering av 100 000 dokumenter (gjennomsnitt 1000 tokens per dokument)**
- **text-embedding-3-small:** 100M tokens × $0.02 / 1M = **$2**
- **text-embedding-3-large:** 100M tokens × $0.13 / 1M = **$13**

**Storage-kostnad (Azure AI Search):**
- **1536 dimensjoner:** Ca. 6 KB per vektor (inkl. overhead)
- **3072 dimensjoner:** Ca. 12 KB per vektor
- **100 000 dokumenter (1536 dims):** 600 MB → Basic tier OK
- **100 000 dokumenter (3072 dims):** 1.2 GB → Krever Standard tier

### Kostnadsoptimaliseringstips

1. **Bruk dimensjonsreduksjon (Matryoshka):**
   ```python
   response = client.embeddings.create(
       model="text-embedding-3-large",
       input="...",
       dimensions=1024  # Reduser fra 3072 til 1024
   )
   ```
   **Effekt:** 3x mindre storage, 2-3x raskere søk, marginalt tap av kvalitet (test først).

2. **Batch embedding-generering:**
   ```python
   # Send 100 dokumenter per API-kall (maks 8191 tokens totalt)
   response = client.embeddings.create(
       model="text-embedding-3-small",
       input=[doc1, doc2, ..., doc100]
   )
   ```
   **Effekt:** Lavere latency, samme kostnad per token.

3. **Cache query embeddings:**
   - Lagre embeddings for vanlige spørsmål (FAQ) i Redis/Azure Cache
   - Spare embedding-kostnad for repeterte queries

4. **Vurder multilingual E5 for flerspråklige scenarioer:**
   - Gratis i preview (per feb 2026)
   - Lavere kostnad når GA (forventet $0.01-0.03 per 1M tokens)

### Lisensiering

- **Azure OpenAI Service:** Krever Azure-abonnement, ingen separate lisenser for embedding-modeller
- **Azure AI Search:** Basic tier fra $75/mnd (1 GB storage), Standard S1 fra $250/mnd (25 GB storage)
- **Custom embeddings (self-hosted):** Ingen lisenskostnad utover compute (Azure ML, Kubernetes)

---

## For arkitekten (Cosmo)

### Nøkkelspørsmål til kunden

1. **Språk og geografi:**
   - "Hvilke språk skal systemet håndtere? Er norsk primærspråk eller sekundært?"
   - "Forventer brukere å søke på ett språk og få treff på andre språk?"

2. **Domene og terminologi:**
   - "Inneholder dokumentene domene-spesifikk terminologi (juridisk, medisinsk, teknisk)?"
   - "Har dere eksempler på spørsmål som ofte feiler i dagens søk?"

3. **Volum og kostnad:**
   - "Hvor mange dokumenter skal indekseres initialt? Hva er forventet vekst per år?"
   - "Hva er budsjett for embedding-generering og storage?"

4. **Kvalitet vs. kostnad:**
   - "Hva er viktigst: høyest mulig retrieval-kvalitet eller lavest mulig kostnad?"
   - "Er det OK med 10% lavere presisjon hvis vi halverer kostnadene?"

5. **Compliance og residency:**
   - "Inneholder dokumentene persondata eller sensitiv informasjon (GDPR)?"
   - "Er det krav om at data ikke forlater Norge/EU?"

6. **Eksisterende infrastruktur:**
   - "Bruker dere allerede Azure OpenAI? Hvilken modell?"
   - "Har dere kompetanse til å drifte custom embeddings (Azure ML, Kubernetes)?"

7. **Testing og validering:**
   - "Hvordan måler dere retrieval-kvalitet i dag? Har dere golden dataset?"
   - "Hva er akseptabel recall@5 / precision@5 for deres use case?"

8. **Multimodalitet:**
   - "Skal systemet håndtere bilder, tabeller eller kun tekst?"
   - "Trenger dere embeddings for metadata (tags, kategorier) i tillegg til innhold?"

### Vanlige fallgruver

| Fallgruve | Konsekvens | Hvordan unngå |
|-----------|------------|---------------|
| **Ikke teste retrieval-kvalitet før produksjon** | Dårlig brukeropplevelse, høy support-last | Opprett golden dataset (50-100 query-dokument-par), mål recall@5/precision@5 |
| **Blande embeddings fra ulike modeller** | Retrieval feiler fullstendig | Reindekser ALLE dokumenter ved modellendring |
| **Ignorere språkparitet i multilingual embeddings** | Norske queries gir dårlige resultater | Test retrieval-kvalitet per språk, juster reranking-vekter |
| **Overforenkle dimensjonalitetsvalg ("høyere er alltid bedre")** | Unødvendig høy kostnad og latency | Benchmark 512, 1536 og 3072 dimensjoner mot golden dataset |
| **Ikke dokumentere embedding-modell i systemdokumentasjon** | GDPR/AI Act compliance-problem | Logg modellnavn, versjon, treningsdata (hvis tilgjengelig) |

### Anbefalinger per modenhetsnivå

| Modenhetsnivå | Anbefaling | Begrunnelse |
|---------------|-----------|-------------|
| **Grunnleggende** (første RAG-prosjekt) | text-embedding-3-small (1536 dims), Azure AI Search integrated vectorization | Enklest å sette opp, lavest risiko, god kvalitet |
| **Mellomliggende** (har RAG i prod, vil optimalisere) | text-embedding-3-small (512 dims) + reranking | Kostnadsoptimalisering, bedre kvalitet via post-processing |
| **Avansert** (komplekse domener, multilingual) | text-embedding-3-large (1024-3072 dims) eller custom embeddings | Høyere presisjon, domene-spesifikk tuning |
| **Offentlig sektor (compliance-kritisk)** | Custom embeddings hostet i Azure Norway | Full kontroll over data residency og modell-dokumentasjon |

---

## Fine-tuning av embedding-modeller

### Hvorfor fine-tune?

General-purpose embedding-modeller (text-embedding-3) presterer godt på standardoppgaver, men kan underlevere på domenespesifikke termer, norsk fagspråk, eller spesialisert terminologi. Fine-tuning tilpasser embedding-modellen til kundens datadomene.

### Azure AI Foundry for embedding fine-tuning

Azure AI Foundry støtter fine-tuning av embedding-modeller via **Custom Models** (preview):

| Aspekt | Detaljer |
|--------|----------|
| **Støttede modeller** | text-embedding-3-small, text-embedding-3-large |
| **Treningsdata** | JSON Lines med query-document pairs |
| **Minimum samples** | 100 positive pairs (anbefalt 1000+) |
| **Output** | Fine-tuned deployment med egne dimensjoner |
| **Evaluering** | Recall@k, NDCG, MRR mot valideringssett |

### Treningsdata-format

```jsonl
{"query": "hva er regelverket for kunstig intelligens i norge", "document": "AI-forordningen (EU AI Act) trådte i kraft...", "label": 1}
{"query": "azure openai prising", "document": "Direktoratetets budsjett for 2025...", "label": 0}
```

**Tips for norsk/skandinavisk:**
- Inkluder norske fagtermer og forkortelser som positive pairs
- Bruk synonympar (f.eks. «KI» ↔ «kunstig intelligens», «AI» ↔ «maskinlæring»)
- Balancer bokmål og nynorsk om relevant

### Evaluering: Fine-tuned vs. General-purpose

| Metrikk | General-purpose | Fine-tuned | Typisk forbedring |
|---------|----------------|------------|-------------------|
| Recall@5 (domene) | 70-80% | 85-95% | +10-15 pp |
| Recall@5 (generell) | 85-90% | 80-88% | -2-5 pp (trade-off) |
| Norsk fagspråk precision | 60-75% | 80-92% | +15-20 pp |

**Viktig trade-off:** Fine-tuning forbedrer domene-retrieval men kan redusere generell kvalitet. Test alltid med et bredt evalueringssett.

### Beslutningsveiledning for fine-tuning

| Scenario | Fine-tune? | Begrunnelse |
|----------|-----------|-------------|
| Generell RAG, standard norsk | Nei | text-embedding-3-small er god nok |
| Domene-spesifikt fagspråk | Ja | Fagtermer mangler i general-purpose |
| Norsk offentlig sektor (forvaltning) | Vurder | Lovtekst og forvaltningstermer er spesifikke |
| Multilingual (norsk + engelsk) | Nei | text-embedding-3 håndterer multilingual godt |
| <500 treningsdokumenter | Nei | For lite data, bruk synonym maps i stedet |

### Alternativ: Domenespesifikk reranking

For teams som ikke har nok treningsdata for fine-tuning, er en domene-tilpasset **reranker** et enklere alternativ:
- Bruk general-purpose embeddings for retrieval (text-embedding-3)
- Tren en cross-encoder reranker på domenespesifikke query-document pairs
- Krever færre treningseksempler (50-100 pairs)

---

## Kilder og verifisering

### Primærkilder (Microsoft Learn)

- [Azure OpenAI Embeddings](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/embeddings) (Verified, feb 2026)
- [Azure AI Search Vector Search](https://learn.microsoft.com/en-us/azure/search/vector-search-overview) (Verified, feb 2026)
- [Integrated Vectorization in Azure AI Search](https://learn.microsoft.com/en-us/azure/search/vector-search-integrated-vectorization) (Verified, feb 2026)
- [Matryoshka Embeddings (OpenAI)](https://platform.openai.com/docs/guides/embeddings/embedding-models) (Baseline, referert i Azure docs)

### Sekundærkilder

- OpenAI Embeddings Pricing (Verified, https://azure.microsoft.com/en-us/pricing/details/cognitive-services/openai-service/)
- Multilingual E5 (Baseline, Microsoft Research paper, preview-status bekreftet via Azure AI docs)

### Konfidensnivå

- **Modellnavn, dimensjoner, pricing:** Verified (Azure offisiell dokumentasjon)
- **Multilingual E5 status:** Baseline (preview bekreftet, GA-priser antatt)
- **Custom embeddings:** Assumed (announced feature, detaljer fra early access docs)
- **GDPR/AI Act anbefalinger:** Verified (basert på EU-regelverk og Microsoft compliance-dokumentasjon)

---

**For Cosmo:** Bruk denne referansen når kunden nevner "embedding-problemer", "dårlig retrieval-kvalitet på norsk", "for høye Azure AI Search-kostnader" eller "vi vurderer å bytte embedding-modell". Start alltid med å kartlegge språk, domene og volum før du anbefaler modell. Test ALLTID retrieval-kvalitet med kundens egne data før produksjonsutrulling.
