Missverständnisse – Intent nicht verstanden

Wenn Sie einen Chatbot konzipieren oder sogar schon betreiben, müssen Sie falsch erkannte Intents also Missverständnisse beheben. Die Frage, wie problematisch solche Missverständnisse wirklich sind, können Sie selbst beantworten: Wie viele Chancen geben Sie jemandem, der Sie wohl nicht versteht, wenn ein anderer, bei dem es klappen könnte, nur einen Anruf entfernt ist? Vermutlich nicht viele – die meisten geben nicht mehr als eine Chance.

Natürlich können Sie versuchen, die Kommunikation mit dem Chatbot auf viele Auswahldialoge oder QuickReplies zu beschränken (mehr zu QuickReplies finden Sie hier). Es gibt auch Konstellationen, in denen das ausreichen mag. Sobald Sie aber Freitexteingabe ermöglichen/zulassen, kommt die Frage auf: Wird der Chatbot Eingaben so sicher erkennen, dass er benutzt wird?

Um Eingaben, also Intents möglichst sicher zu erkennen, brauchen Chatbots Beispiele – und zwar möglichst viele, möglichst eindeutige. Das klingt ganz einfach, ist es aber oft nicht, denn vieles, was Menschen verständlich ist, lebt von der Semantik und vom Kontext.

Nicht ganz ohne – die deutsche Syntax

Die Fehlinterpretation kann verschiedene Ursachen haben, denn oft sind die möglichen oder typischen Äußerungen (utterances) in der sprachlichen Ausgestaltung recht ähnlich, verfolgen aber unterschiedliche Absichten (intents). Außerdem ist speziell in der deutschen Sprache die Syntax so frei, dass sich keine NLU-Engine auf die klassisch englische Stellung SPO (Subjekt, Prädikat, Objekt) verlassen kann. „Tobias schenkt der Großvater dieses Jahr ein Fahrrad“, da erkennt man das Subjekt nur am Artikel. Und ausgerechnet Artikel werden im Englischen nicht dekliniert … Deutsch ist also oft nicht ganz so einfach für die NLU-Engines der Chatbots.

Ganz konkret – ein Beispiel

Testweise habe ich zwei Intents mit jeweils einem Beispiel und mehrere Entities angelegt, um zu zeigen, wie Sie Intentmissverständnisse abfangen können. Die Intents überschneiden sich bewusst ein wenig. Eines der beiden Entities kommt in beiden Intents vor (fett = annotiertes Entity). Das ist leider oft bei Chatbots der Fall.

  • Intent Autoteil: Ich suche eine Winterausrüstung für Volkswagen.
    Intent Mercedes-Teile: Ich suche ein Ersatzteil für Mercedes.
  • Entity Marken: Mercedes-Benz (Synonyme: Daimler, Daimler Benz, Mercedes), VW (Synonym: Volkswagen)
    Entity Produkte: 223071 (Synonym: Einbaublende); 334072 (Synonym: Display), 445073 (Synonym: Kettentasche), Radio (Synonyme: Mediensystem, Rundfunkempfänger), Ersatzteil (Synomym: Reparaturteil), Winterausrüstung (Synonym: Schneeketten)
  1. Eingabe: Ich suche ein Ersatzteil für VW; Intent: Autoteil, Score 1.
  2. Eingabe: Ich suche ein Radio für Mercedes; Intent: Mercedes-Teile, Score 1
  3. Eingabe: Radio für Mercedes; Intent: Autoteil, Score 0,589
  4. Eingabe: Ich suche für Mercedes ein Radio; Intent: Autoteil, Score 0,459
  5. Eingabe: Ich suche für Mercedes ein Mediensystem; Intent: Mercedes-Teile, Score 0,469
  6. Eingabe: Ich suche ein Radio für nen Benz; Intent: Autoteil, Score: 0,565; Marke nicht erkannt (nachvollziehbar)
  7. Eingabe: Ich suche für nen Benz ein Radio; Intent: Default Fallback

Die Umstellung der Reihenfolge sorgt nicht nur für einen deutlich niedrigeren Score-Wert, sie führt außerdem zu dem Missverständnis, die dritte und die vierte Eingabe hätten allgemein Autoteilen gegolten. Die fünfte wiederum klappt, Sie erkennt ein Synonym. Die sechste erkennt zwar nicht mehr die Marke (Abweichung im Entity Marken), wird aber zumindest noch einem geplanten Intent zugeordnet. Die siebte zeigt, dass die Reihenfolge und die fehlende Entity-Erkennung so schwierig zu verstehen sind, dass der Score-Wert unter 0,3 fällt.

Intents trennen

