Nordlicht Reisen bekommt etwa 300 Kundenbewertungen am Tag (Annahme der Aufgabe). Niemand liest alle. Gesucht ist ein kleiner Helfer, der die Bewertungen vorsortiert: Was ist gut, was ist schlecht, worum geht es? Das ist Textanalyse, und sie ist die erste Fähigkeit, die Sie in dieser Lektion in eine Anwendung einbauen. Der Code ist nicht gegen Azure ausgeführt; so zeigt es Microsoft Learn. Die Ausgabe des Dienstes ist deshalb nicht abgedruckt.

Zwei Wege

Es gibt zwei Wege zum Ziel. Ein Sprachmodell (Ihr Deployment reise-chat aus Lektion 2.1) bekommt im Prompt die Bewertung und die Aufgabe. Oder Sie nutzen einen Dienst für Textanalyse: Azure Language in Foundry Tools (kurz: Azure Language). Er liefert festgelegte Ergebnisse statt freier Texte.

Azure Language Sprachmodell mit Prompt
Ergebnis Etiketten, Werte, Listen in fester Form freier Text, Form nach Prompt
Passt zu gleichbleibenden, wiederholbaren Aufgaben in großer Zahl offenen, nicht vorab geplanten Aufgaben
Einrichtung Ressource, Schlüssel oder Entra-Anmeldung Deployment, Prompt, Prüfung der Antworten

So fasst es Microsofts Entscheidungshilfe zusammen: Azure Language für konsistente, wiederholbare Aufgaben wie Stimmungsanalyse in großem Umfang, Modelle für ungeplante Sprachaufgaben mit flexiblem Prompting. Bewertungen sind viele gleichartige Texte, also zuerst Azure Language.

Was Azure Language kann

Learn zählt unter anderem diese Funktionen. Zum Ausprobieren ohne Code bietet das Foundry-Portal die meisten davon an.

  • Stimmungsanalyse (sentiment analysis) und Meinungsanalyse (opinion mining): positiv, negativ, neutral, auf Dokument- und Satzebene. Die Meinungsanalyse ordnet Stimmungen Gegenständen zu, etwa „Zimmer“ oder „Personal“.
  • Schlüsselbegriffe (key phrase extraction): die Hauptthemen eines Textes als Liste.
  • Entitätserkennung (named entity recognition, NER): Namen, Orte, Daten und weitere Kategorien im Text finden.
  • Zusammenfassung (summarization): extraktiv wählt wichtige Sätze aus dem Text, abstraktiv formuliert neue, kurze Sätze.
  • Spracherkennung (language detection): welche Sprache ein Text hat. Nützlich, weil bei Nordlicht einzelne Nachrichten englisch sind.

Eine Einordnung, die Sie kennen sollten: Learn führt auf der Übersichtsseite Entitätserkennung, Spracherkennung und Erkennung personenbezogener Daten als Kernfunktionen, die für neue Entwicklung empfohlen sind. Stimmungsanalyse, Schlüsselbegriffe und Zusammenfassung stehen dort unter Legacy-Funktionen, die „für bestehende Umsetzungen unterstützt“ werden. Wie lange das so bleibt, sagt die Seite nicht: offen. Die Prüfung fragt diese Funktionen trotzdem.

Stimmungsanalyse im Detail

Nach Learn liefert sie Etiketten und Werte (confidence scores) je Satz und je Dokument. Etiketten: positiv, negativ, neutral, auf Dokumentebene zusätzlich gemischt (mixed). Die drei Werte eines Satzes ergeben zusammen 1. Ein Wert nahe 1 heißt hohe Sicherheit des Dienstes, nicht starke Stimmung.

Vier Hinweise von Learn, die für Nordlicht zählen:

  • Ohne Angabe der Sprache nimmt der Dienst Englisch an. Deutsch ist laut Learn unterstützt, muss aber angegeben werden. Wie Sie die Sprache im C#-Aufruf setzen, zeigt die Quickstart-Seite nicht: offen, siehe die API-Referenz.
  • Die Stimmungsanalyse arbeitet mit kleinen Textstücken besser, Schlüsselbegriffe mit größeren.
  • Das Modell wurde mit Produkt- und Dienstleistungsbewertungen trainiert. Bei anderen Texten, zum Beispiel über Personen, kann es falsch liegen. Reisebewertungen liegen nah an dem, wofür es gedacht ist.
  • Ironie erkennt es womöglich nicht, und ein Gesamtwert kann von dem abweichen, was ein Mensch als Gesamteindruck lesen würde.

Der Code

Learns C#-Quickstart für Stimmungsanalyse nutzt das NuGet-Paket Azure.AI.TextAnalytics (die Seite nennt Version 5.2.0, Versionen ändern sich) und liest Schlüssel und Adresse aus Umgebungsvariablen. Learn empfiehlt für den Betrieb Entra ID mit verwalteten Identitäten statt Schlüssel im Code. Auszug aus Learns Beispiel, ausgelassene Zeilen sind Ausgaben:

C#
static string languageKey = Environment.GetEnvironmentVariable("LANGUAGE_KEY");
static string languageEndpoint = Environment.GetEnvironmentVariable("LANGUAGE_ENDPOINT");

private static readonly AzureKeyCredential credentials = new AzureKeyCredential(languageKey);
private static readonly Uri endpoint = new Uri(languageEndpoint);
C#
var documents = new List<string>
{
    "The food and service were unacceptable. The concierge was nice, however."
};

