# Document Intelligence - Custom Model Training

**Last updated:** 2026-02
**Status:** GA
**Category:** Azure AI Services (Foundry Tools)

---

## Introduksjon

Azure AI Document Intelligence tilbyr custom models som gjør det mulig å trene egne modeller på spesifikke dokumenttyper og forretningsprosesser. Custom models kommer i to varianter: **custom template** (strukturerte skjemaer med konsistent layout) og **custom neural** (strukturerte, semi-strukturerte og ustrukturerte dokumenter med varierende layout). Med v4.0 (GA) API-en har custom neural models fått støtte for signaturdeteksjon, overlappende felter, og tabell-/celle-konfidensscoring.

Custom models lar organisasjoner automatisere ekstraksjon av nøkkeldata fra dokumenter som ikke dekkes av prebuilt models, som interne skjemaer, kontrakter, spesialiserte fakturaer, og bransje-spesifikke dokumenter. Modellene trenes med labeled datasets (minimum 5 dokumenter for å komme i gang), og kan kombineres til composed models for å håndtere flere dokumentvarianter i ett endepunkt.

Document Intelligence Studio tilbyr en no-code opplevelse for labeling, trening og testing, mens REST API og SDKer gir full programmatisk kontroll. Custom neural models støtter nå opptil 50,000 siders treningsdata og kan trenes i opptil 10 timer (10 gratis timer per måned, deretter betalt trening).

## Kjernekomponenter / Nøkkelegenskaper

### Custom Model Types

| Type | Bruksområde | Treningstid | Dokumentstruktur |
|------|-------------|-------------|------------------|
| **Custom Template** | Skjemaer med konsistent layout (søknader, spørreskjemaer) | 1-5 minutter | Template-basert, krever identisk visuell struktur |
| **Custom Neural** | Dokumenter med varierende layout (W2-skjemaer, fakturaer fra ulike leverandører) | 30 min - 12 timer | Strukturert, semi-strukturert, ustrukturert |

### Ekstraksjonskapabiliteter

| Funksjon | Custom Template | Custom Neural | v4.0 GA Features |
|----------|-----------------|---------------|------------------|
| Key-value pairs | ✔ | ✔ | |
| Selection marks | ✔ | ✔ | |
| Tabeller (tabular fields) | ✔ | ✔ | Tabell/rad/celle-konfidensscoring |
| Signaturdeteksjon | ✔ | ✔ | Signaturfelter (min. 5 samples) |
| Region labeling | ✔ | ✔ (bruker Layout API-resultater) | |
| Overlappende felter | ❌ | ✔ | Complete/partial overlap støtte |

### Treningskrav (Input Requirements)

| Kategori | Template Model | Neural Model |
|----------|----------------|--------------|
| **Minimum dokumenter** | 5 | 5 |
| **Maks treningssider** | 500 | 50,000 |
| **Maks treningsstørrelse** | 50 MB | 1 GB |
| **Filformater** | PDF, JPEG/JPG, PNG, BMP, TIFF, HEIF | PDF, JPEG/JPG, PNG, BMP, TIFF, HEIF |
| **Maks sider per dokument** | 2,000 (F0: 2 sider) | 2,000 (F0: 2 sider) |
| **Maks filstørrelse (analyse)** | S0: 500 MB, F0: 4 MB | S0: 500 MB, F0: 4 MB |
| **Bilde-dimensjoner** | 50×50 til 10,000×10,000 px | 50×50 til 10,000×10,000 px |

### Treningsbudsjett og Kostnader

```json
// v4.0 2024-11-30 (GA) - Paid Training Support
POST https://{endpoint}/documentintelligence/documentModels:build?api-version=2024-11-30
{
  "modelId": "invoice-extractor-v2",
  "description": "Invoice extraction with 10h training",
  "buildMode": "neural",
  "maxTrainingHours": 10,
  "azureBlobSource": {
    "containerUrl": "<SAS-URL>",
    "prefix": "invoices/training/"
  }
}
```