Möchten Sie Intentmissverständnisse abfangen, sollten Sie bei der Konzeption überlegen, lieber den einen oder anderen Intent mehr zu verwenden. Je sauberer Sie Intents trennen müssen, desto präziser sollten Sie bei der Anlage sein. Überschneidungen und fehlende Beispiele können schnell zu Missverständnissen führen. Und: Erstellen Sie lieber mehr Beispiele in veränderter Form.

Zwei Entities, identische Inhalte

Ein anderes Problem sind Schwierigkeiten bei der Erkennung der Entities. Technisch gleicht der Chatbot bei der Auswertung eingegebene Begriffe mit den Inhalten der Entities ab. Findet er eine Übereinstimmung, ist schon viel gewonnen. Handelt es sich um die oft als Beispiel verwendete Flugsuche, sind aber die Entities für Start- und Zielflughafen inhaltlich identisch. Da braucht die NLU-Engine Präpositionen wie „von“ bzw. „ab“ oder „nach“, um die Zuordnung sicherer vornehmen zu können. Zur Sicherheit sollten Sie aber auch eine Beispieläußerung planen, in der die beiden Entities über die Reihenfolge erkannt werden („München London nächsten Montag“ wird dann zu <Startflughafen> <Zielflughafen> <Startdatum>), weil die Reihenfolge typischerweise Start-Ziel lautet.

Erweiterungsautomatik mit Tücken

Auch die automatische Erweiterung der Entity-Werte, die viele Chatbot-Anbieter als nützlichen Vorteil bewerben, kann Tücken haben, denn im Prinzip wird ein Wert aufgrund der im Intent vorhandenen Entity dieser Entity zugeordnet. Ob das sinnvoll ist, kann die Maschine nicht beurteilen. Ein Beispiel? Fragen Sie bei der Pizzabestellung (auch ein recht beliebtes Chatbot-Beispiel) als mögliche Belagkomponenten Tomaten, Paprika, Auberginen und Mais als Entity Gemüse ab und der Kunde gibt „Käse“ ein, weil er zusätzlichen Käse möchte, besteht das Risiko, dass Käse automatisch dem Entity Gemüse zugeordnet wird.

Schlichte Vertipper

Toleranz gegenüber Rechtschreibfehlern ist nicht allzu oft verbreitet. Und weicht der eingegebene Begriff von den vorhandenen Werten der Synonyme in der Entity ab, kann die Erkennung scheitern. Sind sogar mehrteilige Begriffe als Werte zulässig, gibt es auch gleich noch die Möglichkeiten, die die Zusammen-/Getrenntschreibung bietet.

Synonyme werden verwaltet

Die meisten Chatbot-Tools ermöglichen es, für einen Begriff auch die Synonyme als Entity-Werte zu erfassen. Und schon für das Wort „Brötchen“ gibt es im Deutschen mindestens drei alternative Begriffe, je nachdem, aus welcher Region der Nutzer kommt. Kann der Chatbot den Begriff nicht finden und auch nicht automatisch zuordnen, klappt’s nicht mit der Erkennung. Um Missverständnisse abzufangen, sollten Sie Synonyme, die bei Laien üblich sind (Stichwort: Schraubenzieher), aufnehmen.

Besser durch Lernen?

Das vielzitierte Machine Learning der Chatbots hängt vor allem davon ab, wieviel Trainingsmaterial zur Verfügung steht. Und genau darin liegt die Krux: Läuft der Chatbot auf Ihrem System/Server, steht speziell am Anfang nicht so viel Material zur Verfügung. Läuft der Chatbot auf einer Plattform bei Google, Amazon o.ä., profitiert seine NLU-Engine von allen Eingaben einer Sprache, die verarbeitet werden. Das sind nicht nur möglicherweise unglaublich viele, sie führen auch zu Veränderungen, die nicht erklärbar sind. Denn woraus die Systeme was lernen bzw. ableiten, verrät Ihnen niemand.

Ein möglicher Lösungsansatz

Wenn die Aspekte Beispielanzahl, Beispielbandbreite und Synonyme geprüft sind, die Schwierigkeiten aber bestehen bleiben, kann es nützlich sein, sich die Funktionsweise der Intenterkennung zunutze zu machen. Zur Erinnerung: Ein Intent besteht aus verschiedenen Beispielsätzen in denen die Entities als Werte vorhanden sind. Anhand der Werte „erkennt“ der Chatbot, worum es geht. Wenn nun bei der Zusammenstellung der Pizza immer wieder „Trüffel“ eingegeben wird, der Pizzashop aber keine Trüffel hat, kann ein Intent erstellt werden, der das Entity nicht_vorhandene_Beläge verwendet und entsprechend reagiert. In diesem Entity speichern Sie alle aktuell bekannten Produkte, die Sie nicht führen. Das sind vielleicht zunächst nur wenige, kommen aber weitere dazu, ergänzen Sie einfach das Entity.