Bist du ein Bot?

Chatbot erstellen mit Rasa

 

chatbot-koversation-mit-Mensch

Mit mehr als 2 Millionen Downloads handelt es sich bei Rasa um ein Open Source Framework zur Erstellung von Chatbots mit zunehmender Relevanz. Ein Rasa Gesprächsassistent kann den Usern als Chatbot über den Facebook Messenger oder Slack bereitgestellt werden. Auch als Alexa Skill kann man den Assistenten veröffentlichen. Rasa bietet einerseits die Möglichkeit selbst ohne Programmierkenntnisse einen Chatbot zu programmieren. Andererseits kann man mit in Python implementierten Erweiterungen den Funktionsumfang des Frameworks an die eigenen Bedürfnisse anpassen.

Dieser Artikel gibt einen Überblick darüber, wie mit Rasa möglichst einfach Chatbots erstellt werden können. Hierzu erstellen wir einen Chatbot, welcher einfache Fragen über seine Ersteller beantworten kann. Das Projekt steht unter https://github.com/Steadforce/rasa-basic-tutorial zur Verfügung. Ein beispielhafter Dialog, den wir führen können, ist hier abgebildet:

Chatbot Mensch Konversation Chatverlauf

Chatbot erstellen – Installieren und Aufsetzen

Bevor wir mit der Erstellung des Chatbots bzw. des Assistenten beginnen können, müssen wir zunächst Rasa installieren. Dafür wird Python 3.6 oder 3.7 benötigt. Nach der Installation können wir mit dem Rasa-CLI direkt ein neues Projekt initialisieren. Durch den Parameter --no-prompt bei der Initialisierung wird das Projekt im aktuellen Verzeichnis aufgesetzt und testweise ein initiales Modell trainiert. Ist dies nicht gewünscht, kann der Parameter entfernt werden.

pip install rasa
rasa init --no-prompt

Nach erfolgreicher Initialisierung wird eine Datenstruktur angelegt, wie sie der Abbildung zu entnehmen ist. Im Folgenden gehen wir darauf ein, welche Daten anzulegen sind, um einen Assistenten in Rasa zu erstellen.

Dialoge erstellen

Zunächst beginnen wir damit, sogenannte Stories anzulegen. In Stories wird festgelegt, wie der Assistent auf Fragen des Users reagiert. Dies wird durch das sogenannte Dialog Management durchgeführt und die angelegten Stories dienen als Trainingsdaten hierfür.

Stories werden in data/stories.md angelegt. Der Beginn eines Dialoges wird durch deren Namen in Form einer Markdown-Überschrift vom Typen H2 gekennzeichnet. Userintentionen werden über einen Stern gekennzeichnet und Aktionen des Assistenten über einen eingerückten Bindestrich.

Der beispielhafte Dialog, wie er oben dargestellt wurde, lässt sich als Story wie folgt darstellen:

## Bot-Challenge and ask for creator
 
* is_bot
 
  - utter_i_am_a_bot
* how_created
  - utter_created_by_steadforce
chatbot dialoge erstellen rasa

Die Story heißt “Bot-Challenge and ask for creator”. Die zwei vorangestellten #-Zeichen markieren, dass es sich hier um den Namen einer Story und damit den Beginn einer solchen handelt.

In der nächsten Zeile startet der Dialog zwischen dem Assistenten und dem User. Er beginnt mit einem sogenannten intent, welcher durch das *-Zeichen gefolgt von dessen Bezeichner gekennzeichnet wird. Bei einem Intent handelt es sich um eine Intention des Users, beispielsweise um die Frage, ob der Gesprächspartner des Users ein Bot ist. Dieser Intent hat auch einen Namen, in diesem Beispiel is_bot.

Auf die verschiedenen Ausprägungen dieser Frage gehen wir in der Beschreibung des Natural Language Understanding (NLU) ein.

Der Assistent reagiert, indem er mit der Aktion utter_i_am_a_bot antwortet. Auch das ist nur der Name dieser Aktion. Die Definition des Antworttextes sehen wir gleich in der Erstellung der Domain.

Es folgt noch ein weiterer Intent des Users, auf welchen mit utter_created_by_steadforce geantwortet wird. In diesem Muster ist es möglich verschiedene Storys anzulegen, welche als Grundlage für das Dialog Management des Assistenten dienen. Rasa bietet auch die Möglichkeit, Stories in einem interaktiven Modus zu erstellen. Diese können auch im Markdown-Format gespeichert und für das Training verwendet werden.

Natural Language Understanding (NLU) Daten erstellen

Nachdem Beispieldialoge anhand der Stories angelegt wurden, erstellen wir mögliche Ausprägungen der Intents. Bei der Interaktion des Users mit dem Assistenten erfolgt die Erkennung des Intents anhand der Eingabe mittels sogenanntem Natural Language Understanding. Auch hierfür legen wir Beispieldaten, also mögliche Ausprägungen, an. Dies nehmen wir in data/nlu.md vor.