| API-versjon | Gratis treningsbudsjett | Maks treningslengde | Billing |
|-------------|------------------------|---------------------|---------|
| v4.0 (2024-11-30) | 10 timer/måned | 10 timer per build | Faktisk tid brukt (min. 30 min per jobb) |
| v3.1/v3.0 | 20 byggeoperasjoner/måned | 30 minutter per build | Ingen ekstra kostnad (innenfor kvote) |

**Viktig:** Betalt trening i v4.0 krever at `maxTrainingHours` settes eksplisitt. API-kall uten budsjett vil feile hvis du ber om mer enn 10 timer.

### Composed Models

Kombiner opptil 200 custom models til én modell-ID. Document Intelligence klassifiserer automatisk dokumentet og velger best match model.

```python
# Python SDK - Compose Models
from azure.ai.documentintelligence import DocumentIntelligenceAdministrationClient

admin_client = DocumentIntelligenceAdministrationClient(endpoint, credential)

poller = admin_client.begin_compose_model(
    compose_request={
        "modelId": "invoice-master-v1",
        "description": "All invoice variants",
        "componentModels": [
            {"modelId": "invoice-vendor-a"},
            {"modelId": "invoice-vendor-b"},
            {"modelId": "invoice-vendor-c"}
        ]
    }
)
composed_model = poller.result()
```

## Arkitekturmønstre

### Mønster 1: Single Custom Neural Model (Recommended Start)

**Bruk når:** Dokumenter har samme informasjon, men varierende layout.

**Fordeler:**
- Generaliserer på tvers av formater (én modell for alle W2-varianter fra ulike selskaper)
- Enklere vedlikehold (én modell å oppdatere)
- Lavere latens (ingen klassifiseringsoverhead)

**Ulemper:**
- Kan kreve mer treningsdata (minst 5 samples per variant)
- Treningstid 30 min - 12 timer (vs. 1-5 min for template)

**Implementering:**
1. Samle 5+ samples per dokumentvariant
2. Label alle felter i Document Intelligence Studio
3. Tren med `buildMode: "neural"`
4. Test med dokumenter fra alle varianter

```python
# Label contiguous values - VIKTIG for neural models
# ❌ FEIL: "Supplier ID: ABC123" lablet som ett felt
# ✔ RIKTIG: Kun "ABC123" lablet (uten key)
```

### Mønster 2: Custom Template + Composed Model

**Bruk når:** Dokumenter har konsistent layout per type, men flere dokumenttyper i samme prosess.

**Fordeler:**
- Rask trening (1-5 min per modell)
- Høy presisjon for strukturerte skjemaer
- Enkel å debugge (én template per format)

**Ulemper:**
- Krever én modell per layoutvariant
- Ikke robust mot layoutendringer
- Maks 200 component models per composed model

**Implementering:**
1. Tren separate template models for hver layoutvariant
2. Compose models til én modell-ID
3. Document Intelligence klassifiserer automatisk ved analyse

```bash
# REST API - Build Template Model
POST https://{endpoint}/documentintelligence/documentModels:build?api-version=2024-11-30
{
  "modelId": "po-template-vendor-a",
  "buildMode": "template",
  "azureBlobSource": {
    "containerUrl": "<SAS>",
    "prefix": "vendor-a/"
  }
}
```

### Mønster 3: Custom Classifier + Custom Extraction

**Bruk når:** Multi-dokument filer (én PDF med flere dokumenttyper) eller behov for å splitte dokumenter før ekstraksjon.

**Fordeler:**
- Automatisk dokumenttype-identifikasjon
- Støtter splitting (én file → mange dokumenter)
- Office-format støtte (DOCX, XLSX, PPTX) i v4.0

**Ulemper:**
- To-trinns prosess (klassifiser → ekstraher)
- Ekstra latens og kostnader
- Krever egen treningsdata for classifier

**Implementering:**
1. Tren custom classification model (min. 5 samples per klasse)
2. Tren custom extraction models for hver dokumenttype
3. Pipeline: Classify → Extract med riktig modell

