ms-ai-architect/skills/ms-ai-engineering/references/azure-ai-services/language-services-text-analytics.md
Kjell Tore Guttormsen 3a73eeafdc refactor(ms-ai-architect): R13 del 1 — nøytraliser Cosmo-personaen i ref-korpusets headinger, etter å ha rettet en gate som var målt usann to ganger
Ordre 20260912T193441Z-7358817909. Steg 1 var ikke transformen, men å rette
roadmapens R13-gate og få den ratifisert. Gaten `grep -rl "Cosmo"
skills/*/references -> 0` var usann på to uavhengige måter:

1. Ordren fanget den første: 451 av forekomstene er Azure Cosmos DB, ekte
   produktinnhold. Diskriminatoren er ikke bokstaven «s» — `Cosmos <norsk
   substantiv>` er genitiv av personaen (`### Cosmos tonalitet`), mens
   `Cosmos DB`/`CosmosClient`/`cosmos_ru` er produkt.
2. Denne økten fant den andre: 132 persona-forekomster ligger i prosa,
   tabeller, dialog-replikker og proveniens-linjer. Heading-nøytralisering
   kan ikke nå dem, så «0 persona» er uoppnåelig også under den ratifiserte
   formen. Operatøren ratifiserte alternativ A: gaten speiler formen, og de
   132 bokføres til R13b/R14.

Tre korreksjoner av premisser som sto i ordren og STATE:
  «ca 320 produkt»   -> 451 (case-sensitivt nett manglet 327 lowercase
                        TOC-ankre + 99 identifikatorer; sann nevner 1 638)
  «169 headinger»    -> 401. 169 var `^## For Cosmo`-prefikset (168) og var
                        internt inkonsistent med sin egen topp-variant (204)
  «417 matcher ingen
   populasjon»       -> 417 er cosmo-headinger utenfor kodefences; briefens
                        nevner var reell hele tiden

Fence-bevissthet er målt skadelig, ikke nødvendig: begge toggle-regler er
gale på dette korpuset (naiv toggle skjuler en ekte heading i
chain-of-thought-prompting.md, CommonMark-regelen ubalanserer
service-level-documentation-dr.md). Fence-agnostisk deteksjon finner 401
heading-linjer i nøyaktig de samme 40 variantene som fence-bevisst finner
400 i — ingen kodeblokk-linje er byte-identisk til en persona-heading. Derfor
nøkles transformen på 40 enumererte heading-tekster og ignorerer fences. En
ukjent variant kaster; en slug-kollisjon kaster. Ingenting auto-fikses.

TOC-en regenereres ikke, den rettes kirurgisk: alle 327 persona-lenker hadde
lenketekst lik én av de 40 heading-tekstene og anker lik slugify av den
(327/327, 0 avvik), så heading og TOC-entry skrives i samme operasjon og
ingen mellomtilstand etterlater en død lenke.

Ratifisert målform: `For Cosmo`, `For Cosmo Skyberg` og `For arkitekten
(Cosmo)` konvergerer på `For arkitekten`. To filer kolliderte og er adjudisert
ved å lese dem, ikke ved regel.

Verifisering (alle 7 kriterier fra ordren):
  G1 persona på heading-linjer   401 -> 0
  G2 døde fragmentlenker         1 -> 1 (pre-eksisterende, unntatt)
  G3 produkt-forekomster         451 -> 451; `Cosmos DB|Azure Cosmos` 308 = 308
  de 3 kun-produkt-filene        byte-identiske
  nettet validert begge veier    injisert persona feller G1; genitiv feller G1;
                                 produkt-heading og de 3 filene passerer
  hele diffen                    802 heading-linjer + 654 TOC-linjer, ANNET = 0
  linjeantall                    728 lagt til = 728 slettet
  suite                          1120/1120 (1097 + 23 nye)
  validate-plugin                250 PASS / 0 FAIL
  stikkprøve                     10 filer, alle 5 skills, inkl. de 3 mest
                                 produkt-tunge (26/20/19) — kun heading+TOC

Utenfor scope, urørt: de 4 SKILL.md, de 23 commands, CLAUDE.md, README.md,
NOTICE.md, docs/ (alt R14).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-12 22:12:28 +02:00

20 KiB
Raw Blame History

Language Services - Text Analytics for Sentiment and Key Phrases

Last updated: 2026-06-19 Status: GA (deler avvikles 2029-03-31) Type: reference Source: https://learn.microsoft.com/azure/ai-services/language-service/personally-identifiable-information/overview

ADVARSEL — TJENESTER AVVIKLES (2029-03-31): Sentiment Analysis, Opinion Mining og Custom Text Classification avvikles 31. mars 2029. Migrer til Microsoft Foundry-modeller. PII Detection, Key Phrase Extraction og Language Detection er ikke berørt. Category: Azure AI Services (Foundry Tools)


Innhold

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 Microsoft 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 (01) på både setnings- og dokumentnivå.

Funksjonalitet Beskrivelse
Sentiment labels Positive, negative, neutral (setningsnivå); mixed tilgjengelig på dokumentnivå
Confidence scores 0.01.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 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.01.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):

# 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):

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
  • 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

Microsoft 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

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):

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.

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 (~$12 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

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 + Microsoft 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, 1000100K 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 Documented (2026-02)
Sentiment Analysis How-To https://learn.microsoft.com/en-us/azure/ai-services/language-service/sentiment-opinion-mining/how-to/call-api Documented (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 Documented (2026-02)
NER Entity Categories https://learn.microsoft.com/en-us/azure/ai-services/language-service/named-entity-recognition/concepts/named-entity-categories Documented (2026-02)
Fabric Text Analytics https://learn.microsoft.com/en-us/fabric/data-science/ai-services/how-to-use-text-analytics Documented (2026-02)
Key Phrase Language Support https://learn.microsoft.com/en-us/azure/ai-services/language-service/key-phrase-extraction/language-support Documented (2026-02)
Sentiment Language Support https://learn.microsoft.com/en-us/azure/ai-services/language-service/sentiment-opinion-mining/language-support Documented (2026-02)
Custom Text Classification https://learn.microsoft.com/en-us/azure/ai-services/language-service/custom-text-classification/overview Documented (2026-02)

Konfidensnivå per seksjon

Seksjon Konfidens Kilde
Introduksjon Documented Microsoft Learn docs (MCP-fetched)
Kjernekomponenter Documented REST API examples + model outputs fra docs
Arkitekturmønstre Documented Fabric tutorial + Synapse docs + SDK samples
Beslutningsveiledning ⚠️ Baseline Best practices (modellkunnskap), ikke eksplisitt dokumentert
Integrasjon med MS-stakken Documented 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 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).