# Language Services - Text Analytics for Sentiment and Key Phrases

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

---

## Introduksjon

Azure AI Language er en samling av forhåndsopplærte språkmodeller som gjør det mulig å utføre avansert tekstanalyse uten å bygge egne maskinlæringsmodeller. Tjenesten tilbyr flere kjernekapabiliteter for text analytics: **Sentiment Analysis** (med opinion mining), **Key Phrase Extraction**, **Named Entity Recognition (NER)**, og **Language Detection**.

Disse kapabilitetene er tilgjengelige både som cloud-baserte REST API-er, SDK-er (C#, Java, Python, JavaScript), og Docker-containere for on-premises deployment. Tjenesten integreres sømløst med Azure AI Foundry, Azure Synapse Analytics, Power BI, og Microsoft Fabric, noe som gjør den egnet for både interactive playgrounds og produksjonsworkflows.

Text analytics-funksjonene er stateless — ingen data lagres i kontoen din, og resultater returneres umiddelbart etter analyse. For batch-operasjoner er resultatene tilgjengelige i 24 timer før de slettes automatisk. Tjenesten støtter 94+ språk for key phrase extraction, med bred språkstøtte også for sentiment analysis og NER.

---

## Kjernekomponenter / Nøkkelegenskaper

### Sentiment Analysis

Analyserer tekst og returnerer sentiment labels (`positive`, `negative`, `neutral`, `mixed`) med confidence scores (0–1) på både setnings- og dokumentnivå.

| Funksjonalitet | Beskrivelse |
|----------------|-------------|
| **Sentiment labels** | Positive, negative, neutral (setningsnivå); mixed tilgjengelig på dokumentnivå |
| **Confidence scores** | 0.0–1.0 per label (summer alltid til 1.0) |
| **Opinion Mining** | Identifiserer target-aspect (substantiv/verb) og tilhørende assessment (adjektiv) |
| **Beste use case** | Små tekstblokker (høyere kvalitet enn store) |
| **Språkstøtte** | [Omfattende liste](https://learn.microsoft.com/en-us/azure/ai-services/language-service/sentiment-opinion-mining/language-support) inkl. norsk |

**Eksempel (Opinion Mining):**
```
Input: "The room was great, but the staff was unfriendly."
Output:
- Target: "room" → Assessment: "great" (positive)
- Target: "staff" → Assessment: "unfriendly" (negative)
- Document sentiment: mixed
```

### Key Phrase Extraction

Evaluerer ustrukturert tekst og returnerer en liste over viktigste key phrases.

| Funksjonalitet | Beskrivelse |
|----------------|-------------|
| **Input-optimalisering** | Fungerer best på **større tekstblokker** (motsatt av sentiment) |
| **Output** | Liste med key phrases, sortert av modellens interne ranking |
| **Språkstøtte** | 94 språk (inkl. norsk, samisk, finsk, svensk, dansk) |
| **Use case** | Rask identifikasjon av hovedpoeng i dokumentsamlinger |

**Eksempel:**
```
Input: "Dr. Smith has a very modern medical office, and she has great staff."
Output: ["modern medical office", "Dr. Smith", "great staff"]
```

### Named Entity Recognition (NER)

Identifiserer og kategoriserer entities i tekst (person, lokasjon, organisasjon, dato, etc.).

| Entity-kategori | Typer (eksempler) |
|-----------------|-------------------|
| **Person** | Person, PersonType (rolle) |
| **Organization** | Organization, OrganizationMedical, OrganizationSports, OrganizationStockExchange |
| **Location** | City, CountryRegion, State, GPE (geopolitical entity), Airport, Continent |
| **DateTime** | Date, Time, DateRange, TimeRange, Duration, Set |
| **Quantity** | Number, Percentage, Currency, Age, Temperature, Speed, Weight, Volume, Area, Length |
| **Event** | Event, NaturalEvent, CulturalEvent, SportsEvent |
| **Contact** | Email, PhoneNumber, URL, IpAddress, Address |
| **Product** | Product, ComputingProduct |
| **Other** | Skill, Information |

**Metadata-resolutionsupport:** Mange quantity-entities returnerer strukturert metadata (f.eks. Currency → ISO-kode, normalized verdi).

### Language Detection

Evaluerer tekst og returnerer språk-identifier (ISO 639-1) med confidence score (0.0–1.0).

| Funksjonalitet | Beskrivelse |
|----------------|-------------|
| **Output** | Language name, ISO 6391 code, confidence score |
| **Use case** | Automatisk språkdeteksjon for content stores med mixed-language data |
| **Default** | Engelsk hvis ikke spesifisert |

---

## Arkitekturmønstre

### Mønster 1: REST API med Fabric/Synapse (Batch Processing)

**Use case:** Prosesser store volumer av dokumenter fra data lake (f.eks. kundefeedback, supporttickets).

**Fordeler:**
- Sømløs integrasjon med Azure Storage og Azure AI Search
- SynapseML gir Spark-optimalisert batch processing
- Built-in authentication via Fabric workspace credentials

**Ulemper:**
- Krever Spark-kompetanse for SynapseML
- Batch-mode medfører latency (ikke real-time)

**Eksempel (Fabric REST API):**
```python
# Auto-authenticated via Fabric
payload = {
    "kind": "SentimentAnalysis",
    "parameters": {"modelVersion": "latest", "opinionMining": "True"},
    "analysisInput": {"documents": [{"id": "1", "language": "en", "text": "..."}]}
}
response = requests.post(service_url, json=payload, headers=auth_headers)
```

### Mønster 2: SDK-basert integrasjon (Client Library)

**Use case:** Real-time tekstanalyse i web/mobile apps, chatbots, eller Power Apps.

**Fordeler:**
- Typed responses (C#, Java) reduserer parsing-bugs
- Async support for skalerbare apps
- Enklere feilhåndtering enn raw REST

**Ulemper:**
- SDK versioning (må holde tritt med API-versjoner)
- Større binary footprint enn REST

**Eksempel (C# SDK):**
```csharp
var client = new TextAnalyticsClient(endpoint, new AzureKeyCredential(key));
var response = await client.AnalyzeSentimentAsync("The service was excellent!");
Console.WriteLine($"Sentiment: {response.Value.Sentiment}");
```

### Mønster 3: Docker Container (On-Premises)

**Use case:** Compliance-krav som krever data residency i Norge, eller air-gapped environments.

**Fordeler:**
- Full datakontroll (ingen data sendes til cloud)
- Lav latency (lokal processing)
- Støtter Sentiment, Language Detection, Key Phrase, Custom NER, Text Analytics for Health

**Ulemper:**
- Krever egne compute-ressurser (CPU/minne)
- Ingen automatiske modelloppdateringer (må manuelt oppdatere container images)
- Free F0 tier støttes ikke (kun Standard S tier)

---

## Beslutningsveiledning

### Når bruke Sentiment Analysis vs. Opinion Mining

| Scenario | Anbefaling |
|----------|-----------|
| Trenger kun overordnet positive/negative/neutral? | **Sentiment Analysis** (uten opinion mining-flag) |
| Må identifisere *hva* kunder liker/misliker? | **Opinion Mining** (sett `opinionMining=true`) |
| Analyserer produktanmeldelser med attributter? | **Opinion Mining** (target = produkt-feature, assessment = vurdering) |

### Vanlige feil

| Feil | Løsning |
|------|---------|
| Lav kvalitet på sentiment for lange dokumenter | Del opp tekst i mindre chunks (maks 5000 tegn per record) |
| Key phrases mangler kontekst | Gi større tekstblokker (key phrase fungerer bedre på større input enn sentiment) |
| NER feiltolker domene-spesifikke entities | Vurder Custom NER (trener egen modell på dine data) |
| Mixed sentiment når både positive og negative setninger | Dette er forventet — bruk Opinion Mining for granularitet |

### Røde flagg

- **Ikke bruk** for medisinsk diagnostikk (selv om Text Analytics for Health finnes — krever spesialistkompetanse)
- **Ikke bruk** for PII-deteksjon i produksjon uten også å enable [PII Detection feature](https://learn.microsoft.com/en-us/azure/ai-services/language-service/personally-identifiable-information/overview)
- **Ikke bruk** default English language hvis du vet teksten er på andre språk (spesifiser `language` parameter)

### Beslutningstabell: SDK vs. REST vs. Container

| Krav | SDK | REST API | Container |
|------|-----|----------|-----------|
| Real-time app-integrasjon | ✅ Beste valg | ⚠️ Fungerer, mer boilerplate | ❌ Overkill |
| Batch processing (millioner dokumenter) | ⚠️ Mulig, men batch APIs bedre | ✅ Med SynapseML | ⚠️ Infrastruktur-overhead |
| Data residency krav (Norge) | ❌ Må bruke EU-regioner | ❌ Må bruke EU-regioner | ✅ Full kontroll |
| Lavest kostnads-overhead | ✅ Pay-per-call | ✅ Pay-per-call | ⚠️ Egen infrastruktur |

---

## Integrasjon med Microsoft-stakken

### Azure AI Foundry

Language Services er integrert i Foundry Playground med visuell testing av sentiment, key phrases, og NER uten kode.

**Workflow:**
1. Opprett Language resource i Foundry
2. Velg "Analyze sentiment" eller "Key phrase extraction" fra banneret
3. Lim inn tekst, velg API-versjon, språk, og kjør
4. Se resultater med confidence scores og opinion mining-targets

### Power BI

Power BI Desktop kan integrere direkte med Key Phrase Extraction via Power Query custom functions.

**Use case:** Analyser kundefeedback fra Excel/CSV, visualiser key phrases som word cloud.

**Tutorial:** [Extract key phrases from Power BI](https://learn.microsoft.com/en-us/azure/ai-services/language-service/key-phrase-extraction/tutorials/integrate-power-bi)

### Azure Synapse Analytics / Microsoft Fabric

SynapseML (tidligere MMLSpark) gir native Spark support for Language Services.

**Fordeler:**
- Batch processing av DataFrames
- Auto-authentication i Fabric notebooks (ingen API keys nødvendig)
- Sømløs integrasjon med lakehouse data

**Eksempel (SynapseML for Key Phrases):**
```python
from synapse.ml.cognitive.language import AnalyzeText

model = AnalyzeText().setTextCol("text").setKind("KeyPhraseExtraction")
result = model.transform(df).select("text", "keyPhrases")
```

### Copilot Studio

Language Services kan brukes i custom Copilot Studio skills for å analysere brukersentiment i conversations før routing til riktig agent.

**Use case:** Automatisk eskaler negative sentiment til human agent, neutral til FAQ bot.

### Azure Cognitive Search

Language Services entities kan indekseres i Azure AI Search som facets, noe som muliggjør entity-basert search filtering (f.eks. "finn dokumenter om Microsoft som organisasjon").

---

## Offentlig sektor (Norge)

### GDPR og Schrems II

| Risiko | Mitigering |
|--------|-----------|
| Data sendes til Azure EU-regioner (Vest-Europa, Nord-Europa) | ✅ Bruk EU-regioner for Language resource |
| Potensielle concerns om US Cloud Act | ✅ Bruk Docker containers on-premises for følsom data |
| PII i tekst (personnummer, navn, e-post) | ✅ Anonymiser først, eller bruk PII Detection-feature |
| Data retention i 24 timer (batch mode) | ✅ Synkron modus lagrer ikke data (stateless) |

### AI Act (EU)

Language Services klassifiseres som **lav-risiko AI** (ikke høyrisiko) så lenge det ikke brukes til:
- Biometric identification
- Critical infrastructure
- Law enforcement (uten human oversight)

**Krav:**
- Dokumenter hvordan sentiment/entity detection brukes
- Vurder bias (trent på hovedsakelig engelske datasett, kan være mindre nøyaktig for norsk)

### Forvaltningsloven og transparens

Ved bruk i saksbehandling:
- **Ikke la sentiment score alene avgjøre saker** (kun som beslutningsstøtte)
- **Logg alle analyser** (hvem, hva, når, resultat) for etterprøvbarhet
- **Informer brukere** hvis deres tekst analyseres (f.eks. feedback-forms)

### Datasuverenitet

**Azure Norway datacenters** (Oslo, Stavanger) støtter ikke Language Services per 2026-02. Nærmeste regioner:
- **West Europe** (Nederland)
- **North Europe** (Irland)

For full datasuverenitet: **Bruk Docker containers** (Sentiment, Language Detection, Key Phrase, Custom NER) hosted i Norge.

---

## Kostnad og lisensiering

### Prismodell (Azure Language)

Language Services bruker **pay-per-call** modell (per text record).

| Tier | Pris per 1000 text records | Bruksscenario |
|------|----------------------------|---------------|
| **Free F0** | 0 NOK (5000 gratis/måned) | Testing, POC, lav-volum apps |
| **Standard S** | Varierer per region (~$1–2 USD / 1000 records) | Produksjon |

**Viktige detaljer:**
- **Maks 5000 tegn per record** (større dokumenter må splittes)
- **Opinion Mining** inkludert i Standard tier (ingen ekstra kostnad)
- **Batch mode** (asynchronous) har samme pris som synchronous
- **Docker containers** krever Standard tier (Free F0 støttes ikke)

### Kostnadseksempel (norsk offentlig virksomhet)

**Scenario:** Analyserer 100 000 brukerhenvendelser/måned med sentiment + key phrases (2 API-kall per henvendelse).

| Komponent | Kostnad (estimat) |
|-----------|-------------------|
| 200 000 text records × $1.50 / 1000 | $300 USD/måned (~3200 NOK) |
| Azure Language resource (S tier) | Ingen fast månedskostnad (kun per-call) |
| Azure Storage (hvis batch mode) | ~$20 USD/måned for 1TB (~210 NOK) |
| **Total** | **~3400 NOK/måned** |

### Optimaliseringstips

1. **Batch asynkront** — Hvis du kan vente 24 timer, bruk asynchronous API (ingen prisforskjell, men enklere infrastruktur)
2. **Filtrer ut tom tekst** — Ikke send records uten innhold (koster like mye som reelle records)
3. **Kombiner features i én request** — Sentiment + Key Phrases + Entities kan kjøres i én `analyze-text` call (sparer HTTP-overhead, ikke pris)
4. **Bruk containers for høy-volum** — Hvis >1M records/måned, vurder self-hosted containers med Reserved VM Instances

---

## For arkitekten (Cosmo)

### Spørsmål å stille kunden

1. **Volum og latency:**
   - Hvor mange dokumenter skal analyseres (per dag/måned)?
   - Kreves real-time respons (<500ms) eller er batch OK (24t)?

2. **Språk og multispråklighet:**
   - Er all tekst på norsk, eller blandet språk?
   - Trenger dere automatisk språkdeteksjon?

3. **Datakompleksitet:**
   - Er tekstene lange (>5000 tegn) eller korte (f.eks. tweets, SMS)?
   - Inneholder teksten sensitive personopplysninger (navn, personnummer)?

4. **Detaljnivå:**
   - Trenger dere kun overordnet sentiment, eller må dere vite *hva* som er positivt/negativt (opinion mining)?
   - Skal entities kobles til eksterne knowledge bases (entity linking)?

5. **Infrastruktur og compliance:**
   - Kan data sendes til Azure EU-regioner, eller kreves on-premises?
   - Har dere eksisterende Azure Synapse / Fabric infrastructure?

6. **Integrasjoner:**
   - Skal resultatene visualiseres i Power BI, eller bare lagres i database?
   - Brukes det i en eksisterende app (web/mobile), eller ny løsning?

7. **Fremtidig utvidelse:**
   - Vil dere senere trenge custom entities (f.eks. organisasjonsspesifikke termer)?
   - Planlegges det translation workflows (Azure Translator integrasjon)?

### Fallgruver

| Fallgruve | Forklaring | Mitigering |
|-----------|------------|------------|
| **"Sentiment = sannhet"** | Sentiment score er en prediktering, ikke en fasit | Alltid ha human-in-the-loop for kritiske beslutninger |
| **Overfitting til engelsk** | Modellen er best på engelsk, kan være mindre presis på norsk | Test med representative norske datasett før produksjon |
| **Ignorere PII** | Key phrases kan inneholde personnavn eller sensitiv info | Kjør PII Detection først, eller anonymiser tekst før analyse |
| **Glemme cost caps** | Per-call pricing kan eskalere ved bugs (infinite loops) | Sett Azure Cost Management alerts på Language resource |
| **Forvente perfekt NER** | NER kan feiltolke domene-spesifikke entities | Vurder Custom NER hvis standard entities ikke er presise nok |

### Anbefalinger per modenhetsnivå

#### Nivå 1: Exploring (POC, <1000 records/måned)
- **Anbefaling:** Free F0 tier + Azure AI Foundry Playground
- **Verktøy:** REST API via Postman eller Foundry web UI
- **Fokus:** Teste om sentiment/key phrases gir verdi for use case
- **Advarsler:** Ikke bygg produksjonsapp på Free tier (5000 records/mnd cap)

#### Nivå 2: Building (Pilot, 1000–100K records/måned)
- **Anbefaling:** Standard S tier + SDK (C#/Python) + Azure App Service
- **Verktøy:** Azure Language SDK, Application Insights for monitoring
- **Fokus:** Real-time integrasjon i app, feilhåndtering, retry-logikk
- **Advarseler:** Implementer circuit breaker pattern (unngå API throttling ved 429 errors)

#### Nivå 3: Scaling (Produksjon, >100K records/måned)
- **Anbefaling:** Standard S tier + SynapseML / Fabric + Batch API
- **Verktøy:** Azure Synapse Pipelines, Azure Data Lake, Azure AI Search (for entity indexing)
- **Fokus:** Batch processing, cost optimization, data governance
- **Advarseler:** Vurder Docker containers hvis kostnad >$1000/måned

#### Nivå 4: Optimizing (Enterprise, >1M records/måned)
- **Anbefaling:** Docker containers on Azure Kubernetes Service (AKS) + Custom NER
- **Verktøy:** AKS, Azure Monitor, Custom Text Classification (Language Studio)
- **Fokus:** Self-hosted inference, custom models for domene-spesifikke entities
- **Advarsler:** Container-licensing krever Standard tier — test kostnad mot cloud API

---

## Kilder og verifisering

### Microsoft Learn-dokumentasjon (Verified via MCP)

| Kategori | URL | Konfidensnivå |
|----------|-----|---------------|
| **Sentiment Analysis Overview** | https://learn.microsoft.com/en-us/azure/ai-services/language-service/sentiment-opinion-mining/overview | ✅ Verified (2026-02) |
| **Sentiment Analysis How-To** | https://learn.microsoft.com/en-us/azure/ai-services/language-service/sentiment-opinion-mining/how-to/call-api | ✅ Verified (2026-02) |
| **Key Phrase Extraction How-To** | https://learn.microsoft.com/en-us/azure/ai-services/language-service/key-phrase-extraction/how-to/call-api | ✅ Verified (2026-02) |
| **NER Entity Categories** | https://learn.microsoft.com/en-us/azure/ai-services/language-service/named-entity-recognition/concepts/named-entity-categories | ✅ Verified (2026-02) |
| **Fabric Text Analytics** | https://learn.microsoft.com/en-us/fabric/data-science/ai-services/how-to-use-text-analytics | ✅ Verified (2026-02) |
| **Key Phrase Language Support** | https://learn.microsoft.com/en-us/azure/ai-services/language-service/key-phrase-extraction/language-support | ✅ Verified (2026-02) |
| **Sentiment Language Support** | https://learn.microsoft.com/en-us/azure/ai-services/language-service/sentiment-opinion-mining/language-support | ✅ Verified (2026-02) |
| **Custom Text Classification** | https://learn.microsoft.com/en-us/azure/ai-services/language-service/custom-text-classification/overview | ✅ Verified (2026-02) |

### Konfidensnivå per seksjon

| Seksjon | Konfidens | Kilde |
|---------|-----------|-------|
| Introduksjon | ✅ Verified | Microsoft Learn docs (MCP-fetched) |
| Kjernekomponenter | ✅ Verified | REST API examples + model outputs fra docs |
| Arkitekturmønstre | ✅ Verified | Fabric tutorial + Synapse docs + SDK samples |
| Beslutningsveiledning | ⚠️ Baseline | Best practices (modellkunnskap), ikke eksplisitt dokumentert |
| Integrasjon med MS-stakken | ✅ Verified | Power BI tutorial + SynapseML docs + Foundry quickstarts |
| Offentlig sektor (Norge) | ⚠️ Baseline | GDPR-analyse (modellkunnskap) + Azure datacenter geografi |
| Kostnad og lisensiering | ⚠️ Baseline | Generell Azure pricing structure (ikke eksakte NOK-priser hentet) |
| For arkitekten (Cosmo) | ⚠️ Baseline | Arkitekturerfaringer (modellkunnskap), ikke dokumentert av Microsoft |

**Notater:**
- Prisestimater er basert på generell Azure-prisstruktur — alltid sjekk [Azure Pricing Calculator](https://azure.microsoft.com/en-us/pricing/calculator/) for eksakte priser.
- Norge datacenter-status per 2026-02 — verifiser i Azure portal før arkitekturavgjørelser.
- Custom NER og Custom Text Classification er separate features med egne prismodeller (ikke dekket detaljert her).