## Beslutningsveiledning

### Velge mellom Template og Neural

| Scenario | Anbefaling | Begrunnelse |
|----------|-----------|--------------|
| Interne skjemaer (søknader, timesheet) | **Template** | Konsistent layout, rask trening, lavere kostnad |
| Fakturaer fra mange leverandører | **Neural** | Varierende layout, én modell for alle |
| Kontrakter (varierende struktur) | **Neural** | Semi-strukturert, ingen fast template |
| Spørreskjemaer (standardisert PDF) | **Template** | Identisk layout, høy presisjon |
| W2-skjemaer (USA tax forms) | **Neural** | Samme info, ulike selskaper = ulike layouts |

### Vanlige feil og fallgruver

| Problem | Årsak | Løsning |
|---------|-------|---------|
| Lav accuracy (<80%) | For lite treningsdata | Øk til 10-15 samples, inkluder variasjoner |
| Modellen finner ikke felt | Field ikke lablet konsistent | Bruk samme field-navn på tvers av dokumenter |
| "Region overlaps other field" error | Overlappende labels i Studio | Bruk **region labeling** (ikke field selection) for overlaps |
| Trening feiler etter 30 min | v3.x API-begrensning | Oppgrader til v4.0 eller reduser datasett |
| Tabelldata ikke ekstrahert | Tabell ikke lablet som tabular field | Label tabell med Table-type (ikke individuelle celler) |

### Røde flagg (When NOT to use Custom Models)

| Red Flag | Alternativ |
|----------|-----------|
| Dokumentet dekkes av prebuilt model (faktura, kvittering, ID-kort) | Bruk prebuilt models (lavere kostnad, ingen trening) |
| Under 5 samples tilgjengelig | Vent til du har mer data, eller bruk prebuilt → custom hybrid |
| Ekstrem layoutvariasjon (100+ unique formats) | Vurder GPT-4o/GPT-4 Turbo multimodal extraction |
| Real-time krav (<1 sek responstid) | Custom models har 5-15 sek latens (avhengig av dokumentstørrelse) |

## Integrasjon med Microsoft-stakken

### Azure AI Foundry (tidligere Azure ML)

```python
# Deploy custom model i AI Foundry project
from azure.ai.ml import MLClient
from azure.ai.ml.entities import ManagedOnlineEndpoint, ManagedOnlineDeployment

ml_client = MLClient.from_config()

# Custom model trained i Document Intelligence
model_id = "invoice-extractor-v2"

# Deploy til managed endpoint
endpoint = ManagedOnlineEndpoint(
    name="invoice-extraction",
    auth_mode="key"
)
ml_client.begin_create_or_update(endpoint).result()
```

### Power Automate + AI Builder

AI Builder's **Document Processing** lar deg bruke custom models direkte i Power Automate flows:

1. I AI Builder: **Use a Custom Model** → Import Document Intelligence model-ID
2. I Power Automate: **Process and save information from documents** → Velg custom model
3. Map ekstraherte felter til SharePoint/Dataverse/CRM

**Begrensning:** AI Builder custom models støtter kun **template models**, ikke neural (per januar 2026).

### Microsoft Graph + Document Intelligence

```csharp
// Analyser OneDrive/SharePoint-dokument med custom model
var graphClient = new GraphServiceClient(authProvider);
var driveItem = await graphClient.Me.Drive.Items["{item-id}"].Request().GetAsync();

using var stream = await graphClient.Me.Drive.Items["{item-id}"].Content.Request().GetAsync();

var docClient = new DocumentIntelligenceClient(new Uri(endpoint), new AzureKeyCredential(key));
var operation = await docClient.AnalyzeDocumentAsync(
    WaitUntil.Completed,
    "invoice-extractor-v2",
    new AnalyzeDocumentContent { BytesSource = BinaryData.FromStream(stream) }
);
```

### Semantic Kernel Integration

