Bessere Interaktion – die Cognitive-Services-Reihe

Cognitive Services – LUIS: „Ich habe Sie leider nicht verstanden.“
Keine Kommentare

Antworten, wie wir sie hier in der Überschrift sehen, sollten dank der Cognitive Services und LUIS (Language Understanding Intelligent Service) bald der Vergangenheit angehören. In Zukunft werden Bots wie Cortana und Siri wesentlich genauer verstehen und erkennen, was wir wollen und immer ein smarte Antwort parat haben.

Neben dem in Ausgabe 7.2016 des Windows Developers vorgestellten Bot Framework hatte Microsoft auf der Build-Konferenz im April noch andere spannende Neuigkeiten für Entwickler parat, darunter die so genannten „Cognitive Services“. Die Namenswahl ist hier durchaus gut gelungen – im Gegensatz zum Bot Framework handelt es sich weniger um eine umfassende Bibliothek, sondern um einzelne APIs, die sich alle in der einen oder anderen Form mit dem Erkennen und Verstehen unserer Welt befassen, im Großen und Ganzen aber unabhängig voneinander verwendbar sind.

Die Services, von denen einige bisher schon unter den Namen „Bing Services“ und „Project Oxford“ verfügbar waren, lassen sich grob in die Bereiche Sehen (Vision), Hören (Speech), Sprache (Language), Wissen (Knowledge) und Suche (Search) unterteilen. In dieser Artikelreihe werden wir die einzelnen Kategorien Monat für Monat vorstellen.

Technisch gesehen sprechen wir dabei übrigens von REST-Services, die auf nahezu jeder Plattform konsumierbar sind. Einzig die unterschiedlichen Nutzungskosten je Service sind zu beachten. Für alle APIs gibt es aber auch einen limitierten, frei verfügbaren Zugriff. Meist werden hier die Transaktionen pro Monat eingeschränkt.

Am Anfang war das Wort

Für den Anfang bietet sich das Kapitel Sprache an, weil es sich perfekt mit dem bereits angesprochenen Bot Framework kombinieren lässt [1]. Denn, ehrlich gesagt, das Framework leistet zwar gute Dienste bei der Integration in diverse Plattformen und nimmt Entwicklern dabei viel Arbeit und Infrastrukturcode ab – die wahre Komplexität bei der Implementierung eines Bots besteht aber darin, zu verstehen, was der Benutzer gerade sagen will. Das ist vor allem dann eine Herausforderung, wenn die Eingaben über die Auswahl vorgegebener Antwortoptionen hinausgehen.

Unter der Überschrift „Speech“ bieten die Cognitive Services verschiedene APIs an, mit denen Texte auf linguistischer und inhaltlicher Ebene analysiert werden können. So lassen sie sich etwa in sprachliche Bestandteile (Sätze, Wörter, … bis hin zu Subjekt und Prädikat) zerlegen, Themen und Schlüsselwörter extrahieren oder die Stimmung (positiv oder negativ) beurteilen.

Am spannendsten – gerade im Hinblick auf die Entwicklung von textuellen Benutzeroberflächen – ist aber mit Sicherheit LUIS.

LUIS – Language Understanding Intelligent Service

LUIS versucht Texte auf Basis eines selbstlernenden Modells zu verstehen. Was zunächst wissenschaftlich-abstrakt klingt, lässt sich in der Realität sehr einfach und beinahe spielerisch in drei Schritten einrichten, auch dank der sehr guten Onlinebenutzeroberfläche. Das Zusammenspiel kann man am besten anhand eines Beispiels demonstrieren: Nehmen wir einen EM-Bot, dem man verschiedene Fragen zur Fußballeuropameisterschaft in Frankreich stellen kann, etwa „Welche Spiele finden am 18. Juni statt?“ oder „Wie ist Deutschland gegen Österreich ausgegangen?“

Die Herausforderung besteht dabei darin, nicht nur genau diese Sätze zu erkennen und zu verstehen, sondern auch anders formulierte Fragestellungen, die einem Benutzer einfallen könnten, zum Beispiel „Wer spielt am 18. Juni?“. Auf der Seite https://www.luis.ai/ können Sie nach der Registrierung eines kostenlosen Accounts die folgenden Schritte gleich ausprobieren: Erstellen Sie dazu eine neue LUIS-App (Abb. 1). Leider lässt sich Deutsch im Moment noch nicht als Sprache auswählen, nachdem aber Spanisch, Französisch und Italienisch bereits vorhanden sind, kann man durchaus zuversichtlich sein, dass das auch bald möglich sein wird.

schacherl_1

Abb. 1: Erstellung einer neuen LUIS-Applikation; im Moment ist Deutsch als Sprache leider noch nicht verfügbar

Zunächst müssen die Entitäten des Modells definiert werden, sozusagen die Datentypen, die wir später als Parameter verwenden wollen. Im Fall der Frage nach den Spielen an einem bestimmten Tag wäre beispielsweise der konkrete Datumswert ein sinnvoller Parameter. Häufig benötigte Entitäten wie Datum, Währung etc. gibt es bereits vordefiniert. Fügen Sie Ihrer App die Entität Datetime hinzu.

