Zusammenspiel Intents und Entities

Intents (aus dem Englischen, Absicht) sind die wesentliche Komponente im Chatbot-Dialog:  Um in Aktion zu treten, braucht ein Chatbot einen Anstoß. Der Intent ist dabei besonders häufig, weil ihn eine Eingabe oder Auswahl auslöst. Dahinter verbirgt sich der Erkennens-/Verstehensmechanismus des Chatbots. Kann der Chatbot in einer Nutzeräußerung (utterance) einen Intent hinreichend sicher erkennen (dahinter liegt ein Score-Wert), führt er die im Intent festgelegte Reaktion aus. Das kann eine Antwort, die Anzeige eines Bildes usw. sein. Meist ist ein Intent auch mit einer Antwort verbunden, die als Bestätigung fungiert oder den nächsten Schritt anstößt. Nehmen Sie als Beispiel eine Bestellung in der Gastronomie. Als Reaktion bekommen Sie normalerweise eine bestätigende Rückmeldung, dass und was angekommen ist: „Zwei Cappuccino? Gerne.“

Kaffee bestellen

Ein Intent basiert meist nicht auf genau einer Utterance (Äußerung), sondern auf mehreren verschiedenen, weil Menschen sich unterschiedlich äußern. Verschiedene Äußerungen derselben Absicht werden in einem Intent gebündelt (Gastronomie: „Zwei … bitte“, „Ich möchte …“ oder „Haben Sie …“). Die auszuführende Aktion ist dabei immer dieselbe. Nur das Objekt variiert. Die verschiedenen Utterances müssen im Allgemeinen nicht mit allen Abweichungen definiert werden, sondern nur die typischen, größeren Unterschiede. Abweichungen versucht der Chatbot über das KI-System zu erkennen und zu erlernen. Würden sich diese Muster deutlich genug unterscheiden und keinerlei weitere Angaben benötigt, könnte ein Chatbot einfach aus sehr vielen Intents mit jeweils einem Muster bestehen. Es würde eine Antwort für jedes Muster definiert – und das war’s.

Allerdings wäre das ziemlich aufwendig, denn es gibt deutlich mehr Äußerungen als Intents. Überlegen Sie einfach mal, wie viele Möglichkeiten es gibt, einen Kaffee zu bestellen. Deshalb bietet es sich an, die verschiedenen Äußerungen zusammenzufassen. Auf diese Weise haben Sie deutlich weniger Intents als Äußerungen, was die Erstellung und die Pflege erleichtert. Und wenn der Chatbot eine Äußerung nicht erkennt, können Sie das im Training passend zuordnen.

Kaffee kommt ins Entity

Innerhalb eines Intents werden die Objekte, auf die sich die Aktion bezieht, als Entities annotiert. Der Intent benötigt also Angaben darüber, womit etwas geschehen soll, sowie die skizzierten Muster, anhand derer der Intent erkannt werden soll. Vereinfacht gesagt: Der Intent versucht typische Absichtsäußerungen zu erkennen und zu deuten. Um die erkannte Absicht ausführen zu können, muss er ggf. die Objekte erkennen und richtig zuordnen. Er müsste also evtl. zwischen Kaffee und dem Mixgetränk Kalter Kaffee unterscheiden können. Ist die Erkennung der benötigten Entities innerhalb der Utterance nicht möglich, weil nicht enthalten, kann der Chatbot diese Angaben innerhalb des Intents oft gezielt abfragen. Diesen Vorgang, der den Chatbot arbeitsfähig macht, bezeichnet man auch als „slot filling“.

Zusammenspiel Intents und Entities
Paradebeispiel Flugbuchung

Das beliebte Beispiel der Flugbuchung per Chatbot geht im Prinzip von einem Intent aus, der neben den Reisedaten (Hinflugdatum und -zeit, Rückflugdatum und -zeit) auch die Ortsdaten (Abflughafen, Zielflughafen) sowie Angaben zum Reisenden, zur Klasse sowie zu Direktflug usw. enthält.  Da weder Daten und Uhrzeiten noch Start- und Zielflughäfen beliebig sind, verwendet der Chatbot Entities wie SysDate (Details dazu finden Sie unter Entities). Enthält die Utterance keine dieser Angaben, wird aber als Flugbuchungsintent erkannt, fragt der Chatbot die Daten entsprechend ab (Slot-Filling). Im Prinzip könnte die einfachste Utterance zum Auslösen des Events „Flugbuchung“ einfach „fliegen“, „Flug“, „Flugbuchung“, „Flug buchen“ o.ä. lauten. Beginnt der Nutzer also mit der Eingabe „fliegen“, versteht der Chatbot den Intent „Flugbuchung“ und reagiert wie vorgesehen. Er fragt dann die Daten des Fluges zur Füllung der Entities schrittweise ab.