Die einzelnen Intents sind im Format ## intent:<intent-name> anzugeben. Die Trainingsdaten sind als Liste folgend anzugeben. Für ein sinnvolles Training benötigen wir pro Intent mindestens vier Beispieldaten. Das folgende Beispiel zeigt dies anhand des Intents is_bot.

## intent:is_bot
  
- Bist du ein Bot?
- Bist du ein Mensch oder ein Bot?
- Rede ich mit einem Bot?
- Du bist aber kein Bot, oder?

Auch für den Intent how_created legen wir Trainingsdaten nach dem gleichen Muster an.

Die Domain erstellen

Nachdem wir Beispieldialoge und Trainingsdaten für das NLU angelegt haben, müssen wir nur noch die Domain festlegen. Bei der Domain handelt es sich um das Umfeld, in welchem der Assistent operiert. Dort sind unter anderem intents und responses zu definieren. Die Konfiguration der Domain ist in domain.yml vorzunehmen. In diesem Beispiel nehmen wir die Konfiguration wie folgt vor:

intents:
  
    - is_bot
    - how_created
responses:
    utter_i_am_a_bot:
    - text: “Ja ich bin ein Bot und entwickelt mit Rasa.”
    utter_created_by_steadforce:
    - text: “Meine Entwickler waren die Mitarbeiter von Steadforce”
session_config: 
    session_expiration_time: 60 
    carry_over_slots_to_new_session: true

Hier sind die einzelnen Intents aufgeführt und zu den Responses, den Antworten des Assistenten, definieren wir in dieser Datei die Texte. Des Weiteren ist hier die sogenannte Conversation Session konfiguriert. Die Conversation ist ein Dialog zwischen dem User und dem Assistenten. In dieser Konfiguration wird die Session nach 60 Minuten ohne Interaktion vom User beendet und Slots werden in neue Sessions übernommen. Bei Slots handelt es sich um einen Key-Value-Store, welchen der User während der Conversation füllen kann. In diesem Artikel wollen wir aber nicht weiter auf Slots eingehen.

spracheinstellung chatbot rasa

Die Sprache des Chatbots einstellen

Bevor wir mit dem Training des Bots starten können, müssen wir noch eine Konfiguration vornehmen. Neben der Erstellung der Trainingsdaten für das NLU ist noch die Sprache des Chatbots anzugeben, um ein korrektes Erkennen der Intentionen der User zu ermöglichen. Diese Einstellung lässt sich in der Datei config.yml vornehmen.

In unserm Beispiel wollen wir die Sprache auf Deutsch einstellen. Standardmäßig ist als Sprache Englisch vorkonfiguriert. So müssen wir den Wert en durch de ersetzen.

language: de

In dieser Datei werden neben der Sprache auch die NLU Pipeline spezifiziert und die Policies konfiguriert, welche das Dialog Management für den Assistenten umsetzen. Diese Konfigurationen passen wir in unserem Beispiel nicht an und übernehmen die Standard-Werte, die von Rasa vorgegeben werden.

Chatbot programmieren – Das Training und ein erster Versuch

Nachdem wir alle notwendigen Konfigurationen vorgenommen haben, können wir das Training durchführen und den Assistenten über die Konsole testen. Beides ist über das Rasa CLI möglich.

Zunächst ist das Training des Assistenten auszuführen.

rasa train

Nach einem erfolgreichen Training kann der Assistent direkt über Konsole genutzt werden.

rasa shell

Hier können wir die zu Beginn definierte Konversation testen und sehen, ob unser Assistent die richtigen Antworten gibt.

Chatbot Funktion Rasa
steadforce-hirsch-ausblick

Ausblick

In diesem Beispiel haben wir gezeigt, wie ein einfacher Chatbot erstellt wird, der leichte Fragen mit fest definierten Antworten beantwortet. Rasa bietet unter anderem noch die Möglichkeit, mittels sogenannten actions Pythoncode auszuführen, um so beispielsweise dynamische Antworten zu erzeugen.  Auch können Assistenten erstellt werden, die im Dialog Formulare ausfüllen. Dazu dienen in Rasa forms. Ein Anwendungsszenario hierfür sind beispielsweise Assistenten, die Reservierungssysteme vereinfachen. Sind bereits Trainingsdaten in einem bestimmten Datenformat vorhanden, so ist es möglich, eigene Importer zu erstellen, um diese Daten nicht erst in das im Artikel beschriebene Format zu konvertieren.

Rasa bietet eine einfache Möglichkeit, Chatbots/Gesprächsassistenten zu erstellen. Bei Bedarf bietet es auch ein hohes Maß an Flexibilität, um Erweiterungen und Konfigurationen vorzunehmen, die den Anforderungen der einzelnen Zielgruppen gerecht werden.