```csharp
// Custom model som Semantic Kernel plugin
public class InvoiceExtractionPlugin
{
    [SKFunction, Description("Extract invoice fields from document")]
    public async Task<string> ExtractInvoiceAsync(
        [Description("Document URL or base64")] string document,
        SKContext context)
    {
        var client = new DocumentIntelligenceClient(endpoint, credential);
        var result = await client.AnalyzeDocumentFromUriAsync(
            WaitUntil.Completed,
            "invoice-extractor-v2",
            new Uri(document)
        );

        return JsonSerializer.Serialize(result.Value.Documents[0].Fields);
    }
}
```

## Offentlig sektor (Norge)

### GDPR og Datasuverenitet

| Aspekt | Vurdering | Anbefaling |
|--------|-----------|------------|
| **Treningsdata lokasjon** | Azure Blob Storage kan være i Norge (Norway East) | Bruk Norway East for treningsdata og modeller |
| **Modell hosting** | Custom models lagres i regionen hvor de trenes | Tren i Norway East for å sikre datasuverenitet |
| **Inferens (analyse)** | API-kall kan rutes til nærmeste region | Spesifiser Norway East-endpoint eksplisitt |
| **Model copy** | Modeller kan kopieres til andre regioner | Begrens kopiering til EU/EEA-regioner |

**Neural Model Region Support:** Custom neural models kan KUN trenes i utvalgte regioner (inkl. West Europe, ikke Norway East). Løsning:
1. Tren modell i **West Europe** (EU-region, GDPR-compliant)
2. Kopier modell til **Norway East** for produksjon
3. Analyser dokumenter med Norway East-endpoint

```python
# Copy model fra West Europe til Norway East
target_client = DocumentIntelligenceAdministrationClient(
    endpoint="https://<norway-resource>.cognitiveservices.azure.com",
    credential=AzureKeyCredential(norway_key)
)

copy_auth = target_client.get_copy_authorization(
    model_id="invoice-model-norway",
    description="Production model in Norway"
)

source_client.begin_copy_model_to(
    model_id="invoice-model-westeu",
    target=copy_auth
)
```

### AI Act (EU) Compliance

Custom models klassifiseres som **"limited risk"** AI-system (ikke høyrisiko) hvis de brukes til:
- Dokumentautomatisering (fakturahåndtering, arkivering)
- Intern prosesseffektivisering

**Høyrisiko-klassifisering** (krever konformitetsvurdering) hvis brukt til:
- Automatiske avgjørelser som påvirker rettigheter (trygdeytelser, lånesøknader)
- Sikkerhets-kritiske prosesser (politietterforskning, grensekontroll)

**Anbefalinger for offentlig sektor:**
- Dokumenter modellens treningsdata (datasett-karakteristikk, labeling-prosess)
- Logg model accuracy og confidence scores per dokument
- Implementer human-in-the-loop for lav confidence (<0.8)
- Oppretthold audit trail (hvilken modell-versjon ble brukt for hver analyse)

### Forvaltningsloven § 11 (Innsyn)

Innbyggere har rett til innsyn i dokumenter som omhandler dem. Custom models må:
1. **Bevare original** - Lagre både original dokument OG ekstraherte data
2. **Audit trail** - Logg hvilken modell-versjon som analyserte dokumentet
3. **Manual review** - Tilby mulighet for manuell gjennomgang ved lav confidence

### Schrems II (Data Transfers)

**Problem:** Microsoft kan i teorien få ordre fra amerikanske myndigheter om innsyn i data.

**Mitigering:**
1. Bruk **EU Data Boundary** (alle tjenester i EU-regioner)
2. Krypter sensitive felter før opplasting til Azure Blob Storage
3. Vurder **customer-managed keys** (CMK) for encryption at rest
4. Implementer data retention policies (slett treningsdata etter modell-trening)

## Kostnad og lisensiering

### Prismodell (per februar 2026)