Als Nächstes müssen wir eine Benutzerintention erfassen – das entspricht bei uns einer Frage. Fügen Sie eine Intention zum Abfragen der Spiele an einem Datum hinzu. Notwendig dafür ist ein Name, eine beispielhafte Formulierung und (optional) die Parameter (Abb. 2).

Abb. 2: Hinzufügen einer Intention mit einer Beispielformulierung und Parametern

Abb. 2: Hinzufügen einer Intention mit einer Beispielformulierung und Parametern

Anschließend kann man die Parameter („Labels“) durch Markierung eines Teils der Frage festlegen (Abb. 3). Wenn das erledigt ist, können Sie noch weitere Formulierungen für die gleiche Intention hinzufügen, z. B. „Tell me the matches on June 11“. Je mehr Beispiele man eingibt, desto besser wird das Modell später funktionieren und auch Varianten erkennen, die man so nicht explizit angegeben hat.

Abb. 3: Zuweisung der Parameter einer Formulierung

Abb. 3: Zuweisung der Parameter einer Formulierung

Zuletzt muss das Modell mit dem Button links unten trainiert werden. Die Ergebnisse werden rechts im Bereich „Performance analysis“ zusammengefasst (Abb. 4). Hier sieht man fast wie bei einer Unittest-Suite stets, wie gut das aktuelle Modell die bisherigen Eingaben erkennt und welche Phrasen mit welcher Sicherheit erkannt werden.

Abb. 4: Die Qualität des aktuellen Modells wird live angezeigt

Abb. 4: Die Qualität des aktuellen Modells wird live angezeigt

Über einen Klick Publish können wir diese erste Version unseres Modells als HTTP-Service online stellen und auch gleich ausprobieren. Versuchen Sie es auch mal mit einer Formulierung, die Sie so noch nicht hinterlegt hatten. Listing 1 zeigt einen Ausschnitt eines möglichen Ergebnisses.

 
{
  "intent": "Match at date",
  "score": 0.9998741,
  "actions": [
    {
      "triggered": true,
      "name": "Match at date",
      "parameters": [
        {
          "name": "Date",
          "required": true,
          "value": [
            {
              "entity": "june 16th",
              "type": "builtin.datetime.date",
              "resolution": {
                "date": "XXXX-06-16"
              }
            }
          ]
        }
      ]
    }
  ]
}

Für die Frage „Wie ist das Spiel Österreich gegen Deutschland ausgegangen?“ brauchen wir zwei Parameter: das erste und das zweite Team. Dafür benötigen wir als Datentyp zunächst eine neue Entität „Team“. Leider ist es nicht direkt möglich, in einer Intention zwei Parameter desselben Typs zu definieren. Stattdessen müssen wir beim Anlegen der Entität zwei Kindelemente „Team 1“ und „Team 2“ erstellen, die wir dann als Parametertypen verwenden können (Abb. 5). Danach können wieder wie zuvor verschiedene Formulierungen erfasst und das Modell trainiert und veröffentlicht werden.

Abb. 5: Die Qualität des aktuellen Modells wird jederzeit angezeigt

Abb. 5: Die Qualität des aktuellen Modells wird jederzeit angezeigt

Lebenslanges Lernen

Ein besonders spannendes Feature von LUIS ist, dass sämtliche Anfragen protokolliert und in der gleichen Weise wie Ihre eigenen Vorschläge gespeichert werden. Sie können also jederzeit überprüfen, wie gut Ihr Modell mit den tatsächlichen Benutzereingaben funktioniert, und Sie haben die Möglichkeit, für diese ebenfalls die Parameter zuzuordnen und das Modell damit weiter zu trainieren. LUIS schlägt Ihnen sogar Eingaben vor, die Sie am dringendsten zuordnen sollten, um dem Modell unter die Arme zu greifen und die Erkennung zu verbessern.

Fazit

Mit LUIS bietet Microsoft ein sehr mächtiges Werkzeug für die Interpretation von textuellen Benutzereingaben an, das trotz der Komplexität der Thematik sehr einfach zu bedienen ist. Es ist ohne Weiteres möglich, einen Endbenutzer ohne IT-Kenntnisse seine Anfragen frei von der Leber weg formulieren zu lassen und daraus das Modell zu generieren. Außer für Bots ist LUIS damit natürlich auch für Spracheingabeszenarien prädestiniert – aber das ist eine andere Geschichte …

Links & Literatur

[1] Schacherl, Roman; Sklenitzka, Daniel: „Das GeBOT der Stunde“, in: Windows Developer 7.2016, S. 18; Infos: bit.ly/22IPAEa

Windows Developer

Windows DeveloperDieser Artikel ist im Windows Developer erschienen. Windows Developer informiert umfassend und herstellerneutral über neue Trends und Möglichkeiten der Software- und Systementwicklung rund um Microsoft-Technologien.

Natürlich können Sie den Windows Developer über den entwickler.kiosk auch digital im Browser oder auf Ihren Android- und iOS-Devices lesen. In unserem Shop ist der Windows Developer ferner im Abonnement oder als Einzelheft erhältlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

X
- Gib Deinen Standort ein -
- or -