Utterance, Intent und Entities
Informationen extrahieren

Bei der Erkennung versucht der Intent, evtl. bereits genannte Informationen zu erkennen und zu extrahieren, wenn der Einstieg beispielsweise lautet: „Ich möchte nach London fliegen.“ Das können Flugtermine oder Start- oder Zielflughafen sein. Die erkannten Werte speichert der Chatbot im jeweiligen Entity und nutzt sie zur Flugsuche, sobald alle Angaben vorhanden sind. Viele Chatbot-Tools können innerhalb eines Intents prüfen und ggf. gleich nachfragen. Sind alle Angaben vorhanden, startet die Suche. Die in den Entities gespeicherten Daten können sowohl weiterverarbeitet als auch ausgegeben werden. Details zum Zusammenspiel aus Utterances, Entities und Intent finden sie im Beitrag Intentmissverständnisse abfangen.

Neben den Entities bietet der Intent innerhalb der hier beispielhaft benutzten Plattform Dialogflow noch drei Komponenten: die Antwort, Follow-up-Intents und den Kontext. Die Antwort enthält den Dialogpart des Chatbots. Um im skizzierten idealtypischen Beispiel zu bleiben, könnte die Antwort nach erfolgreicher Abfrage der benötigten Werte folgendermaßen lauten: „Besten Dank. Ich suche jetzt für Sie in über 300 Datenbanken nach Flügen, die … Das kann ein wenig dauern.“ Auch die Darstellung der Treffer aus der Flugdatenbank können Sie oft im Intent festlegen.

Follow-ups für den Gesprächsfluss

Follow-up-Intents sorgen dafür, dass eine Art Dialogfluss zustandekommt, indem der Chatbot situationsgerechte Reaktionen nachschiebt. Auf diese Weise kann er beispielsweise eine Bestätigung der Daten anzeigen und fragen, ob diese Werte so übernommen werden sollen. Auf diese Frage gibt es ein bestätigendes „Ja“ in verschiedenen Facetten (s. oben zur Zusammenfassung mehrerer Utterances zu einem Intent) oder ein ablehnendes „Nein“ in verschiedenen Varianten. „Ja“ und „Nein“ wären zwei Follow-up-Intents, die den weiteren Dialog steuern. Bei „Ja“ fragt er im Anschluss die Rückflugdaten ab, bei „Nein“ muss er noch eine Runde zum Hinflug drehen, bis der klar ist. Follow-up-Intents können typischerweise von einem Intent nur als Folge ausgelöst, aber nicht durch Eingabe aufgerufen werden.

Sonderfall Kontext

Der Kontext ist in Dialogflow eine über den aktuellen Intent hinausgehende Komponente, die dazu dient, Dialoge inhaltlich zu verknüpfen und den Inhalt von Entities zu speichern. Der Kontext ist nicht in jedem Chatbot-Framework vorhanden.

Wenn Sie jetzt spontan überlegen, worin der Unterschied zum Follow-up-Intent besteht, stellen Sie sich folgendes vor: Für den Hinflug haben Sie u. a. die Klasse abgefragt. Wenn die gewählte Klasse in den Kontext geschrieben wird, kann sie genutzt werden, um zwei oder drei Schritte später auch für den Rückflug angeboten zu werden („Möchten Sie auch auf dem Rückflug in der Business-Class sitzen?“). Auf diese Weise sind Sie nicht an eine starre Abfolge wie bei Follow-up-Intents gebunden, aber der Kontext bleibt erhalten.

Wer intensiv mit Dialogflow arbeitet, wird schnell die Vorteile von Kontexten zur Steuerung erkennen: Man kann Ein- und Ausgabekontexte nutzen, um den entsprechenden Folge-Intent zu „kennzeichnen“. Auf diese Weise können Informationen ohne Slot-Filling strukturiert abgefragt werden. Sie haben auf diese Weise eine fast perfekte Kontrolle über den Dialogfluss. Benötigen Sie kein Slot-Filling, steuern die Kontexte unmerklich im Hintergrund. In Verbindung mit gut geplanten Entities ein mächtiges Instrument.