| Operasjon | Kostnad (approx.) | Enhet |
|-----------|-------------------|-------|
| **Trening (v4.0)** | Gratis: 10 timer/mnd<br>Betalt: ~$1.50/time | Per time faktisk treningstid (min. 30 min) |
| **Trening (v3.x)** | Gratis: 20 builds/mnd<br>Betalt: N/A (ikke støttet) | Per build (maks 30 min) |
| **Analyse (S0)** | ~$1.50 per 1000 sider | Per side analysert |
| **Lagring (modeller)** | Gratis | Modeller lagres i 90 dager uten kostnad |
| **Blob Storage** | Standard blob-priser | ~$0.02/GB/måned (LRS, hot tier) |

### Total Cost of Ownership (TCO) Scenario

**Case:** 10,000 fakturaer/måned, 2 siders gjennomsnitt

| Komponent | Beregning | Kostnad/mnd |
|-----------|-----------|-------------|
| Initial trening (v4.0, 5 timer) | Gratis (innenfor 10t kvote) | $0 |
| Re-trening (månedlig, 2 timer) | Gratis (innenfor 10t kvote) | $0 |
| Analyse (20,000 sider) | 20 × $1.50 | $30 |
| Blob Storage (100 GB treningsdata) | 100 × $0.02 | $2 |
| **Total** | | **$32/mnd** |

**Sammenlignet med manuell prosessering:**
- Manuell tid: 10,000 fakturaer × 2 min = 333 timer
- Kostnad (ved $30/time): $10,000/mnd
- **ROI:** 312x kostnadsinnsparning

### Optimaliseringstips

1. **Bruk prebuilt models først** - Custom models kun for unike behov
2. **Batch processing** - Reduser API-kall ved å analysere flere dokumenter i én operasjon (opptil 2000 sider)
3. **Caching** - Lagre results for identiske dokumenter (sjekk hash før analyse)
4. **Model lifecycle** - Re-tren kun når accuracy faller (ikke på fast schedule)
5. **Free tier testing** - Bruk F0 tier for utvikling/testing (4 MB limit, 2 sider)

## For arkitekten (Cosmo)

### Spørsmål å stille klienten

1. **Dokumentvariasjoner:** "Har fakturaene/dokumentene konsistent layout, eller varierer strukturen mellom leverandører/avdelinger?"
2. **Volum og frekvens:** "Hvor mange dokumenter analyserer dere per måned, og hva er topp-belastningen?"
3. **Eksisterende prosess:** "Hvordan håndteres dokumentene i dag - manuell registrering, OCR, eller ingen prosess?"
4. **Data retention:** "Hvor lenge må treningsdata og analyserte dokumenter lagres for compliance?"
5. **Accuracy-krav:** "Hva er akseptabelt feilnivå? Kan dere akseptere 5% feilrate med manuell review, eller kreves 99%+ accuracy?"
6. **Real-time vs batch:** "Må dokumenter analyseres umiddelbart (real-time), eller kan de prosesseres i batch?"
7. **Integration:** "Skal resultatene integreres med eksisterende systemer (ERP, CRM, SharePoint)? Hvilke?"
8. **Sensitive data:** "Inneholder dokumentene personopplysninger eller forretningshemmeligheter som krever ekstra sikkerhet?"

### Fallgruver og røde flagg

| Fallgruve | Symptom | Forebygging |
|-----------|---------|-------------|
| **Under-labeled dataset** | Model accuracy <70% | Krev minst 10-15 samples, ikke 5 minimum |
| **Inconsistent labeling** | Felt funnet i noen docs, ikke andre | Bruk samme field-navn, label ALLE samples |
| **Template for neural use case** | Model feiler på nye layoutvarianter | Start med neural hvis layoutvariasjon er kjent |
| **Neural for template use case** | Unødvendig lang treningstid (30 min vs 2 min) | Bruk template hvis layout ER konsistent |
| **No validation dataset** | Ingen måte å verifisere accuracy | Del dataset 80/20 (training/testing) |
| **Over-fitting** | Perfekt på treningsdata, dårlig på nye docs | Bruk diverse samples (ulike leverandører, datoer, beløp) |

