Implement text analysis solutions
This domain (13% of AI-103, roughly 6–8 scored items) tests whether you can pick and configure the right Microsoft service — Language in Foundry Tools (Azure AI Language), Translator, Speech, Content Safety, and Foundry Models (Azure OpenAI) — to extract meaning from text and audio, and to wire those capabilities into agentic solutions. Expect questions phrased as short business scenarios ending in "which service/feature/parameter should you use?", plus SDK/REST fragments where one property is missing. Microsoft has rebranded Azure AI services capabilities as Foundry Tools inside Microsoft Foundry / Azure AI Foundry; the exam may use either name, so memorise the mapping.
| Legacy / classic name | Foundry-era name | Core jobs |
|---|---|---|
| Azure AI Language (Text Analytics) | Language in Foundry Tools | Sentiment, NER, PII, key phrases, summarisation, custom NER/classification |
| Azure AI Translator | Translator in Foundry Tools | Text, document, custom translation |
| Azure AI Speech | Speech in Foundry Tools | STT, TTS, speech translation, custom speech/voice, Voice Live |
| Azure AI Content Safety | Content Safety in Foundry Tools | Harm categories, Prompt Shields, groundedness, protected material |
| Azure OpenAI Service | Foundry Models / Azure OpenAI in Foundry Models | GPT-4o/4.1/o-series, Whisper, realtime audio |
Extracting entities, topics, summaries and structured JSON
Prebuilt Language capabilities (no training, REST/SDK)
| Feature | Returns | Sync docs/request | Notes |
|---|---|---|---|
| Language detection | ISO 639-1 code, name, confidence | 1,000 | Returns (Unknown) + NaN when undetermined; countryHint improves accuracy |
| Key phrase extraction | List of phrases, no confidence scores | 10 | Not topic modelling, not summarisation |
| Named entity recognition (NER) | Category, subcategory, offset, length, confidence | 5 | Categories: Person, PersonType, Location, Organization, Event, Product, Skill, Address, PhoneNumber, Email, URL, IP, DateTime, Quantity |
| Entity linking | Wikipedia URL + unique ID | 5 | Disambiguation, English-centric |
| PII detection | Entities + redactedText | 5 | domain=phi for health; piiCategories filter |
| Text analytics for health | UMLS-linked entities, relations, assertions | 10 (hosted) / 25 (container) | Async only |
| Extractive summarisation | Ranked source sentences | 25 (async job) | sentenceCount default 3, sortBy = Offset or Rank |
| Abstractive summarisation | Newly generated prose | 25 (async job) | summaryLength = short / medium / long |
| Conversation summarisation | Aspects: issue, resolution, chapterTitle, narrative, recap, follow-up tasks | 1 conversation | Uses /language/analyze-conversations/jobs |
Hard limits you must recall: 5,120 characters per document (synchronous); 125,000 characters total per async request; F0 free tier = 5,000 transactions / 30 days, Standard S = 1,000 requests per minute. Sync operations POST to /language/:analyze-text?api-version=...; long-running operations (summarisation, health, custom, multi-task) POST to /language/analyze-text/jobs and return an Operation-Location header you poll.
There is no prebuilt topic-modelling API. Topics, themes, and open-ended taxonomy extraction are generative tasks — use a chat completion model with a prompt, not key phrase extraction.
Custom Language features
- Custom NER and custom text classification (single-label or multi-label) require an Azure Storage account for training documents, a project in Foundry/Language Studio, labelling, training (with automatic or manual train/test split), evaluation (precision, recall, F1, confusion matrix), then deployment to a named deployment before you can call it.
- Calls to custom features are always asynchronous and require
projectName+deploymentNamein the body. - Custom features are not available on F0 at production scale and require a Language resource created with custom features enabled plus the storage connection.
Generative extraction and structured JSON
For entity/topic/summary extraction where the schema is domain-specific or the label set changes often, use a Foundry Model with prompting:
| Technique | What it does | When the exam wants it |
|---|---|---|
JSON mode — response_format={"type":"json_object"} | Guarantees valid JSON, not a specific shape. You must also say "JSON" in the prompt | "Output must parse as JSON" |
Structured Outputs — response_format={"type":"json_schema", "json_schema":{..., "strict":true}} | Guarantees the response matches your JSON Schema exactly | "Every response must contain exactly these fields" / "no missing properties" |
| Function / tool calling | Model emits a tool call with typed arguments | Model must trigger an action or downstream API |
| Few-shot prompting | 2–5 labelled examples in the system/user message | Improve consistency without fine-tuning |
| Fine-tuning | Trains weights on hundreds+ examples | Persistent style/format, latency & token savings, no schema guarantee |
Structured Outputs requires gpt-4o (2024-08-06) or later and API version 2024-08-01-preview or later. strict: true requires additionalProperties: false and every property listed in required. Set temperature 0 (and optionally seed) for deterministic extraction.
Diagram caption: choosing between prebuilt Language skills, custom Language models, and generative prompting.
Common traps
- Key phrase extraction ≠ summarisation ≠ topic modelling. Key phrases return noun phrases only, with no scores.
- Extractive vs abstractive: "must use only wording from the original document / auditable" → extractive. "Must read as a concise new paragraph" → abstractive.
sentenceCountapplies to extractive summarisation;summaryLengthapplies to abstractive.- Sync max is 5,120 characters per document, not per request; the per-request character cap is 125,000 for async.
- Custom NER cannot be called synchronously; distractors offer
:analyze-textfor custom models. - JSON mode does not enforce a schema — only Structured Outputs does.
- Entity linking returns Wikipedia URLs; NER does not.
Worked scenario
A bank must pull loan-application fields (applicant name, loan amount, property type, risk flags) from free-text emails into a fixed JSON record consumed by a downstream API that rejects unknown fields. Prebuilt NER returns generic categories, not propertyType. Custom NER could work but needs labelled data and returns spans, not a document-level object. Correct answer: a Foundry chat model with Structured Outputs (json_schema, strict: true, additionalProperties: false) at temperature 0, because the requirement is guaranteed schema conformance with no unknown fields.
Unlock with a paid plan
10 more sections (about 3,710 words) continue below. Every paid plan unlocks all AI-103 study guides, the full question bank and mock exams, from $4.97/month.