AnalyzeSentimentResultCollection reviews = client.AnalyzeSentimentBatch(documents, options: new AnalyzeSentimentOptions()
{
    IncludeOpinionMining = true
});

foreach (AnalyzeSentimentResult review in reviews)
{
    Console.WriteLine($"Document sentiment: {review.DocumentSentiment.Sentiment}\n");
    Console.WriteLine($"\tNegative score: {review.DocumentSentiment.ConfidenceScores.Negative:0.00}");
}
C#
var client = new TextAnalyticsClient(endpoint, credentials);

Zeile für Zeile:

  • Die ersten vier Zeilen lesen LANGUAGE_KEY und LANGUAGE_ENDPOINT aus der Umgebung und bauen daraus Anmeldedaten und Adresse der Language-Ressource.
  • documents ist eine Liste von Texten, hier einer. Statt des englischen Satzes setzen Sie den Inhalt von bewertung-1.txt ein. Der Dienst nimmt mehrere Texte in einem Aufruf an (Batch).
  • AnalyzeSentimentBatch schickt die Liste an den Dienst. IncludeOpinionMining = true schaltet die Meinungsanalyse zu.
  • foreach geht die Ergebnisse durch: Sentiment ist das Etikett des Dokuments, ConfidenceScores.Negative der Wert für „negativ“.
  • TextAnalyticsClient ist der Client mit Adresse und Anmeldedaten.

Wie die Ausgabe aussieht, beschreibt Learn so: je Dokument das Etikett und drei Werte, je Satz dasselbe, und bei Meinungsanalyse zusätzlich die Gegenstände mit ihren Bewertungen. Hier steht kein erfundenes Ergebnis. Für die Prüfung lesen Sie den Python-Reiter derselben Seite (Hinweis in Lektion 2.3).

Für die Zusammenfassung hat Learn ein eigenes C#-Beispiel mit demselben Paket, aber einer Vorabversion (Include prerelease).

Der Fall: drei Bewertungen

Die Dateien bewertung-1.txt bis bewertung-3.txt enthalten in dieser Aufgabe diese erfundenen Texte:

  1. „Das Zimmer war sauber und der Blick auf den See wunderbar, aber das Frühstück war kalt.“
  2. „Tolle Beratung im Reisebüro, alles hat gepasst. Gerne wieder!“
  3. „Der Transfer kam nicht, und in der Hotline hat uns niemand geholfen. Wir haben einen Tag verloren.“

Wichtig ist, was Nordlicht mit dem Ergebnis tut. Der Helfer entscheidet nichts über die Kundschaft. Er sortiert: Bewertungen mit negativer Stimmung kommen in eine Liste, die ein Mensch aus dem Kundendienst täglich liest (Frau Berg ist verantwortlich, Lektion 1.1). Er schickt keine Antwort und entscheidet nicht über Erstattungen. Learns Hinweise zur Stimmungsanalyse stützen das: Aktionen mit hoher Wirkung nicht ohne Menschen automatisieren, und die Schwelle für „negativ“ an echten Daten testen. Wer lieber zu viele als zu wenige negative Bewertungen lesen will, setzt die Schwelle für den Negativ-Wert niedriger und nimmt mehr falsche Alarme in Kauf. Welche Schwelle für Nordlicht passt, ist offen: Learn verlangt, sie an echten Daten zu testen.

Übung 1

Ordnen Sie jeder Aufgabe von Nordlicht eine Funktion zu (Stimmungsanalyse, Schlüsselbegriffe, Entitätserkennung, Zusammenfassung, Spracherkennung) und sagen Sie, wer das Ergebnis liest:

  1. Welche Bewertungen sind negativ und gehören auf die Liste des Kundendienstes?
  2. Eine englische Nachricht soll an das englischsprachige Team gehen.
  3. Aus 300 Bewertungen soll eine Wochenübersicht der meistgenannten Themen entstehen.
  4. In Bewertung 3 soll erkannt werden, dass „Transfer“ und „Hotline“ vorkommen.
  5. Eine lange Beschwerde soll in zwei Sätzen für die Leitung zusammengefasst werden.

Lösung 1

  1. Stimmungsanalyse. Ein Mensch im Kundendienst liest die negativen Bewertungen. Die Meinungsanalyse zeigt, ob „Transfer“ oder „Frühstück“ gemeint ist.
  2. Spracherkennung. Sie liefert die Sprache, danach geht der Text an das passende Team. Ohne Angabe nähme die Stimmungsanalyse Englisch an, für die deutschen Texte wäre das falsch.
  3. Schlüsselbegriffe, am besten über viele Bewertungen zusammen, denn Learn sagt, dieser Dienst arbeitet mit größeren Textmengen besser. 4. Schlüsselbegriffe liefern „Transfer“ und „Hotline“ als Themen. Entitätserkennung würde eher Namen, Orte und Daten finden, also nicht diese Wörter. Ob ein Dienst im Einzelfall beides liefert, zeigt nur ein Test mit echten Texten.
  4. Zusammenfassung. Ein Mensch prüft sie gegen den Originaltext, weil eine abstraktive Zusammenfassung neue Sätze formuliert und dabei Fehler machen kann. Wer eine Zusammenfassung ungeprüft weitergibt, übernimmt diese Fehler.

Weiterlesen