### Anbefalinger per modenhetsnivå

#### Nivå 1: Proof of Concept (1-2 uker)
- **Mål:** Verifiser at custom model løser use case
- **Approach:** Document Intelligence Studio (no-code)
- **Dataset:** 5-10 representative samples
- **Model:** Custom neural (mest generell)
- **Success criteria:** >80% accuracy på test-set

#### Nivå 2: Pilot (1-2 måneder)
- **Mål:** Produksjonsklar løsning for én dokumenttype
- **Approach:** REST API + Azure Functions/Logic Apps
- **Dataset:** 20-50 samples med variasjoner
- **Model:** Template eller neural basert på POC-læring
- **Success criteria:** >90% accuracy, <10 sek latens, human-in-the-loop for <0.8 confidence

#### Nivå 3: Enterprise Scale (3-6 måneder)
- **Mål:** Multi-dokument pipeline med CI/CD
- **Approach:** SDK + Azure DevOps + monitoring
- **Dataset:** 100+ samples per dokumenttype, continuous learning
- **Model:** Composed models + custom classifier
- **Success criteria:** >95% accuracy, auto-retry logic, model versioning, A/B testing

**Arkitekturbeslutninger for scale:**
- **Model registry** - Azure Container Registry for model artifacts
- **Feature store** - Lagre ekstraherte felter i Cosmos DB/SQL for downstream analytics
- **Monitoring** - Application Insights custom metrics (accuracy per document type, confidence distribution)
- **Retraining pipeline** - Automatisk re-trening når accuracy faller under threshold

## Kilder og verifisering

### Microsoft Learn URLs (Verified via MCP)

1. **Custom Neural Model** - https://learn.microsoft.com/en-us/azure/ai-services/document-intelligence/train/custom-neural?view=doc-intel-4.0.0 (Verified: 2026-02)
2. **Custom Model Overview** - https://learn.microsoft.com/en-us/azure/ai-services/document-intelligence/train/custom-model?view=doc-intel-4.0.0 (Verified: 2026-02)
3. **Build Custom Model Guide** - https://learn.microsoft.com/en-us/azure/ai-services/document-intelligence/how-to-guides/build-a-custom-model?view=doc-intel-4.0.0 (Verified: 2026-02)
4. **Custom Template Model** - https://learn.microsoft.com/en-us/azure/ai-services/document-intelligence/train/custom-template?view=doc-intel-4.0.0 (Verified: 2026-02)
5. **Composed Models** - https://learn.microsoft.com/en-us/azure/ai-services/document-intelligence/how-to-guides/compose-custom-models?view=doc-intel-4.0.0 (Verified: 2026-02)
6. **Custom Classifier** - https://learn.microsoft.com/en-us/azure/ai-services/document-intelligence/train/custom-classifier?view=doc-intel-4.0.0 (Verified: 2026-02)

### Konfidensnivå per seksjon

| Seksjon | Konfidensgrunnlag | Merknad |
|---------|-------------------|---------|
| Introduksjon | **Verified** | MCP-basert, offisiell docs |
| Kjernekomponenter | **Verified** | Tabeller fra Microsoft Learn |
| Arkitekturmønstre | **Baseline + Expert** | Best practices fra mønster-analyse |
| Beslutningsveiledning | **Expert** | Basert på praktisk erfaring (supplerer docs) |
| Integrasjon Microsoft-stakken | **Baseline** | SDK-eksempler fra MCP, noen hybridscenarier er inferert |
| Offentlig sektor | **Expert** | GDPR/AI Act-analyse er fortolkning av regelverk |
| Kostnad og lisensiering | **Verified (pricing)** + **Expert (TCO)** | Offisiell pricing, ROI-scenarioer er eksempler |
| For arkitekten | **Expert** | Rådgivende innhold basert på Cosmo-persona |

**Disclaimer:** Priser er omtrentlige og kan variere per region og enterprise-avtaler. Valider mot Azure Pricing Calculator før budsjettbeslutninger.
