Amazon Alexa - Sprachbasierte Audio-Interfaces Teil 1

von Andreas Scheidmeir

Sprache ist eine der ältesten Methoden zur Übermittlung von Gedanken, Emotionen und Informationen. Die Vertrautheit mit dieser Art von Kommunikation macht sie zu einer attraktiven Schnittstelle nicht nur zwischen Menschen, sondern auch zwischen Mensch und Maschine. Durch Fortschritte in der Informatik und Linguistik ist es inzwischen möglich, relativ zuverlässig gesprochene Sprache zu analysieren und natürlich klingende Sprachausgaben zu erzeugen.

Im Rahmen meiner Bachelorthesis bei der exensio GmbH befasse ich mich mit Sprachschnittstellen, konkret am Beispiel von Amazon Alexa. Im ersten Teil dieser kurzen Blogreihe möchte ich einen groben Überblick geben, über den Aufbau der Schnittstelle und der Nutzerinteraktion mit dieser.

Hintergrund

Der hier angedeutete Übunghilfe-Skill ist das Ergebnis der Zusammenarbeit mit einem Mukoviszidose-Patienten. Die Behandlung von chronische Krankheiten verlangt häufig von Patienten die regelmäßige Durchführung von Übungen. Anhand von einigen ausgewählten Beispielen sollte im Rahmen der Arbeit mit dem Prototyp gezeigt werden, ob ein Sprachinterface dazu geeignet ist, Nutzer zu ihren täglichen Übungen zu motivieren und sie durch diese zu leiten. Der genaue Funktionsumfang der Anwendung wird im zweiten Teil der Reihe beleuchtet.

Nutzerinteraktion

Amazon Alexa erwartet Äußerungen (utterances) und versucht diese auf in der Schnittstelle hinterlegte Absichten (intents) abzubilden. Um zusätzliche Parameter zu übergeben, kann man die Äußerung um sogenannte Slots erweitern. Im Folgenden werden die englischen Begriffe verwendet, um mit der Dokumentation konsistent zu sein, welche zum aktuellen Zeitpunkt von Amazon ausschließlich in englischer Sprache bereitgestellt wird. Die Interaktion mit einer Alexa bekannten Anwendung, auch als Skill bezeichnet, wird nachfolgend kurz an Hand einer Übungshilfe gezeigt.

Um den Skill zu starten, muss der Nutzer

Alexa, starte Übungshilfe

äußern. Erst durch die Nennung des Rufwortes Alexa hört das System mit. Darauf startet es den genannten Skill, hier die Übungshilfe, welche im zweiten Teil der Reihe genauer beleuchtet wird. In dem gestarteten Skill können weitere Utterances behandelt werden.

Lass uns mit Inhalieren anfangen.“


SelectIntent {value: 'Inhalieren'}

Eine Utterance ist immer genau einem Intent zugeordnet. Für jeden Intent sollten allerdings mehrere erwartete Utterances hinterlegt sein, um möglichst viele Äußerungen der Nutzer verstehen zu können. Im eben genannten Beispiel bewirkt die Anfrage „Lass uns mit Inhalieren anfangen“ den Aufruf des SelectIntents, dem der Parameter Inhalieren übergeben wird. Was der Intent mit diesen Informationen anfängt, ist nicht Teil der Definition der Sprachschnittstelle, sondern muss in der Implementierung abgearbeitet werden. Im Backend muss entsprechend für jeden Intent ein Handler hinterlegt sein, welcher sich um die Verarbeitung des Inputs und Generierung von Feedback kümmert. In diesem Fall würde der Skill mit den hinterlegten Übungsanweisungen beginnen.

Neben der Utterance „Lass uns mit {Übung} anfangen“ kann z.B. „Starte die Übung {Übung}“ oder „Ich will {Übung} durchführen“ zum Einsatz kommen. Je mehr Äußerungen abgedeckt werden, desto zuverlässiger erkennt das System die gewünschte Absicht. Kleine Variationen innerhalb der gegeben Beispiele kann es selbstständig abdecken. 

Definition

Definiert wird die Sprachschnittstelle im Amazon Developer Portal. Eine genaue Anleitung zum Anlegen eines Alexa Skills folgt in einem späteren Blogpost. Das Interaktions-Model kann bequem über den Skill Builder angelegt werden. Diese grafische Oberfläche unterstützt Entwickler bei der Erstellung des Interface.

Für die Übungshilfe wird Beispielhaft in Abb. 1 der Selectintent angelegt. Neben möglichst vielen verschiedenen Utterances muss auch der Slot Übung definiert werden. Im Slot Typ Übungen sind entsprechend alle erwarteten Übungsnamen hinterlegt. Das System ist zwar dazu in der Lage, auch nicht definierte Parameter zu übergeben (z.b. "Lass uns mit Joggen beginnen"). Dabei sinkt aber die Erkennungsrate, da Alexa versucht das Gesprochene auf eines der hinterlegten Werte abzubilden. Zudem muss bei der Implementierung sinnvoll mit unerwarteten Eingaben umgegangen werden.

Sobald alle benötigten Intents samt ihrer Utterances und Slots angelegt sind, kann das Interaktions-Modell gespeichert und gebaut werden. Dieser Vorgang erzeugt ein JSON mit allen benötigten Informationen für das System. Wenn diese Datei bereits vorliegt kann man sie auch direkt im Editor hochgeladen. Am Ende des Blogposts ist ein Beispiel für den oben beschriebenen SelectIntent zu finden.

Implementierung

Bei der Implementierung kommt in diesem Beispiel JavaScript und das Alexa Skills Kit SED für NodeJS zum Einsatz. Das SDK erleichtert die Entwicklung für Alexa deutlich. Ein Handler für den SelectIntent könnte, stark vereinfacht, wie folgt aussehen:

var selectStateHandlers = Alexa.CreateStateHandler(SKILL_STATES.SELECT, {
    "SelectExercise": function () {
    	//get slot value - this will return a string
        var intent = this.event.request.intent;
        var exercise = intent.slots.Exercise.value;

        var speechOutput = "";
        var repromptText = "";

        if (!exerciseIsKnown(exercise)) {
            speechOutput = "Diese Übung kenne ich leider nicht. Es gibt: Inhalieren, Autogene Drainage und Dehnübung.";
            this.emit(":ask", speechOutput, speechOutput);
        }
        else {
            var chosenExercise = getExerciseByName(exercise);

            speechOutput = "Wir starten mit: " + chosenExercise.name + ". ";
            speechOutput += "Bitte begib dich in die Stellung " + chosenExercise.firstStance + ". ";
            
            //SSML is used here to influence the pronunciation
            speechOutput += ".<break time=\"500ms\"/> Sage <say-as interpret-as=\"interjection\">los</say-as>, wenn es los gehen kann.";

            repromptText = "Bist du bereit?";

            // Set the current state to start mode. The skill will now use handlers defined in startStateHandlers
            this.handler.state = SKILL_STATES.START;
            this.emit(":ask", speechOutput, repromptText);
        }        
    }
});

Ausblick

Im zweiten Teil der Reihe wird der Übungshilfe-Skill mit seiner Funktionalität genauer beleuchtet. Dieser ist im Rahmen der Bachelorthesis entstanden und stellt ein rein sprachgesteuertes Assistenzsystem für den privaten medizinischen Gebrauch dar.  Der dritte Teil wird sich dann mit dem Aufsetzen des Skills befassen und den Vorgang detailliert beschreiben.

Beispiel intents.json

{
  "intents": [
    {
      "name": "AMAZON.CancelIntent",
      "samples": []
    },
    {
      "name": "AMAZON.HelpIntent",
      "samples": []
    },
    {
      "name": "AMAZON.StopIntent",
      "samples": []
    },
    {
      "name": "SelectIntent",
      "samples": [
        "Lass uns mit {Uebung} anfangen",
        "Starte die Übung {Uebung}",
        "Ich will {Uebung} durchführen",
        "Starte {Uebung}",
        "{Uebung}"
      ],
      "slots": [
        {
          "name": "Uebung",
          "type": "Uebungen",
          "samples": []
        }
      ]
    }
  ],
  "types": [
    {
      "name": "Uebungen",
      "values": [
        {
          "id": null,
          "name": {
            "value": "Inhalieren",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "Autogene Drainage",
            "synonyms": []
          }
        },
        {
          "id": null,
          "name": {
            "value": "Dehnübung",
            "synonyms": []
          }
        }
      ]
    }
  ]
}

Kategorien: Alexa Skills Kit (ASK)Amazon AlexaEcho

Zurück